# C++ API Source: https://docs.ntop.com/Product-Documentation/ntop-core/cpp-api ## Calling nTop Core Functions We supply nTop Core as a standard Windows DLL that exports a small set of C functions. These functions use very simple arguments to make them more easily callable from various different programming languages. You are free to choose any language for your application. The functions use the `cdecl` calling convention, as specified in the `ntop_core.h` header file. We provide examples showing simple methods of calling nTop Core functions from C++, C#, and Python. Specifically, nTop Core provides the capability to: * Load an implicit body from a `.implicit` file. * Perform rigid transformations on an implicit body * Scale an implicit body. * Evaluate the body's field at a given point, as described above * Evaluate the gradient of the body's field function * Compute intervals * Compute closest point on body's surface * Slice an implicit body with a plane using dual contouring or the marching squares algorithm. * Save an implicit body to a `.implicit` file. * Get the nTop Core library version These functions are described in detail in the `ntop_core.h` header file, using Doxygen-style comments. ## nTop Core Dependencies nTop Core requires the following dependencies: * Visual Studio 2019 C++ Redistributable ([link](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022/)) ## Examples The [examples](/Product-Documentation/ntop-core/examples) folder contains several examples showing how to call nTop Core functions in C++, C# (dotnet 7), and Python 3. # Examples Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples This folder contains several examples showing usage of nTop Core in C++, C# (dotnet 7), and Python 3. These are meant merely as a starting point in your use of nTop Core, as not all functions have example uses. In order to run these you will need a recent nTop Core library which you can acquire by requesting access from [ntop.com](https://www.ntop.com/software/capabilities/implicit-interop/). Additional dependencies, if any, for each language and program are documented within a README.md within the relevant folder. Finally, all of these programs require a .implicit file as input. A set of toy `.implicit` assets is available alongside the nTop Core library files from [app.ntop.com/addons](https://app.ntop.com/addons), but you may also want to try parts that are more representative of your area of interest. ## Examples by Language * [C++ Examples](/Product-Documentation/ntop-core/examples/cpp) * [.NET Examples](/Product-Documentation/ntop-core/examples/dotnet) * [Python Examples](/Product-Documentation/ntop-core/examples/python) # C++ Examples Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/cpp This directory holds self-contained examples of common operations you may want to perform using nTop Core library. This is setup as a [CMake](https://cmake.org/) project which will generate separate executables for each of the example application. ## Setup The examples have been tested against [CMake](https://github.com/Kitware/CMake/releases/tag/v3.25.2). [gnuplot](http://www.gnuplot.info/) is required to draw the images generated by the slicer example, being sure to add it to the PATH environment variable. Now compile the project: ```shell theme={null} mkdir build cd build # In windows (suggested) cmake .. -DNTOP_CORE_LIB_DIR="C:/path/to/ntop_core_folder" msbuild cppexamples.sln # In *nix cmake .. -DNTOP_CORE_LIB_DIR="/path/to/ntop_core_folder" cmake --build . ``` ## Running the examples You are now ready to run any of the examples using pattern similar to the following: ```shell theme={null} # Windows .\bin\slice.exe # *nix # Note: Depending on your distro some programs may print extraneous warning messages # in the slice demonstration due to a Qt implementation which may not be yet included # by your package manager. It will not impact the behavior and is limited to visualization # using matplotplusplus. .\bin\slice ``` ## Example Applications * [Bounding Box](/Product-Documentation/ntop-core/examples/cpp/boundingbox-app) — computes the bounding box of an implicit body. * [Closest Point](/Product-Documentation/ntop-core/examples/cpp/closestpoint-app) — finds the closest point on an implicit body's surface to a set of query points. * [Slice](/Product-Documentation/ntop-core/examples/cpp/slice-app) — transforms an implicit body into a build orientation and slices it with a plane using dual contouring. * [Slice (Legacy)](/Product-Documentation/ntop-core/examples/cpp/slice-legacy-app) — slices an implicit body with a plane using the legacy marching-squares algorithm. * [Volume](/Product-Documentation/ntop-core/examples/cpp/volume-app) — computes the volume of an implicit body using a voxel-counting method. # Bounding Box (C++) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/cpp/boundingbox-app This example loads a `.implicit` file specified by the user, calls `ntop_core_query_bounding_box` to compute its axis-aligned bounding box, and prints the minimum and maximum corner coordinates along with all eight corners of the box. ```cpp theme={null} /// Example of querying the bounding box from an implicit #include #include int main() { // Select a .implicit file and load it std::cout << "Enter a path to an implicit (examples in the examples/assets " "folder): "; std::string path; std::cin >> path; void *implicit_handle{}; uint32_t res = ntop_core_import_from_file(path.c_str(), &implicit_handle); // Do some error handling for bad paths or corrupt implicits switch (res) { case ntop_core_import_result::SUCCESS: break; case ntop_core_import_result::FILE_DOESNT_EXIST: std::cout << "File not found" << std::endl; exit(1); break; case ntop_core_import_result::FILE_OPEN_ERROR: std::cout << "Unable to open file" << std::endl; exit(2); break; case ntop_core_import_result::CORRUPT_FILE: std::cout << "Corrupted file" << std::endl; exit(3); break; case ntop_core_import_result::UNSUPPORTED_VERSION: int major, minor, patch; ntop_core_library_version(&major, &minor, &patch); std::cout << "Implicit file is unsupported by nTop Core version " << major << "." << minor << "." << patch << std::endl; exit(4); break; default: { std::cout << "Unspecified error loading" << std::endl; exit(5); } } // Initialize a bounding box to fill with data ntop_core_bounding_box bb{}; // Query the bounding box, filling bb with data ntop_core_query_bounding_box(implicit_handle, &bb); // Free the memory used by the implicit as no more operations are performed // using nTop Core ntop_core_release(implicit_handle); // Print out some useful information about the bounding box std::cout << "Minimum: (" << bb.min.x << ", " << bb.min.y << ", " << bb.min.x << ")" << std::endl; std::cout << "Maximum: (" << bb.max.x << ", " << bb.max.y << ", " << bb.max.x << ")" << std::endl; std::cout << "Corners:" << std::endl; std::cout << " G-----H Z ^ ^ Y" << std::endl; std::cout << " /| /| | /" << std::endl; std::cout << " / | / | | /" << std::endl; std::cout << "E-----F | |/" << std::endl; std::cout << "| C--|--D *------> X" << std::endl; std::cout << "| / | /" << std::endl; std::cout << "|/ |/" << std::endl; std::cout << "A-----B" << std::endl; std::cout << "\tA: (" << bb.min.x << ", " << bb.min.y << ", " << bb.min.x << ")" << std::endl; std::cout << "\tB: (" << bb.max.x << ", " << bb.min.y << ", " << bb.min.z << ")" << std::endl; std::cout << "\tC: (" << bb.min.x << ", " << bb.max.y << ", " << bb.min.z << ")" << std::endl; std::cout << "\tD: (" << bb.max.x << ", " << bb.max.y << ", " << bb.min.z << ")" << std::endl; std::cout << "\tE: (" << bb.min.x << ", " << bb.min.y << ", " << bb.max.z << ")" << std::endl; std::cout << "\tF: (" << bb.max.x << ", " << bb.min.y << ", " << bb.max.z << ")" << std::endl; std::cout << "\tG: (" << bb.min.x << ", " << bb.max.y << ", " << bb.max.z << ")" << std::endl; std::cout << "\tH: (" << bb.max.x << ", " << bb.max.y << ", " << bb.max.x << ")" << std::endl; } ``` # Closest Point (C++) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/cpp/closestpoint-app This example loads a `.implicit` file, defines a small set of 3D query points, and calls `ntop_core_query_closest_point_array` (with a callback to receive the results) to find the closest point on the body's surface to each query point, along with whether the result converged within the given tolerance. ```cpp theme={null} /// Example of querying the closestpoint on an implicit #include #include #include int main() { // Select a .implicit file and load it std::cout << "Enter a path to an implicit (examples in the examples/assets " "folder): "; std::string path; std::cin >> path; void *implicit_handle{}; uint32_t res = ntop_core_import_from_file(path.c_str(), &implicit_handle); // Do some error handling for bad paths or corrupt implicits switch (res) { case ntop_core_import_result::SUCCESS: break; case ntop_core_import_result::FILE_DOESNT_EXIST: std::cout << "File not found" << std::endl; exit(1); break; case ntop_core_import_result::FILE_OPEN_ERROR: std::cout << "Unable to open file" << std::endl; exit(2); break; case ntop_core_import_result::CORRUPT_FILE: std::cout << "Corrupted file" << std::endl; exit(3); break; case ntop_core_import_result::UNSUPPORTED_VERSION: std::cout << "Unsupported implicit version" << std::endl; exit(4); break; default: { std::cout << "Unspecified error loading" << std::endl; exit(5); } } // Select a points to query ntop_core_vec3 query_pts[] = {{0, 1, 2}, {3, 4, 5}, {2.718, 3.141, 1.618}}; auto n_qpts = 3; // Pick a tolerance (in meters) float tolerance = 0.001; // Set up vectors to receive the query answers. std::vector closest_pts{}; std::vector bad_pt_indices{}; // This lambda will be called with all the closest points and their validity. // It has the same signature as ntop_core_query_closest_point_array_cb // skipping the context. auto closest_point_callback = [&](ntop_core_vec3 const *cpoints, uint32_t n_cpts, uint32_t const *bad_indices, uint32_t n_indices) { // Note: the number of callback points, n_cpts, always equals the number // of query points, n_qpts; for (uint32_t idx = 0; idx < n_cpts; idx++) { closest_pts.push_back(cpoints[idx]); } for (uint32_t idx = 0; idx < n_indices; idx++) { bad_pt_indices.push_back(bad_indices[idx]); } }; // Query for the closest points ntop_core_query_closest_point_array( implicit_handle, query_pts, n_qpts, tolerance, &closest_point_callback, [](void *ctx, ntop_core_vec3 const *pts, uint32_t n_pts, uint32_t const *bad_indices, uint32_t n_bad_indices) { auto const &my_lambda = *reinterpret_cast(ctx); my_lambda(pts, n_pts, bad_indices, n_bad_indices); }); // Free the memory used by the implicit as no more operations are performed // using nTop Core ntop_core_release(implicit_handle); // Print out the closest point on the implicit to the query point. // (And whether the field value at the found point is within tolerance.) for (size_t idx = 0, bad_pt_idx = 0; idx < n_qpts; idx++) { auto qx = query_pts[idx].x; auto qy = query_pts[idx].y; auto qz = query_pts[idx].z; auto cx = closest_pts[idx].x; auto cy = closest_pts[idx].y; auto cz = closest_pts[idx].z; bool converged = true; if (bad_pt_idx < bad_pt_indices.size() && bad_pt_indices[bad_pt_idx] == idx) { converged = false; bad_pt_idx++; } std::cout << "Closest point to (" << qx << ", " << qy << ", " << qz << ") = " << "(" << cx << ", " << cy << ", " << cz << ") (" << converged << ")" << std::endl; } } ``` # Slice (C++) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/cpp/slice-app This example loads a `.implicit` file, computes its bounding box centroid, transforms the body into a new frame (via `ntop_core_transformed`) so the slicing plane passes through the centroid, and slices the transformed body at a given Z height. It collects the resulting polyline contours through a callback and plots them with [Matplot++](https://alandefreitas.github.io/matplotplusplus/), saving the result as an SVG. ```cpp theme={null} /// Example of slicing a single layer from an implicit by transforming the /// implicit to a build orientation and z-slice height. #include #include #include #include #include #include int main() { // Select a .implicit file and load it std::cout << "Enter a path to an implicit (examples in the examples/assets " "folder): "; std::string path; std::cin >> path; ntop_core_handle implicit_handle{}; uint32_t res = ntop_core_import_from_file(path.c_str(), &implicit_handle); // Do some error handling for bad paths or corrupt implicits switch (res) { case ntop_core_import_result::SUCCESS: break; case ntop_core_import_result::FILE_DOESNT_EXIST: std::cout << "File not found" << std::endl; exit(1); break; case ntop_core_import_result::FILE_OPEN_ERROR: std::cout << "Unable to open file" << std::endl; exit(2); break; case ntop_core_import_result::CORRUPT_FILE: std::cout << "Corrupted file" << std::endl; exit(3); break; case ntop_core_import_result::UNSUPPORTED_VERSION: int major, minor, patch; ntop_core_library_version(&major, &minor, &patch); std::cout << "Implicit file is unsupported by nTop Core version " << major << "." << minor << "." << patch << std::endl; exit(4); break; default: { std::cout << "Unspecified error loading" << std::endl; exit(5); } } // Transform the part for (build volume) orientation prior to slicing // Slice along the YZ plane of the part ntop_core_bounding_box bb{}; ntop_core_query_bounding_box(implicit_handle, &bb); ntop_core_vec3 centroid{(bb.min.x + bb.max.x) / 2.0, (bb.min.y + bb.max.y) / 2.0, (bb.min.z + bb.max.z) / 2.0}; ntop_core_frame const frame{centroid, {0, 1, 0}, {0, 0, 1}}; // Create a new implicit to slice ntop_core_handle transformed_handle{}; ntop_core_transformed(implicit_handle, &frame, &transformed_handle); // Free the memory of the original implicit ntop_core_release(implicit_handle); // Initialize the vector to hold the slice data std::vector>> slice; // This lambda will be called for every independent polyline // We place a reference to slice in the capture clause so we can deposit // the planar points (x and y in the length 2 double arrays) into it. auto deposit = [&slice](ntop_core_vec2 const *points, uint32_t sz, bool is_closed) { // Initialize a vector to hold this polyline curve std::vector> poly; poly.reserve(sz); // Iterate over the points in the polyline and store them for (uint32_t i = 0; i < sz; ++i) { poly.push_back({points[i].x, points[i].y}); } // For our example when the curve is closed we want to draw the connection // so the first point is added again if (is_closed) { poly.push_back({points[0].x, points[0].y}); } // Store the polyline curve to the slice slice.push_back(std::move(poly)); }; // Define the feature size of the slice double feature_size = 0.0001; // Slice the body at Z height double slice_z_height = 0.0; // Slice using the marching squares algorithm. // The function signature is the same as ntop_core_generate_slice_by_DC and // can be substituted depending on the specifics of the implicit being sliced // and desired slice characteristics: sharp corners should use dual contouring // while avoidance of possible slicing artifacts should use marching squares. ntop_core_generate_slice_by_MS( transformed_handle, slice_z_height, feature_size, &deposit, [](void *ctx, auto... ps) { return (*reinterpret_cast( ctx))(std::forward(ps)...); }); // Free the memory used by the implicit as no more operations are performed // using nTop Core ntop_core_release(transformed_handle); // Provide a little debugging output std::cout << "Slices contours: " << slice.size() << std::endl; using namespace matplot; // plot all the polylines on this one figure matplot::hold(on); // Iterate over the contours in the slice and structure the data for the // graphing lib for (auto &contour : slice) { std::vector x; std::vector y; for (auto &point : contour) { x.push_back(point[0]); y.push_back(point[1]); } matplot::plot(x, y); } matplot::xlabel("meters"); matplot::ylabel("meters"); matplot::show(); // Save the slice as a SVG matplot::save("sliceMS.svg"); std::cout << "Slice image written to " << std::filesystem::current_path().append("sliceMS.svg") << std::endl; } ``` # Slice (Legacy) (C++) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/cpp/slice-legacy-app This example loads a `.implicit` file and slices it with a fixed plane frame using `ntop_core_query_contours`, the legacy marching-squares slicing method. It collects the resulting polyline contours through a callback and plots them with [Matplot++](https://alandefreitas.github.io/matplotplusplus/), saving the result as an SVG. ```cpp theme={null} /// Example of slicing a single layer from an implicit using the legacy slicing /// method #include #include #include #include #include #include int main() { // Select a .implicit file and load it std::cout << "Enter a path to an implicit (examples in the examples/assets " "folder): "; std::string path; std::cin >> path; void *implicit_handle{}; uint32_t res = ntop_core_import_from_file(path.c_str(), &implicit_handle); // Do some error handling for bad paths or corrupt implicits switch (res) { case ntop_core_import_result::SUCCESS: break; case ntop_core_import_result::FILE_DOESNT_EXIST: std::cout << "File not found" << std::endl; exit(1); break; case ntop_core_import_result::FILE_OPEN_ERROR: std::cout << "Unable to open file" << std::endl; exit(2); break; case ntop_core_import_result::CORRUPT_FILE: std::cout << "Corrupted file" << std::endl; exit(3); break; case ntop_core_import_result::UNSUPPORTED_VERSION: int major, minor, patch; ntop_core_library_version(&major, &minor, &patch); std::cout << "Implicit file is unsupported by nTop Core version " << major << "." << minor << "." << patch << std::endl; exit(4); break; default: { std::cout << "Unspecified error loading" << std::endl; exit(5); } } // Initialize the vector to hold the slice data std::vector>> slice; // This lambda will be called for every independent polyline curve // We place a reference to slice in the capture clause so we can deposit // the planar points (x and y in the length 2 double arrays) into it. auto deposit = [&slice](ntop_core_vec2 const *points, uint32_t sz, bool is_closed) { // Initialize a vector to hold this polyline curve std::vector> poly; poly.reserve(sz); // Iterater over the points in the polyline curve and store them for (uint32_t i = 0; i < sz; ++i) { poly.push_back({points[i].x, points[i].y}); } // For our example when the curve is closed we want to draw the connection // so the first point is added again if (is_closed) { poly.push_back({points[0].x, points[0].y}); } // Store the polyline curve to the slice slice.push_back(std::move(poly)); }; // Specify the slice frame ntop_core_frame frame{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}}; // Define the feature size of the slice double feature_size = 0.0001; // Slice the body on the frame ntop_core_query_contours(implicit_handle, &frame, feature_size, &deposit, [](void *ctx, auto... ps) { return (*reinterpret_cast( ctx))(std::forward(ps)...); }); // Free the memory used by the implicit as no more operations are performed // using nTop Core ntop_core_release(implicit_handle); // Provide a little debugging output std::cout << "Slices contours: " << slice.size() << std::endl; using namespace matplot; // plot all the polylines on this one figure matplot::hold(on); // Iterate over the contours in the slice and structure the data for the // graphing lib for (auto &contour : slice) { std::vector x; std::vector y; for (auto &point : contour) { x.push_back(point[0]); y.push_back(point[1]); } matplot::plot(x, y); } matplot::xlabel("meters"); matplot::ylabel("meters"); matplot::show(); // Save the slice as a SVG matplot::save("slice.svg"); std::cout << "Slice image written to " << std::filesystem::current_path().append("slice.svg") << std::endl; } ``` # Volume (C++) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/cpp/volume-app This example loads a `.implicit` file, queries its bounding box, then divides that box into a 200x200x200 grid of voxels. For each voxel center, it calls `ntop_core_query_field` to test whether the point is inside the body, and estimates the total volume as the count of inside voxels multiplied by the volume of a single voxel. ```cpp theme={null} /// Example of querying the bounding box from an implicit #include #include int main() { // Select a .implicit file and load it std::cout << "Enter a path to an implicit (examples in the examples/assets " "folder): "; std::string path; std::cin >> path; void *implicit_handle{}; uint32_t res = ntop_core_import_from_file(path.c_str(), &implicit_handle); // Do some error handling for bad paths or corrupt implicits switch (res) { case ntop_core_import_result::SUCCESS: break; case ntop_core_import_result::FILE_DOESNT_EXIST: std::cout << "File not found" << std::endl; exit(1); break; case ntop_core_import_result::FILE_OPEN_ERROR: std::cout << "Unable to open file" << std::endl; exit(2); break; case ntop_core_import_result::CORRUPT_FILE: std::cout << "Corrupted file" << std::endl; exit(3); break; case ntop_core_import_result::UNSUPPORTED_VERSION: int major, minor, patch; ntop_core_library_version(&major, &minor, &patch); std::cout << "Implicit file is unsupported by nTop Core version " << major << "." << minor << "." << patch << std::endl; exit(4); break; default: { std::cout << "Unspecified error loading" << std::endl; exit(5); } } // Initialize a bounding box to fill with data ntop_core_bounding_box bb{}; // Query the bounding box, filling bb with data ntop_core_query_bounding_box(implicit_handle, &bb); // Region to voxelize, obtained from body's bounding box. int n = 200; // Number of voxels used = n*n*n. Increase this to improve volume // accuracy. double xmin = bb.min.x; double xmax = bb.max.x; double dx = (xmax - xmin) / n; double ymin = bb.min.y; double ymax = bb.max.y; double dy = (ymax - ymin) / n; double zmin = bb.min.z; double zmax = bb.max.z; double dz = (zmax - zmin) / n; int count = 0; // Loop to count number of voxels inside the body for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) { for (int k = 0; k <= n; k++) { double x = xmin + i * dx + 0.5 * dx; double y = ymin + j * dy + 0.5 * dy; double z = zmin + k * dz + 0.5 * dz; double fxyz = ntop_core_query_field(implicit_handle, {x, y, z}); if (fxyz < 0) count++; // voxel center is inside body, so add to count } } } // Free the memory used by the implicit as no more operations are performed // using nTop Core ntop_core_release(implicit_handle); // Compute volume = number of inside voxels * voxel volume double volume = count * (dx * dy * dz); std::cout << "Computed volume = " << volume << std::endl; } ``` # .NET Examples Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/dotnet Examples of interacting with the nTop Core library from C#. Note: At present these do not function with \*nix environments. ## Setup These examples require [.NET 7](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) on the host system. If you are working from a Unix-like environment you will need to modify the variable `_dllLocation` in `CoreWrapper/ImplicitBody.cs` to point at the location of the shared object file. All three examples share a common `CoreWrapper` project, which provides the P/Invoke bindings to the native nTop Core library. ### Mesher This is a simple mesh generation implementation using marching cubes which highlights use of the `ntop_core_query_field` and `ntop_core_query_bounding_box`. To run it from the `examples/dotnet` directory: ```shell theme={null} dotnet run --project Mesher/Mesher.csproj ``` It will output the location of the STL which you can load in the viewer of your choice. Note that the implementation may not produce closed or non-self-intersecting meshes. This is just to highlight how you may integrate nTop Core into your workflow. For a more production-ready implementation consider using [OpenVDB](https://www.openvdb.org/). See the full source: [Mesher](/Product-Documentation/ntop-core/examples/dotnet/mesher). ### Slicer This produces images of the contours of a slice of the median axis-aligned plane of the implicit body. This highlights use of `ntop_core_query_contours`. To run it from the `examples/dotnet` directory: ```shell theme={null} dotnet run --project Slicer/Slicer.csproj ``` This will output `slice.png` in this directory. See the full source: [Slicer](/Product-Documentation/ntop-core/examples/dotnet/slicer). ### Volume This calculates the volume of an implicit body using a volumetric calculation. To run it from the `examples/dotnet` directory: ```shell theme={null} dotnet run --project Volume/Volume.csproj ``` See the full source: [Volume](/Product-Documentation/ntop-core/examples/dotnet/volume). # Mesher (.NET) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/dotnet/mesher This example loads a `.implicit` file, samples the body's field function (`ImplicitBody.Value`, backed by `ntop_core_query_field`) over a regular 3D grid sized from the body's bounding box (`ntop_core_query_bounding_box`), and reconstructs the surface using a from-scratch implementation of the "Marching Cubes" algorithm. The resulting triangle soup is written out as an STL file. ### MainProgram.cs ```csharp theme={null} using System; using System.IO; using nTop.Core.Examples.Utils; using nTop.Core.Wrapper; namespace nTop.Core.Examples.Mesher { public partial class Program { static void Main() { // Get .implicit file path from user string path = CLI.LoadPrompt(); // Create an ImplicitBody object var body = new ImplicitBody(path); // Invent some reasonable grid counts (number of voxels) int n = 200; int[] gridCounts = Mesher.GetGridCounts(body, n); // Make a box that's 10% larger than body's bounding box var boundingBox = body.Box; var paddedBox = boundingBox.Enlarge(1.1); // Do the meshing var triList = Mesher.CreateMesh(body, paddedBox, gridCounts); // Free the memory used by the implicit in the library body.Release(); // Write out an STL file and display it in default viewer string meshFilePath = $"{Directory.GetCurrentDirectory()}{Path.DirectorySeparatorChar}mesher.stl"; WriteSTL(triList, meshFilePath); System.Console.WriteLine($"Mesh data written to {meshFilePath}"); } } } ``` ### Mesher.cs ```csharp theme={null} using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using nTop.Core.Wrapper; /// A simple implementation of the "Marching Cubes" algorithm /// Based on code from here: http://paulbourke.net/geometry/polygonise/ namespace nTop.Core.Examples.Mesher { public class Mesher { /// Creates an array of triangles representing a given implicit body /// The implicit body to be meshed /// The box inside which we want to construct the triangles /// Counts of how many cells to use in the x,y,z directions /// List of triangles, in no particular order (i.e. triangle soup) public static List CreateMesh(ImplicitBody body, Box3d box, int[] gridCounts) { int nx = gridCounts[0]; int ny = gridCounts[1]; int nz = gridCounts[2]; double dx = (box.MaxX - box.MinX) / (nx - 1); double dy = (box.MaxY - box.MinY) / (ny - 1); double dz = (box.MaxZ - box.MinZ) / (nz - 1); // Calculate F(x,y,z) at points of a regular 3D array double[,,] valueArray = CalculateValues(body, box.MinPoint, dx, dy, dz, nx, ny, nz); Cell cell; List triList = new List(); // Loop over cells, triangulating the surface within each of them for (int i = 0; i < nx - 1; i++) { for (int j = 0; j < ny - 1; j++) { for (int k = 0; k < nz - 1; k++) { //Triangulate within the cell, and add resulting triangles to triList cell = CreateCell(valueArray, box.MinPoint, dx, dy, dz, i, j, k); Triangle[] cellTris = TriangulateCell(cell); triList.AddRange(cellTris); } } } return triList; } /// Calculate values of body's implicit function at cell corners /// The body /// The minXYZ corner of the box /// Step in x-direction /// Step in y-direction /// Step in z-direction /// Number of steps in x-direction /// Number of steps in y-direction /// Number of steps in z-direction /// 3D array of values of F(x,y,z) private static double[,,] CalculateValues(ImplicitBody body, Vector pt, double dx, double dy, double dz, int nx, int ny, int nz) { double x0 = pt.X; double y0 = pt.Y; double z0 = pt.Z; // Parallel version. About 3x faster than sequential one. double[,,] vals2 = new double[nx, ny, nz]; Parallel.For (0, nx, i => { for (int j = 0; j < ny; j++) { for (int k = 0; k < nz; k++) { double x2 = x0 + i * dx; double y2 = y0 + j * dy; double z2 = z0 + k * dz; vals2[i, j, k] = body.Value(x2, y2, z2); } } } // End of lambda function ); // End of Parallel.For return vals2; } private static Cell CreateCell(double[,,] values, Vector pt, double dx, double dy, double dz, int i, int j, int k) { double x0 = pt.X + i * dx; double x1 = x0 + dx; double y0 = pt.Y + j * dy; double y1 = y0 + dy; double z0 = pt.Z + k * dz; double z1 = z0 + dz; Vector p0 = new Vector(x0, y0, z0); double v0 = values[i, j, k]; Vector p1 = new Vector(x0, y1, z0); double v1 = values[i, j + 1, k]; Vector p2 = new Vector(x1, y1, z0); double v2 = values[i + 1, j + 1, k]; Vector p3 = new Vector(x1, y0, z0); double v3 = values[i + 1, j, k]; Vector p4 = new Vector(x0, y0, z1); double v4 = values[i, j, k + 1]; Vector p5 = new Vector(x0, y1, z1); double v5 = values[i, j + 1, k + 1]; Vector p6 = new Vector(x1, y1, z1); double v6 = values[i + 1, j + 1, k + 1]; Vector p7 = new Vector(x1, y0, z1); double v7 = values[i + 1, j, k + 1]; Vector[] pts = { p0, p1, p2, p3, p4, p5, p6, p7 }; double[] vals = { v0, v1, v2, v3, v4, v5, v6, v7 }; Cell cell = new Cell(pts, vals); return cell; } #region edgeTable private static int[] edgeTable = { 0x0 , 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 }; #endregion #region triTable private static int[,] triTable = {{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1}, {3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1}, {3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1}, {3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1}, {9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1}, {9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1}, {2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1}, {8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1}, {9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1}, {4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1}, {3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1}, {1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1}, {4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1}, {4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1}, {5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1}, {2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1}, {9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1}, {0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1}, {2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1}, {10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1}, {5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1}, {5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1}, {9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1}, {0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1}, {1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1}, {10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1}, {8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1}, {2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1}, {7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1}, {2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1}, {11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1}, {5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1}, {11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1}, {11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1}, {1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1}, {9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1}, {5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1}, {2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1}, {5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1}, {6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1}, {3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1}, {6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1}, {5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1}, {1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1}, {10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1}, {6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1}, {8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1}, {7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1}, {3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1}, {5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1}, {0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1}, {9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1}, {8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1}, {5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1}, {0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1}, {6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1}, {10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1}, {10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1}, {8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1}, {1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1}, {0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1}, {10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1}, {3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1}, {6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1}, {9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1}, {8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1}, {3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1}, {6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1}, {0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1}, {10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1}, {10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1}, {2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1}, {7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1}, {7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1}, {2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1}, {1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1}, {11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1}, {8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1}, {0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1}, {7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1}, {10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1}, {2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1}, {6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1}, {7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1}, {2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1}, {1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1}, {10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1}, {10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1}, {0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1}, {7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1}, {6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1}, {8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1}, {9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1}, {6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1}, {4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1}, {10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1}, {8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1}, {0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1}, {1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1}, {8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1}, {10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1}, {4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1}, {10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1}, {5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1}, {11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1}, {9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1}, {6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1}, {7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1}, {3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1}, {7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1}, {9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1}, {3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1}, {6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1}, {9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1}, {1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1}, {4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1}, {7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1}, {6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1}, {3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1}, {0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1}, {6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1}, {0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1}, {11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1}, {6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1}, {5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1}, {9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1}, {1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1}, {1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1}, {10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1}, {0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1}, {5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1}, {10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1}, {11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1}, {9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1}, {7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1}, {2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1}, {8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1}, {9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1}, {9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1}, {1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1}, {9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1}, {9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1}, {5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1}, {0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1}, {10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1}, {2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1}, {0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1}, {0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1}, {9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1}, {5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1}, {3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1}, {5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1}, {8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1}, {0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1}, {9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1}, {0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1}, {1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1}, {3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1}, {4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1}, {9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1}, {11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1}, {11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1}, {2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1}, {9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1}, {3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1}, {1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1}, {4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1}, {4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1}, {0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1}, {3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1}, {3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1}, {0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1}, {9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1}, {1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}}; #endregion /// Computes triangles for the portion of the surface within a given cell /// The cell /// Triangles representing intersection of surface with cell private static Triangle[] TriangulateCell(Cell cell) { Vector[] vertlist = new Vector[12]; // Determine the index into the edge table, which tells us which vertices are inside the surface int cubeindex = 0; if (cell.val[0] < 0) cubeindex |= 1; if (cell.val[1] < 0) cubeindex |= 2; if (cell.val[2] < 0) cubeindex |= 4; if (cell.val[3] < 0) cubeindex |= 8; if (cell.val[4] < 0) cubeindex |= 16; if (cell.val[5] < 0) cubeindex |= 32; if (cell.val[6] < 0) cubeindex |= 64; if (cell.val[7] < 0) cubeindex |= 128; // Cell is entirely in/out of the surface, so return an empty array of triangles if (edgeTable[cubeindex] == 0) return System.Array.Empty(); // Find the vertices where the surface intersects the 12 edges of the cell if ((edgeTable[cubeindex] & 1) != 0) vertlist[0] = VertexInterp(cell.p[0], cell.p[1], cell.val[0], cell.val[1]); if ((edgeTable[cubeindex] & 2) != 0) vertlist[1] = VertexInterp(cell.p[1], cell.p[2], cell.val[1], cell.val[2]); if ((edgeTable[cubeindex] & 4) != 0) vertlist[2] = VertexInterp(cell.p[2], cell.p[3], cell.val[2], cell.val[3]); if ((edgeTable[cubeindex] & 8) != 0) vertlist[3] = VertexInterp(cell.p[3], cell.p[0], cell.val[3], cell.val[0]); if ((edgeTable[cubeindex] & 16) != 0) vertlist[4] = VertexInterp(cell.p[4], cell.p[5], cell.val[4], cell.val[5]); if ((edgeTable[cubeindex] & 32) != 0) vertlist[5] = VertexInterp(cell.p[5], cell.p[6], cell.val[5], cell.val[6]); if ((edgeTable[cubeindex] & 64) != 0) vertlist[6] = VertexInterp(cell.p[6], cell.p[7], cell.val[6], cell.val[7]); if ((edgeTable[cubeindex] & 128) != 0) vertlist[7] = VertexInterp(cell.p[7], cell.p[4], cell.val[7], cell.val[4]); if ((edgeTable[cubeindex] & 256) != 0) vertlist[8] = VertexInterp(cell.p[0], cell.p[4], cell.val[0], cell.val[4]); if ((edgeTable[cubeindex] & 512) != 0) vertlist[9] = VertexInterp(cell.p[1], cell.p[5], cell.val[1], cell.val[5]); if ((edgeTable[cubeindex] & 1024) != 0) vertlist[10] = VertexInterp(cell.p[2], cell.p[6], cell.val[2], cell.val[6]); if ((edgeTable[cubeindex] & 2048) != 0) vertlist[11] = VertexInterp(cell.p[3], cell.p[7], cell.val[3], cell.val[7]); // Create the triangles */ List triList = new List(5); for (int i = 0; triTable[cubeindex, i] != -1; i += 3) { Vector v0 = vertlist[triTable[cubeindex, i]]; Vector v1 = vertlist[triTable[cubeindex, i + 1]]; Vector v2 = vertlist[triTable[cubeindex, i + 2]]; Triangle tri = new Triangle(v0, v1, v2); triList.Add(tri); } return triList.ToArray(); } /// Linearly interpolate along an edge cut by the surface /// Point at start of edge /// Point at end of edge /// Function value at start of edge /// Function value at end of edge /// Point on edge where function value is zero private static Vector VertexInterp(Vector p1, Vector p2, double val1, double val2) { if (System.Math.Abs(val1) < 0.00001) return p1; if (System.Math.Abs(val2) < 0.00001) return p2; if (System.Math.Abs(val1 - val2) < 0.00001) return p1; double mu = val1 / (val1 - val2); Vector p = p1 + mu * (p2 - p1); return p; } public static int[] GetGridCounts(ImplicitBody body, int n) { var box = body.Box; double dx = box.MaxX - box.MinX; double dy = box.MaxY - box.MinY; double dz = box.MaxZ - box.MinZ; double[] dxyz = { dx, dy, dz }; double dmax = dxyz.Max(); int countX = (int)(dx / dmax * n); int countY = (int)(dy / dmax * n); int countZ = (int)(dz / dmax * n); return new int[] { countX, countY, countZ }; } private class Cell { public Vector[] p; public double[] val; public Cell(Vector[] points, params double[] vals) { this.p = points; this.val = vals; } } } } ``` ### Triangle.cs ```csharp theme={null} namespace nTop.Core.Examples.Mesher { public class Triangle { /// The three vertices of the triangle, v0, v1, v2 public Vector[] Vertices; /// Unit normal vector, in the direction of (v1 - v0) x (v2 - v1) public Vector UnitNormal; /// Constructor /// Vertices, in CCW order when viewed from outside the body public Triangle(params Vector[] vertices) { this.Vertices = vertices; Vector v0 = vertices[0]; Vector v1 = vertices[1]; Vector v2 = vertices[2]; this.UnitNormal = Vector.Cross(v1 - v0, v2 - v1).Unit; } } } ``` ### WriteSTL.cs ```csharp theme={null} using System.Collections.Generic; using System.IO; namespace nTop.Core.Examples.Mesher { public partial class Program { private static string VectorToSTL(Vector v) { string sx = v.X.ToString("F6"); string sy = v.Y.ToString("F6"); string sz = v.Z.ToString("F6"); string space = " "; return sx + space + sy + space + sz; } public static void WriteSTL(List triList, string filePath) { using (var writer = new StreamWriter(filePath)) { writer.WriteLine("solid object"); foreach (var triangle in triList) { writer.WriteLine(" facet normal " + VectorToSTL(triangle.UnitNormal)); writer.WriteLine(" outer loop"); foreach (var vertex in triangle.Vertices) { writer.WriteLine(" vertex " + VectorToSTL(vertex)); } writer.WriteLine(" endloop"); writer.WriteLine(" endfacet"); } writer.WriteLine("endsolid object"); } } } } ``` # Slicer (.NET) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/dotnet/slicer This example loads a `.implicit` file, computes the median Z height of the body's bounding box, and slices the body on the plane at that height using `ImplicitBody.Slice` (backed by `ntop_core_query_contours`). It then plots the resulting contours with [ScottPlot](https://scottplot.net/) and saves the image as `slice.png`. ### Main.cs ```csharp theme={null} using System; using System.IO; using nTop.Core.Wrapper; using nTop.Core.Examples.Utils; using ScottPlot; namespace nTop.Core.Examples.Slicer { public partial class Slicer { /// /// Draw the slice and write it to disk /// /// The slice to render /// Location to write the PNG private static void DrawSlice(Slice s, string filepath) { var plot = new ScottPlot.Plot(800, 800); // Draw each curve in the slice foreach (List> curve in s.Contours) { double[] xs = (from point in curve select point.Item1).ToArray(); double[] ys = (from point in curve select point.Item2).ToArray(); var contour = plot.AddScatter(xs, ys); contour.MarkerShape = MarkerShape.none; } plot.XAxis.Label("meters"); plot.YAxis.Label("meters"); plot.SaveFig(filepath); } public static void Main() { // Get .implicit file path from user string path = CLI.LoadPrompt(); // Create an ImplicitBody object var body = new ImplicitBody(path); // Use mid-z value as slicing height double midZ = 0.5 * (body.Box.MinZ + body.Box.MaxZ); Frame sliceFrame = new Frame( new Vec3(0, 0, midZ), new Vec3(1, 0, 0), new Vec3(0, 1, 0) ); // Slice the body on the frame Slice s = body.Slice(sliceFrame, 0.0001); // Free the memory used by the implicit in the library body.Release(); // Draw a graph of the slice DrawSlice(s, "./slice.png"); Console.WriteLine($"Slice written to {Directory.GetCurrentDirectory()}{Path.DirectorySeparatorChar}slice.png"); } } } ``` # Volume (.NET) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/dotnet/volume This example loads a `.implicit` file and calls `ComputeVolume`, which divides the body's bounding box into a 100x100x100 grid of voxels, evaluates the body's field (`ImplicitBody.Value`) at each voxel center, and estimates the volume as the count of inside voxels multiplied by the volume of a single voxel. ### MainProgram.cs ```csharp theme={null} using nTop.Core.Examples.Utils; using nTop.Core.Wrapper; namespace nTop.Core.Examples.Volume { public partial class Volume { public static void Main() { // Get .implicit file path from user string path = CLI.LoadPrompt(); // Create an ImplicitBody object var body = new ImplicitBody(path); // Compute the volume of the body int numVoxels = 100; var volume = ComputeVolume(body, numVoxels); // Cleanup body.Release(); // For spherecube, true volume = 1458.149; // For sphere, true volume = 523.599; System.Console.WriteLine("Computed volume = " + volume.ToString()); } } } ``` ### Volume.cs ```csharp theme={null} using nTop.Core.Wrapper; namespace nTop.Core.Examples.Volume { public partial class Volume { /// Computes the (approximate) volume of an implicit body by using voxels /// The body whose volume we want /// Number of voxels used will be n*n*n /// The computed volume public static double ComputeVolume(ImplicitBody body, int n) { // Get the body's bounding box Box3d box = body.Box; double dx = (box.MaxX - box.MinX) / n; double dy = (box.MaxY - box.MinY) / n; double dz = (box.MaxZ - box.MinZ) / n; int count = 0; // Loop to count number of voxels inside the body for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) { for (int k = 0; k <= n; k++) { double x = box.MinX + i * dx + 0.5 * dx; double y = box.MinY + j * dy + 0.5 * dy; double z = box.MinZ + k * dz + 0.5 * dz; double fxyz = body.Value(x, y, z); if (fxyz < 0) count++; // voxel center is inside body, so add to count } } } // Compute volume = number of inside voxels * voxel volume double volume = count * (dx * dy * dz); return volume; } } } ``` # Python Examples Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/python This directory holds self-contained examples of common operations you may want to perform using nTop Core library. The examples themselves are meant to be fully self-contained in showing how you would utilize nTop Core to perform a commonly-requested task. This necessitates, however, a somewhat verbose preamble section in which Python-to-C-Library data marshalling and data primitive definitions are established. It is necessary to understand these sections if you want to use functionality of nTop Core that is not covered in these examples but we recommend starting by skipping to the sections which exercise the library first to get a feel for the library's use. ## Setup The examples have been tested to run on [Python 3.11.4](https://www.python.org/downloads/release/python-3114/) but other recent releases should function similarly. Now create an environment variable to locate the nTop Core library file. ```shell theme={null} # Establish the path to the nTop Core library to test if not previously set up # via the environment variable `NTOP_CORE_LIB`. You can do this per session # or in a .bashrc or System Environment Variable. # In windows powershell $env:NTOP_CORE_LIB = "c:\path\to\ntop_core.dll" # In *nix export NTOP_CORE_LIB="/path/to/libntop_core.so.{major}.{minor}.{patch}" ``` We have some common external dependencies in these examples, the specification is stored in `requirements.txt`. Install them using your package manager of choice. ```shell theme={null} # Using `pip` from this directory pip install -r requirements.txt ``` ## Running the examples You are now ready to run any of the examples using pattern similar to the following: ```shell theme={null} python mesh.py ``` ## Example Scripts * [Bounding Box](/Product-Documentation/ntop-core/examples/python/boundingbox) — loads an implicit body and prints the minimum/maximum corners of its axis-aligned bounding box. * [Mesh](/Product-Documentation/ntop-core/examples/python/mesh) — samples the body's field on a voxel grid via `ntop_core_query_field_array` and reconstructs a surface mesh using scikit-image's marching cubes. * [Mesh by Dual Contouring](/Product-Documentation/ntop-core/examples/python/mesh-by-dc) — meshes the body directly using the library's native `ntop_core_generate_mesh_by_DC` dual contouring function. * [Slice](/Product-Documentation/ntop-core/examples/python/slice) — slices the body at 11 heights via `ntop_core_query_contours` and plots each resulting contour stack. * [Transform and Scale](/Product-Documentation/ntop-core/examples/python/transform-and-scale) — applies a scale and a rigid transform to an implicit body and exports the results to new `.implicit` files. # Bounding Box (Python) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/python/boundingbox This example loads a `.implicit` file (a gyroid sphere) via `ctypes`, calls `ntop_core_query_bounding_box` to compute its axis-aligned bounding box, and prints the minimum and maximum corner coordinates along with all eight corners of the box. ```python theme={null} """Example of getting the bounding box of an `.implicit`""" from ctypes import ( CDLL, pointer, POINTER, c_char_p, c_double, c_uint32, c_void_p, Structure ) import os from pathlib import Path from typing import Any # Load the nTop Core library NTOP_CORE_LIB_ENVVAR = "NTOP_CORE_LIB" if NTOP_CORE_LIB_ENVVAR in os.environ: env_lib_path = Path(os.environ[NTOP_CORE_LIB_ENVVAR]) if env_lib_path.exists() and env_lib_path.is_file(): path_to_lib = env_lib_path else: raise FileNotFoundError(env_lib_path) lib = CDLL(str(path_to_lib)) # In order to successfully load the nTop Core Library the dependent libraries of # the `ntop_core` library must be on the PATH or the current working directory must contain # those libraries not found on the PATH. # For simplicity here we are chosing, for the moment, to append to the PATH environment if str(path_to_lib.parent) not in os.environ["PATH"]: os.environ["PATH"] += os.pathsep + str(path_to_lib.parent) # Setup the data structures and function signatures needed to communicate with the library class Vec3(Structure): """X, Y, Z components representing a point or vector.""" _fields_ = [("x", c_double), ("y", c_double), ("z", c_double)] class BoundingBox(Structure): """ Minimal, axis-aligned bounding box of an Implicit. The representation is comprised of two points (min_x, min_y, min_z) and (max_x, max_y, max_z). """ _fields_ = [("min", Vec3), ("max", Vec3)] # Define the data type marshalling between Python and nTop Core # Load the `.implicit` into the library lib.ntop_core_import_from_file.restype = c_uint32 lib.ntop_core_import_from_file.argtypes = [ c_char_p, POINTER(c_void_p) ] def callback_import_from_file_error_check(result: c_uint32, func, arguments: Any) -> bool: # Check to see if the if result != 0: raise RuntimeError(f"Cannot load implicit: {arguments[1]}.") return True lib.ntop_core_import_from_file.errcheck = callback_import_from_file_error_check # Release the memory used for the `.implicit` lib.ntop_core_release.restype = None lib.ntop_core_release.argtypes = [c_void_p] # Bounding Box call lib.ntop_core_query_bounding_box.restype = None lib.ntop_core_query_bounding_box.argtypes = [ c_void_p, POINTER(BoundingBox) ] # Load the implicit gyroid_implicit_file_path = Path(__file__).parent.parent / "assets" / "gyroid_sphere_5mm_radius.implicit" gyroid_handle = c_void_p() lib.ntop_core_import_from_file(str(gyroid_implicit_file_path).encode("utf8"), gyroid_handle) # Get the bounding box of the implicit body bounding_box = BoundingBox() lib.ntop_core_query_bounding_box(gyroid_handle, pointer(bounding_box)) # Unload the implicit lib.ntop_core_release(gyroid_handle) # Print some information about the bounding box print(f"Minimum: ({bounding_box.min.x}, {bounding_box.min.y}, {bounding_box.min.z})") print(f"Maximum: ({bounding_box.max.x}, {bounding_box.max.y}, {bounding_box.max.z})") print("Corners:") print(" G-----H Z ^ ^ Y") print(" /| /| | /") print(" / | / | | /") print("E-----F | |/") print("| C--|--D *------> X") print("| / | /") print("|/ |/") print("A-----B") print(f"\tA: ({bounding_box.min.x}, {bounding_box.min.y}, {bounding_box.min.z})") print(f"\tB: ({bounding_box.max.x}, {bounding_box.min.y}, {bounding_box.min.z})") print(f"\tC: ({bounding_box.min.x}, {bounding_box.max.y}, {bounding_box.min.z})") print(f"\tD: ({bounding_box.max.x}, {bounding_box.max.y}, {bounding_box.min.z})") print(f"\tE: ({bounding_box.min.x}, {bounding_box.min.y}, {bounding_box.max.z})") print(f"\tF: ({bounding_box.max.x}, {bounding_box.min.y}, {bounding_box.max.z})") print(f"\tG: ({bounding_box.min.x}, {bounding_box.max.y}, {bounding_box.max.z})") print(f"\tH: ({bounding_box.max.x}, {bounding_box.max.y}, {bounding_box.max.x})") ``` # Mesh (Python) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/python/mesh This example loads a `.implicit` file (a heat sink), samples the body's field over a regular 3D grid using the batched `ntop_core_query_field_array` call, and reconstructs a surface mesh from the sampled values using scikit-image's `measure.marching_cubes`. The resulting mesh is written to an STL file and also rendered to a PNG with Matplotlib. ```python theme={null} """A simple implementation of the "Marching Cubes" using scikit-image.""" # region Imports from ctypes import ( CDLL, CFUNCTYPE, pointer, POINTER, c_char_p, c_double, c_uint32, c_void_p, Structure ) import os from pathlib import Path from typing import Any import matplotlib.pyplot as plt from mpl_toolkits.mplot3d.art3d import Poly3DCollection import numpy as np import numpy.typing as npt from skimage import measure # endregion Imports ######### ######### # Setup # ######### ######### # region Preamble Setup ######################## # nTop Core Primitives # ######################## # region nTop Core Primitives class Vec3(Structure): """X, Y, Z components representing a point or vector.""" _fields_ = [("x", c_double), ("y", c_double), ("z", c_double)] class BoundingBox(Structure): """ Minimal, axis-aligned bounding box of an Implicit. The representation is comprised of two points (min_x, min_y, min_z) and (max_x, max_y, max_z). """ _fields_ = [("min", Vec3), ("max", Vec3)] # endregion ########################################################### # Setup library functions and data marshaling definitions # ########################################################### # region Library wrapping setup # Load the nTop Core library NTOP_CORE_LIB_ENVVAR = "NTOP_CORE_LIB" if NTOP_CORE_LIB_ENVVAR in os.environ: env_lib_path = Path(os.environ[NTOP_CORE_LIB_ENVVAR]) if env_lib_path.exists() and env_lib_path.is_file(): path_to_lib = env_lib_path else: raise FileNotFoundError(env_lib_path) ntop_core = CDLL(str(path_to_lib)) # In order to successfully load the nTop Core Library the dependent libraries of # the `ntop_core` library must be on the PATH or the current working directory must contain # those libraries not found on the PATH. # For simplicity here we are choosing, for the moment, to append to the PATH environment if str(path_to_lib.parent) not in os.environ["PATH"]: os.environ["PATH"] += os.pathsep + str(path_to_lib.parent) # Define data marshalling specification for loading implicit ntop_core.ntop_core_import_from_file.restype = c_uint32 ntop_core.ntop_core_import_from_file.argtypes = [ c_char_p, POINTER(c_void_p) ] def callback_import_from_file_error_check(result: c_uint32, func, arguments: Any) -> bool: """ Callback function which happens after the function is called but before control is returned to the caller enabling error handling. :param result: Return value of `ntop_core_import_from_file` :param arguments: Tuple of parameters passed to the invocation of `ntop_core_import_from_file` :returns: True if loading the implicit was successful. :raises: RuntimeError if any error state is reported by nTop Core. """ # Check to see if the implicit loaded correctly if result != 0: raise RuntimeError(f"Cannot load implicit: {arguments[0]}.") return True # Setup error check when loading the file. ntop_core.ntop_core_import_from_file.errcheck = callback_import_from_file_error_check # Define data marshalling specification for releasing the memory used for the `.implicit` ntop_core.ntop_core_release.restype = None ntop_core.ntop_core_release.argtypes = [c_void_p] # Define data marshalling specification for getting the bounding box of an implicit ntop_core.ntop_core_query_bounding_box.restype = None ntop_core.ntop_core_query_bounding_box.argtypes = [ c_void_p, POINTER(BoundingBox) ] # Define the signature for the callback in the `ntop_core_query_field_array`` CFUNCTYPE_QUERY_FIELD_ARRAY_CALLBACK = CFUNCTYPE( None, c_void_p, POINTER(c_double), c_uint32 ) # An example callback that can be used with `ntop_core_query_field_array` invocations. def query_field_array_callback(scope_pass) -> CFUNCTYPE_QUERY_FIELD_ARRAY_CALLBACK: """Callback for the ntop_core_query_field_array to smuggle out the query data.""" def _smuggle(context: c_void_p, query_vals: POINTER(c_double), count: int) -> None: temp = np.ctypeslib.as_array(query_vals, shape = (count, 1)).flatten() np.copyto(scope_pass, temp) return CFUNCTYPE_QUERY_FIELD_ARRAY_CALLBACK(_smuggle) ntop_core.ntop_core_query_field_array.restype = None ntop_core.ntop_core_query_field_array.argtypes = [ c_void_p, np.ctypeslib.ndpointer(dtype=np.double, ndim=2, flags='CONTIGUOUS'), c_uint32, c_void_p, CFUNCTYPE_QUERY_FIELD_ARRAY_CALLBACK ] # endregion Library wrapping setup # endregion Preamble Setup ###################### ###################### # Utility Functions # ###################### ###################### # region Utilities ################### # STL File Writer # ################### # region STL writer def write_stl(triangles: npt.ArrayLike, filename: Path) -> None: """ Write a mesh stored as triangles in STL format. Note: degenerate faces where vertices are colinear are filtered out. :param triangles: numpy Array of dimensions Nx3x3 (N is the number of triangles in the mesh) with each vertex in 3D space. :param filename: File name of the STL to write. """ with open(filename, "w") as f: f.write("solid object\n") for triangle in triangles: normal = np.cross(triangle[1] - triangle[0], triangle[2] - triangle[0]) normal_length = np.sqrt(np.sum(normal ** 2)) if (normal_length == 0): # Skip degenerate faces continue unit_normal = normal / normal_length f.write(f" facet normal {unit_normal[0]:.6f} {unit_normal[1]:.6f} {unit_normal[2]:.6f}\n") f.write(f" outer loop\n") for point in triangle: f.write(f" vertex {point[0]:.6f} {point[1]:.6f} {point[2]:.6f}\n") f.write(f" endloop\n") f.write(f" endfacet\n") f.write("endsolid object\n") # endregion STL writer # endregion Utilities ################################################ ################################################ # Functional example of meshing with nTop Core # ################################################ ################################################# # region Example meshing code with nTop Core # Load the implicit gyroid_implicit_file_path = Path(__file__).parent.parent / "assets" / "heat-sink.implicit" gyroid_handle = c_void_p() ntop_core.ntop_core_import_from_file(str(gyroid_implicit_file_path).encode("utf8"), gyroid_handle) # Get the bounding box to know the extent of the points to mesh bounding_box = BoundingBox() ntop_core.ntop_core_query_bounding_box(gyroid_handle, pointer(bounding_box)) # Offset the bounding box slightly to ensure that we capture points beyond the isosurface # so the meshing algorithm can close the part. bounding_box_offset = 0.001 # Set the minimum feature size you want to capture in the part. The values # selected here will have an O(n^3) impact on mesh file size amd generation # time as it directly effects the number of sampled points. # In this example it is isotropic but if dimensional variability is important # that can be modified here. min_feature_size = (0.00025, 0.00025, 0.00025) # Setup the sampling grid sample_points_numpy_form = np.mgrid[ bounding_box.min.x - bounding_box_offset:bounding_box.max.x + bounding_box_offset:min_feature_size[0], bounding_box.min.y - bounding_box_offset:bounding_box.max.y + bounding_box_offset:min_feature_size[1], bounding_box.min.z - bounding_box_offset:bounding_box.max.z + bounding_box_offset:min_feature_size[2], ] # Turn this into an array of x,y,z points as expected by nTop Core sample_points_ntop_core_form = np.ascontiguousarray(sample_points_numpy_form.reshape(3, -1, order='C').transpose(), dtype=np.double) # Setup the variable to capture the output from nTop Core field_values = np.zeros(sample_points_ntop_core_form.shape[0]) # Use nTop Core's batch query functionality to query the field at all the # points simultaneously. # Note: for sufficiently large parts or very fine features you may need to # chunk these queries depending on your system configuration. ntop_core.ntop_core_query_field_array( gyroid_handle, sample_points_ntop_core_form, sample_points_ntop_core_form.shape[0], None, query_field_array_callback(field_values) ) # Free the memory associated with the implicit as no more calls are needed ntop_core.ntop_core_release(gyroid_handle) # Arrange the data back to the original shape as that is the form the meshing # algorithm expects: a top-down Z-axis slice view of field values. volume_data = field_values.reshape(sample_points_numpy_form.shape[1:]) # Use skimage to mesh the data vertices, faces, normals, values = measure.marching_cubes( volume_data, 0, allow_degenerate=False, spacing=min_feature_size ) # The implementation of `measure.marching_cubes()` translates samples to its # own frame in octant 1 so we translate to the original position of the implicit # for consistency. vertices += np.array([bounding_box.min.x, bounding_box.min.y, bounding_box.min.z]) vertices -= bounding_box_offset # Fancy indexing: `vertices[faces]` to generate a collection of triangles. # This takes the form of an array containing triplets of 3D points. triangles = vertices[faces] # Make a folder to capture the output output_folder = Path(__file__).parent / "output" output_folder.mkdir(exist_ok=True) # Write the mesh as an STL generated_mesh_filepath = output_folder / "mesh.stl" write_stl(triangles, generated_mesh_filepath) # Display resulting mesh using Matplotlib. fig = plt.figure(figsize=(25, 25)) ax = fig.add_subplot(111, projection='3d') # Add the mesh visualization # Note: Matplotlib is not very performant for this rendering task and should # primarily be used for proof-of-concept using other mesh visualization tools # for deeper analysis. mesh = Poly3DCollection(triangles) mesh.set_edgecolor('k') ax.add_collection3d(mesh) # Label the plot ax.set_title("Mesh visualization of implicit") ax.set_xlabel("x-axis (meters)") ax.set_ylabel("y-axis (meters)") ax.set_zlabel("z-axis (meters)") # Set reasonable limits to scale the part appropriately for viewing ax.set_xlim(bounding_box.min.x, bounding_box.max.x) ax.set_ylim(bounding_box.min.y, bounding_box.max.y) ax.set_zlim(bounding_box.min.z, bounding_box.max.z) # Render the mesh and save to a PNG mesh_render_filepath = output_folder / "mesh.png" plt.savefig(mesh_render_filepath) print(f"Render of mesh saved to {mesh_render_filepath}") # Uncomment the line below to render the mesh in an interactive window # plt.show() # endregion Example meshing code with nTop Core ``` # Mesh by Dual Contouring (Python) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/python/mesh-by-dc This example loads a `.implicit` file (a heat sink) and meshes it directly using the library's native `ntop_core_generate_mesh_by_DC` dual contouring function, collecting vertices and triangle indices through callbacks (including a progress/cancellation callback with a configurable timeout). Unlike the [Mesh](/Product-Documentation/ntop-core/examples/python/mesh) example, no external meshing library is used — dual contouring is performed entirely inside nTop Core. The resulting mesh is written to an STL file and also rendered to a PNG with Matplotlib. ```python theme={null} """Example using the nTop Core meshing by DC call.""" # region Imports from ctypes import ( CDLL, CFUNCTYPE, pointer, POINTER, c_bool, c_char_p, c_double, c_uint32, c_void_p, Structure ) import os from pathlib import Path from typing import Any import matplotlib.pyplot as plt from mpl_toolkits.mplot3d.art3d import Poly3DCollection import numpy as np import numpy.typing as npt from skimage import measure import datetime # endregion Imports ######### ######### # Setup # ######### ######### # region Preamble Setup ######################## # nTop Core Primitives # ######################## # region nTop Core Primitives class Vec3(Structure): """X, Y, Z components representing a point or vector.""" _fields_ = [("x", c_double), ("y", c_double), ("z", c_double)] class BoundingBox(Structure): """ Minimal, axis-aligned bounding box of an Implicit. The representation is comprised of two points (min_x, min_y, min_z) and (max_x, max_y, max_z). """ _fields_ = [("min", Vec3), ("max", Vec3)] # endregion ########################################################### # Setup library functions and data marshaling definitions # ########################################################### # region Library wrapping setup # Load the nTop Core library NTOP_CORE_LIB_ENVVAR = "NTOP_CORE_LIB" if NTOP_CORE_LIB_ENVVAR in os.environ: env_lib_path = Path(os.environ[NTOP_CORE_LIB_ENVVAR]) if env_lib_path.exists() and env_lib_path.is_file(): path_to_lib = env_lib_path else: raise FileNotFoundError(env_lib_path) ntop_core = CDLL(str(path_to_lib)) # In order to successfully load the nTop Core Library the dependent libraries of # the `ntop_core` library must be on the PATH or the current working directory must contain # those libraries not found on the PATH. # For simplicity here we are choosing, for the moment, to append to the PATH environment if str(path_to_lib.parent) not in os.environ["PATH"]: os.environ["PATH"] += os.pathsep + str(path_to_lib.parent) # Define data marshalling specification for loading implicit ntop_core.ntop_core_import_from_file.restype = c_uint32 ntop_core.ntop_core_import_from_file.argtypes = [ c_char_p, POINTER(c_void_p) ] def callback_import_from_file_error_check(result: c_uint32, func, arguments: Any) -> bool: """ Callback function which happens after the function is called but before control is returned to the caller enabling error handling. :param result: Return value of `ntop_core_import_from_file` :param arguments: Tuple of parameters passed to the invocation of `ntop_core_import_from_file` :returns: True if loading the implicit was successful. :raises: RuntimeError if any error state is reported by nTop Core. """ # Check to see if the implicit loaded correctly if result != 0: raise RuntimeError(f"Cannot load implicit: {arguments[0]}.") return True # Setup error check when loading the file. ntop_core.ntop_core_import_from_file.errcheck = callback_import_from_file_error_check # Define data marshalling specification for releasing the memory used for the `.implicit` ntop_core.ntop_core_release.restype = None ntop_core.ntop_core_release.argtypes = [c_void_p] # Define data marshalling specification for getting the bounding box of an implicit ntop_core.ntop_core_query_bounding_box.restype = None ntop_core.ntop_core_query_bounding_box.argtypes = [ c_void_p, POINTER(BoundingBox) ] # Define the signatures for the callbacks in the `ntop_core_generate_mesh_by_DC`` CFUNCTYPE_MESH_VERTEX_CALLBACK = CFUNCTYPE( None, c_void_p, POINTER(Vec3), c_uint32 ) CFUNCTYPE_MESH_TRIANGLE_CALLBACK = CFUNCTYPE( None, c_void_p, c_uint32, c_uint32, c_uint32 ) CFUNCTYPE_MESH_CONTINUATION_CALLBACK = CFUNCTYPE(c_bool, c_void_p, c_uint32) ntop_core.ntop_core_generate_mesh_by_DC.restype = None ntop_core.ntop_core_generate_mesh_by_DC.argtypes = [c_void_p, c_double, c_double, c_void_p, c_void_p, c_void_p, CFUNCTYPE_MESH_VERTEX_CALLBACK, CFUNCTYPE_MESH_TRIANGLE_CALLBACK, CFUNCTYPE_MESH_CONTINUATION_CALLBACK] # Example callbacks that can be used with `ntop_core_generate_mesh_by_DC` invocations. def mesh_vertex_callback(scope_pass) -> CFUNCTYPE_MESH_VERTEX_CALLBACK: """Callback for the ntop_core_generate_mesh_by_DC to smuggle out the vertex data.""" def gather_vertex(context: c_void_p, pt:POINTER(Vec3), index:c_uint32): scope_pass.append([pt.contents.x, pt.contents.y, pt.contents.z]) return CFUNCTYPE_MESH_VERTEX_CALLBACK(gather_vertex) def mesh_triangle_callback(scope_pass) -> CFUNCTYPE_MESH_TRIANGLE_CALLBACK: """Callback for the ntop_core_generate_mesh_by_DC to smuggle out the triangle index data.""" def gather_triangle(context: c_void_p, a:c_uint32, b:c_uint32, c:c_uint32): scope_pass.append([a,b,c]) return CFUNCTYPE_MESH_TRIANGLE_CALLBACK(gather_triangle) class mesh_continuation: completed: bool timeout: int reporting_frequency: int def mesh_continuation_callback(scope_pass) -> CFUNCTYPE_MESH_CONTINUATION_CALLBACK: """Callback for the ntop_core_generate_mesh_by_DC to report progress and optionally cancel.""" global last_report now = datetime.datetime.now() stop_after = now + datetime.timedelta(seconds = scope_pass.timeout) last_report = now def proceed(context: c_void_p, percent: c_uint32): global last_report now = datetime.datetime.now() scope_pass.completed = now < stop_after if (now > last_report + datetime.timedelta(seconds = scope_pass.reporting_frequency)): print(f"Meshing {percent}% complete.") last_report = datetime.datetime.now() return scope_pass.completed return CFUNCTYPE_MESH_CONTINUATION_CALLBACK(proceed) # endregion Library wrapping setup # endregion Preamble Setup ###################### ###################### # Utility Functions # ###################### ###################### # region Utilities ################### # STL File Writer # ################### # region STL writer def write_stl(triangles: npt.ArrayLike, filename: Path) -> None: """ Write a mesh stored as triangles in STL format. Note: degenerate faces where vertices are colinear are filtered out. :param triangles: numpy Array of dimensions Nx3x3 (N is the number of triangles in the mesh) with each vertex in 3D space. :param filename: File name of the STL to write. """ with open(filename, "w") as f: f.write("solid object\n") for triangle in triangles: normal = np.cross(triangle[1] - triangle[0], triangle[2] - triangle[0]) #if (np.sum(normal ** 2) < 0): # print(normal) # print(triangle) normal_length = np.sqrt(np.sum(normal ** 2)) if (normal_length == 0): # Skip degenerate faces continue unit_normal = normal / normal_length f.write(f" facet normal {unit_normal[0]:.6f} {unit_normal[1]:.6f} {unit_normal[2]:.6f}\n") f.write(f" outer loop\n") for point in triangle: f.write(f" vertex {point[0]:.6f} {point[1]:.6f} {point[2]:.6f}\n") f.write(f" endloop\n") f.write(f" endfacet\n") f.write("endsolid object\n") # endregion STL writer # endregion Utilities ################################################ ################################################ # Functional example of meshing with nTop Core # ################################################ ################################################# # region Example meshing code with nTop Core # Load the implicit gyroid_implicit_file_path = Path(__file__).parent.parent / "assets" / "heat-sink.implicit" print(f"Reading {gyroid_implicit_file_path}.") gyroid_handle = c_void_p() ntop_core.ntop_core_import_from_file(str(gyroid_implicit_file_path).encode("utf8"), gyroid_handle) # Setup meshing parameters and callbacks # # Lists to store meshing callback values dynamically vertices = [] triangle_indices = [] # Granularity, in meters, at which the body's field is sampled. # Make this smaller to get a finer mesh. feature_size = 0.00025 # Controls deimation of the mesh. # Make this smaller to get a finer mesh. 0 for no deimation. adaptivity = 1 continuation = mesh_continuation() continuation.completed = True # Set false by callback if computation was cancelled continuation.timeout = int(os.environ.get('FUNC_TIMEOUT', 10)) # Seconds until meshing computation is cancelled continuation.reporting_frequency = 1 # Minimum seconds between progress reports # Mesh the implicit body ntop_core.ntop_core_generate_mesh_by_DC(gyroid_handle, feature_size, adaptivity, 0, 0, 0, mesh_vertex_callback(vertices), mesh_triangle_callback(triangle_indices), mesh_continuation_callback(continuation)) if (not continuation.completed): print("Meshing took too long. Adjust feature_size, timeout, or model to allow meshing to complete.") exit(1) else: print("Meshing completed.") print("Gathering vertices and faces.") # Copy values from lists to numpy arrays. np_vertices = np.asarray(vertices) np_triangle_indices = np.asarray(triangle_indices) # Use fancy indexing to make the triangles triangles = np_vertices[np_triangle_indices] # Get the bounding box to know the extent of the points to render bounding_box = BoundingBox() ntop_core.ntop_core_query_bounding_box(gyroid_handle, pointer(bounding_box)) # Free the memory associated with the implicit as no more calls are needed ntop_core.ntop_core_release(gyroid_handle) # Make a folder to capture the output output_folder = Path(__file__).parent / "output" output_folder.mkdir(exist_ok=True) # Write the mesh as an STL generated_mesh_filepath = output_folder / "mesh_by_DC.stl" print(f"Writing stl to {generated_mesh_filepath}") write_stl(triangles, generated_mesh_filepath) # Display resulting mesh using Matplotlib. print("Generating Matplotlib display.") fig = plt.figure(figsize=(25, 25)) ax = fig.add_subplot(111, projection='3d') # Add the mesh visualization # Note: Matplotlib is not very performant for this rendering task and should # primarily be used for proof-of-concept using other mesh visualization tools # for deeper analysis. mesh = Poly3DCollection(triangles) mesh.set_edgecolor('k') ax.add_collection3d(mesh) # Label the plot ax.set_title("Mesh visualization of implicit") ax.set_xlabel("x-axis (meters)") ax.set_ylabel("y-axis (meters)") ax.set_zlabel("z-axis (meters)") # Set reasonable limits to scale the part appropriately for viewing ax.set_xlim(bounding_box.min.x, bounding_box.max.x) ax.set_ylim(bounding_box.min.y, bounding_box.max.y) ax.set_zlim(bounding_box.min.z, bounding_box.max.z) # Render the mesh and save to a PNG print("Rendering as png.") mesh_render_filepath = output_folder / "mesh_by_DC.png" plt.savefig(mesh_render_filepath) print(f"Render of mesh saved to {mesh_render_filepath}") # Uncomment the line below to render the mesh in an interactive window #plt.show() # endregion Example meshing code with nTop Core ``` # Slice (Python) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/python/slice This example loads a `.implicit` file (a gyroid sphere), computes its bounding box, and slices the body at 11 evenly-spaced Z heights within that box using `ntop_core_query_contours`. For each height it plots the resulting polyline contours with Matplotlib and saves them as a stack of PNG images. ```python theme={null} """Example of slicing an `.implicit`""" from ctypes import ( CDLL, CFUNCTYPE, pointer, POINTER, c_bool, c_char_p, c_double, c_uint32, c_void_p, Structure ) import os from pathlib import Path from typing import Any, List, Tuple import matplotlib.pyplot as plt from matplotlib.figure import Figure import numpy as np # Load the nTop Core library NTOP_CORE_LIB_ENVVAR = "NTOP_CORE_LIB" if NTOP_CORE_LIB_ENVVAR in os.environ: env_lib_path = Path(os.environ[NTOP_CORE_LIB_ENVVAR]) if env_lib_path.exists() and env_lib_path.is_file(): path_to_lib = env_lib_path else: raise FileNotFoundError(env_lib_path) lib = CDLL(str(path_to_lib)) # In order to successfully load the nTop Core Library the dependent libraries of # the `ntop_core` library must be on the PATH or the current working directory must contain # those libraries not found on the PATH. # For simplicity here we are chosing, for the moment, to append to the PATH environment if str(path_to_lib.parent) not in os.environ["PATH"]: os.environ["PATH"] += os.pathsep + str(path_to_lib.parent) # Setup the data structures and function signatures needed to communicate with the library class Vec2(Structure): """X, Y components representing a point or or vector on a known plane of reference.""" _fields_ = [("x", c_double), ("y", c_double)] class Vec3(Structure): """X, Y, Z components representing a point or vector.""" _fields_ = [("x", c_double), ("y", c_double), ("z", c_double)] class Frame(Structure): """ A point and two orthogonal axes defining a frame of reference. """ _fields_ = [("origin", Vec3), ("x_axis", Vec3), ("y_axis", Vec3)] class BoundingBox(Structure): """ Minimal, axis-aligned bounding box of an Implicit. The representation is comprised of two points (min_x, min_y, min_z) and (max_x, max_y, max_z). """ _fields_ = [("min", Vec3), ("max", Vec3)] # Define the data type marshalling between Python and nTop Core # Load the `.implicit` into the library lib.ntop_core_import_from_file.restype = c_uint32 lib.ntop_core_import_from_file.argtypes = [ c_char_p, POINTER(c_void_p) ] def callback_import_from_file_error_check(result: c_uint32, func, arguments: Any) -> bool: # Check to see if the if result != 0: raise RuntimeError(f"Cannot load implicit: {arguments[1]}.") return True lib.ntop_core_import_from_file.errcheck = callback_import_from_file_error_check # Release the memory used for the `.implicit` lib.ntop_core_release.restype = None lib.ntop_core_release.argtypes = [c_void_p] # Bounding Box call lib.ntop_core_query_bounding_box.restype = None lib.ntop_core_query_bounding_box.argtypes = [ c_void_p, POINTER(BoundingBox) ] # Declare the callback made by the contour call CFUNCTYPE_CONTOUR_CALLBACK = CFUNCTYPE(None, c_void_p, POINTER(Vec2), c_uint32, c_bool) lib.ntop_core_query_contours.restype = None lib.ntop_core_query_contours.argtypes = [ c_void_p, POINTER(Frame), c_double, c_void_p, CFUNCTYPE_CONTOUR_CALLBACK ] def callback_query_contours(scope_pass: List[List[Tuple[float, float]]]) -> CFUNCTYPE_CONTOUR_CALLBACK: """ Callback for the ntop_core_query_contours to smuggle out the slice data. `scope_pass` is populated with the slice data. """ def _smuggle(context: c_void_p, polyline: List[Vec2], count: int, is_closed: bool) -> None: curve = [] for i in range(count): curve.append((polyline[i].x, polyline[i].y)) scope_pass.append(curve) return CFUNCTYPE_CONTOUR_CALLBACK(_smuggle) def plot_slice(slice: List[List[Tuple[float, float]]], bounding_box: BoundingBox) -> Figure: """Plots a single slice.""" # Make the figures consistent in size across slices fig = plt.figure(figsize=[ 1000 * (bounding_box.max.x - bounding_box.min.x), 1000 * (bounding_box.max.y - bounding_box.min.y) ]) cur_fig = fig.add_subplot(1, 1, 1) # Iterate over the curves in the slice for curve in slice: # iterate over the curves in the contour x_vals = [pt[0] for pt in curve] y_vals = [pt[1] for pt in curve] # Close the curve x_vals.append(curve[0][0]) y_vals.append(curve[0][1]) cur_fig.plot( x_vals, y_vals, scalex=0.001, scaley=0.001 ) # Annotate the figure cur_fig.set_title(f"Z-Offset: {int(round(z_offset, 3)*1000)} mm") cur_fig.set_xlabel("meters") cur_fig.set_ylabel("meters") x_ticks = np.arange(round(bounding_box.min.x, 3), round(bounding_box.max.x, 3) + 0.001, 0.001) y_ticks = np.arange(round(bounding_box.min.y, 3), round(bounding_box.max.y, 3) + 0.001, 0.001) cur_fig.set_xticks(x_ticks) cur_fig.set_yticks(y_ticks) cur_fig.set_xbound(bounding_box.min.x - 0.001, bounding_box.max.x + 0.001) cur_fig.set_ybound(bounding_box.min.y - 0.001, bounding_box.max.y + 0.001) return fig # Load up the implicit gyroid_implicit_file_path = Path(__file__).parent.parent / "assets" / "gyroid_sphere_5mm_radius.implicit" gyroid_handle = c_void_p() lib.ntop_core_import_from_file(str(gyroid_implicit_file_path).encode("utf8"), gyroid_handle) ## Setup the slice stack # Get the bounding box to slice the full body of the implicit bounding_box = BoundingBox() lib.ntop_core_query_bounding_box(gyroid_handle, pointer(bounding_box)) # Offset from the bounding box slightly to capture the top and # bottom surfaces slice_top_bottom_offset = 0.0001 # Slice at 11 heights within the bounding box of the `.implicit` slice_z_offsets = np.linspace( bounding_box.min.z + slice_top_bottom_offset, bounding_box.max.z - slice_top_bottom_offset, 11 ).tolist() # Capture features 50 microns in size min_feat_size = 50 * (10 ** -6) # Make a folder to capture the output output_folder = Path(__file__).parent / "output" output_folder.mkdir(exist_ok=True) # Create a slice stack output_paths: list[Path] = [] for idx, z_offset in enumerate(slice_z_offsets): slice_plane = Frame( Vec3(0, 0, z_offset), Vec3(1, 0, 0), Vec3(0, 1, 0) ) # List containing a list of tuples representing closed polyline curves slice = [] # slice the implicit on each frame lib.ntop_core_query_contours(gyroid_handle, pointer(slice_plane), min_feat_size, None, callback_query_contours(slice)) # save a plot of the figure fig = plot_slice(slice, bounding_box) output_path = output_folder / f"slice_{idx}_{gyroid_implicit_file_path.stem}_{int(round(z_offset, 3)*1000)}mmZ.png" fig.savefig(output_path, format="png") output_paths.append(output_path) # Print out the location of the generated files print("Generated the following slices:") for f in output_paths: print(f"\t{f}") # Unload the `.implicit` lib.ntop_core_release(gyroid_handle) ``` # Transform and Scale (Python) Source: https://docs.ntop.com/Product-Documentation/ntop-core/examples/python/transform-and-scale This example loads a `.implicit` file (a cone), scales it uniformly about its apex using `ntop_core_scaled`, then applies a rigid transform (translation and axis re-orientation) to the scaled body using `ntop_core_transformed`. It samples the field value (`ntop_core_query_field`) at several points before and after each operation to demonstrate the effect, and exports both the scaled and the scaled-and-transformed bodies to new `.implicit` files with `ntop_core_export_to_file`. ```python theme={null} """Example of transforming and scaling an `.implicit`""" from ctypes import ( CDLL, pointer, POINTER, c_char_p, c_double, c_int32, c_uint32, c_void_p, Structure ) import os from pathlib import Path from typing import Any from enum import Enum ######################## # nTop Core Primitives # ######################## # region nTop Core Primitives class Vec3(Structure): """X, Y, Z components representing a point or vector.""" _fields_ = [("x", c_double), ("y", c_double), ("z", c_double)] class Frame(Structure): """ A point and two orthogonal axes defining a frame of reference. """ _fields_ = [("origin", Vec3), ("x_axis", Vec3), ("y_axis", Vec3)] class BoundingBox(Structure): """ Minimal, axis-aligned bounding box of an Implicit. The representation is comprised of two points (min_x, min_y, min_z) and (max_x, max_y, max_z). """ _fields_ = [("min", Vec3), ("max", Vec3)] # endregion ########################################################### # Setup library functions and data marshaling definitions # ########################################################### # region Library wrapping setup # Load the nTop Core library NTOP_CORE_LIB_ENVVAR = "NTOP_CORE_LIB" if NTOP_CORE_LIB_ENVVAR in os.environ: env_lib_path = Path(os.environ[NTOP_CORE_LIB_ENVVAR]) if env_lib_path.exists() and env_lib_path.is_file(): path_to_lib = env_lib_path else: raise FileNotFoundError(env_lib_path) ntop_core = CDLL(str(path_to_lib)) # In order to successfully load the nTop Core Library the dependent libraries of # the `ntop_core` library must be on the PATH or the current working directory must contain # those libraries not found on the PATH. # For simplicity here we are chosing, for the moment, to append to the PATH environment if str(path_to_lib.parent) not in os.environ["PATH"]: os.environ["PATH"] += os.pathsep + str(path_to_lib.parent) class ImplicitLoadMessage(Enum): """Enumertaion of the load error messages and their respective codes.""" # Codes as defined in ntop_core.h SUCCESS = 0 UNKNOWN_ERROR = 1 FILE_DOESNT_EXIST = 2 FILE_OPEN_ERROR = 3 CORRUPT_FILE = 4 UNSUPPORTED_VERSION = 5 OUT_OF_MEMORY = 6 # Define the data type marshalling between Python and nTop Core ntop_core.ntop_core_import_from_file.restype = c_uint32 ntop_core.ntop_core_import_from_file.argtypes = [ c_char_p, POINTER(c_void_p) ] ntop_core.ntop_core_library_version.argtypes = [ POINTER(c_int32), POINTER(c_int32), POINTER(c_int32) ] def callback_import_from_file_error_check(result: c_uint32, func, arguments: Any) -> bool: """ Callback function which happens after the function is called but before control is returned to the caller enabling error handling. :param result: Return value of `ntop_core_import_from_file` :param arguments: Tuple of parameters passed to the invocation of `ntop_core_import_from_file` :returns: True if loading the implicit was successful. :raises: RuntimeError if any error state is reported by nTop Core. """ # Check to see if the implicit loaded correctly if result != 0: if result == 5: major = c_int32(); minor = c_int32(); patch = c_int32() ntop_core.ntop_core_library_version(pointer(major), pointer(minor), pointer(patch)) version = f"{major.value}.{minor.value}.{patch.value}" raise RuntimeError(f"Implicit file is unsupported by nTop Core version {version}") raise RuntimeError(f"Cannot load implicit: {ImplicitLoadMessage(result).name}.") return True # Setup error check when loading the file. ntop_core.ntop_core_import_from_file.errcheck = callback_import_from_file_error_check # Define the data type marshalling between Python and nTop Core ntop_core.ntop_core_export_to_file.restype = c_uint32 ntop_core.ntop_core_export_to_file.argtypes = [ c_char_p, c_void_p ] def callback_export_to_file_error_check(result: c_uint32, func, arguments: Any) -> bool: """ Callback function which happens after the function is called but before control is returned to the caller enabling error handling. :param result: Return value of `ntop_core_export_to_file` :param arguments: Tuple of parameters passed to the invocation of `ntop_core_export_to_file` :returns: True if saving the implicit was successful. :raises: RuntimeError if any error state is reported by nTop Core. """ # Check to see if the implicit loaded correctly if result != 0: raise RuntimeError(f"Cannot save implicit: {arguments[0]}.") return True # Setup error check when saving the file. ntop_core.ntop_core_export_to_file.errcheck = callback_export_to_file_error_check # Define data marshalling specification for releasing the memory used for the `.implicit` ntop_core.ntop_core_release.restype = None ntop_core.ntop_core_release.argtypes = [c_void_p] # Define data marshalling specification for getting the implicit field value at a point ntop_core.ntop_core_query_field.restype = c_double ntop_core.ntop_core_query_field.argtypes = [ c_void_p, POINTER(Vec3) ] # Define data marshalling specification for scaling an implicit body ntop_core.ntop_core_scaled.restype = None ntop_core.ntop_core_scaled.argtypes = [ c_void_p, POINTER(Vec3), POINTER(Vec3), POINTER(c_void_p), ] # Define data marshalling specification for transforming an implicit body ntop_core.ntop_core_transformed.restype = None ntop_core.ntop_core_transformed.argtypes = [ c_void_p, POINTER(Frame), POINTER(c_void_p), ] # endregion Library wrapping setup ################################################ ################################################ # Functional example of transforming and scaling with nTop Core # ################################################ ################################################# # region Example transforming and scaling code with nTop Core # Load the implicit cone_implicit_file_path = Path(__file__).parent.parent / "assets" / "cone_5mm_radius_10mm_apex.implicit" cone_handle = c_void_p() ntop_core.ntop_core_import_from_file(str(cone_implicit_file_path).encode("utf8"), cone_handle) print ("Loaded implicit cone from " + str(cone_implicit_file_path)) # Scale the cone uniformly relative to its apex scaled_handle = c_void_p() scale = Vec3(2, 2, 2) # Uniform scale fixed_pt = Vec3(0, 0, 0.010) # Apex of the cone (all units in meters) ntop_core.ntop_core_scaled(cone_handle, pointer(scale), pointer(fixed_pt), pointer(scaled_handle)) # Transform the body by translating origin to (10mm, 0, 0) and rotating to make the Y axis "up". transformed_handle = c_void_p() transform = Frame(Vec3(-0.010, 0, 0), Vec3(1, 0, 0), Vec3(0, 0, 1)) ntop_core.ntop_core_transformed(scaled_handle, pointer(transform), pointer(transformed_handle)) # Make a folder to capture the output output_folder = Path(__file__).parent / "output" output_folder.mkdir(exist_ok=True) # Sample x,y,z points of interest # We sample the apex, the original cone base, and the rescaled cone base sample_points = [Vec3(0, 0, 0), # origin Vec3(0, 0, 0.010), # apex - invariant to this scaling because it is the fixed point Vec3(0.005, 0, 0), # original base surface points Vec3(-0.005, 0, 0), Vec3(0, 0.005, 0), Vec3(0, -0.005, 0), Vec3(0.010, 0, -0.010), # scaled base surface point Vec3(-0.010, 0, -0.010), Vec3(0, 0.010, -0.010), Vec3(0, -0.010, -0.010)] # Sample x,y,z points of interest # We sample the apex, the original cone base, and the rescaled cone base transformed_points = [Vec3(0.010, 0, 0), # transformed origin Vec3(0.010, 0.010, 0), # transformed apex Vec3(0.005, 0, 0), # transformed original base surface points Vec3(0.015, 0, 0), Vec3(0.010, 0, -0.005), Vec3(0.010, 0, -0.005), Vec3(0, -0.010, 0), # transformed scaled base surface points Vec3(0.020, -0.010, 0), Vec3(0.010, -0.010, 0.010), Vec3(0.010, -0.010, -0.010)] print ("Original values:") for sample_point in sample_points: value = ntop_core.ntop_core_query_field(cone_handle, sample_point) print (f"Value at ({sample_point.x}, {sample_point.y}, {sample_point.z}) = {value:.6f}") print ("Scaled values:") for sample_point in sample_points: value = ntop_core.ntop_core_query_field(scaled_handle, sample_point) print (f"Value at ({sample_point.x}, {sample_point.y}, {sample_point.z}) = {value:.6f}") # Save the scaled implicit scaled_output_path = output_folder / "scaled_cone.implicit" ntop_core.ntop_core_export_to_file(str(scaled_output_path).encode("utf8"), scaled_handle) print ("Saved scaled cone to " + str(scaled_output_path)) print ("Scaled and transformed values:") for transform_point in transformed_points: value = ntop_core.ntop_core_query_field(transformed_handle, transform_point) print (f"Value at ({transform_point.x}, {transform_point.y}, {transform_point.z}) = {value:.6f}") # Save the transformed implicit transformed_output_path = output_folder / "transformed_cone.implicit" ntop_core.ntop_core_export_to_file(str(transformed_output_path).encode("utf8"), transformed_handle) print ("Saved scaled and transformed cone to " + str(transformed_output_path)) # Unload the implicit bodies ntop_core.ntop_core_release(cone_handle) ntop_core.ntop_core_release(scaled_handle) ntop_core.ntop_core_release(transformed_handle) ``` # Python Package Source: https://docs.ntop.com/Product-Documentation/ntop-core/python-package `ntop-core` is a Pythonic, NumPy-native wrapper around the nTop Core engine, built with [nanobind](https://github.com/wjakob/nanobind). It replaces the raw `ctypes` marshalling shown in the [Python Examples](/Product-Documentation/ntop-core/examples/python) with a package you `pip install` and `import ntop.core`. ```python theme={null} >>> import numpy as np >>> points = np.array([[0.0, 0.0, 0.0], [0.01, 0.0, 0.0], [0.02, 0.0, 0.0]]) >>> import ntop.core as ntc >>> body = ntc.load("assets/sphere.implicit") >>> body.field(points) array([-0.005, 0.005, 0.015]) ``` > [!NOTE] > > ntop-core-python is currently in beta. Breaking changes may occur between any two versions. ## Installation ntop-core-python runs on Python 3.10+. It is not published on PyPI; download it from [app.ntop.com/addons](https://app.ntop.com/addons). If you have received a copy of nTop Core with `python_packages`, run: ```shell theme={null} pip install --follow-links ./python_packages/ ntop-core ``` ## Locating the ntop\_core library At import time, `ntop.core` needs to find the `ntop_core` shared library (`ntop_core.dll` on Windows; on Linux, the highest-versioned `libntop_core.so.` if one is present, otherwise the bare `libntop_core.so`). It searches, in order: 1. The `NTOP_CORE_LIB` environment variable, if set, must point directly at the library file. 2. A directory bundled alongside the package itself. 3. `$CONDA_PREFIX` (when running inside a conda environment). 4. The Windows Registry (`InstallLocationNtopCore` under `HKLM\SOFTWARE\nTopology\nTopology`). 5. The default nTopology install path: `%PROGRAMFILES%\nTopology\nTopology\ntop_core.dll` on Windows (defaults to `C:\Program Files\nTopology\nTopology\ntop_core.dll`), or `/opt/nTopology/nTopology/libntop_core.so` on Linux. 6. The `ntopcl` default install root (Linux only): `/usr/local/ntop/nTop`. 7. The platform's standard dynamic-linker search (`ldconfig` / `PATH` / `LD_LIBRARY_PATH`). To point at a specific copy of the library, set `NTOP_CORE_LIB` before importing `ntop.core`: ```shell theme={null} # Windows $env:NTOP_CORE_LIB = "C:\Downloads\nTop-Core-SDK\lib\ntop_core.dll" # Linux export NTOP_CORE_LIB=/path/to/nTop-Core-SDK/lib/libntop_core.so ``` Set `NTOP_DEBUG_LIBRARY_LOAD=1` to log each discovery step to stderr, which is useful for diagnosing why the wrong library (or none) was found. Once loaded, `ntop.core.__version__` reports the version of the `ntop_core` library that was actually picked up by discovery. This is the library's own version, not the version of nTop that created any particular `.implicit` file. ## Units As with the rest of nTop Core, all coordinates, distances, and field values are in **meters**. Convert from your application's native units before querying. ## Next steps * Follow the [Quickstart](/Product-Documentation/ntop-core/python-package/quickstart) for a runnable, end-to-end walkthrough of every operation. * See the [API Reference](/Product-Documentation/ntop-core/python-package/api-reference) for every method, type, and exception exposed by the package. # API Reference Source: https://docs.ntop.com/Product-Documentation/ntop-core/python-package/api-reference This page documents the public API of `ntop.core`. All coordinates and distances are in meters. ## Loading a body ### `ntop.core.load` ```python theme={null} load(path: str | os.PathLike) -> ImplicitBody ``` Loads an implicit body from a `.implicit` file. Triggers process-wide one-shot initialization of the engine's dependencies on the first call. * **Raises** `FileNotFoundError` if the file does not exist, `PermissionError` if it cannot be opened, `ValueError` if the file is corrupt or an unsupported version. ```python theme={null} >>> import ntop.core as core >>> body = core.load("part.implicit") >>> body.bounding_box.diagonal array([0.1, 0.1, 0.1]) ``` `ImplicitBody` releases its native handle automatically when garbage collected, or immediately via a context manager: ```python theme={null} with core.load("part.implicit") as body: values = body.field(points) # handle released here ``` ## `ImplicitBody` ### Properties | Property | Type | Description | | - | - | - | | `path` | `str \| None` | Path this body was loaded from, or `None` if not loaded from a file. | | `bounding_box` | `BoundingBox` | Axis-aligned bounding box of the body. | ### `field` ```python theme={null} field(points: NDArray[float64]) -> NDArray[float64] ``` Evaluates the implicit field at an array of points. Negative inside the body, positive outside. * `points`: shape `(N, 3)` or `(3,)`. A single `(3,)` point returns a scalar rather than a length-1 array. * **Raises** `ValueError` for the wrong shape, `ReferenceError` if the handle was already released. ```python theme={null} >>> body.field(np.zeros((3, 3))) array([-0.05, -0.05, -0.05]) ``` ### `gradient` ```python theme={null} gradient(points: NDArray[float64]) -> GradientResult ``` Evaluates the field value and its gradient at an array of points in one native call. * `points`: shape `(N, 3)` or `(3,)`. * **Returns** a `GradientResult(values, gradient)`. `gradient` has shape `(N, 3)` (or `(3,)` for a single point); its magnitude is 1 everywhere except the medial axis for a signed-distance field. * **Raises** `ValueError` for the wrong shape, `ReferenceError` if the handle was already released. ### `mesh` ```python theme={null} mesh(*, feature_size: float, adaptivity: float = 0.0) -> TriangleMesh ``` Generates a triangle mesh via Dual Contouring. * `feature_size`: sampling granularity in meters; smaller is finer. Must be positive. * `adaptivity`: decimation tolerance. `0` disables decimation; negative values are clamped to `0`. * **Returns** a `TriangleMesh` (always non-empty). * **Raises** `ValueError` if `feature_size` is not positive, `RuntimeError` if meshing produced zero geometry (empty body, or `feature_size` too coarse), `ReferenceError` if the handle was already released. > [!NOTE] > > Respects `KeyboardInterrupt` when called from the main thread: meshing runs on a worker thread while the caller polls for signals. ### `slice` ```python theme={null} slice(z: float, *, feature_size: float, method: str = "dc") -> list[NDArray[float64]] ``` Generates 2D contours at height `z` in the body's XY plane. * `feature_size`: sampling granularity in meters. Must be positive. * `method`: `"dc"` (Dual Contouring, default) or `"ms"` (Marching Squares). * **Returns** a list of `(K, 2)` arrays, one per contour. An empty list is a valid result (e.g. `z` outside the body) and does not raise. * **Raises** `ValueError` if `feature_size` is not positive or `method` is unrecognized, `ReferenceError` if the handle was already released. ### `voxelize` ```python theme={null} voxelize(*, spacing: float, dimensions: tuple[float, float, float] | None = None, frame: Frame | None = None) -> NDArray[bool_] ``` Samples inside/outside classification on a 3D regular grid, built purely on top of `field` (no additional engine call). * `spacing`: distance between sample points in meters along all three axes. Must be positive. * `dimensions`: physical `(width, height, depth)` of the sampling volume. Defaults to the body's bounding box projected onto the frame axes. * `frame`: orientation and origin of the sampling volume. Defaults to world-aligned axes with origin at `bounding_box.min`. * **Returns** a `(nx, ny, nz)` boolean array, `True` = inside. Streams one Z-slice at a time, so peak memory is `O(nx * ny)` rather than `O(nx * ny * nz)`. * **Raises** `ValueError` if `spacing` or a `dimensions` entry is not positive, `ReferenceError` if the handle was already released. ### `rasterize` ```python theme={null} rasterize(*, spacing: float, dimensions: tuple[float, float] | None = None, frame: Frame | None = None, isovalue: float = 0.0) -> NDArray[bool_] ``` Samples inside/outside classification on a 2D regular grid (`ntop_core_fast_inout_query`). * `spacing`: distance between sample points in meters. Must be positive. * `dimensions`: physical `(width, height)` of the sampling window. Defaults to the bounding box projected onto the frame axes. * `frame`: orientation and origin of the grid. Defaults to the world XY plane at the body's center z-height. * `isovalue`: offsets the body before sampling; positive expands, negative contracts. * **Returns** a `(height, width)` boolean array, row-major, origin bottom-left. * **Raises** `ValueError` if `spacing` or a `dimensions` entry is not positive, `ReferenceError` if the handle was already released. ### `closest_point` ```python theme={null} closest_point(points: NDArray[float64], tolerance: float) -> tuple[NDArray[float64], NDArray[uint32]] ``` Projects points onto the body surface via gradient-descent / bisection (max 500 iterations per point). * `points`: shape `(N, 3)`. * `tolerance`: convergence threshold in meters. Must be positive. * **Returns** `(projected, out_of_tolerance)`: best-effort projected positions for every input point, and the indices that did not converge within `tolerance` (empty if all converged). * **Raises** `ValueError` for the wrong shape or non-positive `tolerance`, `ReferenceError` if the handle was already released. ### `interval` ```python theme={null} interval(bbox: BoundingBox) -> tuple[float, float] ``` Computes conservative field bounds `(lower, upper)` over a bounding box region. Same-sign bounds mean the region is strictly inside or outside the body; mixed-sign bounds do not guarantee a zero crossing exists. * **Raises** `ReferenceError` if the handle was already released. ### `transform` ```python theme={null} transform(frame: Frame) -> ImplicitBody ``` Applies a rigid-body transform, returning a new `ImplicitBody`. This body is unchanged. Uses a passive-transform (pull-back) convention: `frame.origin` is the point in the old body's space that maps to `[0, 0, 0]` in the new space. To translate by `+d`, set `frame.origin = -d`. * **Raises** `ReferenceError` if the handle was already released. ### `scale` ```python theme={null} scale(factors: NDArray[float64], pivot: NDArray[float64]) -> ImplicitBody ``` Applies non-uniform scaling relative to a fixed `pivot` point, returning a new `ImplicitBody`. This body is unchanged. * `factors`, `pivot`: shape `(3,)`. * **Raises** `ValueError` if either argument is not shape `(3,)`, `ReferenceError` if the handle was already released. > [!NOTE] > > The field is only exactly preserved as a signed-distance field for uniform scale. Non-uniform scale approximates it by rescaling with `cbrt(sx * sy * sz)`. ### `save` ```python theme={null} save(path: str | os.PathLike) -> None ``` Saves this implicit body to a `.implicit` file. * **Raises** `OSError` if the file could not be written, `ReferenceError` if the handle was already released. ## Data types ### `BoundingBox` Axis-aligned bounding box, in meters. | Field | Type | Description | | - | - | - | | `min` | `NDArray[float64]`, shape `(3,)` | Minimum corner. | | `max` | `NDArray[float64]`, shape `(3,)` | Maximum corner. | | `center` | `NDArray[float64]`, shape `(3,)` | `(min + max) / 2` (property). | | `diagonal` | `NDArray[float64]`, shape `(3,)` | `max - min` (property). | ### `Frame` A local coordinate frame, used by `transform`, `voxelize`, and `rasterize`. | Field | Type | Description | | - | - | - | | `origin` | `NDArray[float64]`, shape `(3,)` | Translation, in meters. | | `x_axis` | `NDArray[float64]`, shape `(3,)` | Unit vector, orthogonal to `y_axis`. | | `y_axis` | `NDArray[float64]`, shape `(3,)` | Unit vector, orthogonal to `x_axis`. | | `z_axis` | `NDArray[float64]`, shape `(3,)` | `x_axis cross y_axis` (property, right-hand rule). | `x_axis` and `y_axis` are validated as unit vectors and as a mutually orthogonal pair at construction (`ValueError` if not). ### `GradientResult` Named tuple returned by `gradient`. | Field | Type | Description | | - | - | - | | `values` | `NDArray[float64]` | Field values, same as `field()`. | | `gradient` | `NDArray[float64]`, shape `(N, 3)` | Field gradient `(dx, dy, dz)` at each point. | ### `TriangleMesh` Returned by `mesh`. | Field | Type | Description | | - | - | - | | `vertices` | `NDArray[float64]`, shape `(N, 3)` | Vertex positions, in meters. | | `faces` | `NDArray[uint32]`, shape `(M, 3)` | Triangle indices, clockwise winding (`AB × AC` points outward). | Also unpacks positionally: `vertices, faces = body.mesh(feature_size=0.001)`. ## Exceptions All exceptions raised by `ntop.core` are standard Python builtins (`ValueError`, `FileNotFoundError`, `PermissionError`, `MemoryError`, `RuntimeError`, `ReferenceError`, `OSError`). See each method's **Raises** entry above for which one applies and when. # Quickstart Source: https://docs.ntop.com/Product-Documentation/ntop-core/python-package/quickstart This walkthrough runs every `ntop.core` operation in sequence against a single loaded body. See the [API Reference](/Product-Documentation/ntop-core/python-package/api-reference) for full parameter and return details on any call. ```python theme={null} import numpy as np from ntop import core from ntop.core import Frame body = core.load("assets/delta.implicit") print(body) ``` ## Bounding box `bounding_box` is a live property: it queries the engine on every access rather than returning a cached snapshot. It's also a convenient source of sizes to scale the rest of the walkthrough to this body's extent. ```python theme={null} bb = body.bounding_box print("min", bb.min) print("max", bb.max) print("center", bb.center) print("diagonal", bb.diagonal) diag = np.linalg.norm(bb.diagonal) feature_size = spacing = float(diag / 60) ``` ## Field and gradient ```python theme={null} pts = np.array([bb.center, bb.min, bb.max]) values = body.field(pts) # negative inside, positive outside g = body.gradient(pts) print("gradient norms", np.linalg.norm(g.gradient, axis=1)) # ≈ 1 away from the medial axis ``` ## Mesh, voxelize, slice, rasterize ```python theme={null} vertices, faces = body.mesh(feature_size=feature_size) grid = body.voxelize(spacing=spacing / 5) print(grid.shape, grid.dtype, "inside voxels:", grid.sum()) contours = body.slice(float(bb.center[2]), feature_size=feature_size) print(f"{len(contours)} contour(s) at z={bb.center[2]:.3f}") mask = body.rasterize(spacing=spacing / 10) print(f"rasterize: {mask.shape}, {mask.sum()} inside pixels") ``` ## Transform and scale Both return a **new** body; the original is untouched. ```python theme={null} shift = np.array([2.0, 0.0, 0.0]) frame = Frame(origin=-shift, x_axis=np.array([1.0, 0.0, 0.0]), y_axis=np.array([0.0, 1.0, 0.0])) moved = body.transform(frame) scaled = body.scale(np.array([2.0, 2.0, 2.0]), bb.center) ``` ## Closest point and interval ```python theme={null} rng = np.random.default_rng(0) query = rng.uniform(bb.min, bb.max, (200, 3)) projected, out_of_tol = body.closest_point(query, tolerance=1e-4) print(f"{len(out_of_tol)} / {len(query)} points did not converge") lo, hi = body.interval(bb) print(f"field bounds over the full bounding box: [{lo:.3f}, {hi:.3f}]") ``` ## Save and reload ```python theme={null} import pathlib import tempfile tmp_path = pathlib.Path(tempfile.gettempdir()) / "delta_copy.implicit" body.save(tmp_path) reloaded = core.load(tmp_path) print("bbox matches:", np.allclose(reloaded.bounding_box.diagonal, bb.diagonal)) tmp_path.unlink() ``` ## Context manager Use `with` for deterministic handle release instead of waiting on the garbage collector: ```python theme={null} with core.load("assets/delta.implicit") as b: print(b.field(bb.center)) # handle released automatically here ``` ## Next steps * The [API Reference](/Product-Documentation/ntop-core/python-package/api-reference) documents every method's parameters, return shapes, and exceptions in full, including concrete examples of each error. # nTop Core Source: https://docs.ntop.com/Product-Documentation/ntop-core/readme ![nTop Logo](https://mintcdn.com/ntopology/Mvy4yqZH1D9LPlvV/images/ntop-core/logo.jpg?fit=max\&auto=format\&n=Mvy4yqZH1D9LPlvV\&q=85\&s=243fd873b604b086e0e6050cc631fba5) This document describes a library of functions called nTop Core. You can use these functions to derive information from implicit bodies exported from nTop, which can then be used in your own applications. In this way, you achieve interoperability between nTop and your application. ## Implicit Bodies The functions in nTop Core let you work with **implicit bodies** created in nTop. An implicit body is defined by a function *F* called its **field**. Given an implicit body **S**, and a 3D point **P**, the value *F*(**P**) provides a rough measure of the distance from **P** to the boundary of **S**, with *F*(**P**) \< 0 when **P** is inside the body, and *F*(**P**) > 0 for points outside. ![Basic Example Diagram](https://mintcdn.com/ntopology/Mvy4yqZH1D9LPlvV/images/ntop-core/implicit_regions.png?fit=max\&auto=format\&n=Mvy4yqZH1D9LPlvV\&q=85\&s=baf3465382dec7384bb8f03645f689fb) One of the functions in nTop Core computes *F*(**P**) at any given point **P**. By calling this function, you can decide which points are inside the body and which are outside, allowing you to implement a variety of applications. For example, you can compute the volume of the body, tessellate it, or slice it for additive manufacturing. The library operates in units of **meters** so when making queries against a `.implicit` be sure to convert from your native units. ## Why a Library? A more traditional approach to data interoperability is to have nTop export its models in some standard format that other applications can read. Typical export formats are polygonal meshes, voxel structures, boundary representations (b-reps), and planar slices. nTop has numerous data export functions to support this approach, but it does not work well for certain types of models. Some specific problems are: * Meshes, voxels, and slices are approximations with a "baked-in" error. * Meshes are extremely large, especially if they are accurate. * Exported meshes and b-reps are "dumb" and difficult to edit. We created nTop Core to address these problems: it allows you to work with highly accurate representations that occupy very little space. ## The Basic Idea The basic flow is shown in the following diagram: ![Basic Flow Diagram](https://mintcdn.com/ntopology/Mvy4yqZH1D9LPlvV/images/ntop-core/flow.png?fit=max\&auto=format\&n=Mvy4yqZH1D9LPlvV\&q=85\&s=b06805e58892f99bdf89bb09cf610c64) The important steps are: 1. The nTop user exports a `.implicit` file containing a representation of an implicit body. 2. The functions in nTop Core interact with the `.implicit` file. 3. Your code calls functions in nTop Core to get information about the implicit body. Exporting is explained in more detail below; calling nTop Core functions is covered in the [C++ API](/Product-Documentation/ntop-core/cpp-api) and [Python Package](/Product-Documentation/ntop-core/python-package) sections. ## Exporting a `.implicit` file There is a block in nTop called "Export Implicit Body" that allows you to export a representation of an implicit body from within an nTop notebook. However, for the purpose of developing your application, it is not absolutely necessary to go through this export step, as we provide some simple `.implicit` files that you can use for initial testing. ## Next steps * See the [C++ API](/Product-Documentation/ntop-core/cpp-api) for calling nTop Core's native functions directly, and its dependencies. * See the [Python Package](/Product-Documentation/ntop-core/python-package) for the Pythonic, NumPy-native wrapper. # Concepts Source: https://docs.ntop.com/Product-Documentation/ntop/_concept These articles give you a light overview of the technical concepts you encounter in nTop. ### > **[Implicits and Other Models](./_concept/modeling)** # Implicits and Other Models Source: https://docs.ntop.com/Product-Documentation/ntop/_concept/modeling \> Purpose: Gain an initial understanding of Implicit Modeling and how it compares to Boundary Representations and Meshes. ## Introduction CAD and CAE software uses a variety of representations of shape to define and document real-world parts. If you have ever used a 3D modeling program, you've most likely worked with meshes, boundary representations (B-rep), or both depending on the task at hand. Although these models have their strong points, their weaknesses appear as geometry becomes more complex. nTop uses implicit modeling technology. This allows designers to focus on engineering work that matters, and spend less time with non-value-added tasks. ![Models](https://storage.googleapis.com/files-learn/static/images/concepts/compare.jpg)   ## Precise B-reps B-reps represent solids using a patchwork of faces, joined together by edges, separating a homogeneous inside from the outside. Each face can be made of geometry appropriate for its contribution to the boundary of the part, such as a plane, cylinder, or NURB surface. Common B-rep formats include STEP or native formats from well-known CAD systems such as Catia, NX, Creo, Solidworks, Rhino, and others. * One of the most popular solid modeling approaches. * Works well for low-to-medium complexity. * Struggles with highly detailed designs, organic shapes, scan data, lattice, porous structures, spatially varying materials, and additively manufactured parts. * Impractical to work on when they have thousands of faces and impossible with tens of thousands of faces. * Unreliable in some situations: booleans with tangent faces, shells with thick walls, overlapping filets.   ## Meshes Mesh models are simplified B-reps where all faces (typically called "facets") are triangles. The more curved a region of the model is, the finer the triangles must be to represent it. The data structures tend to be simpler, in part because the triangle describes each facet's planar geometry and boundary. Common mesh formats include STL, OBJ, 3MF, and VRML. * For manufacturing, meshes tend to become impractical when they have face counts in the tens of millions. * Converting a B-rep to a mesh is typically straightforward, but converting a mesh to B-rep involves a few more steps. In nTop, we create B-reps from meshes by converting the triangular mesh into a quad mesh first and then turn it into surfaces used in a B-rep. This enables users to bring their nTop designs into CAD programs that use B-reps.   ## Implicit Geometry nTop uses a new kind of modeling technology, called implicit modeling, rather than the boundary representation (b-rep) approach used in traditional CAD systems: objects are represented by equations, not by gluing together collections of faces. The pictures below show the b-rep and implicit methods of representing a simple 2D rectangle. As you can see, the two approaches are completely different. ![Models](https://storage.googleapis.com/files-learn/static/images/concepts/brepimp.png) By using the implicit approach, we avoid the fragile and expensive computations that are the foundation of b-rep systems such as Catia, NX, Creo, SolidWorks, Rhino, and others. Implicit models offer: * Lightweight files due to only a minimal amount of information needed. * Unbreakable modeling operations (offsetting, rounding, drafting, boolean operations). With Implicit models, geometry is defined through expressions rather than features like vertices, edges, and faces like meshes and B-rep models. This means that implicits are significantly lighter to compute. By discretizing data from implicit models directly to a manufacturing-ready output, the discretization occurs at the very end of the process rather than at the beginning or throughout. ![Models](https://storage.googleapis.com/files-learn/static/images/concepts/comparesphere.png) \> A mesh representation compared to an implicit representation of a sphere. The mesh face count of the sphere is purposely low to exaggerate the discretization. If we increased the mesh face count to more accurately represent the sphere, the file size would also increase.   ## [Download our Whitepaper](https://ntopology.com/resources/whitepaper-implicit-modeling-technology/) to learn more about Implicit Modeling # Getting Started Source: https://docs.ntop.com/Product-Documentation/ntop/_getting_started Review the following articles to learn how to install and update nTop and discover what support resources are available. ### > **[System Requirements](./_getting_started/_system_requirements)** > **[Licensing](./_getting_started/licensing)** > **[Login Screen](./_getting_started/login-screen)** > **[Upgrading](./_getting_started/upgrading)** > **[Support System](./_getting_started/support-system)** # System Requirements Source: https://docs.ntop.com/Product-Documentation/ntop/_getting_started/_system_requirements | | Minimum | Recommended | High-Performance | | - | - | - | - | | System Type | Laptop or Desktop Workstation | Desktop Workstation | Desktop Workstation | | CPU | Intel Core i7 or AMD Ryzen 7 (8+ cores, AVX compatible) | Intel Core i9 or AMD Ryzen 9 (12+ cores, high clock speed) | Intel Core i9 or AMD Ryzen 9 (16+ cores, latest gen) | | Memory (RAM) | 64 GB | 128 GB | 256 GB or more | | Storage | 500 GB SSD (20% free space) | 1 TB NVMe M.2 SSD (20% free space) | 2 TB NVMe M.2 SSD (20% free space) | | Graphics Card | NVIDIA GPU (Volta architecture or newer, 2018+), 8 GB VRAM min | NVIDIA RTX 4070 or equivalent, 12 GB VRAM | Latest NVIDIA RTX (e.g. 4090, 5000 Ada), 24 GB VRAM | | Drivers | Latest NVIDIA drivers | Latest NVIDIA drivers | Latest NVIDIA drivers | ## Performance Guidelines * **CPU Performance:** nTop performance is most significantly impacted by CPU core count and clock speed. High-end Intel or AMD processors with multiple cores will provide the best computational performance for meshing and optimization operations. Dual Xeon configurations are not recommended, as performance consequences have been observed with this setup. * **Memory Requirements:** RAM is critical when working with large models, particularly for meshing and optimization applications. While 64 GB is the minimum, larger models (5M+ elements) can consume 128 GB or more during processing. Note that high-core-count CPUs typically require more RAM to perform optimally. * **Graphics Performance:** The GPU affects rendering speed, real-time visualization, and is required for GPU-accelerated features such as Flow Analysis (LBM solver). Larger models require more VRAM and a more powerful GPU to maintain responsive real-time rendering and smooth user interaction. **Flow Analysis GPU Memory Estimation** Ten million cells require approximately 1 GB of dedicated GPU memory. Use the following formula to estimate the GPU memory (in GB) needed for a given model: ``` ( span.x / cell size × span.y / cell size × span.z / cell size ) / 10,000,000 ``` Where `span.x`, `span.y`, and `span.z` are the bounding box dimensions of the fluid domain and `cell size` is the LBM cell size — all in the same units. * **Storage Considerations:** * **File Size:** Meshing and optimization applications can generate files exceeding several gigabytes. Ensure adequate free space for both your project files and temporary system files. * **Speed:** Fast NVMe M.2 SSDs significantly improve file loading times and overall system responsiveness. ## System Compatibility Notes **Supported Configurations** * **Operating System:** Windows only (nTop desktop application). [nTop Automate is also available for Linux](https://support.ntop.com/hc/en-us/articles/16750988785299-nTop-Automate-for-Linux-Update). * **Virtual Machines:** Supported if GPU passthrough is enabled and minimum GPU requirements are met * **CPU Architecture:** x86-64 processors only **Unsupported Configurations** * **macOS or Linux:** The nTop desktop application is not compatible with macOS or Linux, including virtualization via Parallels or Wine * **ARM CPUs:** Not supported (including Apple Silicon Macs) * **AMD GPUs:** nTop only officially supports NVIDIA GPUs * **Integrated Graphics:** Intel UHD Graphics and similar integrated solutions are not supported * **Older NVIDIA GPUs:** Pre-Volta architecture cards (before 2017) are not supported * **Multiple GPUs:** nTop utilizes only one GPU; multiple GPU configurations offer no performance benefit **Hardware Requirements** * **GPU:** NVIDIA GPU with Volta architecture or newer (2018+) required with current drivers * **CPU Age:** Processors must be newer than 10 years old to ensure AVX compatibility * **System Stability:** Minimum specifications are required for functionality and stability ## Important Notes * nTop cannot provide technical assistance for systems that don't meet minimum requirements * For optimal performance, consider specifications above minimum requirements * Regular driver updates are essential for system stability and performance > **[GPU Acceleration](./_system_requirements/gpu_acceleration)** # GPU Acceleration Source: https://docs.ntop.com/Product-Documentation/ntop/_getting_started/_system_requirements/gpu_acceleration GPU Acceleration enables a significant increase in computation speed for most implicit bodies. For those Implicit Bodies that utilize GPU acceleration, interactive manipulation of many of their scalar inputs is possible (by dragging the arrow icon next to an input). GPU Acceleration is also required for **Flow Analysis**, which uses an LBM (Lattice Boltzmann Method) solver that runs entirely on the GPU. See the [System Requirements](/_getting_started/_system_requirements) page for GPU memory estimation guidance when running Flow Analysis. Since this implementation is in continuous evolution, there will be scenarios where rendering will fall back to the CPU rather than utilizing the GPU. Most notably, using Voxel Grids or Point Maps to construct Implicit Bodies will result in the computation falling back to the CPU. We are working on expanding GPU support for more blocks in the future. ## System Requirements Please refer to the [System Requirements](/_getting_started/_system_requirements) for recommendations for graphics cards. GPU Acceleration has been optimized for NVIDIA graphics cards with Volta architecture or newer (2018+). Regardless of hardware configuration, the setting can be changed at any time in the settings dialog. To toggle GPU Acceleration on or off, go to the settings window accessible from the file drop down menu, and toggle the checkbox next to "Enable GPU Acceleration" under the general tab. ## Interactive Updates * When hovering over most scalar inputs, an arrow icon appears to the left of the input field. Upon clicking and dragging this icon left and right, the value of that input updates. * When the arrow is blue, it indicates that the corresponding model will have a live visual update as you interactively change the value. ![Gray](https://storage.googleapis.com/files-learn/static/images/getting-started/gpu1.png) \> When the arrow is gray, it indicates that the live update is unavailable. ![Blue](https://storage.googleapis.com/files-learn/static/images/getting-started/gpu2.png) \> The speed of the increments at which the value changes can be adjusted by left clicking on the icon to access a speed panel, where different speeds are shown. ## Demo Clips ![Demo](https://storage.googleapis.com/files-learn/static/images/getting-started/demo.gif) ## CPU vs GPU computational speed comparison \> GPU ![GPU](https://storage.googleapis.com/files-learn/static/images/getting-started/GPU.gif) \> CPU ![CPU](https://storage.googleapis.com/files-learn/static/images/getting-started/CPU.gif) # Licensing Source: https://docs.ntop.com/Product-Documentation/ntop/_getting_started/licensing | License Type | Description | | - | - | | Cloud Licensing | Cloud licensing offers optimal flexibility and security. | | Cloud Floating Licensing | Our cloud licensing system supports floating licenses for teams that want to share licenses between 2+ users, which is managed through our Organization Administrator function. | | [Organization Administrator (Org Admin) Licensing](https://support.ntopology.com/hc/en-us/articles/360048735514) | A designated administrator can manage the organization's allotment of licenses. | | Floating Licensing (on-prem) | FlexNet Publisher integration provides on-prem floating licenses for qualified enterprise customers. | | Local Licensing | Local licensing is available to qualified enterprise customers. | * nTop issues license on a per-user subscription basis. * nTop licenses require named users with unique email addresses. * Cloud licenses may be used concurrently by a single user on as many as three devices. * nTop delivers licenses, downloads, and updates via the [nTop User Dashboard](https://app.ntopology.com). * nTop is a desktop application and stores project data locally. However, it connects to cloud services for software delivery, software updates, license authentication, account management, and analytics. * Some users may require IT assistance to install the application and [configure network settings](https://support.ntopology.com/hc/en-us/articles/360041579853). * Cloud licenses may be used for ten days without an active connection to the internet. * The licensing term starts when nTop creates the account. The license expiry date is shown in the [nTop User Dashboard](https://app.ntopology.com). * Org Admin accounts do not count towards the allotment of user licenses unless the Org Admin requires nTop. # Login Screen Source: https://docs.ntop.com/Product-Documentation/ntop/_getting_started/login-screen ![Login](https://storage.googleapis.com/files-learn/static/images/getting-started/loginscreen.jpg) Once nTop successfully installs, upon opening, the Login Screen appears. It prompts you to log in with the email address and password associated with your account. * **Email Address:** Email address used to create your account. * **Password:** The password to your account. * **Forgot Password:** If you have forgotten your password, press this button. Follow the steps in the email sent to you to reset your password. * **Use Local License:** If your organization uses local licenses, use this button instead of logging in. * **Log In:** Press this when you are ready to log in. * **Configure Proxy Settings:** If your company uses a proxy server, press this button to set it up. Read more about this option [here.](https://support.ntopology.com/hc/en-us/articles/360048560934) * **Cloud Licensing Whitelisting Guide:** Follow this [link](https://support.ntopology.com/hc/en-us/articles/360041579853) if you are having issues connecting to the licensing server. # Support System Source: https://docs.ntop.com/Product-Documentation/ntop/_getting_started/support-system We are here to support your journey with nTop through both local and web-based content. Read through the options below to see what type of support is available. * [**Help Center and Knowledge Base**](https://support.ntopology.com/): Get answers to any questions about accounts, licensing, troubleshooting, and more. Learn about a wide range of topics in the Knowledge Base. Can't find what you are looking for or need help? Submit a ticket to the Product Support team through the Help Center, and they will be happy to help you. * [**Learning Center**](https://learn.ntopology.com): Visit the learning center to go through guided courses, level up your skills, and book live trainings. * [**User Dashboard**](https://app.ntopology.com): Download the latest version of nTop, preview Release Notes, manage your account, and manage Organizational Administration features. On your user dashboard, you can find links to nTopLives, tutorials, and blog posts. * [**Youtube**](https://www.youtube.com/c/nTopology): Visit our Youtube channel to watch video tutorials. * [**nTop.com**](https://ntopology.com/upcoming-and-resources/): Visit our website to watch nTopLives, read blog posts, and see new case studies. * **Welcome Screen**: Opens up when you first launch nTop. It offers an assortment of local examples and links to support resources. * **Learn More**: Open up a block's Info Panel and select the Learn More button to access the block's documentation and example files. You can also access this information by going to the Block Documentation tab in the sidebar. ![Learn More](https://storage.googleapis.com/files-learn/static/images/getting-started/learn_more.jpg) Need more help? If you need more assistance, don't hesitate to get in touch with the [Product Support team](https://support.ntopology.com/hc/en-us/requests/new). # Upgrading Source: https://docs.ntop.com/Product-Documentation/ntop/_getting_started/upgrading nTop releases an update approximately every two weeks. View the Release Notes to see what changes are coming in each release. There are two methods to install new updates: * Open nTop and select the "Software Update" button in the upper-right hand corner. When there is a new update, the icon turns orange, and "Update Available" appears. * Go to the [nTop User Dashboard](app.ntopology.com) and log in. Select the download button on the main screen. ![Download](https://storage.googleapis.com/files-learn/static/images/getting-started/download_ntop.jpg) # User Interface Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface Learn all about the user interface. ### > **[Home](./_user_interface/home_page)** > **[Main Window](./_user_interface/_main_window)** > **[Settings](./_user_interface/_settings)** > **[Section Cut](./_user_interface/sectioncut)** > **[Field Viewer](./_user_interface/fieldviewer)** > **[Surface Analysis](./_user_interface/surfaceanalysis)** > **[Measure Tool](./_user_interface/measure_tool)** > **[Hot Keys](./_user_interface/hotkeys)** > **[Mouse Controls](./_user_interface/mouse)** # Main Window Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_main_window After you close the Home page, the main nTop window opens up. ![Main](https://storage.googleapis.com/files-learn/static/images/user-interface/mainwindow.jpg) The overhead [**Menu Bar**](/_user_interface/_main_window/menubar) contains the core program, view, and window controls, along with updates, help, and account settings. The [**Ribbon**](/_user_interface/_main_window/ribbon) contains all blocks organized into workflow themes accessed through dropdown menus. The [**View Cube**](/_user_interface/_main_window/viewcube) is located at the top right of the screen and is used to change the orientation of the Viewport. The **Notebook** is the designated workspace for adding, linking, and organizing blocks to form larger workflows. The **Viewport** is your workspace to interact with and visualize bodies and other geometry types, simulation results, field data, and slice data. The [**Status Bar**](/_user_interface/_main_window/statusbar), located at the bottom of the window, houses controls for the [3D resolution](/_user_interface/_main_window/resolution), block progress, and the [log panel](/_user_interface/_main_window/logpanel). The main window is available in the standard Dark Theme or the Light Theme (Beta). * Edit the [theme settings](/_user_interface/_settings.html#Display) in the View dropdown in the Menu Bar or go to File > Settings > Display. > **[Menu bar](./_main_window/menubar)** > **[Ribbon](./_main_window/ribbon)** > **[View Cube](./_main_window/viewcube)** > **[Status Bar](./_main_window/statusbar)** > **[Resolution](./_main_window/resolution)** > **[Log Panel](./_main_window/logpanel)** # Log Panel Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_main_window/logpanel The Log Panel records all of the actions occurring in nTop. It reports using the date and time in the left, the type in the middle, and a description in the right. The Log Panel is a good place to look to get more information on block progress, interactions, and errors. To open the Log Panel, navigate to the bottom right of the Main Window and select the up arrow (hovering over this arrow causes a tooltip saying Log Panel to appear). ![Open](https://storage.googleapis.com/files-learn/static/images/user-interface/openlog.png) ![Log](https://storage.googleapis.com/files-learn/static/images/user-interface/logpanel.png) The Log Panel opens up from the bottom of the screen. Use the arrow on the bottom right to close the Log Panel (the same arrow that opened it). ![Log](https://storage.googleapis.com/files-learn/static/images/user-interface/logpanel1.png) * The Log Panel starts each line with the date and the time. * The middle column depicts the type of the log. It will either have an 'I' or an 'E'. * I: Info * E: Error * The right column describes the interaction. Some of these can include: * Opening a file * Starting a block * A block completing and how long it took to complete * Description of the error the block encountered * The newest logs appear at the bottom. * Use the scroll wheel or the up or down arrow keys to navigate through older logs. * Use the Clear button to empty the logs. * Use the Last button to navigate to the most recent log. * Hover your mouse over the top edge of the Log Panel and click and drag to increase or decrease the size of the Log Panel. ![Log](https://storage.googleapis.com/files-learn/static/images/user-interface/logpanel2.png) * Double click on any log to expand it in a new window. * Navigate through each log by using the Prev, Next, or Last buttons. * Go back to the main log window by using the grey arrow button on the left. # Menu bar Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_main_window/menubar ![Left](https://storage.googleapis.com/files-learn/static/images/user-interface/menubar1.jpg) ![Right](https://storage.googleapis.com/files-learn/static/images/user-interface/menubar2.jpg)   ### File **New** (Ctrl+N): Creates a new nTop file in the current instance of nTop. If you have unsaved work, a prompt appears asking if you want to save or delete the work. **Open** (Ctrl+O): Opens an existing nTop file. If you have unsaved work, a prompt appears asking if you want to save or delete the work. **Open Recent** : Allows you to select a file from the ten most recent files you've opened. **Save** (Ctrl+S): Saves your nTop file. **Save As** (Ctrl+Shift+S): Allows you to save a copy of the file in a new location or with a different name. **Import** (Ctrl+I): Brings an object, part, or data into your nTop file. Click [here](/file_types/import_export) to see what files can import into nTop. **My Blocks Folder**: Opens File Explorer to show your My Blocks Folder to manage your custom blocks. **Settings**: Opens the [Settings menu](/_user_interface/_settings). **Home**: Opens up the [Home screen](/_user_interface/home_page). **Exit** (Ctrl+Q): Closes nTop.   ### Edit **Undo** (Ctrl+Z): Allows you to cancel or reverse the last command. **Redo** (Ctrl+Shift+Z): Allows you to cancel or reverse an Undo. **Cut** (Ctrl+X): Deletes the original instance and creates a Copy (to be pasted elsewhere). **Copy** (Ctrl+C): Save the instance of that Block (to be pasted elsewhere). You can copy and paste blocks between Notebooks. **Paste** (Ctrl+V): Creates the Copied or Cut block in a specified location. References are not copied. You can copy and paste blocks between Notebooks. **Paste with References** (Ctrl+Alt+V): Creates the Copied or Cut block in a specified location with all its references. You can copy and paste blocks between Notebooks. **Select All Visible** (Ctrl+A): Highlights and selects all blocks that have their visibility toggled on.   ### View **Camera Settings**: Choose between an Orthographic view or a Perspective view. There is no Ruler available in the Perspective view. **Named Views**: Saves the orientation and zoom distance of your viewport. * Navigate to the orientation you want and select 'New Named View' to save it. * Double click on the Named View to rename it. * Right click on the Named View to rename, update, or delete it. **Capture Image**: Saves an image of the Viewport in whichever resolution the window is set to. You can toggle the background, selection highlights, and gimbals. * Select Export to save the image * Section cut bodies do not work with Capture Image. **Zoom to Selected** (Z): The viewport zooms into the object of the selected block so that it fills the viewport. A block must be selected in the Notebook for this to work. **Precise Render** (Ctrl+H): Creates an image at the highest resolution render settings available in nTop. * Select an Implicit Body block and press Ctrl+H (or this button in the view settings) to create a Precise Render. * Precise Render only works with Implicit Bodies. No result appears for other model formats. * Section cut bodies do not work with Precise Render. * You can read more about Precise Render [here](https://support.ntopology.com/hc/articles/8288161848723). **Section Cut** (X): Cuts an object with a Plane to allow you to see inside of the object. Read more [here](/_user_interface/sectioncut). **Field Viewer** (V): Displays the field of a selected block at a specified orientation. Read more [here](/_user_interface/fieldviewer). **Display grid** (Alt+G): Toggles the grid on or off. Edit the size in the [Settings](/_user_interface/_settings). This setting will stay for every nTop instance until you decide to change it. The green line represents the Y-axis and the red line represents the X-axis. **Display ruler** (Alt+R): Toggles the ruler on or off. Read more [here](/_user_interface/_settings/ruler). **Display settings**: Opens up the larger display settings options. Read more [here](/_user_interface/_settings)   ### Window **Ribbon** (Ctrl+D): Toggle the ribbon visibility on or off. **Imported Blocks**: Navigate to the Imported Blocks folder in the Notebook.   ### Software updates This button highlights green when there is a new update for nTop and allows you to read the most recent Release Notes.   ### Help **About**: Tells you which version of nTop you have installed, what email the license is under, and when it expires. Links to the End-User License Agreement. **Documentation**: Opens up the nTop documentation. **What's New**: View the release notes for the installed version of nTop. **Support**: Opens up the nTop Help Center.   ### Account details Shows the name and email address of the account that is logged into nTop. **Account Settings**: Links you to your [User Dashboard settings](https://app.ntopology.com/settings). **Logout**: Logs the current user out. # Resolution Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_main_window/resolution Resolution is toggled at the bottom right of the Main Window. There are five resolutions available: * Low * Medium * High * Highest * Adaptive If the resolution is increased and the file is saved, all new instances of nTop will inherit the previously saved resolution. As the resolution increases, the render time will also increase. The render time difference per resolution tier is entirely based on your hardware and will vary from machine to machine. For more information regarding system requirements, please see the [System Requirements](/_getting_started/_system_requirements). * It is important to note that the display setting does not affect the output quality. For example, a complex model rendered at Low resolution may have visual artifacts, but still produces high quality geometry when converted to a mesh. * Resolution settings don't affect the size of the file, only the rendering time. * As a best practice, we suggest working in Low or Medium resolution if you are performing computationally expensive operations. If visual verification is crucial to your design, switching to a higher quality render mode is recommended. * If you need a higher resolution view than Highest, use Precise Render (View > Precise Render or Ctrl+H). This creates a snapshot of your object in the highest render available in nTop. You can read more about Precise Render [here](https://support.ntopology.com/hc/articles/8288161848723). * Adaptive resolution increases rendering quality for complex implicit models by dynamically adjusting the local implicit resolution based on your view. ![Resolution](https://storage.googleapis.com/files-learn/static/images/user-interface/resolution.jpg) # Ribbon Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_main_window/ribbon ![Ribbon](https://storage.googleapis.com/files-learn/static/images/user-interface/ribbon.jpg) The Ribbon contains blocks sorted into their most common workflows. * Choose a category name to open that tab. * Select a block icon to add that block to the Notebook. * Hover over any block icon to read the block tooltip. The block tooltip tells you the block name, its description, and its block type. * Click on the section name under the block icons to see the full range of blocks in that category. * In addition to the standard blocks, the Ribbon also houses the optional Toolkits (these are downloaded when you install or update nTop). These tabs appear in the Ribbon if downloaded. * A Beta tab appears in the Ribbon when Beta blocks are toggled on. You can read more about beta blocks [here](https://support.ntopology.com/hc/en-us/articles/360062442113). * All blocks found in the Ribbon can be accessed through the searchbar in the Notebook. * You can edit the tab order and visibility using the [Ribbon Settings](/_user_interface/_settings.html#Ribbon). # Status Bar Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_main_window/statusbar The Status Bar indicates how much time is remaining, represented as a percentage, to complete a process and render the model to the viewport. The computation and the render time will appear as two separate progress bars. ![Status](https://storage.googleapis.com/files-learn/static/images/user-interface/progress.jpg) To cancel an operation, select the 'X' next to the status bar. This will immediately cancel the computation and will not display any results from the process. To return to the previous state, select Edit > Undo, or use the hotkey *CTRL+Z.* # View Cube Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_main_window/viewcube ![viewcube](https://storage.googleapis.com/files-learn/static/images/user-interface/viewcube.png) The View Cube is located at the top right of the screen and is used to change the orientation of the Viewport. To use the View Cube: * Select a face, edge, or corner of the View Cube to orient the viewport. * When you hover over the View Cube, rotational arrows and a down arrow appear. * Select the rotational arrows to rotate the viewport. * Select the down arrow to open the View Cube settings The following settings are available in the View Cube menu (the downward arrow): * **View Settings**: * Perspective (no Ruler available in this view) * Orthographic * **Rotation Settings**: * Turntable * Tumbler * **Display Grid**: Read more about this setting [here](/_user_interface/_main_window/menubar.html#View). * **Display Ruler**: Read more about this setting [here](/_user_interface/_settings/ruler). * **Named Views**: Read more about this setting [here](/_user_interface/_main_window/menubar.html#View). * **Capture Image**: Read more about this setting [here](/_user_interface/_main_window/menubar.html#View). # Settings Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_settings Settings are found in File > Settings. After modifying any settings select OK to commit these changes. These changes will be saved locally and will persist for every instance of nTop. Settings can be changed at anytime.     ## General **Skip home page on startup**: Toggle the Home page appearing when you open a new instance of nTop. **Show announcements**: Show new announcements when creating or opening a file. Announcements are shown once, but can be re-enabled by toggling this setting.   ### Blocks **Automatic block visibility**: When a block runs successfully, all nested blocks will have their visibility set to off. **Show beta blocks**: Toggles the visibility of beta blocks. Beta blocks are experimental features that are subject to change. You can read more about beta blocks [here](https://support.ntopology.com/hc/en-us/articles/360062442113). **Show deprecated blocks**: Toggles the visibility of deprecated blocks. Deprecated blocks are featured replaced by new functionality. You can read more about deprecated blocks [here](https://support.ntopology.com/hc/en-us/articles/4404148899219). **My blocks folder**: The location for your imported blocks (custom blocks). Blocks are automatically imported from the folder. The default folder location is C:\Users\username\AppData\Roaming\nTopology\Myblocks. You can change this folder location.   ### Scene **Enable GPU acceleration**: Toggle GPU acceleration. Read more about GPU acceleration [here](/_getting_started/_system_requirements/gpu_acceleration). **Camera control mapping**: Choose from a selection of different navigation options. The options provided for different CAD environments map the basic zoom, pan, and rotate functionalities to corresponding keys on the selected CAD tool. * The options are: * Solidworks * NX * CATIA * Creo * nTop (default) **Selection radius (pixels)**: Selection tolerance in pixels. Selection Radius affects the selection sensitivity.   ## Ribbon * Select which tabs are visible (by using the toggles) and the order in which they appear (by using the arrows on the right). * You can always reset to the original display by selecting the **Reset Ribbon** button at the bottom of the Ribbon settings window. Read more about the Ribbon [here](/_user_interface/_main_window/ribbon).   ## Display **Theme:** Choose between the standard Dark theme or the Light theme (Beta). You need to restart nTop for the change to occur. **Viewport background theme:** Changes the background color using the themes specified.   ### Scene Lighting **Enable Ambient Occlusion:** Toggle on to improve visualization by conveying the depth of geometry. Read more about the benefits of Ambient Occlusion [here](/_user_interface/_settings/ambient).   ### Glyph Size **Boundary Conditions:** Choose the size of glyphs for visualizing applied boundary conditions.   ### Grid **Display grid:** Toggles the visibility of the Grid rendered on the XY plane in the main scene. * **Size:** Size of the grid. * **Primary spacing:** Spacing between major subdivisions in the grid. * **Subdivisions:** Number of minor subdivisions between major subdivisions in the grid.   ### Ruler **Display ruler:** Toggles visibility of the Ruler in the main scene. * **Orientation:** Choose the orientation of the Ruler, either the Top or Bottom of the screen. * **Alignment:** Choose the Ruler 0 alignment. Available options: Left, Right, Center. Read more about using the Ruler [here](/_user_interface/_settings/ruler).   ## Units Choose your base units. **Unit system:** Metric, US Customary, Custom. **Length:** mm, cm, m, in, ft. **Time:** ms, s, min, hr. **Mass:** g, kg, tonne, oz, lbm, ton. **Temperature:** C, F, K. **Angle:** deg, rad. Choose your compound units. **Force:** N, kN, lbf. **Pressure:** Pa, kPa, MPa, GPa, psi, ksi. **Frequency:** Hz, rad/ms, rad/s, rad/min, rad/hr, deg/ms, deg/s, deg/min, deg/hr. **Heat Flux:** W/mm^2, W/cm^2, W/m^2, kW/mm^2, kW/cm^2, kW/m^2, MW/mm^2, MW/cm^2, MW/m^2, Btu/in^2\*ms, Btu/in^2\*s, Btu/in^2\*min, Btu/in^2\*hr, Btu/ft^2\*ms,Btu/ft^2\*s, Btu/ft^2\*min, Btu/ft^2\*hr.   ## Data **Autosave:** Toggles automatic saving of the file at periodic intervals. **Save time interval (minutes):** Perform an automatic save at every time interval. Available intervals: 5, 10, 30, and 60 minutes. **Autosave folder:** Autosaves will be stored in this folder. **Send usage data**: When checked, nTop will receive anonymous statistics regarding feature usage. This anonymous data is used to help improve nTop for your benefit. To learn more about the specifics, read our End User License Agreement in Help > About > EULA. **Run Command:** Read more about Run Command Permission Settings [here](/_user_interface/_settings/run_command). > **[Ruler](./_settings/ruler)** > **[Run Command Permission Settings](./_settings/run_command)** > **[Ambient Occlusion](./_settings/ambient)** # Ambient Occlusion Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_settings/ambient Ambient Occlusion is an advanced shading technique that imparts depth and realism to the visualization by darkening areas of the visible geometry that would receive less ambient light from the environment, such as holes, creases, or inside corners of models. Ambient Occlusion makes it easier to perceive shapes, especially for complex geometries such as intricate lattices. In nTop, Ambient Occlusion is enabled by default. Disabling this feature can improve graphics performance (framerate) on systems with low-end graphics cards, especially when using very high-resolution screens, at the cost of reduced visual fidelity. In the context of nTop, this feature provides a sense of depth to complex geometries, particularly lattices and intricate structures, and assists in feature discernibility. Ambient Occlusion is ON by default in nTop since it supports core workflows, however it can always be turned off using a toggle in the Settings (Display>Scene Lighting). The following images compare the graphics visualization with and without ambient occlusion. ![Compare](https://storage.googleapis.com/files-learn/static/images/user-interface/ao_1.png) ![Compare](https://storage.googleapis.com/files-learn/static/images/user-interface/ao_3.png) ![Compare](https://storage.googleapis.com/files-learn/static/images/user-interface/ao_4.png) ![Compare](https://storage.googleapis.com/files-learn/static/images/user-interface/ao_5.png) # Ruler Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_settings/ruler The ruler overlays the viewport and allows you to sense scale and rough measurement for your model. * (ALT+R) Toggles the ruler on or off. This setting will stay for every nTop instance until you decide to change it. * To scale the ruler, zoom in and out in the viewport. The ruler will automatically adjust and scale accordingly. * The ruler measures in millimeters. **Note**: If you are in 'Perspective' View mode, the ruler will not be able to turn on. To get out of this mode, click the chevron below the View Gimbal and select 'Orthographic' (or go to View>Camera Mode>Orthographic). The 0-position is snapped to the left side when you first turn the ruler on. Move the mouse pointer on top of the ruler and hold down the left mouse button to adjust the ruler position. This moves the values along the ruler, allowing you to align the 0-position to your desired location. You can also snap the 0-position to the left or right of the viewport. If you move the ruler and close the program, when you open a new file, the ruler will be in the same position that you left it. ![Main](https://storage.googleapis.com/files-learn/static/images/user-interface/rulercombo.gif) # Run Command Permission Settings Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/_settings/run_command **Run Command Permission Settings** nTop will prompt you to trust Run Command blocks before allowing them to run because Run Commands could contain security hazards. There are three permission settings (in Settings > Data) that give you control over how and when you will be prompted to trust run command blocks: * **Prompt per file**: each time you create or open a file that contains run commands, you will be prompted to trust the file. * This is helpful when you have many Run Command blocks in your file or you are using list processing because trusting the file will allow everything to run. * Once you trust a file, all future changes and additional Run Command blocks in the file will be trusted. * This option is less secure because you cannot pick specific Run Commands to trust. * **Prompt per block**: each time a Run Command block tries to run, you will be prompted to trust that instance to run. * This is the default setting and it gives you the most control over Run Command blocks in your file. * This setting is less convenient when you have several Run Command blocks or you're list-processing because you will be prompted multiple times. * **Disallow all**: all Run Command blocks will not be able to run and you will not be prompted. * This is the most secure setting. **Important Notes on Permission Settings** * Changing the permission setting will require you to close and reopen nTop. * When you trust a file, it only applies to the current nTop session. This means, if you trust a file and then close and reopen that file later, you will be asked to trust the file again. Additionally, if you send a file with a Run Command block to another user, they will be prompted to trust that file (regardless of your permission settings). * Once you "trust" a file or block to run, the only way to change it to "not trusted" is to close and reopen your file. You could also set the block to Manual Run Mode if you want to stop it from running automatically. ![Settings](https://storage.googleapis.com/files-learn/static/images/user-interface/security.png) # Field Viewer Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/fieldviewer Field Viewer (F) The Field Viewer displays the field of a selected block at a specified orientation. You can customize its appearance and behavior using the following settings. Opening the Field Viewer * Activate with the "Field Viewer" button in the view toolbar, the "F" hotkey, or right-click on an object and choose "Field Viewer" in the menu. Settings * Object: The block whose field you want to view. Type the object name into the input field. This will be automatically populated when you activate the field viewer when an object is selected. * Size: The size of the field plane. Adjust using the input to set the plane size, or click the Reset Button to adjust the size to the current view in the 3D scene. * Center: The center point of the field plane. Adjust the X, Y, and Z values using the point input, or interactively change the center using the gimbal. * Normal: The orientation of the field plane. Adjust the plane's orientation by entering X, Y, and Z values in the point input or interactively changing the rotation using the gimbal. * Orientation buttons: quickly select from the YZ XZ XY buttons to align the normal to global axes. * Opacity: Controls the transparency of the field plane. Use the slider to adjust the opacity from transparent to opaque. * Isolines: Displays isolines showing contours of equal field values. On by default. * Interval: Defines the interval for isolines. By default, it is set to 0 for adaptive intervals. Enter a fixed interval value to control the distance between isolines manually. * Custom Range: Enable this option to limit the field display to a specific range. * Min Value: The minimum value to display when Custom Range is enabled in the field. * Max Value: The maximum value to display when Custom Range is enabled in the field. * Colormap: Choose how the field is visualized. Select from the following options: * Implicit: Optimized for implicit bodies, with enhanced legibility of field values inside and outside the body. * Turbo: Default colormap for scalar fields. * Distance Field: Original colormap for distance fields. * Probe: The probe displays the field value when you hover your mouse over the field. The corresponding isoline will also be highlighted to indicate where that value occurs throughout the field. ![Field](https://storage.googleapis.com/files-learn/static/images/user-interface/field.png) # Home Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/home_page The Home page is what you see when you first launch nTop. It allows you to start a new file or open an existing file. It showcases a library of example files and resources for getting started. ![Home](https://storage.googleapis.com/files-learn/static/images/user-interface/home.png) ### Center * **New File:** Start a new file of nTop. * **Open…:** Navigate to an existing file. * **Example Files:** A series of examples with interactive learning opportunities. ### Right * **nTop Learn:** Become an nTop expert with hands-on exercies, video tutorials and written guides. * **nTop Support:** Search the knowledge base for answers or contact nTop Support for help. * **Resources:** View upcoming events, new videos, Documentation, and the most recent Release Notes. # Hot Keys Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/hotkeys ![Hotkeys](https://storage.googleapis.com/files-learn/static/images/user-interface/keyboard_shortcuts.jpg) # Measure Tool Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/measure_tool The Measure Tool lets you directly measure distances between two points within your 3D model. This feature is ideal for quick inspections and supports interactive visualization of distances along global X, Y, and Z axes. * Press "M" to open the measure tool. * Click on any point on your model to set the first point, then click again to set the second point. * The distance and XYZ dimensions appear: * As an overlay in the 3D viewport. * In the right-side panel for detailed dimensions. ## Settings **Show XYZ**: Enable this checkbox in the right-side panel to display dimension lines for X, Y, Z directions directly in the 3D view. ![Measurement](https://storage.googleapis.com/files-learn/static/images/user-interface/measurement.gif) # Mouse Controls Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/mouse Use the following mouse controls to navigate the viewport in nTop.   #### Mouse Controls | Control | Description | | - | - | | Select | Left Click | | Object context menu | Right Click | | Rotate Camera | Right Click + Drag | | Pan Camera | Right Click + Drag + Shift | | Zoom Camera | Right Click + Drag + Ctrl | | Zoom Camera | Middle mouse button + scroll | | Pan Camera | Middle mouse button + drag | nTop supports the use of a 3Dconnexion Space Mouse for manipulating your geometries in 3D space. Specific actions cannot be mapped directly to space mouse buttons. # Section Cut Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/sectioncut Cuts an object with a Plane to allow you to see the inside of the object. * Select a block and press 'X' to open section cut mode. * Section cut works on all model types, except for Voxel Grids. * Precise Render and Image Capture don't capture section cut views. To save an image of a section cut body, use Boolean Subtract and a Plane to cut the object, creating an Implicit body that is section cut. ## Settings **Mode**: * Global: Cuts through all visible objects. * Selection: Cuts through the selected object. **Object**: Choose Selection and double click in the Object input to choose the object. **Center**: The Center of the plane. Adjust the values or use the gimbal to change the center value. **Normal**: Adjust plane normal to change its orientation. **Flip Normal**: Flips the cutting plane normal, so the opposite side is cut instead. **Display Style**: * Outline: Shows a thick outline for cut objects. * Shaded: Shows a shaded body for cut objects. **Show Volume Mesh Elements**: Toggles the inner mesh elements of a volume mesh on or off. **Close**: Closes the section cut mode. ![Cut](https://storage.googleapis.com/files-learn/static/images/user-interface/section_cut_tpms.png) # Surface Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/_user_interface/surfaceanalysis The Surface Analysis tool colors objects in the view based on specified draft or overhang angles, providing live feedback as the model changes to help you assess manufacturability in real-time. This tool includes two modes, Draft Analysis, and Overhang Analysis, each available in solid colors or gradients. ## Settings **Mode**: The block whose Surface Analysis you want to view. * **Overhang Angle**: The overhang angle visualization identifies regions in your model where angles may exceed the printable threshold, helping you inspect the design for manufacturability. * **Draft Angle**: The draft analysis visualization colors areas of your model based on a specified draft angle relative to a pull direction, helping you verify that your design meets manufacturability requirements. **Overhang or Draft Angle**: This is the input for the overhang or draft angle based on the Mode selection. **Threshold**: The threshold input for the Angle input. **Build or Pull Direction**: Set the direction vector for surface analysis **Color Legend**: A color legend in the panel offers a quick reference for angle ranges.
![](https://storage.googleapis.com/files-learn/static/images/user-interface/draft_angle_legend.png) ![](https://storage.googleapis.com/files-learn/static/images/user-interface/overhang_angle_legend.png)
**Close**: Closes the surface analysis mode. ![Surface Analysis](https://storage.googleapis.com/files-learn/static/images/user-interface/surface_analysis.gif) # Blocks and the Notebook Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks ## Navigation ### > **[Introduction](./_using-blocks/introduction)** > **[Notebook Anatomy](./_using-blocks/_notebook_anatomy)** > **[Block Anatomy](./_using-blocks/_block_anatomy)** > **[Using Blocks](./_using-blocks/_using_blocks)** > **[Custom Blocks](./_using-blocks/custom_blocks)** # Block Anatomy Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_block_anatomy ## Basic Block ![Block Anatomy](https://storage.googleapis.com/files-learn/static/images/using-blocks/blockanatomy.png) 1. **Collapse** * Use the chevron to the left of the block to expand or collapse the block contents (hotkey Spacebar). 2. **Block Color** * The bar on the left of the block and the collapse icon represents the Output Type through colors. Read more [here](/_using-blocks/_block_anatomy/types). 3. **Block Icon** * The icon represents the Block Type. You can see the list of all Block Types [here](/block-documentation/types). * A list icon appears over the Block Icon if the block is a List. 4. **Block Type Overload** * Change the Block Type by using the chevron beside the Block Icon (not every block can have its Type overloaded). 5. **Block Name** * The name of the block. Use this name for adding a block to your Notebook through the Search bar, [Ribbon](/_user_interface/_main_window/ribbon), or [Context Search](/_using-blocks/_using_blocks/context). 6. **Overload** * The chevron to the right of the Block Name is for overloading block inputs. Read more [here](/_using-blocks/_using_blocks/overloads). 7. **Object Name** * The automatically generated name of the specific block. * Rename it by double-clicking on the text. 8. **Rebuild Block Icon** * When the block needs to be rebuilt, this icon appears—rebuilding reruns the block. Click the icon to rebuild the block. 9. **Block Details** * This icon opens up the Block Details panel. The Block Details contains a tab for Properties, Display, and Comments. The Information tab material as well as some of the contents from the Display tab has been moved to the Right Side Panel. Read more [here](/_using-blocks/_block_anatomy/infopanel). * The color of the Block Details icon changes depending on the status of the block. * Blue: Unbuilt block. * Grey: Block built successfully. * The icon changes shape if a block encounters a warning or error. * Yellow: Warning. You can still use the block results, but it may not be optimal. * Red: Error. You need to fix the error to run the block. Read more [here](/_using-blocks/_using_blocks/errors). 10. **Visibility Icon** * This icon indicates if the block output is visible in the Viewport. Toggle this by selecting the block and pressing V. * Solid circle: The block is visible. * Empty circle: The block is invisible. 11. **Input Icon** * Each input has an icon to specify the Output Type of that input. 12. **Input Name** * Describes the input. 13. **Input** * Click in the input to type in a value or a Block Name. Typing in a Block Name opens up a search, where blocks within the Notebook show up first and then all other relevant blocks that satisfy the input type. * The input is outlined in red if it is an unacceptable input. * You can drag and drop blocks into inputs. 14. **Units** * Units appear to the right of the input. Read more [here](/_using-blocks/_using_blocks/units).   ## Variables ![Variable](https://storage.googleapis.com/files-learn/static/images/using-blocks/variable.png) You can tell a block is a variable because the Object Name is on the left and the Block Color highlights it. Read more [here](/_using-blocks/_using_blocks/variables).   ## List Block ![List Block](https://storage.googleapis.com/files-learn/static/images/using-blocks/listblock.png) 1. **List Icon** * List blocks have a list icon that appears over their regular icon. 2. **List Size** * The block name updates to show the size of the list, where the number between the brackets is the list size. 3. **Add Inputs** * Add additional inputs to lists by using the '+' icon in the upper right corner of the block. 4. **Remove Inputs** * Remove inputs using the '-' that appears when you hover over an input. Read more [here](/_using-blocks/_using_blocks/lists).   ## Custom Blocks ![List Block](https://storage.googleapis.com/files-learn/static/images/using-blocks/customblock.png) All Custom Blocks have a double line down the left side of the block. The double line tells you that it is a Custom Block with a workflow running underneath the hood. Read more [here](/_using-blocks/custom_blocks). > **[Types](./_block_anatomy/types)** > **[Details](./_block_anatomy/infopanel)** > **[Settings](./_block_anatomy/settings)** > **[Status](./_block_anatomy/status)** # Details Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_block_anatomy/infopanel Each block has information which can be viewed in the Block Details and in the Right Panel. To open the Right Panel, click the split rectangle icon in the top right corner or use the shortcut Ctrl + 2. To open the Block Details, click the question mark icon on the right side of the block in the Notebook. The Block Details has four tabs, detailed below.   ### Information This tab only contains the dropdown menu to change a block's version. The block's description, a Learn More button to further documentation (not available for every block), information on the inputs, the output, what it can convert to, and what version the block is, can all now be found in the Right Panel as of nTop 4.9.3. ![Block Info](https://storage.googleapis.com/files-learn/static/images/using-blocks/informationtab.png) ### Properties Blocks have properties that are accessible via the Properties tab. They appear as draggable chips which can be input into other blocks. Property chips can also be typed into an input instead of dragged into an input. Click the chevron beside the chip to expand it and see further properties. ![Block Properties](https://storage.googleapis.com/files-learn/static/images/using-blocks/properties.gif) ### Display The Display tab is used to view simulation results. You can use the drop down menu to change which objective or constraint chart is being shown. To change the color or transparency of an object in your scene, go to the Display tab of the Right Panel. ![Block Display Options](https://storage.googleapis.com/files-learn/static/images/using-blocks/display.png) ### Comment Comments can be added to each block. These may serve as useful notes to help navigate a large notebook, or can be used to communicate a workflow to others using your file. To add a comment, click on the speech bubble icon that appears when hovering above each block in the Notebook. Comments are also accessible via the Comment section in the Information Panel. * The block Comment is connected to the block and will move with it if you move the block within in the Notebook. * The block Comment will get nested if the block is nested. An icon appears when this happens. ![Block Comments](https://storage.googleapis.com/files-learn/static/images/using-blocks/comment.png) \> Comments will be shown above the block function in the Notebook as well as inside of the comment tab in the Information Panel. # Settings Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_block_anatomy/settings Right-clicking on a block opens up the Block Settings (not every block has the same settings): * **Copy Selection:** Copies the block. Read more [here](/_using-blocks/_using_blocks) on the Cut, Copy, and Paste capabilities. * **Duplicate:** Makes a copy of the block and a copy of all blocks referenced in that block. Read more [here](/_using-blocks/_using_blocks). * **Duplicate with References:** Makes a copy of the block but uses the original referenced blocks (it doesn't create a copy of the referenced blocks). Read more [here](/_using-blocks/_using_blocks). * **Make Variable:** Converts the block into a variable. Read more [here](/_using-blocks/_using_blocks/variables). * **Rename Output:** Renames the Object Name of the block. * **Delete:** Deletes the block. * **Embed:** Embeds an imported part into the Notebook (practical when multiple users use the same workflow). * **Isolate:** Hides all other blocks except for this one. * **Visibility:** Toggles the visibility of the block. * **Wireframe:** Toggles the visibility of the mesh or voxel wireframe. * **Field Viewer:** Turns on the Field Viewer for that block. Read more [here](/_user_interface/fieldviewer). * **Run:** Runs the block. * **Manual Run Mode:** Toggles Manual Run Mode. Read more [here](/_using-blocks/_using_blocks/manual). * **Properties:** Opens up the properties in the Information Panel. Read more [here](/_using-blocks/_block_anatomy/infopanel). * **Add Comment:** Opens up the dialog box above the block, allowing you to write comments. * **Export Block:** This allows you to export Custom Blocks. Custom blocks save as .ntop files. * **Imported Blocks:** Opens up the Imported blocks window at the top of the Notebook. Read more [here](/_using-blocks/custom_blocks). * **Export:** This allows you to export the block output in its specified file format. * **Make Model Input:** Turns the block into an input for use in a Custom Block or workflow. The block is moved to the Input section when this option is selected. # Status Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_block_anatomy/status There are four different status types that a block can be in, each described below.   ### Beta **What are beta blocks?** Beta blocks are blocks that are in development and may be subject to change before transitioning to a full release. They are made available to users seeking early access to upcoming features. Beta blocks have the word 'Beta' written on the block. **Can I use beta blocks for production workflows?** We do not recommend Beta blocks for production workflows. Beta blocks are subject to increased updates and changes, which may cause issues in productions workflows. **How do I enable beta blocks?** To enable Beta blocks, go to File > Settings and check the Show Beta Blocks box. **How do I use beta blocks?** A Beta tab will show up in the Ribbon once the Show Beta blocks option is turned on. You can search for Beta blocks in the Searchbar by typing in "beta". Add a Beta block to your Notebook to use it. To see the full list of Beta blocks, go to Documentation > Block Documentation > Blocks > Beta. **How long is a block in beta for?** The timeline for each block to be in Beta varies depending on the testing and development ongoing for that block. **What if I find a bug while using a beta block?** If you find a bug while using a Beta block, contact support with the following information: issue, file, crash files if applicable, and the steps to reproduce. ### Production All blocks in Production status are tested blocks that have been promoted from Beta. They make up the core of the software. ### Deprecated **What is a deprecated block?** A deprecated block is a block that has moved out of production. This means it won't receive future updates, development work, or bug fixes. **Why is a block deprecated?** A block is deprecated when there is no longer any need for this block as decided by nTop. This can happen when it is replaced by a beta block or a production block that encompasses the functionality of the deprecated block. **How do I upgrade my workflow that uses a deprecated block?** In most cases, you will be prompted to update the blocks upon opening the software. If selected, the blocks will automatically update to their replacement block. If the process is more involved, the appropriate steps and support material will be provided. **Can I still use a deprecated block?** Yes, workflows using this block will still run, but we encourage you to update any workflows that utilize this block and avoid further dependencies on deprecated blocks. In the future, any deprecated block may be put into End of Life status. This status signifies that the block will be removed from the software in the future. If the block does enter this phase, all users will receive advanced notice and a timeline of the block's removal. **How do I use a deprecated block?** To enable deprecated blocks, go to File > Settings > Enable Deprecated blocks. With this setting enabled, you can find all deprecated blocks in the search bar. Deprecated blocks are not found in the Ribbon. Keep in mind that we do not encourage the use of deprecated blocks. **What if I find a bug while using a deprecated block?** Bug fixes won't be supported for deprecated blocks. If you encounter a bug, we recommend using the appropriate replacement block to address the issue. ### End of Life When a block enters the End of Life status, it means that the block will be removed from the software in the future. If the block does enter this phase, all users will receive advanced notice and a timeline of the block's removal. # Types Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_block_anatomy/types ## Block Types Every block has an Output Type and a Block Type. The Output Type is defined by the Block Color and the Block Type is defined by the Block Icon. * Output Types define the output of the block. * The Output Types are divided up into these categories: * CAD * Data * Field * Implicit * Lattice * Simulation * Some of these categories contain sub-categories. For example, Scalar and Integer Output Types belong in the Data category. * Each Output Type can contain multiple Block Types. To see the list of all available Block Types, go [here](/block-documentation/types). ## Block Colors Blocks are color coded when they appear in your notebook. Different colors represent different Output Types. For instance, green blocks output Implicit bodies while purple blocks output Lattice graph geometry. The Block Colors are defined below: ![Block Color Examples](https://storage.googleapis.com/files-learn/static/images/using-blocks/blockcolor.png) # Notebook Anatomy Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_notebook_anatomy ![List Block](https://storage.googleapis.com/files-learn/static/images/using-blocks/notebookanatomy.png) The Notebook is on the left of the Viewport. You can click and drag the Notebook elsewhere in the window to change its position. Drag the Notebook back to the left hand of the screen, and it will snap back into its original place. 1. **Notebook Name** * Double-click on 'Untitled Notebook' to give your Notebook a name. We suggest using a unique and memorable Notebook name. 2. **Search bar** * The Search bar is a quick way to add blocks to your Notebook. It searches through the entire database by using the Block Name. * Click in the Search bar (or use CTRL+L) and start typing the name of the block you are looking to use. * The search brings up blocks that start with the letter you input. Search results have their Block Color on the left and the Block Name. A tooltip pops up when you hover over a Block Name, which shows you the name, description, and Output Type for that block. 3. **Notebook Description** * Double-click on 'Add description' to give your Notebook a description. Descriptions help you remember the Notebook's purpose and make it clear what the Notebook is accomplishing when you share it with others. 4. **Error Log** * An error icon pops up in the top right corner of the Notebook when a block encounters an error. Select the icon to open up the Error Log. Read more [here](/_using-blocks/_using_blocks/errors). 5. **Auto-Update** * This button toggles the Auto-Update feature on or off. * Toggled On: When turned on, blocks added to the Notebook update automatically when an input is changed, or any upstream block is updated. * Toggled Off: When turned off, blocks won't update automatically. You need to select the update button on each block to run the block. 6. **Input Section** * This section creates Inputs for making a Custom Block from your Notebook. Read more [here](/_using-blocks/custom_blocks). 7. **Sections** * All blocks in the Notebook belong to a section. Sections allow you to organize your Notebook by organizing blocks and minimizing sections. Read more [here](/_using-blocks/_notebook_anatomy/sections). 8. **Context Search** * This feature enables searching for blocks within the Notebook. Read more [here](/_using-blocks/_using_blocks/context). 9. **Placement Highlight** * This highlight indicates your place within the Notebook. New blocks are added to the location of the Placement Highlight. * Change the Placement Highlight by moving your cursor over the blocks and selecting above or below them. 10. **Rebuild Block** * This button reruns a block that has failed or been canceled by the user. 11. **Error Indicator** * Indicates which block has an error. 12. **Output** * The Output is only needed if you create a Custom Block with your Notebook. Read more [here](/_using-blocks/custom_blocks). * There can only be one Output per Notebook. > **[Sections](./_notebook_anatomy/sections)** > **[Left Side Panel](./_notebook_anatomy/left_panel)** > **[Right Side Panel](./_notebook_anatomy/right_panel)** # Left Side Panel Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_notebook_anatomy/left_panel The Left Side Panel contains two major tools, the Outline and the Imports tabs. The Left Side Panel can be expanded and collapsed by selecting the split rectangle icon at the top-left of the Notebook. ![Left Side Panel](https://storage.googleapis.com/files-learn/static/images/using-blocks/left_side_panel.png) The Notebook Outline enables you to view the blocks in your notebook from a high-level and quickly select and navigate to them. In addition to quickly navigating to blocks, the Outline provides a visual tracing for where variables are used in your notebook. When you select a block in the Outline, a bright blue highlight will appear on that block. If that block is a variable instanced within another block, a duller blue highlight will appear on the block that references it. ![Notebook Outline 1](https://storage.googleapis.com/files-learn/static/images/using-blocks/Outline_1.gif) The Notebook Search is an added feature in the Outline. When using this search bar, it will display filtered results, and allow you easy navigate to them. ![Notebook Search](https://storage.googleapis.com/files-learn/static/images/using-blocks/Search.gif) When you search for a block you may notice that a quantity is indicated next to it in the results. This number represents the number of instances of that block in the notebook. ![Block Quantities](https://storage.googleapis.com/files-learn/static/images/using-blocks/outline_block_quantities.png) **Tips:** * Ctrl+F will open the Left Side Panel and activate the search window. * You can exit the search by selecting the close button or the Esc key. * You can expand/collapse the search results to view each instance in the notebook. * Search will filter objects on three criteria: * Block name * If a block is a variable, the block names where it is instanced * Matching comments The Imports tab has three functions for custom blocks. You can create a new custom block, import a custom block, and remove any unused blocks. ![Imports Tab](https://storage.googleapis.com/files-learn/static/images/using-blocks/imports_tab.png) # Right Side Panel Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_notebook_anatomy/right_panel The Right Side Panel contains two tabs, the Information and Display tabs. The Right Side Panel can be expanded and collapsed by selecting the split rectangle icon at the top-right of the Notebook. ![Right Side Panel](https://storage.googleapis.com/files-learn/static/images/using-blocks/right_side_panel.png) The Information tab shows all details of a selected block. The block's description, a Learn More button to further documentation (not available for every block), information on the inputs, the output, what it can convert to, and what version the block is, can all be found in this tab. ![Information Tab](https://storage.googleapis.com/files-learn/static/images/using-blocks/rhs_information_tab.png) The Display tab allows you to change an object's color using the drop-down menu. You can also toggle an object's transparency using the checkbox, and adjust the transparency level using the slider. ![Display Tab](https://storage.googleapis.com/files-learn/static/images/using-blocks/rhs_display_tab.gif) # Sections Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_notebook_anatomy/sections All blocks in the Notebook belong to a section. Sections allow you to organize your Notebook by grouping and collapsing blocks. ##### Settings * Hover over the Section Name and select the three vertical dots on the right to open the Section Menu. * Add section: Creates a new section below the selected section. * Move up: Moves the section above the section that is currently above it. * Move down: Moves the section below the section that is currently below it. * Rename section: Allows you to rename the section (you can also double click on the name to rename it). * Delete section: Deletes the section. Deleting a section deletes *all* of the blocks in that section. ##### Using Sections * Use the chevron on the left to collapse and expand the section. * Left-click and drag on the right of the section to move it elsewhere within the Notebook. A blue line highlights the new position as you move the cursor. * You can open or close a section by using the chevron to the left of the Section Name. * '+ New Section' * Adds a new section to the Notebook. ![Sections](https://storage.googleapis.com/files-learn/static/images/using-blocks/sections.gif) # Using Blocks Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks ## Adding Blocks To add a block, select it from the [Ribbon](/_user_interface/_main_window/ribbon), use the search bar at the top of the Notebook, or use the [Search in Place](/_using-blocks/_using_blocks/search_in_place) feature. To quickly search and add a new block to the Notebook, use the shortcut *Ctrl + L* to go to the search bar or *S* to open up Search in Place. ![Adding Blocks](https://storage.googleapis.com/files-learn/static/images/using-blocks/add.png) * Use the [Search in Place](/_using-blocks/_using_blocks/search_in_place) feature to add blocks or sections from anywhere in the Notebook. * Once you already have a block in the Notebook, you can use the [Context Search](/_using-blocks/_using_blocks/context) to quickly nest blocks. * You can add blocks directly into an input by searching for the Block Name in the input. * Select the input and start typing to search. * Double-click instead of typing in an input to see a list of blocks that are already in the Notebook appear at the top of the search list. This is useful if you aren't sure what block you need next. ![Adding Blocks](https://storage.googleapis.com/files-learn/static/images/using-blocks/adding_blocks.gif) ## Selecting Blocks A selected block has a blue highlight. If the block has an output that appears in the Viewport, it will also have a blue highlight. Hold down CTRL and Left-click blocks to select multiple blocks at once. ![Select](https://storage.googleapis.com/files-learn/static/images/using-blocks/select.png) When you select a block, it also highlights all the blocks where it is used as an input with a blue dotted line. * If the block is in a collapsed state, it underlines the block with a blue dotted line. * If the block is in a collapsed section, if highlights the section it is in with a blue dotted line. ![Select](https://storage.googleapis.com/files-learn/static/images/using-blocks/usedblocks.png) If the block isn't collapsed, it highlights the input where the selected block is used with a blue dotted line. ![Select](https://storage.googleapis.com/files-learn/static/images/using-blocks/nestedblocks.png) ## Navigating Blocks Find where an input came from by using the "Go to" function. **What it does:** Allows you to go to the source location of its instanced chip in the Notebook by right-clicking directly on the chip and selecting "Go To Block." **How to use it:** * Activate it from a chip instance of a variable, variable property, and non-variable property. * Activate it on the chip, the input panel, or the input section of the block that contains the chip. **Tips:** * If the source reference is within a collapsed section, it will un-collapse the section. ![Go to](https://storage.googleapis.com/files-learn/static/images/using-blocks/goto.gif) ## Renaming Blocks To rename a block, double click on the block instance name in the upper right corner of the block. If you've converted a block or set of nested blocks into a variable, double click on the variable name located in the upper left corner of the block. To rename quickly, use the shortcut F2 on your keyboard. ![Renaming Blocks](https://storage.googleapis.com/files-learn/static/images/using-blocks/rename.png) ## Moving Blocks Blocks can be reordered in the Notebook by dragging above or below other blocks. The space between blocks is highlighted blue to show the new position. The order of the blocks in the Notebook has no effect on the block's output. ![Moving Blocks 1](https://storage.googleapis.com/files-learn/static/images/using-blocks/move.png) Blocks can also be used as inputs into other blocks, and they will become nested inside the Notebook. The input parameter field will highlight blue if the parameter accepts the block type as an input. ![Moving Blocks 2](https://storage.googleapis.com/files-learn/static/images/using-blocks/insert.png) ## Copying Blocks ##### Cut, Copy, and Paste Cut, Copy, and Paste single blocks or multiple blocks at one time. Once the blocks are on the clipboard, they can be pasted into: * the Notebook * Compatible block inputs * A separate instance of nTop (a different Notebook) If you are copying a block that has references, use *Paste with References*. This feature pastes all dependencies and ensures there are no broken references when blocks are pasted. This is especially helpful when copying and pasting between two Notebooks. Copy and Paste options can be accessed from the Edit drop down menu, Right-click menu and through [Keyboard Shortcuts](/_user_interface/hotkeys) (Ctrl+x, Ctrl+c, Ctrl+v). ##### Duplicate Makes a copy of the block and a copy of all blocks nested within that block. ![Duplicate](https://storage.googleapis.com/files-learn/static/images/using-blocks/duplicate.gif) In this case, think of Duplicate as "copy block and nested blocks". Duplicate won't make copies of variable chips. It creates a whole new block and new nested blocks. In the gif above, you can see how Implicit Body\_0 becomes Implicit Body\_0\_copy and Sphere\_0 becomes Sphere\_0\_copy. This is useful when you want to copy a block and be able to change all of the parameters without links back to the original. * When to use: If you want to copy a block you already have and change its block inputs. * Duplicate works the same as Copy does, but you can't duplicate a block from one Notebook to another. ##### Duplicate with References Makes a copy of the block but uses the original referenced blocks (referenced blocks aren't copied). ![Duplicate Ref](https://storage.googleapis.com/files-learn/static/images/using-blocks/duprefss.gif) In this case, it creates a copy of the top-level block, but not any of the nested blocks. The nested blocks are the same block as the original, and therefore will update values when one of them is changed. This is useful for changing parameters on the top-level block while keeping the input the same. You can see that Implicit Body\_0 became Implicit Body\_0\_copy while Sphere\_0 remained the same. When using this, don't forget that the referenced inputs are the same to save any mistakes down the road. * When to use: If you want to copy a block but keep the same block references. * In both cases, a new block is being created, therefore Duplicate and Duplicate with References are not recommended as a substitute for creating a variable. **Note:** Use CTRL + Drag on a block to create an identical instance of that block. Changing inputs on an identical instance changes the inputs on the original as well. ## Deleting Blocks To remove a block, click on a block to select and press the delete key. To select multiple, hold the CTRL key. ![Renaming Blocks](https://storage.googleapis.com/files-learn/static/images/using-blocks/delete.png) > **[Variables](./_using_blocks/variables)** > **[Overloads](./_using_blocks/overloads)** > **[Manual Run Mode](./_using_blocks/manual)** > **[Interactions](./_using_blocks/interactions)** > **[Error Messages](./_using_blocks/errors)** > **[Context Search](./_using_blocks/context)** > **[Search in Place](./_using_blocks/search_in_place)** > **[Units](./_using_blocks/units)** > **[Lists](./_using_blocks/lists)** > **[Best Practices](./_using_blocks/bestpractices)** # Best Practices Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/bestpractices A little bit of housekeeping goes a long way when working in an nTop Notebook. If your engineering notebook is kept tidy, organized, and blocks are named well, it will be easy to navigate and reuse existing files. We have several features - Variables, Comments, Name Descriptions, and Sections - that will help to keep your Notebook files light and easy to read. ![Best Practices](https://storage.googleapis.com/files-learn/static/images/using-notebooks/best-practices.png) ##### Name and Describe your Notebook The name of the Notebook should describe what this workflow is trying to achieve and what will be featured within it. Give a full description of what the Notebook does. The description is also used as expanded descriptions if your Notebook file is used to create a [Custom Block](/_using-notebooks/creating-a-custom-block). ![Notebook Name](https://storage.googleapis.com/files-learn/static/images/using-notebooks/best-practices_name.png) ##### Create Variables When building a Notebook it is important to collapse the blocks containing parameters that do not need to be revealed. This will save Notebook real estate and will make it easier to navigate. If a parameter of a block within your file needs to be readily available, consider converting this parameter into a variable so that the block can be collapsed. * You want to create a variable for a parameter that may be changed often in your engineering process. * Use variables in your Notebook to organize your workflow and to create steps for yourself. ![Use Variables](https://storage.googleapis.com/files-learn/static/images/using-notebooks/best-practices_variables.png) ##### Add Comments to your Blocks Use comments to document your work and to focus on the purpose of each block. The comment can be made in the Notebook directly or through the information panel of a block. ![Block Comments](https://storage.googleapis.com/files-learn/static/images/using-blocks/comment.png) ##### Use Sections to Organize your work Use sections to organize your work into smaller steps that you can collapse. Read more [here](/_using-blocks/_notebook_anatomy/sections). ![Sections](https://storage.googleapis.com/files-learn/static/images/using-blocks/sections.png) # Context Search Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/context Context Search makes the Notebook and block system more accessible by allowing for easier exploration of workflows and block combinations. **What it does:** There is an icon that appears when most blocks are selected (shown below). ![Context](https://storage.googleapis.com/files-learn/static/images/using-blocks/context.png) * When you select the icon, a search bar will appear to the right of the block. * From there, you can search through all the compatible blocks that can be used with the block (shown below). ![Context](https://storage.googleapis.com/files-learn/static/images/using-blocks/context.gif) **Tips:** * The pop-up search bar shows all options listed in alphabetical order that you can select. * Context Search isn't available for variables. * Use (S) as a keyboard shortcut to activate Context Search. * Any option selected will become the outer nested block of the initial block. * If there is an outer nested block already to the block running the Context Search, the list of potential blocks will allow only blocks that are compatible with *both* the input(s) of the outer nested block and the output of the inner nested block. ![Context](https://storage.googleapis.com/files-learn/static/images/using-blocks/context1.png) # Error Messages Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/errors When working with blocks in the Notebook, you may encounter error, warning, and alert messages. You can read all of these messages by clicking on the Information Panel icon. The message appears above the Information Panel with details on what is occurring and how to fix it. * **Errors:** Red icon - Must be resolved for the block to run. * **Warnings:** Yellow icon - Don't need to be resolved for the block to run, but may impact the output. * **Alerts:** Blue icon - Must be resolved for the block to run. Used for blocks with incomplete information, most commonly, an empty required input. ![Warning](https://storage.googleapis.com/files-learn/static/images/using-blocks/alert.png) Several things happen at when an error occurs: * The block is tinted red. * A red icon appears over the Information Panel. Clicking the icon opens up the Information Panel with an error message above it. The error message tells you what went wrong and how you can fix it. * Some error messages may have a Learn More button, where you can read more about how to resolve the error. You can find all of the error documentation [here](/error-documentation). * An error icon appears on the top right of the Notebook. * If a block within a close section has an error, an icon appears beside the closed section. ![Block Error](https://storage.googleapis.com/files-learn/static/images/using-blocks/errornotebook.png) ## Error Log Select the error icon in the top right of the Notebook to open the Error Log. The Error Log shows you all of the errors occurring in your Notebook. Click on an error message in the Error Log to navigate to the block the error is occurring in. Warnings and alerts don't show up in the Error Log. ![Block Error](https://storage.googleapis.com/files-learn/static/images/using-blocks/errorlog.png) ![Block Error](https://storage.googleapis.com/files-learn/static/images/using-blocks/gotoerror.png) # Interactions Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/interactions Some blocks allow you to select and edit inputs through interactions in the Viewport. ![Select](https://storage.googleapis.com/files-learn/static/images/using-blocks/select.gif) ## Viewport Select You can tell inputs are interactive when this symbol appears when you hover over the input: ![Select](https://storage.googleapis.com/files-learn/static/images/using-blocks/selectv.png) * Selecting the symbol toggles on the Viewport select mode. * The input turns blue and prompts you to choose a part from the Viewport. * Parts are highlighted when you hover over them. ## Placement Gimbal Most Point inputs have a corresponding placement gimbal that allow you to move the part in the Viewport. Select an axis beam or the squares between them to adjust the placement. ![Select](https://storage.googleapis.com/files-learn/static/images/using-blocks/gimbal.png) ## Interactive Updates This feature requires GPU Acceleration to be turned on. Read about this feature in [GPU Acceleration](/_getting_started/_system_requirements/gpu_acceleration). # Lists Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/lists ### What is a List and List Processing? All blocks in nTop can exist as singular entities or as a list. A list contains multiple items of the same type in a single block, like a list of points. When a process runs on a list block, it runs the process on every list item. Working with list blocks is called List Processing. ![List](https://storage.googleapis.com/files-learn/static/images/using-blocks/lists.png) ### Creating Lists To create a list of any type, type 'list' into the search bar, along with the block type you would like to create. Lists are denoted in nTop by three small rectangles of increasing width in the bottom left corner of the data type icon. The size of a list is shown in parentheses next to the Block type. Not all lists are created from the search bar, some are made unintentionally or automatically with certain blocks. Some blocks turn a singular entity into a list and some merge lists together.   ### List Errors If you get an 'invalid input error', it may be because you are trying to input a list into a singular type input. Input List Length Mismatch is another common list error. This occurs when you have at least two inputs, each with a list of different lengths. This can also appear when a List of (1) is unintentionally created.   ### Lists in Lists - Inputting a list block within another list block A list block can't be input into another list block. However, if you want to input a list into a block that doesn't accept lists, you can create a Custom Block to run the list instead. This works because the inputs of a Notebook are contained in variables, and variables cannot process lists. However, once it's being used as a Custom Block, it's a block like any other and therefore can process lists. This is not equivalent to putting the list into the input but rather running the Custom Block workflow multiple times, once for each element in the list.   ### List Properties List block properties contain a set of List properties at the top and individual properties for each item within the list at the bottom. * The individual properties can be dragged out of a List to create an individual item. * The dropdown arrow next to the individual entities can be expanded to reveal more information on that individual list entity. * Click and drag the individual chips into the Notebook to create a new single variable separated from the list. ![List](https://storage.googleapis.com/files-learn/static/images/using-blocks/list_proper.jpg)   ### Manipulating Lists There are two methods to add blocks to a list: * Drag a new block into a List block. Remember that all entities in a list must have the same block type (i.e. they must have the same icon in the top left corner of the block). * Select the '+' to add more inputs. If you add too many, use the '-' on the left of the input to remove them. ![List](https://storage.googleapis.com/files-learn/static/images/using-blocks/spherelist.gif) The order of list entities can be changed by dragging list entities around within the List block. Other list manipulation tools are in the Utilities Ribbon Tab, under 'General'. Some blocks in this section are included below: * **List Element**: Extract a single entity from a list based on its index number. * **Insert**: Combine two lists into one by inserting a list into another at a specified index location. * **Sub List**: Extract a smaller list from a larger input list, based on a starting index and the desired size of the sub-list. * **Remove**: Remove one or more entities from a list, based on a starting index and the number of removed entities.   ### Auto-Populated Lists Some blocks use list inputs and combine them into a singular entity. An example of this is the **Boolean Union** block, which takes in a list of bodies and generates a single unioned body. Blocks like this are auto-populated with an empty list, which is useful for quickly dragging bodies inside to complete the operation. ![List](https://storage.googleapis.com/files-learn/static/images/using-blocks/auto_list.jpg) Sometimes, a user already has a list prepared that they would like to perform a boolean union operation on. In this case, the auto-populated list must be deleted and replaced by the desired list.   ### Lists of One (1) You may encounter a situation where you try to add your parts to a block that accepts a list of inputs, and it won't let you. This is because the input you are trying to add looks like "Block Name (1)". Somewhere, a List of One was created. Lists of one are sometimes unintentionally created by the user, or during CAD/Part importing. They can be converted to singular entities by either dragging the entity out of the Properties tab of the Info panel or by using the List Element block. To drag the entity out, open up the Properties tab, expand until you find the part, and drag the part chip into the Notebook. This creates a block in the Notebook that doesn't have a list. You can also drag the chip out directly into an input. ![List](https://storage.googleapis.com/files-learn/static/images/using-blocks/listone.png) ### Groups Groups in nTop are the same thing as lists, except they can contain a combination of any block types. For example, the group below consists of a point, a sphere, and a cube. The same list manipulation operations described can be performed on groups. ![List](https://storage.googleapis.com/files-learn/static/images/using-blocks/group.png) # Manual Run Mode Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/manual Manual Run Mode provides you with the ability to explicitly prevent a block from running automatically. This feature gives you the opportunity to make a series of iterative upstream changes to your notebook without automatically running downstream blocks which could be computationally expensive and time consuming. ![Manual Run](https://storage.googleapis.com/files-learn/static/images/using-blocks/manualrun.png) 1. Right-click and select *Manual Run Mode*. This activates the feature and a flag displaying a pause icon appears on the exterior of the block. If you hover over the pause icon, a tooltip will appear reading "Manual Run Mode". 2. Make a change to a block upstream that is connected to the block you applied the Manual Run Mode to downstream. Once the upstream block has been changed, the block with the Manual Run Mode applied to it will change its icon to a play button. **Tip:** If you have multiple blocks with Manual Run Mode applied to them and they are interconnected to one another in the notebook, you can either Run each block one at a time or you can choose to Run the most downstream block, which will trigger all upstream blocks to Run too. # Overloads Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/overloads ## Overloads Certain blocks are capable of an Overload, which means they have multiple configurations and may have the option to return different Output types. Not every block function has an overload, but blocks that do have a dropdown by its name. For example, with the Add block, a user can select the following overloads for both inputs "Operand A" and "Operand B". Below are the overloads for the Add block. ![Overloads](https://storage.googleapis.com/files-learn/static/images/using-blocks/overloads.gif) ## Variants Variants are inputs types that have the ability to change, based on what blocks, variables, or input values have been provided. In this example, the same Box is a valid input for both an Implicit body Variable and a Box Variable. ![Variants](https://storage.googleapis.com/files-learn/static/images/using-blocks/variant.png) # Search in Place Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/search_in_place **What it does:** Enables you to search for and add blocks, comments, and sections at your current location in the Notebook. **How to use:** * Search in Place is activated by right-clicking the dividing line under a block, a blank section, or between blocks. * Once Search in Place is activated via right-clicking, a context menu will give you the option to: * Add Block - When selected, it will open the search dialog to the notebook's right at the line. * Add Section - When selected, it will add a section below the line. * Add Comment - When selected, it will activate the comment for that block when a block already exists below the line. If a comment already exists, it will activate the existing comment and allow you to edit it. * Paste and Paste with References. **Tips:** * Double-clicking the dividing line skips the initial Search in Place context menu and brings you directly to the Add Block search dialog. * The Context Search's icon matches Search in Place's "+" icon. When you select the "+" icon on a block, it will search for and add compatible blocks as outer nested blocks with your current selection. When you add a block via Search in Place, you can search for and add any block below the dividing line. * Clicking on the dividing line and selecting the "S" key on your keyboard (the same keyboard shortcut as [Context Search](/_using-blocks/_using_blocks/context)) will skip the initial Search in Place context menu and bring you directly to the Add Block search dialog. ![Search in Place](https://storage.googleapis.com/files-learn/static/images/user-interface/searchplace.gif) # Units Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/units ## Using Units Add units to a block input by typing in the unit abbreviation after the input value. This tells the input what unit you want and sets the input to that unit. * Some units auto-populate when certain inputs are tied together. For example, In min and In max in the **Ramp** block always have the same units. Adding a unit for one input automatically sets the units for the other. * Blocks only accept units that fit with their Output Types. ## Converting Units Inputs auto-convert units when you type in a different unit of the same type. **For example:** Type '5 m' into a Size input. The result converts the meters to millimeters, but shows 5 m in the input. ## Writing Units * Use '^' to denote units with a superscript. * **For example:** mm^2 means mm2 * Use \* for multiplying units. * Use / for dividing units. ## Accepted Base Units Below is a list of accepted units for: * [Length](#Length) * [Mass](#Mass) * [Time](#Time) * [Angle](#Angle) * [Temperature](#Temperature) * [Complex Units](<#Complex Units>) #### Length | Name | Abbreviation | Unit System | | - | - | - | | Micrometers | um | SI | | Millimeters | mm | SI | | Centimeters | cm | SI | | Meters | m | SI | | Kilometers | km | SI | | Inches | in | U.S. Customary | | Feet | ft | U.S. Customary | | Yards | yd | U.S. Customary | | Miles | mi | U.S. Customary | #### Mass | Name | Abbreviation | Unit System | | - | - | - | | Grams | g | SI | | Kilograms | kg | SI | | Ounces | oz | U.S. Customary | | Pounds | lbm | U.S. Customary | | Metric Ton | tonne | Metric | | Ton | ton | U.S. Customary | #### Time | Name | Abbreviation | Unit System | | - | - | - | | Milliseconds | ms | - | | Seconds | s | SI | | Minutes | min | - | | Hours | hr | - | #### Angle | Name | Abbreviation | Unit System | | - | - | - | | Degrees | deg | - | | Radians | rad | SI | #### Temperature Read more on using temperature units [here](https://support.ntopology.com/hc/en-us/articles/360060934274). | Name | Abbreviation | Unit System | | - | - | - | | Delta Farenheit | dF | U.S. Customary | | Delta Celcius | dC | SI | | Farenheit | F | U.S. Customary | | Celcius | C | SI | | Kelvin | K | SI | #### Complex Units | Name | Abbreviation | Unit System | | - | - | - | | Newton | N | Metric | | Kilonewton | kN | Metric | | Pound Force | lbf | U.S. Customary | | Pascal | Pa | Metric | | Megapascal | MPA | Metric | | Gigapascal | GPa | Metric | | Pound Per Square Inch | psi | U.S. Customary | | Kilopound Per Square Inch | ksi | U.S. Customary | | Hertz | Hz | SI | | British Thermal Unit | BTU | U.S. Customary | | Watt | W | SI | | Kilowatt | kW | SI | | Megawatt | MW | SI | | Joule | J | SI | # Variables Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/_using_blocks/variables \> A variable is a placeholder for something that may change. They are used in nTop to do exactly that, change parameters quickly and easily. A variable can be any block or parameter in the Notebook. By declaring a block as a variable, entire parts can be changed quickly and parametrically. An entire Notebook of functions can automatically be computed and rebuilt by changing values in the variable. Variables also allow for quick and easy organization and understanding of your Notebook since the variable blocks don't get nested within another block. ## Block Variables * Select the block. * Right-click along the top of the block. * Select "Make Variable". A variable looks different from a regular block. The block name moves to the left and sits on top of the block color (related to the block type). Below you can see a variable vs a regular block. ![variable](https://storage.googleapis.com/files-learn/static/images/using-blocks/variablecompare.png) A block variable never "nests" inside another block. Instead, a "chip" is created to show that the variable is inserted in that block. Watch this quick gif below to see how to create a variable, re-name it, and insert it into another block or multiple blocks. ![variable](https://storage.googleapis.com/files-learn/static/images/using-blocks/variable.gif) ## Parameter Variables * R-click over an Input Name. * Select "Make Variable". A parameter variable is a useful way to quickly change a specific aspect of a block. It makes it clear what input can change. See the gif below on how a parameter variable is made. ![parameter](https://storage.googleapis.com/files-learn/static/images/using-blocks/parameter.gif) ## Use the Information Panel to create Property variables * Expand the (?) symbol on the block to open the Info Panel. * Go to the Properties Tab. * Drag any property into the Notebook to create a variable of that property (these properties are linked to the block they came from). You can also drag any chip directly into an input, instead of the Notebook. ![variable](https://storage.googleapis.com/files-learn/static/images/using-blocks/property.gif) ## Removing Variable Contents * Empty a variable by R-clicking on the variable and selecting "Remove Contents". Emptying a variable allows you to quickly change the contents of that variable while keeping the variable chip inserted as inputs in other blocks. In this example, the contents of a Cube block variable are being removed. In order to allow any Implicit Body input, the Block Type needs to change from Cube to Implicit Body. To do this, click on the icon and search the list or type in the desired input type. Changing the Sphere and Cube into variables allows you to quickly replace the input without needing to Right-click and remove contents. ![remove](https://storage.googleapis.com/files-learn/static/images/using-blocks/remove.gif) ## Reuse Variable Chips You can reuse variable chips that are already in an input by using *CTRL + Drag* and dragging it into a new input. # Custom Blocks Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/custom_blocks #### Custom Blocks Any Notebook with a defined Output can be repackaged into a single, customized block, complete with custom inputs and descriptions. This is one of the most powerful features of nTop because it enables you to package the work of one of your entire file’s notebooks into one block, for the purpose of creating a fast way to replay the entire step by step process recorded in that notebook. The new custom block can be saved and then reused in other files, or shared with other nTop users. Users can author their own blocks that contain more than one function. Custom blocks can be used inside other custom blocks. There are two methods for creating custom blocks, an external method and an internal method. ##### Direct Custom Block Creation (Internal) We made enhancements to make Custom Blocks more accessible, allowing you to create Custom Blocks directly in your nTop instance. In addition, the Imported Blocks menu now resides in the Imports tab of the left-hand sidebar instead of in a pop-up window to the right of the notebook. **What it does:** Once you select "Create New Custom Block" in the imports tab of the left-hand sidebar, it will bring you inside a new notebook where you can create your Custom Block. Once created, you can select the "Back" icon and so long as your Custom Block is valid, it will be automatically added to the original notebook. **Tips:** * All Custom Blocks created within a nTop file are internalized - changes will only be reflected in the currently open file. If you want the Custom Block to be externalized, export the Custom Block to a directory and import it into other files. ![Direct Custom Block Creation](https://storage.googleapis.com/files-learn/static/ReleaseImages/3.36/cb.gif) ##### Creating Custom Blocks (External) 1. In nTop, create a workflow in the “Body” of a new notebook. 2. Identify the parameters that will serve as Inputs to the custom block and move them to the “Inputs” section of the notebook. Drag and drop Variables into the Inputs section or right click and select “Make model input” to move to-be variables out of the body into the Inputs section. 3. Identify the output that will be accessible once compiled into a custom block. To add an output, drag the block containing the output into the “Output” section of the notebook or alternatively type the object’s name in the Output section text field. Both of these methods will produce an output variable chip. 4. Name your custom block by double clicking the name at the top of the notebook. This is independent from the nTop file name. Once inputs and an output have been defined, simply save the nTop File. ![](https://storage.googleapis.com/files-learn/static/images/using-notebooks/custom-blocks_creating.gif) ##### Importing Blocks 1. Launch a new instance of nTop and import the custom block by going to File > Import and selecting the corresponding nTop File. 2. Launch the Imported Block window in an instance of nTop, by going to Window > Imported Blocks or by selecting the Imported Blocks icon in the notebook header, and click on “Import Block” to select the corresponding nTop File. ![Import Blocks](https://storage.googleapis.com/files-learn/static/ReleaseImages/2.19/ImportBlocks.png) ![Add Blocks](https://storage.googleapis.com/files-learn/static/ReleaseImages/2.19/AddBlocks.png) 3. When successfully imported, the block will appear in the notebook and the number on the icon will update to reflect the total number of imported blocks in the file ![Add Import Block To Notebook](https://storage.googleapis.com/files-learn/static/ReleaseImages/2.19/AddImportBlockToNotebook.png) 4. From the search bar at the top of the notebook, add the custom block to the notebook by searching for its name. When loaded, the custom block will appear as a single block in the body of the notebook. If changes are made to the nTop File containing the unpacked custom block, you’ll need to re-import the custom block to see the changes take effect. ##### Deleting Unused Blocks 1. Delete unused blocks from your file by right clicking on the name in the imported block manager and select delete. ![Delete Imported Blocks](https://storage.googleapis.com/files-learn/static/ReleaseImages/2.19/DeleteImportedBlocks2.png) * A block can only be deleted if it is not used in the notebook. * If a user tries to delete a block that is in the Notebook, an error message will appear stating that all instances of that block in the notebook need to be deleted first. ![Delete Block Message](https://storage.googleapis.com/files-learn/static/ReleaseImages/2.19/DeleteBlockMessage.png) # Introduction Source: https://docs.ntop.com/Product-Documentation/ntop/_using-blocks/introduction The Notebook documents and represents an engineering workflow in nTop. It records all functions (in the form of Blocks) performed and captures a process that can work on any part, allowing you to reuse the workflow to generate new designs. The Notebook contains all the Blocks in your file. All operations in nTop run through Blocks; these are the fundamental elements that create and modify geometry, input data, or output data. We refer to using Blocks and the Notebook together as the block system. The block system provides a visual programming environment that captures engineering workflows while creating geometry. You will not need to learn a programming language or write code to use functional modeling operations in nTop. This is enabled by a system of modular blocks that can seamlessly integrate with one another to allow anyone to capture important workflows, embed them with designs for downstream use, and carefully control necessary variables and parameters. ## Notebook * Contains all the functions in your workflow. * Order of the blocks doesn't matter. ## Blocks * Each block serves as a function. * Given an input, a block computes an output that can also be used as inputs for other blocks. ![List Block](https://storage.googleapis.com/files-learn/static/images/using-blocks/intro.png) # Block Documentation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation ![Block Documentation](https://storage.googleapis.com/files-learn/static/images/block_doc/blockimg.png) > **[Blocks](./block-documentation/blocks)** > **[Types](./block-documentation/types)** > **[Enums](./block-documentation/enums)** # Blocks Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks ### Create #### Primitives > **[Box](blocks/create/primitives/box)** > > Create a box from a center point, length, width, and height. > **[Cube](blocks/create/primitives/cube)** > > Create a Cube with equal length sides. > **[Box from Corners](blocks/create/primitives/box-from-corners)** > > Create a box from two corner points. > **[Rounded Box](blocks/create/primitives/rounded-box)** > > Create a box from two corner points and an edge radius. > **[Skewed Box](blocks/create/primitives/skewed-box)** > > Create a skewed box from 3 vectors. > **[Cylinder](blocks/create/primitives/cylinder)** > > Create a cylinder from two points. > **[Cylinder from Line Segment](blocks/create/primitives/cylinder-from-line-segment)** > > Create a Cylinder along a line segment with a given radius. > **[Rounded Cylinder](blocks/create/primitives/rounded-cylinder)** > > Create a Rounded Cylinder from two points and two radii. > **[Capsule](blocks/create/primitives/capsule)** > > Create a capsule. > **[Sphere](blocks/create/primitives/sphere)** > > Create a sphere from a center point and radius. > **[Cone](blocks/create/primitives/cone)** > > Create a cone from two points and two radii. > **[Torus](blocks/create/primitives/torus)** > > Create a torus from a center point, axis, and two radii. > **[Regular Polygon](blocks/create/primitives/regular-polygon)** > > Create a radially symmetric polygon. > **[Circle](blocks/create/primitives/circle)** > > Create a circle from a center point, radius, and normal vector. > **[Bounding Box](blocks/create/primitives/bounding-box)** > > Create a bounding box from two corner points. > **[Rectangle](blocks/create/primitives/rectangle)** > > Create a rectangle from a center point, length, and width. > **[Rectangle by Points](blocks/create/primitives/rectangle-by-points)** > > Create a rectangle from two corner points. > **[Slot](blocks/create/primitives/slot)** > > Create a slot from a center point, width, and height. > **[Slot by Points](blocks/create/primitives/slot-by-points)** > > Create a slot from two end points. > **[Spline Distance Field](blocks/create/primitives/spline-distance-field)** > > Create a Spline distance field. The signed distance of a planar Spline curve will be returned. > **[Cubic Bezier Distance Field](blocks/create/primitives/cubic-bezier-distance-field)** > > Create a cubic Bezier distance field. The signed distance of a planar cubic Bezier curve will be returned. > **[Conic Distance Field](blocks/create/primitives/conic-distance-field)** > > Create a conic section distance field. The signed distance of a planar conic curve will be returned. #### Vectors > **[Point](blocks/create/vectors/point)** > > Create a point from its XYZ components. > **[Vector](blocks/create/vectors/vector)** > > Create a vector from its XYZ components. > **[Plane](blocks/create/vectors/plane)** > > Create a Plane from an origin and Vector directions as axes. > **[Plane from Normal](blocks/create/vectors/plane-from-normal)** > > Create a Plane from an origin and a Vector normal direction. > **[Axis](blocks/create/vectors/axis)** > > Create an Axis from a point and a direction Vector. > **[Frame](blocks/create/vectors/frame)** > > Create a frame from an origin and axes. > **[Offset Plane](blocks/create/vectors/offset-plane)** > > Offset a plane by a distance. Positive values will offset along the plane's normal and negative directions will offset against the plane's normal. > **[Point between Points](blocks/create/vectors/point-between-points)** > > Create a point linearly interpolated between two points. > **[Point in Frame](blocks/create/vectors/point-in-frame)** > > Create a Point at specified local coordinates within a Frame. #### Curves > **[Line](blocks/create/curves/line)** > > Create a line with the given two points. > **[Line by Direction](blocks/create/curves/line-by-direction)** > > Create a line segment from a point, direction, and length. > **[Spline by Control Points](blocks/create/curves/spline-by-control-points)** > > Create a Spline using a list of points as control points. > **[Spline through Points](blocks/create/curves/spline-through-points)** > > Create a Spline that passes through multiple points. > **[Spline by Tangents](blocks/create/curves/spline-by-tangents)** > > Create a cubic spline that passes through multiple points with corresponding tangent vectors. > **[Polyline](blocks/create/curves/polyline)** > > Create a Polyline from a list of points. > **[Polycurve from Curves](blocks/create/curves/polycurve-from-curves)** > > Create a polycurve from a list of curves. Curves must have shared endpoints. > **[Arc](blocks/create/curves/arc)** > > Create an arc intersecting three points. > **[Arc by Tangent](blocks/create/curves/arc-by-tangent)** > > Create an arc from a start point, tangent direction, and end point. > **[Arc by Angle](blocks/create/curves/arc-by-angle)** > > Create an arc from an axis, start point, and angle. > **[Arc Tangent to Curve](blocks/create/curves/arc-tangent-to-curve)** > > Create an Arc tangent to a curve from an end point and radius. > **[Fillet Curves](blocks/create/curves/fillet-curves)** > > Create an arc connection between coplanar curves sharing an endpoint and trim the inputs. Fillet is applied at the interior of the vertex. > **[Fillet Polycurve Vertices](blocks/create/curves/fillet-polycurve-vertices)** > > Create a fillet arc at each vertex of a polycurve. Fillets are applied to the interior angle at each vertex. Neighboring segments must be coplanar. > **[Conic by Points](blocks/create/curves/conic-by-points)** > > Create a conic specified by three points and a rho value. > **[Conic by Tangents](blocks/create/curves/conic-by-tangents)** > > Create a conic specified by two points, two tangents, and a rho value. The apex point of the conic will be determined by the intersection of the tangent lines at the start and end points. > **[Bridge Curve](blocks/create/curves/bridge-curve)** > > Create a smooth spline connection with G0, G1 or G2 continuity, and optionally trim the input curves and join the result into a Polycurve. > **[Trim Curve](blocks/create/curves/trim-curve)** > > Trim a curve with an implicit body. A list of trimmed curves is returned. > **[Extend Curve](blocks/create/curves/extend-curve)** > > Extend a curve by a given distance from one or both of its ends, returning the extended curve as a Polycurve. > **[Intersection Points](blocks/create/curves/intersection-points)** > > Returns a list of intersection points between a Curve and an Implicit Body. > **[Point along Curve](blocks/create/curves/point-along-curve)** > > Create a point at a specified distance along a curve. > **[Frame Along Curve](blocks/create/curves/frame-along-curve)** > > Create a frame at a specified distance along a curve. The resulting frame will have its Z axis along the curve tangent, its X axis along the curve normal, and its Y axis along the curve binormal. > **[Mirror Curve](blocks/create/curves/mirror-curve)** > > Mirror a curve about a plane, returning only the mirrored copy. > **[Evaluate Curvature](blocks/create/curves/evaluate-curvature)** > > Evaluate the curvature of a curve at a specified distance along a curve. > **[Polygon from Points](blocks/create/curves/polygon-from-points)** > > Create a polygon from planar points. > **[Profile from Curves](blocks/create/curves/profile-from-curves)** > > Create a profile from a list of curves. > **[Merge Profiles](blocks/create/curves/merge-profiles)** > > Merge multiple Profiles into a single Profile. Duplicate vertices will not be removed. #### Color > **[Color](blocks/create/color/color)** > > Create a color from R, G, B, and A values between 0 and 1. ### Modeling #### Operations > **[Extrude Profile](blocks/modeling/operations/extrude-profile)** > > Create an extrusion from a profile, distance, and direction. > **[Extruded Cut](blocks/modeling/operations/extruded-cut)** > > Extrude and Boolean Subtract a Profile from a solid. The profile will be cut through the entirety of the Target body. > **[Offset Body](blocks/modeling/operations/offset-body)** > > Offset the surface of an Implicit Body inward or outward. Positive values will offset outward, and negative values will offset inward. > **[Thicken Body](blocks/modeling/operations/thicken-body)** > > Create a thickened hollow Implicit body using an input implicit body boundary as a mid-surface, effectively offsetting the body's surface in both the positive and negative directions. > **[Shell](blocks/modeling/operations/shell)** > > Hollow an object by offsetting inward or outward the outer surface of an implicit body. > **[Shear](blocks/modeling/operations/shear)** > > Shear an implicit body in a direction. > **[Revolve Profile](blocks/modeling/operations/revolve-profile)** > > Revolve a profile around an axis. > **[Sweep along One Rail](blocks/modeling/operations/sweep-along-one-rail)** > > Sweep a section of an implicit body along a rail curve while a vector field drives its orientation. > **[Sweep along Two Rails](blocks/modeling/operations/sweep-along-two-rails)** > > Sweep a section of an implicit body along a spine curve while two rail curves drive its width and orientation. > **[Sweep Profile](blocks/modeling/operations/sweep-profile)** > > Sweep a profile along a curve. > **[Twist](blocks/modeling/operations/twist)** > > Twist an implicit body. > **[Array Body](blocks/modeling/operations/array-body)** > > Array an implicit body Linearly in the X, Y, and Z directions. > **[Polar Array Body](blocks/modeling/operations/polar-array-body)** > > Array an Implicit Body around an Axis. > **[Mirror Body](blocks/modeling/operations/mirror-body)** > > Mirrors an Implicit Body about a plane. > **[Conic Section Sweep](blocks/modeling/operations/conic-section-sweep)** > > Creates an implicit body by sweeping a conic section along a spine curve between two rail curves, where the conic shape is controlled by a spatially-varying Rho field. The Rho parameter defines the conic shape factor at each point along the sweep (0.5 for parabolic, \<0.5 for elliptical, >0.5 for hyperbolic sections), allowing smooth transitions between different conic types. > **[Conic Section Sweep by Tangent](blocks/modeling/operations/conic-section-sweep-by-tangent)** > > Creates an implicit body by sweeping a conic section along a spine curve between two rail curves, where the conic shape is controlled by spatially-varying Rho fields and tangent vector fields. The Rho parameter defines the conic shape factor at each point along the sweep (0.5 for parabolic, \<0.5 for elliptical, >0.5 for hyperbolic sections), allowing smooth transitions between different conic types. > **[Cubic Bezier Section Sweep](blocks/modeling/operations/cubic-bezier-section-sweep)** > > Creates an implicit body by sweeping a cubic Bézier section along a spine between two rail curves, where the curve shape is controlled by spatially-varying tangent vector fields and their magnitudes at each rail. The tangent vector fields define the direction of the Bézier control handles at each point along the sweep, while the magnitude fields control their lengths, enabling precise control over the curvature and smoothness of the swept surface. #### Booleans > **[Boolean Union](blocks/modeling/booleans/boolean-union)** > > Combine multiple Implicit Bodies into a single Implicit Body. > **[Boolean Subtract](blocks/modeling/booleans/boolean-subtract)** > > Boolean subtract the Implicit bodies with a blend > **[Boolean Intersect](blocks/modeling/booleans/boolean-intersect)** > > Create an Implicit Body where the input bodies spatially overlap. > **[Clearance](blocks/modeling/booleans/clearance)** > > Subtract an Implicit Body from another with additional clearance between them. This can be used for ensuring there is a minimum distance between two bodies. > **[Pipe Intersection](blocks/modeling/booleans/pipe-intersection)** > > Add a pipe at the intersection of two implicit bodies. #### Remap > **[Remap Cylindrical Body](blocks/modeling/remap/remap-cylindrical-body)** > > Remap an implicit body into a cylindrical space. The only values that will be mapped are values along the positive X-axis, and the Y-axis between -length/2 and +length/2. This block will also attempt to scale the field values to compensate for distortion. If the compensation is not preferred, use the Remap Cylindrical Field block. > **[Remap Spherical Body](blocks/modeling/remap/remap-spherical-body)** > > Remap an implicit body into a spherical space. The only values that will be mapped are values along the positive X-axis, the Y-axis between -length/2 and +length/2, and the positive Z-axis. This block will also attempt to scale the field values to compensate for distortion. If the compensation is not preferred, use the Remap Spherical Field block. > **[Remap Scale Body](blocks/modeling/remap/remap-scale-body)** > > Remap an implicit body to scale it in the X, Y, and Z directions. This block will attempt to scale the field values to compensate for distortion. If the compensation is not preferred, use the Remap Scale Field block. #### Evaluation > **[Mass Properties](blocks/modeling/evaluation/mass-properties)** > > Calculate the mass properties of an implicit body. > **[Surface Area](blocks/modeling/evaluation/surface-area)** > > Calculates the surface area of an Implicit Body. > **[Volume Integral](blocks/modeling/evaluation/volume-integral)** > > Integrate a function through the volume of an implicit body. > **[Surface Integral](blocks/modeling/evaluation/surface-integral)** > > Integrate a function over the surface of an implicit body. > **[Curve Integral](blocks/modeling/evaluation/curve-integral)** > > Integrate a Scalar Field along a curve. > **[Distance to Curve from Axis](blocks/modeling/evaluation/distance-to-curve-from-axis)** > > Computes the signed distance from a planar curve to an axis. The curve must behave like a function relative to the axis, meaning it has exactly one output distance for each input along the axis. > **[Distance Along Direction](blocks/modeling/evaluation/distance-along-direction)** > > Return a Scalar Field of the distance along the input direction to a target surface Mesh. > **[Perpendicular Distance](blocks/modeling/evaluation/perpendicular-distance)** > > Returns a scalar field of the perpendicular distance to a target mesh. > **[Curvature](blocks/modeling/evaluation/curvature)** > > Create a Scalar Field of the curvature values of an Implicit Body or a surface Mesh. > **[Gaussian Curvature](blocks/modeling/evaluation/gaussian-curvature)** > > Create an implicit body containing the Gaussian curvature values of an object. #### Utilities > **[Reparameterize CAD Face](blocks/modeling/utilities/reparameterize-cad-face)** > > Reparameterize the UV space of a CAD face. > **[Stitch CAD Surface Bodies](blocks/modeling/utilities/stitch-cad-surface-bodies)** > > Attempts to merge multiple CAD surface bodies or CAD faces together within a tolerance, always outputs the results as a list. For those looking to join together multiple CAD solid bodies it is recommended to use the Boolean Union operation, which requires implicit bodies. > **[Stitch Adjacent CAD Faces](blocks/modeling/utilities/stitch-adjacent-cad-faces)** > > Stitches together adjacent CAD faces into a single CAD body. During this operation CAD faces are not merged into a single face or surface. When this operation results in multiple CAD bodies an error will occur, instead use Stitch CAD Bodies which can return multiple bodies. For those looking to generate a Lattice across multiple CAD faces, it is recommended to generate a quad mesh from this block and then use the Cell Map from Quad Mesh + Periodic Lattice Blocks. > **[Merge CAD Bodies](blocks/modeling/utilities/merge-cad-bodies)** > > Combine a solid body with multiple inner voids to create a body with inner shells. > **[Section Body](blocks/modeling/utilities/section-body)** > > Extract a profile from a section of an implicit body. > **[Set Bounding Box](blocks/modeling/utilities/set-bounding-box)** > > Set the Bounding Box of an Implicit Body. > **[Refine Bounding Box](blocks/modeling/utilities/refine-bounding-box)** > > Refine the bounding box of an implicit body given a tolerance. > **[Smoothen Body](blocks/modeling/utilities/smoothen-body)** > > Smoothen an implicit Body with a Gaussian image kernel. > **[Flip Mesh Normals](blocks/modeling/utilities/flip-mesh-normals)** > > Flips the normal of each face of the input Mesh. > **[Collapse Vertices](blocks/modeling/utilities/collapse-vertices)** > > Collapses and merges the vertices of a Graph that are within a given distance of each other. > **[Merge Graphs](blocks/modeling/utilities/merge-graphs)** > > Merges multiple Graph together into a single Graph. Duplicate vertices, beams, and faces will be removed. > **[Split Mesh](blocks/modeling/utilities/split-mesh)** > > Split a mesh into a list of connected components. > **[Filter Mesh List](blocks/modeling/utilities/filter-mesh-list)** > > Filter a mesh list using a volume threshold. > **[Remove Mesh Faces by Body](blocks/modeling/utilities/remove-mesh-faces-by-body)** > > Removes faces of a mesh using an Implicit Body. Faces with at least one vertex within the implicit will remain. If Reverse is checked, faces with at least one vertex outside of the implicit will remain. > **[Filter Mesh by Flood Fill](blocks/modeling/utilities/filter-mesh-by-flood-fill)** > > Select faces of a surface mesh using a flood fill operation. The block chooses the closest mesh face to the specified origin (in a specific direction, if provided), and uses a flood fill operation to select all faces that can be reached from that face without crossing edges at which the angle between face normals exceeds the specified angle. > **[Simplify Mesh by Amount](blocks/modeling/utilities/simplify-mesh-by-amount)** > > Simplifies a Mesh by a specified target percentage, represented as a value from 0 to 1. An input of 0.1 will remove approximately 10 percent of the faces. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. > **[Simplify Mesh by Threshold](blocks/modeling/utilities/simplify-mesh-by-threshold)** > > Reduces the number of faces in a mesh as much as possible while keeping the distance between the surfaces of the input and output meshes below the specified Threshold. If the deviation from the output Mesh to input Mesh is larger than expected, try remeshing the input Mesh with the Remesh Surface block before using Simplify Mesh by Threshold. > **[Triangulate Mesh](blocks/modeling/utilities/triangulate-mesh)** > > Triangulates a mesh by splitting each quad to a pair of triangular faces. Triangular faces will be left unchanged. > **[Quadrangulate Mesh](blocks/modeling/utilities/quadrangulate-mesh)** > > Quadrangulate a triangular or quad mesh by remeshing. > **[Refine Mesh](blocks/modeling/utilities/refine-mesh)** > > Refine a mesh with subdivision. Catmull-Clark subdivision is applied for quad dominant meshes. Loop subdivision is used for triangle meshes. > **[Mesh Face from Points](blocks/modeling/utilities/mesh-face-from-points)** > > Creates a Mesh comprised of a single face from 3 or 4 vertex points. Input the face's vertices in counter-clockwise order. If out of order, the face will be self-intersecting. > **[Project Points to Plane](blocks/modeling/utilities/project-points-to-plane)** > > Project multiple points to a plane. > **[Project Curve to Plane](blocks/modeling/utilities/project-curve-to-plane)** > > Project a Curve to a Plane. > **[Closest Point](blocks/modeling/utilities/closest-point)** > > Finds the point on a Curve closest to the input point; returns a Closest Point Properties object, including the output point, the output point's normal vector, and the distance to the original point. If multiple points on the Curve are closest to the input Point, only one will be found. > **[Random Points on Mesh](blocks/modeling/utilities/random-points-on-mesh)** > > Generate a randomized list of points on the surface of a mesh. > **[Random Points in Body (Old)](blocks/modeling/utilities/random-points-in-body-old)** > > Generate a randomized list of points within an implicit body. > **[Random Points in Volume Mesh](blocks/modeling/utilities/random-points-in-volume-mesh)** > > Generate a randomized list of points inside a volume mesh. > **[Offset Voxel Grid](blocks/modeling/utilities/offset-voxel-grid)** > > Apply an offset to the narrow band of a voxel grid. > **[Smoothen Voxel Grid](blocks/modeling/utilities/smoothen-voxel-grid)** > > Apply a filtering function to smoothen a voxel grid. > **[Ray Cast](blocks/modeling/utilities/ray-cast)** > > Computes the intersection between the zero-surface of an implicit and a ray via sphere tracing. > **[Equidistant Points on Curve](blocks/modeling/utilities/equidistant-points-on-curve)** > > Sample a curve using a specified length increment. > **[Get CAD Bodies](blocks/modeling/utilities/get-cad-bodies)** > > Extracts all CAD Bodies from a Component. > **[Get CAD Bodies by Color](blocks/modeling/utilities/get-cad-bodies-by-color)** > > Extracts CAD Bodies from a Component based on color. > **[Get CAD Bodies by Name](blocks/modeling/utilities/get-cad-bodies-by-name)** > > Extracts CAD Bodies from a Component based on name. > **[Get CAD Faces](blocks/modeling/utilities/get-cad-faces)** > > Extract all CAD Faces from a CAD Body. > **[Get CAD Faces by Color](blocks/modeling/utilities/get-cad-faces-by-color)** > > Extracts CAD Faces from a CAD Body based on color. > **[Get CAD Faces by Name](blocks/modeling/utilities/get-cad-faces-by-name)** > > Extracts CAD Faces from a CAD Body based on name. > **[Evaluate Surface](blocks/modeling/utilities/evaluate-surface)** > > Create a Point on a surface at specified U and V parameters. > **[Bounding Box Union](blocks/modeling/utilities/bounding-box-union)** > > Combine multiple bounding boxes into a single bounding box. ### Lattices #### Lattice > **[Rectangular Volume Lattice](blocks/lattices/lattice/rectangular-volume-lattice)** > > Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. > **[Cylindrical Volume Lattice](blocks/lattices/lattice/cylindrical-volume-lattice)** > > Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. > **[Spherical Volume Lattice](blocks/lattices/lattice/spherical-volume-lattice)** > > Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. > **[Periodic Lattice](blocks/lattices/lattice/periodic-lattice)** > > Generates a Lattice by tessellating a Unit Cell through a Cell Map. #### Unit Cells > **[Graph Unit Cell](blocks/lattices/unit-cells/graph-unit-cell)** > > Single parameter graph Unit Cell. Parameter 1: Thickness. > **[TPMS Unit Cell with Offset](blocks/lattices/unit-cells/tpms-unit-cell-with-offset)** > > Single Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS are crystalline minimal surfaces, meaning they are periodic in 3 dimensions. Parameter 1: Mid-surface Offset - Offset of the TPMS as a positive or negative approximate distance. This will shift the mid-surface wall inward or outward. > **[Walled TPMS Unit Cell](blocks/lattices/unit-cells/walled-tpms-unit-cell)** > > Single Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS Unit Cells are periodic in all 3 dimensions. Parameter 1: Thickness - Thickness of the TPMS walls. > **[Walled TPMS Unit Cell with Offset](blocks/lattices/unit-cells/walled-tpms-unit-cell-with-offset)** > > 2 Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS Unit Cells are periodic in all 3 dimensions. Parameter 1: Thickness - Thickness of the TPMS walls. Parameter 2: Mid-surface Offset - Offset of the TPMS as a positive or negative approximate distance. This will shift the mid-surface wall inward or outward. > **[Orient Unit Cell](blocks/lattices/unit-cells/orient-unit-cell)** > > Changes the orientation of a Unit Cell. > **[Custom Unit Cell](blocks/lattices/unit-cells/custom-unit-cell)** > > Constructs a Non-parametric Unit Cell from an Implicit Body. > **[Import Unit Cell Rule](blocks/lattices/unit-cells/import-unit-cell-rule)** > > Import Unit Cell Rule file from an external location. #### Cell Maps > **[Rectangular Cell Map](blocks/lattices/cell-maps/rectangular-cell-map)** > > Creates a rectangular Cell Map within an Implicit Body. By default, the Cell Map's starting point is set to the min point of the body's bounding box. To customize the map's orientation and position, use the optional Frame input. > **[Cylindrical Cell Map](blocks/lattices/cell-maps/cylindrical-cell-map)** > > Creates a cylindrical Cell Map within an Implicit Body. By default, the Cell Map's starting point is auto-computed based on the body's principal axes about the center of mass. To customize the map's orientation and position, use the optional Frame input. > **[Spherical Cell Map](blocks/lattices/cell-maps/spherical-cell-map)** > > Creates a spherical Cell Map within an Implicit Body. By default, the Cell Map's starting point is set to the centroid of the body's bounding box. To customize the map's orientation and position, use the optional Frame input. > **[Cell Map from CAD Face](blocks/lattices/cell-maps/cell-map-from-cad-face)** > > Constructs a Cell Map from a CAD face. > **[Cell Map between CAD Faces](blocks/lattices/cell-maps/cell-map-between-cad-faces)** > > Constructs volumetric lattice cells between two CAD faces. > **[Cell Map from Quad Mesh](blocks/lattices/cell-maps/cell-map-from-quad-mesh)** > > Creates a Cell Map that is conformal to a quad mesh. Note that the underlying U, V field properties will not be continuous. #### Conformal > **[Lattice from Surface Mesh](blocks/lattices/conformal/lattice-from-surface-mesh)** > > Creates a Lattice from a surface Mesh using the features specified in the method input. > **[Lattice from Volume Mesh](blocks/lattices/conformal/lattice-from-volume-mesh)** > > Creates a Lattice from a Volume Mesh using the features specified in the method input. #### Stochastic > **[Voronoi Surface Lattice](blocks/lattices/stochastic/voronoi-surface-lattice)** > > Creates a Lattice from the Voronoi diagram of a list of Points restricted to the surface boundary of a body. > **[Voronoi Volume Lattice](blocks/lattices/stochastic/voronoi-volume-lattice)** > > Creates a Lattice from the Voronoi diagram of a list of Points within a volume. > **[Branched Lattice](blocks/lattices/stochastic/branched-lattice)** > > Creates a branching tree-like Lattice between two lists of points. > **[Delaunay Lattice](blocks/lattices/stochastic/delaunay-lattice)** > > Creates a Lattice forming a Delaunay tetrahedralization from a Point List. > **[Orthofoam Lattice](blocks/lattices/stochastic/orthofoam-lattice)** > > Creates an Orthofoam Lattice by generating beams between points within a certain distance and direction of each other. A scaling vector field is used to help influence the direction in which points will be connected. #### Utilities > **[Trim Cell Map](blocks/lattices/utilities/trim-cell-map)** > > Trims a Cell Map with an Implicit Body. > **[Warp Cell Map](blocks/lattices/utilities/warp-cell-map)** > > Warp the unit cell size distribution of a cell map using 3 sizing fields. > **[Trim Lattice](blocks/lattices/utilities/trim-lattice)** > > Trims a lattice with an Implicit Body as a trimming tool. > **[Modify Lattice Thickness](blocks/lattices/utilities/modify-lattice-thickness)** > > Modifies the thickness of a Lattice. > **[Merge Graphs](blocks/modeling/utilities/merge-graphs)** > > Merges multiple Graph together into a single Graph. Duplicate vertices, beams, and faces will be removed. > **[Extrude Lattice](blocks/lattices/utilities/extrude-lattice)** > > Creates directional ribs from the beams of a Lattice. > **[Extend Open Lattice Beams](blocks/lattices/utilities/extend-open-lattice-beams)** > > Extends open beams within a Lattice. > **[Collapse Vertices](blocks/modeling/utilities/collapse-vertices)** > > Collapses and merges the vertices of a Graph that are within a given distance of each other. > **[Collapse Vertices by Angle](blocks/lattices/utilities/collapse-vertices-by-angle)** > > Remove all of the intermediate vertices of a Graph where the vertex valency is equal to 2. All intermediate vertices will be removed by default, but an optional threshold angle may be used to preserve sharp vertices. > **[Graph from Line Segments](blocks/lattices/utilities/graph-from-line-segments)** > > Constructs a Graph from a list of Line Segments. Each Line Segment becomes a beam in the resulting Graph. Line Segments that share endpoints will join a shared vertex. Duplicate Line Segments will be removed. > **[Graph from Mesh Faces](blocks/lattices/utilities/graph-from-mesh-faces)** > > Constructs a Graph from the faces of a Mesh. > **[Lattice from Beams](blocks/lattices/utilities/lattice-from-beams)** > > Creates a Lattice from a list of filtered Beams. The Beams must have originated from the same Lattice. This block is used internally in the Filter Beams utility blocks. > **[Lattice from Graph](blocks/lattices/utilities/lattice-from-graph)** > > Creates a Lattice from a Graph and a Thickness Scalar Field. The Graph's existing thickness data will be overridden. > **[Filter Beams by Length](blocks/lattices/utilities/filter-beams-by-length)** > > Filters the beams of a Lattice by a beam length criteria and a conditional. > **[Filter Beams by Angle](blocks/lattices/utilities/filter-beams-by-angle)** > > Filters the beams of a Lattice by their angle with respect to a plane. > **[Filter Beams by Connectivity](blocks/lattices/utilities/filter-beams-by-connectivity)** > > Selects beams of an input Lattice that match a beam connectivity type. > **[Filter Beams by Containment](blocks/lattices/utilities/filter-beams-by-containment)** > > Filters the beams of a Lattice by a region and a containment. > **[Filter Beams by Thickness](blocks/lattices/utilities/filter-beams-by-thickness)** > > Filters the beams of a Lattice by a beam thickness criteria and a conditional. > **[Filter Beams](blocks/lattices/utilities/filter-beams)** > > Filters the beams of a Lattice based on a criteria. > **[Warp Cell Map to Body](blocks/lattices/utilities/warp-cell-map-to-body)** > > Warps the Cell Map to the Target Body's surface to achieve a conformal structure. The resulting cells will be warped to achieve conformality. To avoid large distortions, provide a Cell Map that is trimmed to the body with Trim Cell Map. > **[Lattice Pore Size](blocks/lattices/utilities/lattice-pore-size)** > > Calculates the pore diameters of any graph lattice. Pore diameter is defined as the diameter of the largest sphere that fits inside a pore without overlapping the structure. The output is a Point Map that contains each sphere's center point and diameter. Depending on the size and complexity of your lattice, the calculation may be CPU intensive. ### Fields #### Remap > **[Remap Field](blocks/fields/remap/remap-field)** > > Remap the values of a field by using separate X, Y, and Z scalar field components for a new evaluation location. > **[Remap Cylindrical Field](blocks/fields/remap/remap-cylindrical-field)** > > Remap a scalar field into a cylindrical space. The only values that will be mapped are values along the positive X-axis, and the Y-axis between -length/2 and +length/2. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Cylindrical Body block. > **[Remap Spherical Field](blocks/fields/remap/remap-spherical-field)** > > Remap a scalar field into a spherical space. The only values that will be mapped are values along the positive X-axis, the Y-axis between -length/2 and +length/2, and the positive Z-axis. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Spherical Body block. > **[Remap Scale Field](blocks/fields/remap/remap-scale-field)** > > Remap a scalar field to scale it in the X, Y, and Z directions. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Scale Body block. #### Periodic > **[Gyroid Field](blocks/fields/periodic/gyroid-field)** > > Create an unbounded Scalar Field of a dimensionless Gyroid periodic pattern, with values ranging from -1 to 1. > **[Diamond Field](blocks/fields/periodic/diamond-field)** > > Create an unbounded Scalar Field of a dimensionless Diamond periodic pattern, with values ranging from -1 to 1. > **[Schwarz Field](blocks/fields/periodic/schwarz-field)** > > Create an unbounded Scalar Field of a dimensionless Schwarz periodic pattern, with values ranging from -1 to 1. > **[Lidinoid Field](blocks/fields/periodic/lidinoid-field)** > > Create an unbounded Scalar Field of a dimensionless Lidinoid periodic pattern, with values ranging from -1 to 1. > **[SplitP Field](blocks/fields/periodic/splitp-field)** > > Create an unbounded Scalar Field of a dimensionless SplitP periodic pattern, with values ranging from -1 to 1. > **[Neovius Field](blocks/fields/periodic/neovius-field)** > > Create an unbounded Scalar Field of a dimensionless Neovius periodic pattern, with values ranging from -1 to 1. #### Noise > **[Simplex Noise 3D](blocks/fields/noise/simplex-noise-3d)** > > Create a simplex noise function. > **[Cellular Noise 3D](blocks/fields/noise/cellular-noise-3d)** > > Create a cellular noise function. #### Utilities > **[Smoothen Field](blocks/fields/utilities/smoothen-field)** > > Smoothen a field with a Gaussian image kernel. > **[Evaluate Field](blocks/fields/utilities/evaluate-field)** > > Return the Scalar values at specified locations of a Scalar Field. > **[Evaluate Field Gradient](blocks/fields/utilities/evaluate-field-gradient)** > > Evaluate the gradient of a scalar field at specific locations. > **[Set Bounding Box](blocks/modeling/utilities/set-bounding-box)** > > Set the Bounding Box of an Implicit Body. > **[Angle Field](blocks/fields/utilities/angle-field)** > > Generates a field that indicates angle with respect to a direction. > **[Field from Mesh Thickness](blocks/fields/utilities/field-from-mesh-thickness)** > > Measures the thickness of a Mesh and creates a Scalar Field of the values. The thickness of a Mesh is defined as twice the distance from a point on its medial axis to the surface. Only Meshes with non-degenerate medial axes are supported. Meshes with a degenerate medial axis, such as a sphere, may give unexpected results. > **[Field from Point Map](blocks/fields/utilities/field-from-point-map)** > > Create a Scalar Field from a map of points and value data. > **[Radial Basis Field from Point Map](blocks/fields/utilities/radial-basis-field-from-point-map)** > > Create a Scalar Field from a map of points and value data using radial basis interpolation. > **[Point Map](blocks/fields/utilities/point-map)** > > Create a Point Map by assigning a list of Scalars to a list of Points of the same length. > **[Import Scalar Point Map](blocks/fields/utilities/import-scalar-point-map)** > > Import scalar point map data from a CSV file. Each row of the source file should be formatted as "x, y, z, s." > **[Import Vector Point Map](blocks/fields/utilities/import-vector-point-map)** > > Import vector point map data from a CSV file. Each row of the source file should be formatted as "x, y, z, u, v, w." > **[Filter Points by Volume](blocks/fields/utilities/filter-points-by-volume)** > > Filters a list of points to retain those either inside, outside, or along the boundary of a implicit body and returns a point list of those satisfying the criteria. > **[Two Body Field](blocks/fields/utilities/two-body-field)** > > Generate a two body interpolation field from two implicits. ### Math #### Operations > **[Add](blocks/math/operations/add)** > > Return the addition of two Integers. > **[Subtract](blocks/math/operations/subtract)** > > Return the subtraction of one Integer from another. > **[Multiply](blocks/math/operations/multiply)** > > Return the multiplication of two Integers. > **[Divide](blocks/math/operations/divide)** > > Divide a Scalar number by another Scalar number. > **[Pow](blocks/math/operations/pow)** > > Return a Scalar number raised to a power, where Input A represents the number to raise and Input B represents the exponent. > **[Square](blocks/math/operations/square)** > > Return the square of an Integer. > **[Third Power](blocks/math/operations/third-power)** > > Return the third power of an Integer. > **[Fourth Power](blocks/math/operations/fourth-power)** > > Return the fourth power of an Integer. > **[Exp](blocks/math/operations/exp)** > > Evaluate the mathematical constant "e" raised to the input Scalar number. > **[Sqrt](blocks/math/operations/sqrt)** > > Return the square root of a Scalar number. > **[Third Root](blocks/math/operations/third-root)** > > Return the third root of a Scalar number. > **[Fourth Root](blocks/math/operations/fourth-root)** > > Return the fourth root of a Scalar number. > **[Nth Root](blocks/math/operations/nth-root)** > > Return the Nth root of a Scalar number, where Input A represents the number to root and Input B represents N. > **[Log](blocks/math/operations/log)** > > Return the natural logarithm of a Scalar number. > **[Mod](blocks/math/operations/mod)** > > Return the remainder from the division of one Integer from another. > **[Min](blocks/math/operations/min)** > > Return the smallest value between two Integers. > **[Max](blocks/math/operations/max)** > > Return the largest value between two Integers. > **[Average](blocks/math/operations/average)** > > Return an average of a list of Points. > **[Abs](blocks/math/operations/abs)** > > Return the absolute value of a Scalar number. #### Trigonometry > **[Sin](blocks/math/trigonometry/sin)** > > Return the sine of a Scalar number. > **[Cos](blocks/math/trigonometry/cos)** > > Return the cosine of a Scalar number. > **[Tan](blocks/math/trigonometry/tan)** > > Return the tangent of a Scalar number. > **[Asin](blocks/math/trigonometry/asin)** > > Return the inverse sine of a Scalar number. > **[Acos](blocks/math/trigonometry/acos)** > > Return the inverse cosine of a Scalar number. > **[Atan](blocks/math/trigonometry/atan)** > > Return the inverse tangent of a Scalar number. > **[Atan2](blocks/math/trigonometry/atan2)** > > Return the four-quadrant inverse tangent of a Scalar number. #### Vectors > **[Angle between Vectors](blocks/math/vectors/angle-between-vectors)** > > Return an interior angle between two Vector directions. > **[Perpendicular Vector](blocks/math/vectors/perpendicular-vector)** > > Get an arbitrary perpendicular vector from the input vector. > **[Vector Field from Components](blocks/math/vectors/vector-field-from-components)** > > Create a vector field from scalar field components. > **[2D Vector Field](blocks/math/vectors/2d-vector-field)** > > Create a 2D vector field from scalar field components. > **[Vector Field from Gradient](blocks/math/vectors/vector-field-from-gradient)** > > Create a vector field from the gradient directions of a field. > **[Dot Product](blocks/math/vectors/dot-product)** > > Return the dot product of two Vectors. > **[Cross Product](blocks/math/vectors/cross-product)** > > Return the cross product of two Vectors. > **[Angle with Respect to Plane](blocks/math/vectors/angle-with-respect-to-plane)** > > Derives the angle of a vector relative to a plane. Returns the absolute value of the smallest angle in degrees. #### Constants > **[e](blocks/math/constants/e)** > > Return the mathematical constant e, or Euler's number. > **[Gravity](blocks/math/constants/gravity)** > > Return the standard acceleration from gravity near the surface of Earth. > **[Phi](blocks/math/constants/phi)** > > Return the mathematical constant phi, or golden ratio. > **[Pi](blocks/math/constants/pi)** > > Return the mathematical constant pi. #### Logic > **[And](blocks/math/logic/and)** > > Return a Bool of the logical AND operation on two Bools. > **[Or](blocks/math/logic/or)** > > Return a Bool of the logical OR operation on two Bools. > **[Xor](blocks/math/logic/xor)** > > Return a Bool of the logical XOR operation on two Bools. > **[Not](blocks/math/logic/not)** > > Return a Bool of the logical NOT operation on a Bool value. > **[Less Than](blocks/math/logic/less-than)** > > Return a true Bool value if the first Scalar number is less than the second, false if otherwise. > **[Greater Than](blocks/math/logic/greater-than)** > > Return a true Bool value if the first Scalar number is greater than the second, false if otherwise. > **[Less Than or Equal to](blocks/math/logic/less-than-or-equal-to)** > > Return a true Bool value if the first Scalar number is less than or equal to the second, false if otherwise. > **[Greater Than or Equal to](blocks/math/logic/greater-than-or-equal-to)** > > Return a true Bool value if the first Scalar number is greater than or equal to the second, false if otherwise. > **[Not Equal](blocks/math/logic/not-equal)** > > Return a true Bool value if the first Scalar number does not equal the second, false if otherwise. > **[Equals](blocks/math/logic/equals)** > > Return a true Bool value if the first Color is equal to the second Color, false if otherwise. #### Utilities > **[Evaluate Expression](blocks/math/utilities/evaluate-expression)** > > Evaluate an expression with local variables. > **[Linear Map](blocks/math/utilities/linear-map)** > > Map a Scalar number in one range to its relative position in another range. This will map the value in a linear fashion, and will not clamp values outside the bounds. > **[Clamp](blocks/math/utilities/clamp)** > > Clamp a scalar value between min and max. Values lower than min will clamp to min, and values greater than max will clamp to max. > **[Nan Fill](blocks/math/utilities/nan-fill)** > > Return a Scalar Field with all "Not a Number" values in Input A replaced by values in Input B. > **[Compare](blocks/math/utilities/compare)** > > Create a field that compares the values of one field to another. If the first field value is lower, -1 will be returned. If the two field values are equal, 0 will be returned. If the first field value is higher, 1 will be returned. > **[Ramp](blocks/math/utilities/ramp)** > > Ramp scalar value in one range to its relative position in another range, with clamped bounds. > **[Mix](blocks/math/utilities/mix)** > > Mix one scalar value with another scalar value, based on a mixing factor. > **[Transfer Function](blocks/math/utilities/transfer-function)** > > Use piece-wise interpolation to compute the output value of a function approximated by a set of field data points. > **[Sequence from Bounds](blocks/math/utilities/sequence-from-bounds)** > > Create an equally spaced sequence between two values. > **[Sequence](blocks/math/utilities/sequence)** > > Create an equally spaced sequence of values. > **[Random Sequence](blocks/math/utilities/random-sequence)** > > Creates a sequence of random scalar numbers from 0 to 1. > **[Ceiling](blocks/math/utilities/ceiling)** > > Map a value to the least increment of an interval that is greater than or equal to the value. > **[Floor](blocks/math/utilities/floor)** > > Map a value to the greatest increment of an interval less than or equal to the value. > **[Round](blocks/math/utilities/round)** > > Map a value by either rounding up to the smallest increment of an interval that is not less than the value or by rounding down to the largest increment of an interval that is not greater than the value. ### Structures #### Analysis > **[Static Analysis](blocks/structures/analysis/static-analysis)** > > Calculate displacements, strains, stresses, and reaction forces on an FE Model subject to applied boundary conditions. The loads are assumed to be applied slowly until the model reaches a state of equilibrium, and the relationship between loads and displacements is assumed to be linear. All inertial and damping forces are neglected. > **[Modal Analysis](blocks/structures/analysis/modal-analysis)** > > Calculate the natural frequencies and mode shapes of an FE Model subject to prescribed boundary conditions. This block calculates a specified number of vibration modes. Providing minimum and maximum frequencies bounds the range of frequencies to be returned. Removing the optional Restraints input leads to a free-free Modal Analysis. > **[Buckling Analysis](blocks/structures/analysis/buckling-analysis)** > > Calculate the critical buckling loads and buckling mode shapes of an FE Model subject to prescribed boundary conditions. The resulting eigenvalues are factors by which the load must be multiplied to reach the critical buckling load for that mode. > **[Thermal Analysis](blocks/structures/analysis/thermal-analysis)** > > Perform steady state heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. All transient effects of heat transfer are neglected and the temperatures are reported assuming that the system has reached equilibrium. > **[Homogenize Unit Cell](blocks/structures/analysis/homogenize-unit-cell)** > > Performs a numerical homogenization on an FE Model representing a unit cell of a periodic structure to estimate effective mechanical and thermal properties of an equivalent bounding volume of the unit cell. The homogenized elastic properties are computed from the displacement fields associated with six unit strain loads in the X, Y, Z, XY, XZ, YZ directions while the thermal properties are computed from the temperature fields associated with 3 unit temperature loads in the X, Y, and Z directions under periodic boundary conditions. > **[Nonlinear Thermal Analysis](blocks/structures/analysis/nonlinear-thermal-analysis)** > > Perform nonlinear steady state heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. All transient effects of heat transfer are neglected and the temperatures are reported assuming that the system has reached equilibrium. > **[Transient Thermal Analysis](blocks/structures/analysis/transient-thermal-analysis)** > > Perform a transient heat conduction analysis on an FE Model subject to temperature and heat flux boundary conditions. #### Model > **[Simulation Model](blocks/structures/model/simulation-model)** > > Combines a list of FE Domains and corresponding Connectors into an FE Model. The block performs checks to determine whether all domains are connected/restrained properly. > **[Solid Domain](blocks/structures/model/solid-domain)** > > Create a Solid FE Domain by assigning Solid Attributes to an FE Mesh and checking if all the elements of the FE Mesh have corresponding attributes assigned to them. > **[Lattice Domain](blocks/structures/model/lattice-domain)** > > Creates a Solid Domain from a graph lattice with isotropic material properties. > **[Tie Constraint](blocks/structures/model/tie-constraint)** > > Define a tie constraint between two boundary regions so that there is no relative motion between them for structural analysis and no temperature difference between them for thermal analysis. For each selected independent entity, the function looks for the dependent entity and checks if it lies within the radius distance of the independent entity. If no entities are found within the defined radius, the tie constraint will indicate an error. > **[Structural Contact](blocks/structures/model/structural-contact)** > > Creates a bonded or no separation contact type between two Boundaries and allows mechanical loads to be transferred between two Domains. > **[Thermal Bonded Contact](blocks/structures/model/thermal-bonded-contact)** > > Creates a bonded contact between two boundaries which allows for heat flux between the two domains. A contact resistance can be defined to account for thin membrane material at the boundary such as thermal paste. > **[Cyclic Symmetry](blocks/structures/model/cyclic-symmetry)** > > Creates a cyclic symmetry constraint between the upper and lower boundaries of the sector. > **[Rigid Connector](blocks/structures/model/rigid-connector)** > > Defines a rigid element connector between a Point and Boundary. The connector may either be Flexible (RBE3) or Rigid (RBE2). > **[Spring](blocks/structures/model/spring)** > > Creates a spring element between two FE Points. The spring force is calculated using the following formula: F=K\*(u2-u1), where K is a stiffness tensor constructed from the stiffness inputs Kx, Ky, Kz, Kxx, Kyy, and Kzz, and vector u represents the displacement at a point, which includes both translational and rotational components. #### Material Attributes > **[Isotropic Material](blocks/structures/material-attributes/isotropic-material)** > > Defines an Isotropic Material by providing a list of Isotropic Material Properties. An isotropic material behaves the same in all directions. > **[Isotropic Linear Elastic Property](blocks/structures/material-attributes/isotropic-linear-elastic-property)** > > Defines an Isotropic Linear Elastic Property by specifying Young’s modulus and Poisson’s ratio. Providing scalar fields as inputs will result in spatially varying material properties. > **[Isotropic Thermal Property](blocks/structures/material-attributes/isotropic-thermal-property)** > > Defines an Isotropic Nonlinear Thermal Property by specifying the thermal conductivity and specific heat capacity. Providing scalar fields as inputs will result in spatially varying material properties. > **[Isotropic Thermal Expansion Property](blocks/structures/material-attributes/isotropic-thermal-expansion-property)** > > Defines an Isotropic Thermal Expansion Property by specifying the coefficient of thermal expansion. Providing a scalar field as input will result in a spatially varying material property. > **[Orthotropic Material](blocks/structures/material-attributes/orthotropic-material)** > > Defines an Orthotropic Material by providing a list of Orthotropic Material Properties. The properties of an orthotropic material can vary in three mutually orthogonal directions. > **[Orthotropic Linear Elastic Property](blocks/structures/material-attributes/orthotropic-linear-elastic-property)** > > Defines an Orthotropic Linear Elastic Property by specifying directional elastic properties. Providing scalar fields as inputs will result in spatially varying material properties. > **[Orthotropic Stiffness Tensor](blocks/structures/material-attributes/orthotropic-stiffness-tensor)** > > Defines an Orthotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship sigma\_i = C\_ij \* epsilon\_j (i,j=1,6), where sigma = (sigma\_xx, sigma\_yy, sigma\_zz, sigma\_yz, sigma\_zx, sigma\_xy) and epsilon = (epsilon\_xx, epsilon\_yy, epsilon\_zz, gamma\_yz, gamma\_zx, gamma\_xy). Providing scalar fields as inputs will result in spatially varying material properties. > **[Orthotropic Thermal Property](blocks/structures/material-attributes/orthotropic-thermal-property)** > > Define an Orthotropic Nonlinear Thermal Property by specifying directional thermal properties of the desired material. Providing scalar fields as thermal properties will result in spatially varying material properties. > **[Orthotropic Thermal Expansion Property](blocks/structures/material-attributes/orthotropic-thermal-expansion-property)** > > Defines an Orthotropic Thermal Expansion Property by specifying the directional thermal expansion coefficients. Providing scalar fields as inputs will result in spatially varying material properties. > **[Anisotropic Material](blocks/structures/material-attributes/anisotropic-material)** > > Defines an Anisotropic Material by providing a list of Anisotropic Material Properties and the material density. The properties of an anisotropic material can vary in any direction. > **[Anisotropic Stiffness Tensor](blocks/structures/material-attributes/anisotropic-stiffness-tensor)** > > Defines an Anisotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship sigma\_i = C\_ij \* epsilon\_j (i,j=1,6), where sigma = (sigma\_xx, sigma\_yy, sigma\_zz, sigma\_yz, sigma\_zx, sigma\_xy) and epsilon = (epsilon\_xx, epsilon\_yy, epsilon\_zz, gamma\_yz, gamma\_zx, gamma\_xy). Providing scalar fields as inputs will result in spatially varying material properties. > **[Anisotropic Thermal Property](blocks/structures/material-attributes/anisotropic-thermal-property)** > > Defines an Anisotropic Thermal Property by specifying specific heat capacity and a second order thermal conductivity tensor, K\_ij, for the constitutive relationship between heat flux and the temperature gradient, q\_i = -K\_ij \* dT/dx\_j. Providing scalar fields as inputs will result in spatially varying material property. > **[Anisotropic Thermal Expansion Property](blocks/structures/material-attributes/anisotropic-thermal-expansion-property)** > > Defines an Anisotropic Thermal Expansion Property by specifying a matrix of thermal expansion coefficients in Voigt notation, (epsilon\_xx, epislon\_yy, epsilon\_zz, gamma\_yz, gamma\_zx, gamma\_xy) = (T - T\_o) \* (alpha\_1, alpha\_2, alpha\_3, alpha\_4, alpha\_5, alpha\_6), where T is the current temperature, and T\_o is the baseline reference temperature. Providing scalar fields as inputs will result in spatially varying material properties. > **[Solid Attribute](blocks/structures/material-attributes/solid-attribute)** > > Define material properties as attributes of solid elements. > **[Beam Attribute](blocks/structures/material-attributes/beam-attribute)** > > Define the beam thickness and material properties as attributes of beam elements. > **[Shell Attribute](blocks/structures/material-attributes/shell-attribute)** > > Define shell thickness and material properties as attributes of shell elements. > **[Point Attribute](blocks/structures/material-attributes/point-attribute)** > > Define material properties as attributes of a Point. #### Mesh > **[FE Volume Mesh](blocks/structures/mesh/fe-volume-mesh)** > > Convert a Volume Mesh to an FE Mesh by adding integration points of the desired order to each element within the mesh. > **[FE Lattice Mesh](blocks/structures/mesh/fe-lattice-mesh)** > > Converts a Graph lattice into an FE Mesh by adding integration points of the desired order to the Graph lattice geometry. > **[FE Surface Mesh](blocks/structures/mesh/fe-surface-mesh)** > > Convert a 3D Surface Mesh into an FE Mesh containing 3D shell elements. Standard Isoparametric model is used for shell element formulations. > **[FE CAD Solid Mesh](blocks/structures/mesh/fe-cad-solid-mesh)** > > Create an FE Mesh of solid tetrahedral elements from a single solid CAD Body. Note that faulty CAD input here can cause the meshing algorithms to fail. If faulty geometry is expected, consider using the "FE Robust Tetrahedral Mesh" function. > **[FE Shell Mesh from CAD](blocks/structures/mesh/fe-shell-mesh-from-cad)** > > Create a FE Surface Mesh from the faces of a single CAD Body by discretizing and adding integration points of the desired order to each element within the mesh. Note, faulty CAD input can cause the meshing algorithm to fail. > **[Volume Mesh](blocks/structures/mesh/volume-mesh)** > > Mesh a solid domain with tetrahedral elements that conform to the boundary of the specified Domain. If the Domain contains quad faces, quadrilateral pyramids will be used. The Remesh Surface block can be used to remesh the boundary Domain if necessary. If the input domain contains defects that cause this block to fail, consider using the Robust Tetrahedral Mesh block. > **[Robust Tetrahedral Mesh](blocks/structures/mesh/robust-tetrahedral-mesh)** > > Mesh a solid domain with tetrahedral elements using algorithms that are tolerant to defects such as self-intersections. This function will remesh the boundary of the input domain to generate valid, high-quality elements. If the input domain is likely to be free of any defects, consider using the faster Volume Mesh block. > **[Delaunay Volume Mesh](blocks/structures/mesh/delaunay-volume-mesh)** > > Create a volume mesh forming a Delaunay tetrahedralization from a list of points. > **[Remesh Surface](blocks/structures/mesh/remesh-surface)** > > Remesh an existing surface mesh. > **[Parallel Remesh Surface](blocks/structures/mesh/parallel-remesh-surface)** > > Remesh an existing surface mesh using parallel processing. The algorithm will automatically partition the input mesh and pre-mesh each partition in parallel. The number of partitions is equal to the Max Threads. When the Max Threads is greater than one, the results may differ each time the block is executed. > **[Remesh Surface with Cyclic Symmetry](blocks/structures/mesh/remesh-surface-with-cyclic-symmetry)** > > Remesh a given surface mesh to create conformal nodes and elements on independent and dependent planes. The independent plane is defined by a normal, and the dependent plane is defined by rotating the normal about an axis of rotation in the independent plane. > **[Mirror FE Mesh](blocks/structures/mesh/mirror-fe-mesh)** > > Mirror an FE Mesh using planar symmetry > **[Merge FE Meshes](blocks/structures/mesh/merge-fe-meshes)** > > Combine FE Meshes to generate one single mesh by collapsing nodes that are within a given tolerance. > **[Boundary Layer Mesh](blocks/structures/mesh/boundary-layer-mesh)** > > Create a boundary layer mesh from a surface mesh. > **[Mesh Quality](blocks/structures/mesh/mesh-quality)** > > Computes Mesh Quality metrics relevant for simulation including orthogonality, skewness, composite mesh quality, and intersecting triangles. > **[Associate FE Mesh](blocks/structures/mesh/associate-fe-mesh)** > > Associates an FE Mesh with a CAD Body. Boundary Conditions applied to the CAD Body will then be transferred to the associated FE Mesh. > **[FE Point](blocks/structures/mesh/fe-point)** > > Creates a six degree of freedom node that can be included in a simulation or optimization. #### Boundary Conditions > **[Force](blocks/structures/boundary-conditions/force)** > > Applies a force vector to a selected boundary. The force will be evenly distributed over the selected boundary entities. > **[Edge Force](blocks/structures/boundary-conditions/edge-force)** > > Applies a force vector to selected boundary edge entities. The force will be distributed over the nodes on the selected edge. > **[Surface Force](blocks/structures/boundary-conditions/surface-force)** > > Applies a general force vector field to selected boundary face entities. The force will be distributed over the nodes of the selected faces. > **[Acceleration Load](blocks/structures/boundary-conditions/acceleration-load)** > > Applies an acceleration load to a selected region. The applied force is calculated by multiplying the acceleration vector by the element masses and distributing over the nodes. > **[Point Force](blocks/structures/boundary-conditions/point-force)** > > Applies a point force to a selected boundary by distributing the load through rigid/flexible body elements. > **[Point Moment](blocks/structures/boundary-conditions/point-moment)** > > Applies a point moment to a selected boundary by distributing the load through rigid/flexible body elements. > **[Pressure](blocks/structures/boundary-conditions/pressure)** > > Applies a pressure to selected boundary face entities. > **[Bearing Force](blocks/structures/boundary-conditions/bearing-force)** > > Applies a bearing load on a cylindrical boundary based on a sinusoidal distribution. > **[Cylindrical Restraint](blocks/structures/boundary-conditions/cylindrical-restraint)** > > Restrains partial or complete cylindrical faces in the 3 cylindrical degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. > **[Displacement Restraint](blocks/structures/boundary-conditions/displacement-restraint)** > > Restrains the selected boundary entities in up to six degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. > **[Point Restraint](blocks/structures/boundary-conditions/point-restraint)** > > Applies a displacement restraint to a remote point attached to selected boundary entities using rigid body elements. > **[Surface Heat Flux](blocks/structures/boundary-conditions/surface-heat-flux)** > > Applies a distributed heat flux normal to selected boundary face entities. > **[Convection Boundary Load](blocks/structures/boundary-conditions/convection-boundary-load)** > > Applies a convection load to selected boundary face entities > **[Radiation Boundary Load](blocks/structures/boundary-conditions/radiation-boundary-load)** > > Applies a radiation load to selected boundary face entities for the given Ambient temp, Emissivity, and Stefan-Boltzmann constant of 5.670374419e-8 W\.m^-2.K^-4 > **[Volumetric Heat Generation](blocks/structures/boundary-conditions/volumetric-heat-generation)** > > Applies a heat generation density to a selected region. > **[Heat Generation](blocks/structures/boundary-conditions/heat-generation)** > > Applies a total heat generation power to a selected region. The quantity of heat generation is distributed across the nodes based on volume fraction. > **[Temperature Restraint](blocks/structures/boundary-conditions/temperature-restraint)** > > Applies a temperature restraint to selected boundary entities. > **[Initial Temperature](blocks/structures/boundary-conditions/initial-temperature)** > > Defines the baseline temperature to be used in a thermal stress analysis. Thermal stress will be calculated from the difference between the initial temperature and the applied temperature load. > **[Applied Temperature Load](blocks/structures/boundary-conditions/applied-temperature-load)** > > Defines the applied temperature load to be used in a thermal stress analysis. Thermal stress will be calculated from the difference between the initial temperature and the applied temperature load. > **[Velocity](blocks/structures/boundary-conditions/velocity)** > > A Boundary Condition that specifies a fluid's velocity entering or leaving a domain. > **[Rotational Force](blocks/structures/boundary-conditions/rotational-force)** > > Defines a static load which accounts for the inertia effects of an angular velocity and acceleration about a stationary axis of rotation. #### Utilities > **[FE Region by Body](blocks/structures/utilities/fe-region-by-body)** > > Select elements in an FE Mesh using an Implicit Body. Elements with their center of mass lying within a defined tolerance of the Implicit Body will be selected. > **[FE Boundary by Body](blocks/structures/utilities/fe-boundary-by-body)** > > Select boundary entities of the FE Mesh (faces/edges/nodes) that lie within a desired tolerance of an Implicit Body. > **[FE Boundary by Flood Fill](blocks/structures/utilities/fe-boundary-by-flood-fill)** > > Select boundary entities of an FE Mesh (faces/edges/nodes) using a flood fill operation. The block chooses the closest mesh entities to the specified origin, and uses a flood fill operation to select all mesh entities that lie within a certain specified angle and direction of the originally selected entity. > **[Virtual Region by Body](blocks/structures/utilities/virtual-region-by-body)** > > Identifies an Implicit Body to intersect with a Domain to create a sub-region. The output is most often used to specify the location of Body Forces or Optimization Constraints. The Domain is determined at the time of analysis such that Body Forces can be reused and applied to multiple Domains. > **[Virtual Boundary by Body](blocks/structures/utilities/virtual-boundary-by-body)** > > Identifies an Implicit Body to intersect with a Domain to select the boundary. The output is most often used to specify the location of Boundary Conditions. The Domain is determined at the time of analysis such that Boundary Conditions can be reused and applied to multiple Domains. > **[Transform Material](blocks/structures/utilities/transform-material)** > > Transforms a material from basis Source to new basis Destination with tensor omega\_ij=dot(Destination\_i,Source\_j). #### Exchange > **[Import FE Mesh](blocks/structures/exchange/import-fe-mesh)** > > Import FE Mesh file from an external location. > **[Export FE Mesh](blocks/structures/exchange/export-fe-mesh)** > > Export an FE Mesh. > **[Export Material](blocks/structures/exchange/export-material)** > > Export a Material to an external CAE format. > **[Export FE Model](blocks/structures/exchange/export-fe-model)** > > Export an FE Model containing FE Mesh, Material and Attribute data, element/entity sets, and FE Connectors to an external CAE format. > **[Export Static Analysis](blocks/structures/exchange/export-static-analysis)** > > Export the setup of a Static Analysis to an external CAE format. > **[Export Modal Analysis](blocks/structures/exchange/export-modal-analysis)** > > Export the setup of a Modal Analysis to an external CAE format. > **[Export Buckling Analysis](blocks/structures/exchange/export-buckling-analysis)** > > Export the setup of a linear Buckling Analysis to an external CAE format. > **[Export Thermal Analysis](blocks/structures/exchange/export-thermal-analysis)** > > Export the setup of a Thermal Analysis to an external CAE format. > **[Import Static Structural Result](blocks/structures/exchange/import-static-structural-result)** > > Import Static Structural Result file from an external location. > **[Import Modal Result](blocks/structures/exchange/import-modal-result)** > > Import Modal Result file from an external location. > **[Import Buckling Result](blocks/structures/exchange/import-buckling-result)** > > Import Buckling Result file from an external location. > **[Import Static Thermal Result](blocks/structures/exchange/import-static-thermal-result)** > > Import Static Thermal Result file from an external location. > **[Import Time Dependent Structural Result](blocks/structures/exchange/import-time-dependent-structural-result)** > > Import Time Dependent Structural Result file from an external location. > **[Import Time Dependent Thermal Result](blocks/structures/exchange/import-time-dependent-thermal-result)** > > Import Time Dependent Thermal Result file from an external location. > **[Import Superelement](blocks/structures/exchange/import-superelement)** > > Imports a Superelement file from an external location. The .bdf file should contain the stiffness and mass properties, as well as the external grid IDs of the Super Element. The .fem file should contain the corresponding global coordinates of the external grid points. > **[Displacement Point Map](blocks/structures/exchange/displacement-point-map)** > > Create a Vector Point Map from nodal displacements of a Static or Explicit Analysis result. > **[Von Mises Stress Point Map](blocks/structures/exchange/von-mises-stress-point-map)** > > Create a Scalar Point Map from nodal von Mises stress values of a Static or Explicit Analysis. > **[Temperature Point Map](blocks/structures/exchange/temperature-point-map)** > > Create a Temperature Point Map from the temperature values of a CFD analysis. > **[Heat Flux Point Map](blocks/structures/exchange/heat-flux-point-map)** > > Creates a vector point map of nodal heat flux values of a linear steady state thermal analysis. > **[Density Point Map](blocks/structures/exchange/density-point-map)** > > Create a Scalar Point Map from the density values of a CFD analysis. > **[Pressure Point Map](blocks/structures/exchange/pressure-point-map)** > > Create a Scalar Point Map from the pressure values of a CFD analysis. > **[Velocity Point Map](blocks/structures/exchange/velocity-point-map)** > > Create a Vector Point Map from the velocities of a CFD Analysis result. > **[Unit System](blocks/structures/exchange/unit-system)** > > Create a unit system for CAE interoperability. If compound units are not provided, the base units will be used to determine the compound units. ### Fluids #### Analysis > **[Flow Analysis](blocks/fluids/analysis/flow-analysis)** > > Calculates the pressure and velocity on a Virtual Model. The solution uses a Lattice Boltzmann Method. A transient simulation is initiated and continues until the flow reaches a statistically steady state, then returns time-averaged pressure and velocity fields. Streamlines will be calculated on the time averaged velocity results. This block requires an NVIDIA GPU. #### Model > **[Simulation Model](blocks/structures/model/simulation-model)** > > Combines a list of FE Domains and corresponding Connectors into an FE Model. The block performs checks to determine whether all domains are connected/restrained properly. > **[Fluid Domain](blocks/fluids/model/fluid-domain)** > > Creates a Fluid Domain by assigning a Fluid Attribute to an Implicit Body. #### Material Information > **[Air](blocks/fluids/material-information/air)** > > General Purpose Air at NIST (293.15K, 100kPa). Reference: engineeringtoolbox.com Density: 1.204 kg/m^3 Kinematic viscosity: 15.06E-6 m^2/s Thermal conductivity: 0.02587 W/(m-K) Specific heat: 1.006 J/(g-K) > **[Water](blocks/fluids/material-information/water)** > > General Purpose Water at NIST (293.15K, 100kPa). Reference: matweb.com Density: 998.23 kg/m^3 Kinematic viscosity: 1.002E-6 m^2/s Thermal conductivity: 0.5984 W/(m-K) Specific heat: 4.182 J/(g-K) > **[Isotropic Material](blocks/structures/material-attributes/isotropic-material)** > > Defines an Isotropic Material by providing a list of Isotropic Material Properties. An isotropic material behaves the same in all directions. > **[Isotropic Fluid Property](blocks/fluids/material-information/isotropic-fluid-property)** > > Defines an Isotropic Fluid Property. > **[Isotropic Porous Medium Property](blocks/fluids/material-information/isotropic-porous-medium-property)** > > Defines an Isotropic Porous Medium Property. > **[Fluid Attribute](blocks/fluids/material-information/fluid-attribute)** > > Define material properties as attributes of a fluid. #### Boundary Conditions > **[Pressure](blocks/structures/boundary-conditions/pressure)** > > Applies a pressure to selected boundary face entities. > **[Velocity](blocks/structures/boundary-conditions/velocity)** > > A Boundary Condition that specifies a fluid's velocity entering or leaving a domain. #### Utilities > **[Virtual Region by Body](blocks/structures/utilities/virtual-region-by-body)** > > Identifies an Implicit Body to intersect with a Domain to create a sub-region. The output is most often used to specify the location of Body Forces or Optimization Constraints. The Domain is determined at the time of analysis such that Body Forces can be reused and applied to multiple Domains. > **[Virtual Boundary by Body](blocks/structures/utilities/virtual-boundary-by-body)** > > Identifies an Implicit Body to intersect with a Domain to select the boundary. The output is most often used to specify the location of Boundary Conditions. The Domain is determined at the time of analysis such that Boundary Conditions can be reused and applied to multiple Domains. > **[Flow Analysis Results on Boundary](blocks/fluids/utilities/flow-analysis-results-on-boundary)** > > Calculates the average flow property on the boundary of a Flow Analysis CFD Result. For correct property results, provide the boundary used in the Flow Analysis execution. > **[Filter Cell Region](blocks/fluids/utilities/filter-cell-region)** > > Create a list of points from the cell region values of a virtual CFD Analysis result. > **[Streamline](blocks/fluids/utilities/streamline)** > > Creates streamlines from a vector field and a list of seed points. #### Exchange > **[Import CFD Analysis Result](blocks/fluids/exchange/import-cfd-analysis-result)** > > Import CFD Analysis Result file from an external location. > **[Export CFD Analysis Result](blocks/fluids/exchange/export-cfd-analysis-result)** > > Export a CFD Analysis Result. > **[Export FE Mesh to CFD](blocks/fluids/exchange/export-fe-mesh-to-cfd)** > > Exports an FE mesh and optional CFD boundary zones to an external CFD file format. > **[CFD Boundary on FE Mesh](blocks/fluids/exchange/cfd-boundary-on-fe-mesh)** > > Identifies a CFD boundary on an FE mesh which then can be exported to an external CFD file format. > **[Velocity Point Map](blocks/structures/exchange/velocity-point-map)** > > Create a Vector Point Map from the velocities of a CFD Analysis result. > **[Pressure Point Map](blocks/structures/exchange/pressure-point-map)** > > Create a Scalar Point Map from the pressure values of a CFD analysis. > **[Temperature Point Map](blocks/structures/exchange/temperature-point-map)** > > Create a Temperature Point Map from the temperature values of a CFD analysis. ### Optimization #### Optimization > **[Topology Optimization](blocks/optimization/optimization/topology-optimization)** > > Perform a density-based topology optimization of an FE Model using the Solid Isotropic Material with Penalization (SIMP) method. > **[Single Body Topology Optimization](blocks/optimization/optimization/single-body-topology-optimization)** > > Perform topology optimization on a single solid body. An FE Mesh and isotropic material is all that is needed to define the model. Any of the available responses and constraints can be applied. #### Field Optimization > **[Field Optimization](blocks/optimization/field-optimization/field-optimization)** > > Perform a field optimization on a Parametric FE Model. > **[Parametric Voronoi Domain](blocks/optimization/field-optimization/parametric-voronoi-domain)** > > Create a Parametric FE Domain for a Voronoi Lattice with the following design parameters: cell size and beam thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. > **[Parametric Lattice Domain](blocks/optimization/field-optimization/parametric-lattice-domain)** > > Create a Parametric FE Domain for a periodic lattice with the following design parameters: lattice thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. > **[Parametric Shell Domain](blocks/optimization/field-optimization/parametric-shell-domain)** > > Create a Parametric FE Domain for a variable shell structure with the following design parameters: shell thickness (inward direction). > **[Parametric Shell-Infill Domain](blocks/optimization/field-optimization/parametric-shell-infill-domain)** > > Create a Parametric FE Domain for a variable shell structure with a periodic lattice infill with the following design parameters: shell thickness (inward direction), lattice thickness. The infill material model is homogenization-based so the model accuracy will improve as the cell size is reduced. > **[Parametric FE Model](blocks/optimization/field-optimization/parametric-fe-model)** > > Combine a list of Parametric FE Domains and corresponding Connectors into a Parametric FE Model. The block performs checks to determine whether all objects are restrained properly. > **[Implicit Body from Field Optimization](blocks/optimization/field-optimization/implicit-body-from-field-optimization)** > > Extract an Implicit Body from a Field Optimization result. #### Responses > **[Design Objective](blocks/optimization/responses/design-objective)** > > Defines a Design Objective that minimizes/maximizes a Design Response. > **[Structural Compliance Response](blocks/optimization/responses/structural-compliance-response)** > > Create a Design Response that measures the structural compliance (strain energy) of some region for a set of boundary conditions. The response is computed by solving a linear static structural finite element analysis and integrating the derived strain energy density field over the region. > **[Volume Fraction Response](blocks/optimization/responses/volume-fraction-response)** > > Create a Design Response that measures the fraction of material usage in some region. The response is computed by integrating the relative density field over the region. Values can range from 0 to 1. > **[Stress Response](blocks/optimization/responses/stress-response)** > > Create a Design Response that measures the maximum centroidal von Mises stress in some region for a set of boundary conditions. The response is derived from the solution of a linear static structural finite element analysis. The best performance is achieved if all loaded regions are assigned to be passive regions. > **[Displacement Response](blocks/optimization/responses/displacement-response)** > > Create a Design Response that measures the maximum displacement of some boundary region for a set of boundary conditions. The response is derived from the solution of a linear static structural finite element analysis. The best performance is achieved if: 1) the selected region is local and contains few nodes, and 2) the selected region is loaded or assigned to be passive. > **[Natural Frequency Response](blocks/optimization/responses/natural-frequency-response)** > > Create a Design Response that measures the smallest natural frequency of the FE model for a set of boundary conditions. The response is computed by f = min\_(|f\_i - f\_0|), where f\_i represents the N smallest natural frequencies obtained by solving a linear modal finite element analysis, and f\_0 is an offset value. > **[Mass Response](blocks/optimization/responses/mass-response)** > > Create a Design Response that measures the total mass in some region. The response is computed by integrating the density field over the region. > **[Center of Mass Response](blocks/optimization/responses/center-of-mass-response)** > > Create a Design Response that measures a component of the Center of Mass vector in some region. For each vector component, the response is computed by integrating one of the following functions: v\_x = rho \* x / M, v\_y = rho \* y / M, v\_z = rho \* z / M over the region, where x, y, z are the coordinates of the material point in the given reference frame, rho is the density field and M is the total mass in the region. > **[Moment of Inertia Response](blocks/optimization/responses/moment-of-inertia-response)** > > Create a Design Response that measures a component of the mass moment of inertia tensor in some region. For each tensor component, the response is computed by integrating one of the following functions: I\_xx = rho \* (y^2 + z^2), l\_yy = rho \* (x^2 + z^2), I\_zz = rho \* (x^2 + y^2), I\_xy = l\_yx = - rho \* x \* y, l\_xz = I\_zx = - rho \* x \* z, l\_yz = I\_zy = - rho \* y \* z over the region, where x, y, z are the coordinates of the material point in the given reference frame, and rho is the density field. > **[Reaction Force Response](blocks/optimization/responses/reaction-force-response)** > > Create a design response that measures the sum of reaction force vectors across a boundary. The response is derived from the solution of a linear static structural finite element analysis. > **[Combine Design Responses](blocks/optimization/responses/combine-design-responses)** > > Combines a list of design responses into a single response. The responses are combined according to the operation provided by the Aggregation input. The aggregate can be used in an optimization objective or design response constraint. #### Constraints > **[Design Response Constraint](blocks/optimization/constraints/design-response-constraint)** > > Formulate an optimization constraint based on a Design Response. > **[Passive Region Constraint](blocks/optimization/constraints/passive-region-constraint)** > > Define an FE Region to maintain unaltered during the optimization process. > **[Planar Symmetry Constraint](blocks/optimization/constraints/planar-symmetry-constraint)** > > Specify planar symmetry for a topology optimization process. > **[Overhang Constraint](blocks/optimization/constraints/overhang-constraint)** > > Defines a maximum overhang constraint for the topology optimization process. The constraint precludes designs with an inclination angle below a specified amount with respect to the build plate. > **[Extrusion Constraint](blocks/optimization/constraints/extrusion-constraint)** > > Define a geometric extrusion constraint to be enforced in the optimization result. The result will be a 2.5D design of the face along the provided curve. The boundary conditions are not restricted to the 2D domain. Note that for best results using extrusion constraint, it is suggested that the Boundary penalty be set to 0. > **[Volume Fraction Constraint](blocks/optimization/constraints/volume-fraction-constraint)** > > Define a volume fraction constraint for topology optimization. > **[Stress Constraint](blocks/optimization/constraints/stress-constraint)** > > Define a stress constraint for a topology optimization process. > **[Displacement Constraint](blocks/optimization/constraints/displacement-constraint)** > > Define a displacement constraint for a topology optimization process. > **[Natural Frequency Constraint](blocks/optimization/constraints/natural-frequency-constraint)** > > Define a natural frequency constraint for optimization to generate shapes with natural frequencies that lie inside or outside the specified range. > **[Min Feature Size Constraint](blocks/optimization/constraints/min-feature-size-constraint)** > > Define a constraint on the minimum feature size. > **[Max Feature Size Constraint](blocks/optimization/constraints/max-feature-size-constraint)** > > Define a constraint on the maximum feature size. > **[Demold Constraint](blocks/optimization/constraints/demold-constraint)** > > Define a demold constraint for a topology optimization process. The constraint ensures no undercuts in the optimized result, enabling release of the mold in the specified demold direction. > **[Remap Constraint](blocks/optimization/constraints/remap-constraint)** > > Defines a geometric projection to be applied as a constraint to the optimization process. The projection will remap the design variable field to the X, Y, and Z scalar field components of the new evaluation location. > **[Pattern Repetition Constraint](blocks/optimization/constraints/pattern-repetition-constraint)** > > Constrain the topology optimization process to maintain a repeated pattern defined by a Cell Map. > **[3-Axis Milling Constraint](blocks/optimization/constraints/3-axis-milling-constraint)** > > Imposes a 3-axis milling constraint on a topology optimization. > **[5-Axis Milling Constraint](blocks/optimization/constraints/5-axis-milling-constraint)** > > Imposes a 5-axis milling constraint on a topology optimization. #### Post-Processing > **[Implicit Body from Topology Optimization](blocks/optimization/post-processing/implicit-body-from-topology-optimization)** > > Extract an Implicit Body from a Topology Optimization result. > **[Construct Optimized Body](blocks/optimization/post-processing/construct-optimized-body)** > > Automatically construct an implicit body from the results of a topology optimization. > **[Optimized Density Thickness Modifier](blocks/optimization/post-processing/optimized-density-thickness-modifier)** > > Create a real field that will output a thickness value based on the element density values resulting from a topology optimization. #### Exchange > **[Import Topology Optimization Result](blocks/optimization/exchange/import-topology-optimization-result)** > > Import Topology Optimization Result file from a supported format. > **[Export Topology Optimization History](blocks/optimization/exchange/export-topology-optimization-history)** > > Export the convergence history of a Topology Optimization result. > **[Topology Optimization Density Point Map](blocks/optimization/exchange/topology-optimization-density-point-map)** > > Create a Scalar Point Map from the element densities resulting from a Topology Optimization.The centroid of each element defines the location of each point. ### Parameter Optimization \[Beta] #### Optimization > **[Parameter Optimization](blocks/parameter-optimization-beta/optimization/parameter-optimization)** > > Runs an optimization algorithm to find the collection of Design Parameters that produce an optimal Parameter Objective value while satisfying all Parameter Constraints. #### Composition > **[Parameter Objective](blocks/parameter-optimization-beta/composition/parameter-objective)** > > Specifies a goal for a Parameter Optimization by indicating a Parameter to minimize or maximize. Guides the optimizer toward the desired outcome. > **[Parameter Constraint](blocks/parameter-optimization-beta/composition/parameter-constraint)** > > Defines a condition that a Parameter must satisfy. Constraints can be used to enforce limits on Independent Parameters or Dependant Parameter values and define valid solution spaces in workflows such as Parameter Optimization. > **[Parameter Constraint Group](blocks/parameter-optimization-beta/composition/parameter-constraint-group)** > > Creates a Parameter Constraint Group from a collection of Parameter Constraints. > **[Constant Parameter](blocks/parameter-optimization-beta/composition/constant-parameter)** > > Creates a Constant Parameter with a fixed value that does not change. The value can be referenced by other Parameters or evaluators. > **[Independent Parameter](blocks/parameter-optimization-beta/composition/independent-parameter)** > > Creates an Independent Parameter whose value can be adjusted within optional minimum and maximum bounds. Its value can be used by evaluators, which may modify it during computations such as Parameter Optimization. > **[Dependent Parameter](blocks/parameter-optimization-beta/composition/dependent-parameter)** > > Creates a Dependent Parameter whose value is computed from other Parameters using a specified Surrogate. The value updates automatically whenever its input Parameters are changed by an evaluator. > **[Parameter Group](blocks/parameter-optimization-beta/composition/parameter-group)** > > Creates a Parameter Group from a collection of Parameters. #### Surrogates > **[Import Neural Network](blocks/parameter-optimization-beta/surrogates/import-neural-network)** > > Imports a Neural Network Model stored in the ONNX file format for direct evaluation within the nTop environment. The resulting block can be used for evaluation or use in optimization workflows. #### Utilities > **[Design Parameters from Optimization](blocks/parameter-optimization-beta/utilities/design-parameters-from-optimization)** > > Extracts all design parameters at a specific iteration from a Parameter Optimization Result. > **[Evaluate Parameter](blocks/parameter-optimization-beta/utilities/evaluate-parameter)** > > Computes the value of a Dependent Parameter for a specified collection of input Parameters with constant or known values. > **[Extract Optimization History](blocks/parameter-optimization-beta/utilities/extract-optimization-history)** > > Extract the convergence history of a Parameter Optimization Result. > **[Tracked Parameters from Optimization](blocks/parameter-optimization-beta/utilities/tracked-parameters-from-optimization)** > > Extracts all tracked parameters at a specific iteration from a Parameter Optimization Result. ### Utilities #### Exchange > **[Import Implicit Body](blocks/utilities/exchange/import-implicit-body)** > > Import Implicit Body file from an external location. > **[Export Implicit Body](blocks/utilities/exchange/export-implicit-body)** > > Export an Implicit Body to a file. > **[Import Part](blocks/utilities/exchange/import-part)** > > Import part file from an external location. > **[Export Part](blocks/utilities/exchange/export-part)** > > Export part file to an external location. > **[Import Lattice Graph](blocks/utilities/exchange/import-lattice-graph)** > > Import Lattice Graph file from an external location. > **[Import Thick Lattice Graph](blocks/utilities/exchange/import-thick-lattice-graph)** > > Import Thick Lattice Graph file from an external location. > **[Export Lattice](blocks/utilities/exchange/export-lattice)** > > Export a Graph lattice object to an external location. Supported formats are .ltcx and .3mf. > **[Import Mesh](blocks/utilities/exchange/import-mesh)** > > Import Mesh file from an external location. > **[Export Mesh](blocks/utilities/exchange/export-mesh)** > > Export mesh file to an external location. > **[Export 3MF](blocks/utilities/exchange/export-3mf)** > > Exports a Mesh and Graph lattice into a single 3MF file. > **[Import Voxel Grid](blocks/utilities/exchange/import-voxel-grid)** > > Import Voxel Grid file from an external location. > **[Export Voxel Grid](blocks/utilities/exchange/export-voxel-grid)** > > Export voxel grid. > **[Export Text](blocks/utilities/exchange/export-text)** > > Export list of text objects to a file. > **[Import Points](blocks/utilities/exchange/import-points)** > > Import a list of points from a CSV file. Each row of the file should be formatted as "x, y, z" > **[Export Point Map](blocks/utilities/exchange/export-point-map)** > > Export a Point Map to a file. > **[Import Table](blocks/utilities/exchange/import-table)** > > Imports a tabular data set as a Table. > **[Export Table](blocks/utilities/exchange/export-table)** > > Exports Table data to an external file. > **[Import Bitmap](blocks/utilities/exchange/import-bitmap)** > > Import Bitmap file from an external location. #### Conversion > **[CAD Body from Quad Mesh](blocks/utilities/conversion/cad-body-from-quad-mesh)** > > Creates a CAD Body from a quad Mesh. > **[Implicit Body from Mesh](blocks/utilities/conversion/implicit-body-from-mesh)** > > Convert a mesh to an implicit body. > **[Implicit Body from Surface](blocks/utilities/conversion/implicit-body-from-surface)** > > Create an implicit body from a surface with the zero-surface extending tangentially at the boundary. > **[Implicit Body from Surface Boundary](blocks/utilities/conversion/implicit-body-from-surface-boundary)** > > Create an Implicit Body with the zero-surface extending orthogonally at a surface boundary. > **[Mesh from CAD Body](blocks/utilities/conversion/mesh-from-cad-body)** > > Create a surface Mesh from a CAD Body. > **[Mesh from Implicit Body](blocks/utilities/conversion/mesh-from-implicit-body)** > > Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than Mesh from Implicit by DC, but can handle more complex geometry and produces cleaner meshes. > **[Mesh from Implicit by AT](blocks/utilities/conversion/mesh-from-implicit-by-at)** > > Converts an Implicit Body to a Mesh using Adaptive Tessellation. This method may significantly reduce computational and memory overhead compared to traditional methods, especially when finer tolerances are required. It achieves this by creating fewer triangles in flatter or less complex regions, resulting in a lower overall triangle count. However, this optimization can lead to a less regular and lower quality mesh in certain areas unless remeshing is enabled. > **[Multi-Region Mesh from Implicit](blocks/utilities/conversion/multi-region-mesh-from-implicit)** > > Converts an Implicit Body to a Mesh using Adaptive Tessellation. This method may significantly reduce computational and memory overhead compared to traditional methods, especially when finer tolerances are required. It achieves this by creating fewer triangles in flatter or less complex regions, resulting in a lower overall triangle count. However, this optimization can lead to a less regular and lower quality mesh in certain areas unless remeshing is enabled. > **[Mesh from Implicit by DC](blocks/utilities/conversion/mesh-from-implicit-by-dc)** > > Converts an Implicit Body to a Mesh using dual contouring. This version has lower computational overhead than Mesh from Implicit Body, however the result may contain self-intersections and non-manifold edges or vertices. Use Mesh from Implicit Body when a clean mesh is required and/or for the option to sharpen specific regions. > **[Implicit Body from CAD Body](blocks/utilities/conversion/implicit-body-from-cad-body)** > > Create an Implicit Body from a CAD Body. > **[UV Field from Surface](blocks/utilities/conversion/uv-field-from-surface)** > > Creates a closest-point UV parameterization field from a CAD face. The output range will be 0 to 1 from edge to edge in the U and V directions. > **[Voxel Grid from Mesh](blocks/utilities/conversion/voxel-grid-from-mesh)** > > Generates a voxel grid from a watertight surface mesh. > **[Mesh from Voxel Grid](blocks/utilities/conversion/mesh-from-voxel-grid)** > > Generates a surface mesh from a voxel grid. > **[Voxel Grid from Implicit Body](blocks/utilities/conversion/voxel-grid-from-implicit-body)** > > Generates a voxel grid from an implicit body. > **[Implicit Body from Voxel Grid](blocks/utilities/conversion/implicit-body-from-voxel-grid)** > > Generates an implicit body from a voxel grid. > **[Text from Scalar](blocks/utilities/conversion/text-from-scalar)** > > Convert a Scalar to Text using a specified reference consistently across unit systems. > **[Scalar from Text](blocks/utilities/conversion/scalar-from-text)** > > Convert Text to a Scalar value. Values that cannot be converted will be shown as NaN. > **[Simplified Body Representation](blocks/utilities/conversion/simplified-body-representation)** > > Creates a simplified representation of an Implicit Body as a boundary envelope with equivalent mass properties. Overall mass will always match. Center of gravity and moments of inertia can optionally match. #### General > **[Concatenate Text](blocks/utilities/general/concatenate-text)** > > Merge an ordered list of text into one text object. > **[Split Text](blocks/utilities/general/split-text)** > > Splits a single text object into a list of text objects based on a delimiting string, character, or string of delimiters. > **[Tab](blocks/utilities/general/tab)** > > Returns a single Tab character. > **[Table from Columns](blocks/utilities/general/table-from-columns)** > > Combines multiple Columns of data into a single Table. > **[Extract Column as Text](blocks/utilities/general/extract-column-as-text)** > > Extracts a single column of data from a Table as a Text list. > **[Column from Text](blocks/utilities/general/column-from-text)** > > Creates a Column from a Text List. > **[Cartesian Product](blocks/utilities/general/cartesian-product)** > > Creates a Table of all possible combinations from a set of Columns. > **[Dictionary](blocks/utilities/general/dictionary)** > > Creates a Dictionary from a set of keys and corresponding key values > **[Export JSON](blocks/utilities/general/export-json)** > > Export a JSON file. > **[JSON From Dictionary](blocks/utilities/general/json-from-dictionary)** > > Converts a Dictionary\ into a JSON format. > **[Map from Lists](blocks/utilities/general/map-from-lists)** > > Create a Map \<1d,1d> from a collection of points using linear or cubic interpolation within the convex hull of the point set and no extrapolation. > **[Evaluate Map](blocks/utilities/general/evaluate-map)** > > Evaluate a Map \<1d,1d>. #### System > **[Await](blocks/utilities/system/await)** > > The Await block will execute once the 'Wait For' input is built, and will produce the object in the 'Return' input as the output. This way the Await block can be used to force blocks to run one after the other in serial order. > **[Run Command](blocks/utilities/system/run-command)** > > Run an external command, capturing the exit code, standard output, and standard error. > **[Get Environment Variable](blocks/utilities/system/get-environment-variable)** > > Gets the value of an environment variable. > **[Temporary Directory](blocks/utilities/system/temporary-directory)** > > Make a temporary directory on disk. The returned Temporary Directory type contains the path. It is the caller's responsibility to clean up this temporary directory with Remove Temporary Directory before the end of the nTop session. > **[Remove Temporary Directory](blocks/utilities/system/remove-temporary-directory)** > > Delete a temporary directory from disk, including any contained files. #### Transforms > **[Scale Object](blocks/utilities/transforms/scale-object)** > > Scale object relative to a point. > **[Rotate Object](blocks/utilities/transforms/rotate-object)** > > Rotate an object around an axis. > **[Translate Object](blocks/utilities/transforms/translate-object)** > > Translate an object by a distance vector. > **[Transform Object](blocks/utilities/transforms/transform-object)** > > Apply multiple transforms to an object. > **[Rotation Transform](blocks/utilities/transforms/rotation-transform)** > > Create a transform to represent a rotation around an axis. > **[Translation Transform](blocks/utilities/transforms/translation-transform)** > > Create a transform to represent a translation by a distance vector. > **[Combine Transforms](blocks/utilities/transforms/combine-transforms)** > > Combine multiple Transform operations into a single Transform. > **[Orient Object](blocks/utilities/transforms/orient-object)** > > Orient geometry from a source Plane to a destination Plane. > **[Map Bitmap to Plane](blocks/utilities/transforms/map-bitmap-to-plane)** > > Place a bitmap on a plane. Bitmaps are mapped from their center to the center of the target plane. Bitmaps are displayed in the viewport. > **[Axis from Transform](blocks/utilities/transforms/axis-from-transform)** > > Extract the Axis of rotation from a Transformation. The Transformation must include a rotation. > **[Invert Transform](blocks/utilities/transforms/invert-transform)** > > Get the inverse of a transformation. ### Manufacturing #### Slicing > **[Slice Body](blocks/manufacturing/slicing/slice-body)** > > Create a stack of cross-sectional slices with even spacing between layers, oriented by a frame. The frame will act as the origin of the slice data. > **[Slice Body by Marching Squares](blocks/manufacturing/slicing/slice-body-by-marching-squares)** > > Create a stack of cross-sectional slices with even spacing between layers, oriented by a frame. The frame will act as the origin of the slice data. > **[Slice Graph](blocks/manufacturing/slicing/slice-graph)** > > Slice a graph lattice into layers of points. > **[Slice Mesh](blocks/manufacturing/slicing/slice-mesh)** > > Create a stack of cross-sectional slices from a mesh. > **[Offset Slice Stack](blocks/manufacturing/slicing/offset-slice-stack)** > > Offset layers of a slice stack along its plane by a distance. > **[Trim Slice Stack](blocks/manufacturing/slicing/trim-slice-stack)** > > Trims a slice stack to exist only within the bounds of the body. Doing so may result in open contours. > **[Simplify Slice Stack](blocks/manufacturing/slicing/simplify-slice-stack)** > > Reduces the number of points in open and closed polylines within a vector slice stack. > **[Hatch](blocks/manufacturing/slicing/hatch)** > > Create hatch lines on each layer of a slice stack. > **[Hatch with Stripes](blocks/manufacturing/slicing/hatch-with-stripes)** > > Create hatch lines with a 'stripe' pattern on each layer of a slice stack. > **[Hatch with Islands](blocks/manufacturing/slicing/hatch-with-islands)** > > Create hatch lines with an 'island' pattern on each layer of a slice stack. > **[Merge Slice Stacks](blocks/manufacturing/slicing/merge-slice-stacks)** > > Merge multiple slice stack objects into a single stack. Layers will concatenate if they are at the same height, otherwise they will be inserted in order of height. > **[Split Slice Stack](blocks/manufacturing/slicing/split-slice-stack)** > > Split slices into 3 slice stacks: closed contours, open contours, and points. > **[Slice Stack Boolean Union](blocks/manufacturing/slicing/slice-stack-boolean-union)** > > Combine multiple slice stacks into a single slice stack > **[Slice Stack Boolean Subtract](blocks/manufacturing/slicing/slice-stack-boolean-subtract)** > > Boolean subtract the slice stacks > **[Slice Stack Boolean Intersect](blocks/manufacturing/slicing/slice-stack-boolean-intersect)** > > Boolean intersect the slice stacks #### Exchange > **[Export Slices to Point Data](blocks/manufacturing/exchange/export-slices-to-point-data)** > > Export slice data, as well as laser power and exposure time, to a CSV point file. Points are uniformly distributed along contour and hatch lines. > **[Export Slices to CLF](blocks/manufacturing/exchange/export-slices-to-clf)** > > Export slice stack data to a CLF file. > **[Export Slices to CLI](blocks/manufacturing/exchange/export-slices-to-cli)** > > Export slice stack data to an ASCII or binary CLI file. > **[Export Slices to SSL](blocks/manufacturing/exchange/export-slices-to-ssl)** > > Export slice stack data to a Stratasys SSL file. > **[Export Slices to Renishaw](blocks/manufacturing/exchange/export-slices-to-renishaw)** > > Export slice stack data to a CLI file for importing into QuantAM. > **[Export Slices to EOS](blocks/manufacturing/exchange/export-slices-to-eos)** > > Export slice stack data to a CLI file for importing into EOSPRINT 2. > **[Export Slices to Arcam ABF](blocks/manufacturing/exchange/export-slices-to-arcam-abf)** > > Export slice stacks as an Arcam ABF for opening in EBM Control software. > **[Export CLI Points](blocks/manufacturing/exchange/export-cli-points)** > > Export points to cli. > **[Import Slice Stack](blocks/manufacturing/exchange/import-slice-stack)** > > Import Slice Stack file from an external location. > **[Slice Body to B\&W Image Stack](blocks/manufacturing/exchange/slice-body-to-bw-image-stack)** > > Slices an implicit body and generate images for each slice in the stack. > **[Export Slices to SLC](blocks/manufacturing/exchange/export-slices-to-slc)** > > Export slice stack data to a SLC file. > **[Export Slices to CLS](blocks/manufacturing/exchange/export-slices-to-cls)** > > Export slice stack data to a CLSv4 file. #### Utilities > **[Manufacturing Support Volume](blocks/manufacturing/utilities/manufacturing-support-volume)** > > Find the volume needed to support a body for an additive manufacturing process based on overhang angle. > **[Bounding Box 2D Nesting](blocks/manufacturing/utilities/bounding-box-2d-nesting)** > > Performs a 2D bin packing of bounding boxes. Boxes that fit will be placed in order of size and remaining boxes will be placed outside and next to the build volume. > **[Minimum Support Orientations](blocks/manufacturing/utilities/minimum-support-orientations)** > > Find a number of orientations that attempt to minimize the volume of the support regions needed for the body. The implicit block version is more robust and likely to provide more optimal results, while the mesh block version will converge on results much faster but these may be less optimal. ### Beta #### Create > **[If-Else](blocks/beta/create/if-else)** > > Returns a value based on a given condition. > **[JSON From Tuple](blocks/beta/create/json-from-tuple)** > > Converts a Tuple\ into a JSON format.. #### Modeling > **[Set Body Name](blocks/beta/modeling/set-body-name)** > > Set the name of an Implicit Body. #### Conversion > **[Convergent Body from Named Body](blocks/beta/conversion/convergent-body-from-named-body)** > > Create a convergent CAD Body from a named Implicit Body using adaptive tessellation. #### Simulation > **[Static Analysis with Inertia Relief](blocks/beta/simulation/static-analysis-with-inertia-relief)** > > Calculate displacements, strains, stresses, and reaction forces on an FE Model subject to applied boundary conditions. The loads are assumed to be applied slowly until the model reaches a state of equilibrium, and the relationship between loads and displacements is assumed to be linear. All inertial and damping forces are neglected. #### Topology Optimization > **[Extract Optimization History](blocks/parameter-optimization-beta/utilities/extract-optimization-history)** > > Extract the convergence history of a Parameter Optimization Result. #### Utilities > **[Mesh from Implicit by AT](blocks/utilities/conversion/mesh-from-implicit-by-at)** > > Converts an Implicit Body to a Mesh using Adaptive Tessellation. This method may significantly reduce computational and memory overhead compared to traditional methods, especially when finer tolerances are required. It achieves this by creating fewer triangles in flatter or less complex regions, resulting in a lower overall triangle count. However, this optimization can lead to a less regular and lower quality mesh in certain areas unless remeshing is enabled. > **[Multi-Region Mesh from Implicit](blocks/utilities/conversion/multi-region-mesh-from-implicit)** > > Converts an Implicit Body to a Mesh using Adaptive Tessellation. This method may significantly reduce computational and memory overhead compared to traditional methods, especially when finer tolerances are required. It achieves this by creating fewer triangles in flatter or less complex regions, resulting in a lower overall triangle count. However, this optimization can lead to a less regular and lower quality mesh in certain areas unless remeshing is enabled. > **[Mesh from Implicit Body 2](blocks/beta/utilities/mesh-from-implicit-body-2)** > > Convert an Implicit Body to a Mesh. > **[CAD Body from Implicit Body](blocks/beta/utilities/cad-body-from-implicit-body)** > > Converts an Implicit Body to a CAD Body within a specified Tolerance. As the Tolerance increases, the CAD Body may contain fewer faces and be generated faster. Works best for medium complexity Lattices and Implicit Bodies. For lower complexities, use Mesh from Implicit Body, Quadrangulate Mesh, then CAD Body from Quad Mesh. For higher complexities, use the Simplified Body Representation block. > **[Surface Plot](blocks/beta/utilities/surface-plot)** > > A shaded view of a Scalar Field on a Body. #### Manufacturing > **[Manufacturing Support Beams](blocks/beta/manufacturing/manufacturing-support-beams)** > > Generate beams under the points needing support on a body for an additive manufacturing process based on overhang angle. > **[Add Draft](blocks/beta/manufacturing/add-draft)** > > Applies a draft/taper angle to a mesh or a region of a mesh. #### Shell Modeling > **[Meshes From Profiles](blocks/beta/shell-modeling/meshes-from-profiles)** > > Mesh a list of pre-computed profiles, meshing each with shared intersection edges as hard constraints, and returning the results as a list of surface meshes in the same order as the input profiles. > **[Align Mesh Normals](blocks/beta/shell-modeling/align-mesh-normals)** > > Orient all mesh faces consistently using a flood-fill sweep. For closed manifold meshes, also ensures normals point outward. > **[Boundary Nodes from Open Mesh](blocks/beta/shell-modeling/boundary-nodes-from-open-mesh)** > > Extract all vertices lying on free edges (edges shared by exactly one face) of an open surface mesh as a list of Points. Returns an empty list for closed (watertight) meshes. > **[Boundary Polycurves from Open Mesh](blocks/beta/shell-modeling/boundary-polycurves-from-open-mesh)** > > Chain the free edges of an open surface mesh into ordered boundary loops and return each loop as a Polycurve. Returns an empty list for closed (watertight) meshes. > **[Clean Mesh Faces](blocks/beta/shell-modeling/clean-mesh-faces)** > > Remove degenerate faces below a given area and small disconnected components from a surface mesh. Faces are first filtered by area, then edge-connected components with fewer faces than the minimum are removed. Set Min Face Area to 0 (or leave unconnected) to skip area filtering. Set Min Component Faces to 0 or 1 (or leave unconnected) to skip component filtering. > **[Merge and Weld Meshes](blocks/beta/shell-modeling/merge-and-weld-meshes)** > > Combine multiple Meshes into a single Mesh and collapse vertices within a given distance threshold. > **[Intersect Meshes](blocks/beta/shell-modeling/intersect-meshes)** > > Intersects a list of surface meshes, embedding the intersection seam into each mesh and returning the corefined meshes as a list. > **[Split Welded Mesh](blocks/beta/shell-modeling/split-welded-mesh)** > > Split a mesh into a list of separate mesh patches, using non-manifold and boundary edges as split barriers. Optionally, an angle threshold lets patches on either side of a non-manifold edge merge back together: each face pairs with the face across the edge that continues it most smoothly, when the two are within the threshold of being flat. #### Fluids > **[Aircraft Flow Analysis](blocks/beta/fluids/aircraft-flow-analysis)** > > Calculates the pressure, velocity, and surface forces on an implicit body. The implicit body must be oriented in the default aircraft position with flow direction aligned to the positive X-axis, Y-axis the starboard/right wing direction and Z-axis pointing upward (lift direction). The solution uses a Lattice Boltzmann Method. A transient simulation is initiated and continues until the flow reaches a statistically steady state, then returns time-averaged pressure, velocity fields, along with the force on the implicit body surfaces. Streamlines will be calculated on the time-averaged velocity results. This block requires an NVIDIA GPU. ### Rib Design #### Create > **[2D Unit Cell](blocks/rib-design/create/2d-unit-cell)** > > The selected Unit Cell for the graph generation workflow. This block is used as an input to graph projection blocks or "Periodic Lattice" on a CAD face or quad mesh. > **[Graph by Planar Projection](blocks/rib-design/create/graph-by-planar-projection)** > > Creates a graph on the surface of an implicit body with planar projection. > **[Graph by Swept Projection](blocks/rib-design/create/graph-by-swept-projection)** > > Creates a graph on the surface of an implicit body with curved cylindrical projection based on a centerline curve. > **[Graph by Cylindrical Projection](blocks/rib-design/create/graph-by-cylindrical-projection)** > > Creates a graph on the surface of an implicit body with cylindrical projection. To set the map's orientation and position, use the Frame input. > **[Graph on CAD Face](blocks/rib-design/create/graph-on-cad-face)** > > Creates a conformal graph that is conformal to a CAD face. > **[Graph on Quad Mesh](blocks/rib-design/create/graph-on-quad-mesh)** > > Creates a graph that is conformal to a quad mesh. Note that the U and V orientations of individual cells will not be continuous. > **[Voronoi Surface Graph](blocks/rib-design/create/voronoi-surface-graph)** > > Creates a Graph from the Voronoi Diagram of a list of Points restricted to the surface boundary of a body. > **[Graph from Mesh Faces](blocks/lattices/utilities/graph-from-mesh-faces)** > > Constructs a Graph from the faces of a Mesh. > **[Graph from Line Segments](blocks/lattices/utilities/graph-from-line-segments)** > > Constructs a Graph from a list of Line Segments. Each Line Segment becomes a beam in the resulting Graph. Line Segments that share endpoints will join a shared vertex. Duplicate Line Segments will be removed. > **[Ribs from Graph](blocks/rib-design/create/ribs-from-graph)** > > Create extruded ribs from a graph on an implicit body surface and custom extrusion direction. > **[Relax Graph](blocks/rib-design/create/relax-graph)** > > Perform a relaxation on the graph. This block will move the vertices with the objective of creating uniform beam lengths. #### Modify > **[Blend Intersections](blocks/rib-design/modify/blend-intersections)** > > Add blend radii between lattice beams. > **[Collapse Vertices](blocks/modeling/utilities/collapse-vertices)** > > Collapses and merges the vertices of a Graph that are within a given distance of each other. > **[Collapse Vertices by Angle](blocks/lattices/utilities/collapse-vertices-by-angle)** > > Remove all of the intermediate vertices of a Graph where the vertex valency is equal to 2. All intermediate vertices will be removed by default, but an optional threshold angle may be used to preserve sharp vertices. > **[Trim Lattice](blocks/lattices/utilities/trim-lattice)** > > Trims a lattice with an Implicit Body as a trimming tool. > **[Merge Graphs](blocks/modeling/utilities/merge-graphs)** > > Merges multiple Graph together into a single Graph. Duplicate vertices, beams, and faces will be removed. ### Additive Manufacturing #### Material Reduction > **[Shell with Reinforcement](blocks/additive-manufacturing/material-reduction/shell-with-reinforcement)** > > Shell an Implicit Body with reinforced zones near selected CAD faces. > **[Perforate from CAD Face](blocks/additive-manufacturing/material-reduction/perforate-from-cad-face)** > > Perforate an object using a CAD face to determine where the perforation occurs. > **[Infill Volume Lattice](blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > > Create a thickened lattice within an Implicit body with a custom lattice type. > **[Infill Gyroid](blocks/additive-manufacturing/material-reduction/infill-gyroid)** > > Create a walled gyroid structure within an Implicit Body. > **[Merge Shell and Infill](blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** > > Merge infill geometry with shell geometry with a blend radius to create rounds between the two. #### Build Preparation > **[Orient Body on Build Plane](blocks/additive-manufacturing/build-preparation/orient-body-on-build-plane)** > > Rotate an Implicit Body and place its lowest point on an input build plane. > **[Slice on Build Plane](blocks/additive-manufacturing/build-preparation/slice-on-build-plane)** > > Slice an Implicit Body above the input build plane. The slice placements are calculated in a vertically centered fashion relative to the object to prevent slicing directly on an upper or lower boundary. > **[Offset and Checkerboard Slices](blocks/additive-manufacturing/build-preparation/offset-and-checkerboard-slices)** > > Create a slice stack by offsetting an existing slice stack inwards, and filling it with checkerboard hatch pattern. > **[Centered Plane from Box Floor](blocks/additive-manufacturing/build-preparation/centered-plane-from-box-floor)** > > Get a plane centered at the floor of a box. > **[Corner Plane from Box Floor](blocks/additive-manufacturing/build-preparation/corner-plane-from-box-floor)** > > Get a plane at the minimum point of the floor of a box. > **[Translate Object](blocks/utilities/transforms/translate-object)** > > Translate an object by a distance vector. > **[Orient Object](blocks/utilities/transforms/orient-object)** > > Orient geometry from a source Plane to a destination Plane. > **[Minimum Height Orientation](blocks/additive-manufacturing/build-preparation/minimum-height-orientation)** > > Find an orientation that minimizes the height of the bounding box of an implicit body. #### Build Volumes > **[EOS M 270 Build Volume](blocks/additive-manufacturing/build-volumes/eos-m-270-build-volume)** > > Build volume for preparing a print for an EOS M 270, placed so that the world origin represents the build volume's origin. > **[EOS M 280 Build Volume](blocks/additive-manufacturing/build-volumes/eos-m-280-build-volume)** > > Build volume for preparing a print for an EOS M 280, placed so that the world origin represents the build volume's origin. > **[EOS M 290 Build Volume](blocks/additive-manufacturing/build-volumes/eos-m-290-build-volume)** > > Build volume for preparing a print for an EOS M 290, placed so that the world origin represents the build volume's origin. > **[EOS M 300-4 Build Volume](blocks/additive-manufacturing/build-volumes/eos-m-300-4-build-volume)** > > Build volume for preparing a print for an EOS M 300-4, placed so that the world origin represents the build volume's origin. > **[EOS M 400 Build Volume](blocks/additive-manufacturing/build-volumes/eos-m-400-build-volume)** > > Build volume for preparing a print for an EOS M 400, placed so that the world origin represents the build volume's origin. > **[EOS M 400-4 Build Volume](blocks/additive-manufacturing/build-volumes/eos-m-400-4-build-volume)** > > Build volume for preparing a print for an EOS M 400-4, placed so that the world origin represents the build volume's origin. > **[Renishaw AM 250 Build Volume](blocks/additive-manufacturing/build-volumes/renishaw-am-250-build-volume)** > > Build volume for preparing a print for a Renishaw AM 250, placed so that the world origin represents the build volume's origin. > **[Renishaw AM 400 Build Volume](blocks/additive-manufacturing/build-volumes/renishaw-am-400-build-volume)** > > Build volume for preparing a print for a Renishaw AM 400, placed so that the world origin represents the build volume's origin. > **[RenAM 500M Build Volume](blocks/additive-manufacturing/build-volumes/renam-500m-build-volume)** > > Build volume for preparing a print for a Renishaw RenAM 500M, placed so that the world origin represents the build volume's origin. > **[RenAM 500Q Build Volume](blocks/additive-manufacturing/build-volumes/renam-500q-build-volume)** > > Build volume for preparing a print for a Renishaw RenAM 500Q, placed so that the world origin represents the build volume's origin. > **[RenAM 500S Build Volume](blocks/additive-manufacturing/build-volumes/renam-500s-build-volume)** > > Build volume for preparing a print for a Renishaw RenAM 500S, placed so that the world origin represents the build volume's origin. #### Export > **[Export Slices to CLI](blocks/manufacturing/exchange/export-slices-to-cli)** > > Export slice stack data to an ASCII or binary CLI file. > **[Export Slices to CLF](blocks/manufacturing/exchange/export-slices-to-clf)** > > Export slice stack data to a CLF file. > **[Export Slices to Renishaw](blocks/manufacturing/exchange/export-slices-to-renishaw)** > > Export slice stack data to a CLI file for importing into QuantAM. > **[Export Slices to EOS](blocks/manufacturing/exchange/export-slices-to-eos)** > > Export slice stack data to a CLI file for importing into EOSPRINT 2. > **[Export Slices to SSL](blocks/manufacturing/exchange/export-slices-to-ssl)** > > Export slice stack data to a Stratasys SSL file. > **[Export Slices to Arcam ABF](blocks/manufacturing/exchange/export-slices-to-arcam-abf)** > > Export slice stacks as an Arcam ABF for opening in EBM Control software. ### Architected Materials #### Latticing > **[Infill Gyroid](blocks/additive-manufacturing/material-reduction/infill-gyroid)** > > Create a walled gyroid structure within an Implicit Body. > **[Infill Volume Lattice](blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > > Create a thickened lattice within an Implicit body with a custom lattice type. > **[Infill Orthofoam Lattice](blocks/architected-materials/latticing/infill-orthofoam-lattice)** > > Create a thickened orthofoam lattice within an Implicit Body. > **[Infill Tet Lattice](blocks/architected-materials/latticing/infill-tet-lattice)** > > Create tetrahedral mesh from CAD body. > **[Infill Voronoi Lattice](blocks/architected-materials/latticing/infill-voronoi-lattice)** > > Create a thickened Voronoi lattice within an Implicit body. > **[Infill Delaunay Lattice](blocks/architected-materials/latticing/infill-delaunay-lattice)** > > Create a thickened lattice from a Delaunay tetrahedralization within an Implicit Body. > **[Infill Lattice between Faces](blocks/architected-materials/latticing/infill-lattice-between-faces)** > > Fill lattice between two CAD faces. > **[Simple Conformal Lattice from Face](blocks/architected-materials/latticing/simple-conformal-lattice-from-face)** > > Create a lattice graph that conforms inward or outward from a CAD face. > **[Simple Conformal Lattice between Faces](blocks/architected-materials/latticing/simple-conformal-lattice-between-faces)** > > Fill lattice between two CAD faces. > **[Tet Lattice from CAD Body](blocks/architected-materials/latticing/tet-lattice-from-cad-body)** > > Create tetrahedral mesh from CAD body. > **[Voronoi Surface Lattice from CAD Face](blocks/architected-materials/latticing/voronoi-surface-lattice-from-cad-face)** > > Apply a 2 Dimensional voronoi lattice to a CAD face. > **[Conformal Branching Lattice](blocks/architected-materials/latticing/conformal-branching-lattice)** > > Generate a branching lattice between two input CAD Faces > **[Surface Lattice from CAD Face](blocks/architected-materials/latticing/surface-lattice-from-cad-face)** > > Create a conformal surface lattice from a CAD Face. #### Texturing > **[Surface Roughness](blocks/architected-materials/texturing/surface-roughness)** > > Alter the roughness of a surface. > **[Voronoi Emboss](blocks/architected-materials/texturing/voronoi-emboss)** > > Create a Voronoi embossing pattern on an Implicit Body. > **[Voronoi Deboss](blocks/architected-materials/texturing/voronoi-deboss)** > > Create a Voronoi debossing pattern on an Implicit Body. > **[Tessellate Body](blocks/architected-materials/texturing/tessellate-body)** > > Tessellate an Implicit body in the positive X, Y, and Z direction by count. > **[Perforate Body](blocks/architected-materials/texturing/perforate-body)** > > Perforate an Implicit body with cylindrical holes. > **[Simplex Noise Deboss](blocks/architected-materials/texturing/simplex-noise-deboss)** > > Apply Simplex Noise to an Implicit body. > **[Cellular Noise Deboss](blocks/architected-materials/texturing/cellular-noise-deboss)** > > Apply cellular noise to an Implicit Body. > **[Subtractive Lattice Texture](blocks/architected-materials/texturing/subtractive-lattice-texture)** > > Subtract a thickened conformal beam-based lattice from an input Implicit body. > **[Subtractive Lattice Texture Blended](blocks/architected-materials/texturing/subtractive-lattice-texture-blended)** > > Subtract a blended thickened conformal beam-based lattice form an input Implicit body, using a blending field to control where the blending occurs. > **[Sphere Grid Deboss](blocks/architected-materials/texturing/sphere-grid-deboss)** > > Deboss surface with sphere grid from CAD body > **[Triangle Wave Texture](blocks/architected-materials/texturing/triangle-wave-texture)** > > Apply a wave texture to an Implicit body. > **[Voronoi Bubbles](blocks/architected-materials/texturing/voronoi-bubbles)** > > Texture the exterior surface of an Implicit body with an organic bubble-like deboss. #### Utilities > **[Remove Any Beams](blocks/architected-materials/utilities/remove-any-beams)** > > Remove any kind of beam (closed, floating, and open) from any kind of beam based lattice within an input Implicit Body volume. > **[Remove Floating Beams](blocks/architected-materials/utilities/remove-floating-beams)** > > Remove floating beams from any kind of beam based lattice. > **[Remove Open Beams](blocks/architected-materials/utilities/remove-open-beams)** > > Remove open beams from any kind of beam based lattice. > **[Simple Remesh Body](blocks/architected-materials/utilities/simple-remesh-body)** > > Remesh an Implicit body with a simple set of parameters. > **[Remesh CAD Face](blocks/architected-materials/utilities/remesh-cad-face)** > > Remesh a CAD face with a simple set of parameters. > **[Merge Shell and Infill](blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** > > Merge infill geometry with shell geometry with a blend radius to create rounds between the two. > **[Merge Graphs](blocks/modeling/utilities/merge-graphs)** > > Merges multiple Graph together into a single Graph. Duplicate vertices, beams, and faces will be removed. > **[Trim Lattice](blocks/lattices/utilities/trim-lattice)** > > Trims a lattice with an Implicit Body as a trimming tool. ### Design Analysis #### Sample Materials > **[Al 6061-T6](blocks/design-analysis/sample-materials/al-6061-t6)** > > General Aluminum 6061 characteristics and uses: Excellent joining characteristics, good acceptance of applied coatings. Combines relatively high strength, good workability, and high resistance to corrosion; widely available. The T8 and T9 tempers offer better chipping characteristics over the T6 temper. Reference: matweb.com Density: 2.70 g/cc Elastic modulus: 68.9 GPa Poisson's ratio: 0.33 Conductivity: 167 W/m/K Specific heat: 0.896 J/g/C > **[Al 7050-T7451](blocks/design-analysis/sample-materials/al-7050-t7451)** > > Aluminum 7050 has very high strength coupled with high resistance to exfoliation corrosion and stress-corrosion cracking, high fracture toughness, and fatigue resistance. This leads to applications in aircraft structures. Reference: matweb.com Density: 2.83 g/cc Elastic modulus: 71.7 GPa Poisson's ratio: 0.33 Conductivity: 157 W/m/K Specific heat: 0.86 J/g/C > **[Al 7075-T6](blocks/design-analysis/sample-materials/al-7075-t6)** > > General Aluminum 7075 characteristics and uses: Very high strength material used for highly stressed structural parts. The T7351 temper offers improved stress-corrosion cracking resistance. Reference: matweb.com Density: 2.81 g/cc Elastic modulus: 71.7 GPa Poisson's ratio: 0.33 Conductivity: 130 W/m/K Specific heat: 0.96 J/g/C > **[Al-Si-10Mg](blocks/design-analysis/sample-materials/al-si-10mg)** > > A popular aluminum alloy for additive manufacturing. Melting characteristics may prohibit fine feature sizes with powder bed processes. Reference: matweb.com Density: 2.68 g/cc Elastic modulus: 70.0 GPa Poisson's ratio: 0.33 Conductivity: 115 W/m/K Specific heat: 0.92 J/g/C > **[Inconel 625](blocks/design-analysis/sample-materials/inconel-625)** > > Heat-resistant, corrosion-resistant, material for high performance at high temperatures. High weldability enables very fine feature sizes. Properties are annealed. Reference: matweb.com Density: 8.44 g/cc Elastic modulus: 208 GPa Poisson's ratio: 0.28 Conductivity: 9.7 W/m/K Specific heat: 0.41 J/g/C > **[Inconel 718](blocks/design-analysis/sample-materials/inconel-718)** > > Heat-resistant, corrosion-resistant, material for high performance at high temperatures. High weldability enables very fine feature sizes. Properties are annealed. Reference: matweb.com Density: 8.19 g/cc Elastic modulus: 205 GPa Poisson's ratio: 0.284 Conductivity: 11.1 W/m/K Specific heat: 0.435 J/g/C > **[Ti-6Al-4V](blocks/design-analysis/sample-materials/ti-6al-4v)** > > General purpose titanium suitable for applications in blades, discs, rings, airframes, fasteners, components, vessels, cases, hubs, forgings, and biomedical implants. Reference: matweb.com Density: 4.43 g/cc Elastic modulus: 113.8 GPa Poisson's ratio: 0.342 Conductivity: 6.7 W/m/K Specific heat: 0.5263 J/g/C > **[Stainless Steel 316](blocks/design-analysis/sample-materials/stainless-steel-316)** > > General purpose stainless steel. Reference: matweb.com Density: 8.0 g/cc Elastic modulus: 193 GPa Poisson's ratio: 0.28 Conductivity: 16.3 W/m/K Specific heat: 0.5 J/g/C #### Mesh Generation > **[FE CAD Solid Mesh](blocks/structures/mesh/fe-cad-solid-mesh)** > > Create an FE Mesh of solid tetrahedral elements from a single solid CAD Body. Note that faulty CAD input here can cause the meshing algorithms to fail. If faulty geometry is expected, consider using the "FE Robust Tetrahedral Mesh" function. > **[FE Volume Mesh from Implicit](blocks/design-analysis/mesh-generation/fe-volume-mesh-from-implicit)** > > Create an FE Mesh of solid tetrahedral elements from an Implicit Body. > **[FE Tetrahedral Mesh](blocks/design-analysis/mesh-generation/fe-tetrahedral-mesh)** > > Create an FE Mesh of solid tetrahedral elements from a domain defined by a closed surface mesh. This function will remesh the input domain to generate FEA quality elements. > **[FE Robust Tetrahedral Mesh](blocks/design-analysis/mesh-generation/fe-robust-tetrahedral-mesh)** > > Create an FE Mesh of solid tetrahedral elements from a domain defined by a closed surface mesh that is known to have defects. This function will remesh the input domain to generate FEA quality elements in the volume. Note that this function is extremely robust and can handle severe defects. Although, the trade-off for this robustness is speed as the algorithm will be noticeably slower than other alternatives. This function is only recommended if the input domain is known to have severe defects. > **[FE Shell Mesh from CAD](blocks/structures/mesh/fe-shell-mesh-from-cad)** > > Create a FE Surface Mesh from the faces of a single CAD Body by discretizing and adding integration points of the desired order to each element within the mesh. Note, faulty CAD input can cause the meshing algorithm to fail. > **[FE Shell Mesh](blocks/design-analysis/mesh-generation/fe-shell-mesh)** > > Create an FE Mesh of shell elements from an input surface mesh. This function will remesh the input surface mesh to generate FEA quality elements. > **[FE Lattice Mesh](blocks/structures/mesh/fe-lattice-mesh)** > > Converts a Graph lattice into an FE Mesh by adding integration points of the desired order to the Graph lattice geometry. > **[FE Point](blocks/structures/mesh/fe-point)** > > Creates a six degree of freedom node that can be included in a simulation or optimization. > **[Mirror FE Mesh](blocks/structures/mesh/mirror-fe-mesh)** > > Mirror an FE Mesh using planar symmetry > **[Merge FE Meshes](blocks/structures/mesh/merge-fe-meshes)** > > Combine FE Meshes to generate one single mesh by collapsing nodes that are within a given tolerance. #### Model Assembly > **[FE Solid Model](blocks/design-analysis/model-assembly/fe-solid-model)** > > Create an FE Model for a 3-D solid FE mesh. > **[FE Solid Domain](blocks/design-analysis/model-assembly/fe-solid-domain)** > > Create an FE Domain for a 3-D solid mesh. > **[Lattice Domain](blocks/structures/model/lattice-domain)** > > Creates a Solid Domain from a graph lattice with isotropic material properties. > **[FE Lattice Connector](blocks/design-analysis/model-assembly/fe-lattice-connector)** > > Create an FE Connector, in this case a tie constraint, between a solid and lattice FE Mesh. This is useful when simulating a lattice using beam elements and the connecting structure as a solid. Using the provided lattice region, this function will attempt to automatically find the nodes on the lattice mesh that should be connected to the nearby faces of the solid mesh. Within the tie constraint, the rotational degrees-of-freedom are connected by default. #### Selection Sets > **[FE Boundary by CAD Face](blocks/design-analysis/selection-sets/fe-boundary-by-cad-face)** > > Create an FE Boundary of mesh entities using a list of CAD faces. > **[FE Region by CAD Body](blocks/design-analysis/selection-sets/fe-region-by-cad-body)** > > Create an FE Region of mesh elements using a CAD Body. > **[FE Boundary by Flood Fill](blocks/structures/utilities/fe-boundary-by-flood-fill)** > > Select boundary entities of an FE Mesh (faces/edges/nodes) using a flood fill operation. The block chooses the closest mesh entities to the specified origin, and uses a flood fill operation to select all mesh entities that lie within a certain specified angle and direction of the originally selected entity. #### Restraints > **[FE Fixed Faces](blocks/design-analysis/restraints/fe-fixed-faces)** > > Create a fixed displacement restraint by using a list of CAD faces. > **[Displacement Restraint](blocks/structures/boundary-conditions/displacement-restraint)** > > Restrains the selected boundary entities in up to six degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. > **[Temperature Restraint](blocks/structures/boundary-conditions/temperature-restraint)** > > Applies a temperature restraint to selected boundary entities. #### Loads > **[Force](blocks/structures/boundary-conditions/force)** > > Applies a force vector to a selected boundary. The force will be evenly distributed over the selected boundary entities. > **[Surface Force](blocks/structures/boundary-conditions/surface-force)** > > Applies a general force vector field to selected boundary face entities. The force will be distributed over the nodes of the selected faces. > **[Pressure](blocks/structures/boundary-conditions/pressure)** > > Applies a pressure to selected boundary face entities. > **[Point Force](blocks/structures/boundary-conditions/point-force)** > > Applies a point force to a selected boundary by distributing the load through rigid/flexible body elements. > **[Point Moment](blocks/structures/boundary-conditions/point-moment)** > > Applies a point moment to a selected boundary by distributing the load through rigid/flexible body elements. > **[Acceleration Load](blocks/structures/boundary-conditions/acceleration-load)** > > Applies an acceleration load to a selected region. The applied force is calculated by multiplying the acceleration vector by the element masses and distributing over the nodes. > **[Surface Heat Flux](blocks/structures/boundary-conditions/surface-heat-flux)** > > Applies a distributed heat flux normal to selected boundary face entities. #### Analysis > **[Static Analysis](blocks/structures/analysis/static-analysis)** > > Calculate displacements, strains, stresses, and reaction forces on an FE Model subject to applied boundary conditions. The loads are assumed to be applied slowly until the model reaches a state of equilibrium, and the relationship between loads and displacements is assumed to be linear. All inertial and damping forces are neglected. > **[Modal Analysis](blocks/structures/analysis/modal-analysis)** > > Calculate the natural frequencies and mode shapes of an FE Model subject to prescribed boundary conditions. This block calculates a specified number of vibration modes. Providing minimum and maximum frequencies bounds the range of frequencies to be returned. Removing the optional Restraints input leads to a free-free Modal Analysis. > **[Buckling Analysis](blocks/structures/analysis/buckling-analysis)** > > Calculate the critical buckling loads and buckling mode shapes of an FE Model subject to prescribed boundary conditions. The resulting eigenvalues are factors by which the load must be multiplied to reach the critical buckling load for that mode. > **[Thermal Analysis](blocks/structures/analysis/thermal-analysis)** > > Perform steady state heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. All transient effects of heat transfer are neglected and the temperatures are reported assuming that the system has reached equilibrium. #### Fields > **[Stress Thickness Modifier](blocks/design-analysis/fields/stress-thickness-modifier)** > > Create a Scalar Field that will output a thickness value based on the Von Mises stress results of a static analysis. > **[Displacement Vector Modifier](blocks/design-analysis/fields/displacement-vector-modifier)** > > Create a vector field that will output a displacement based on the nodal displacement results of a static analysis. > **[Temperature Thickness Modifier](blocks/design-analysis/fields/temperature-thickness-modifier)** > > Create a Scalar Field that will output a thickness value based on the nodal temperature results of a thermal analysis. > **[Advanced Stress Thickness Modifier](blocks/design-analysis/fields/advanced-stress-thickness-modifier)** > > Create a real field that will output a thickness value based on the Von Mises stress results of a static analysis. This advanced version allows the user to supply their own minimum and maximum version of stress values rather than automatically deriving it from the input analysis. #### Export > **[Export FE Mesh](blocks/structures/exchange/export-fe-mesh)** > > Export an FE Mesh. > **[Export FE Model](blocks/structures/exchange/export-fe-model)** > > Export an FE Model containing FE Mesh, Material and Attribute data, element/entity sets, and FE Connectors to an external CAE format. > **[Export Static Analysis](blocks/structures/exchange/export-static-analysis)** > > Export the setup of a Static Analysis to an external CAE format. > **[Export Modal Analysis](blocks/structures/exchange/export-modal-analysis)** > > Export the setup of a Modal Analysis to an external CAE format. > **[Export Buckling Analysis](blocks/structures/exchange/export-buckling-analysis)** > > Export the setup of a linear Buckling Analysis to an external CAE format. > **[Export Thermal Analysis](blocks/structures/exchange/export-thermal-analysis)** > > Export the setup of a Thermal Analysis to an external CAE format. > **[Export Static Analysis Result](blocks/design-analysis/export/export-static-analysis-result)** > > Export a Static Analysis Result. > **[Export Modal Analysis Result](blocks/design-analysis/export/export-modal-analysis-result)** > > Export a Modal Analysis Result. > **[Export Buckling Analysis Result](blocks/design-analysis/export/export-buckling-analysis-result)** > > Export a Buckling Analysis Result. > **[Export Thermal Analysis Result](blocks/design-analysis/export/export-thermal-analysis-result)** > > Export a Thermal Analysis Result. > **[Export Time Dependent Thermal Analysis Result](blocks/design-analysis/export/export-time-dependent-thermal-analysis-result)** > > Export a Time Dependent Thermal Analysis Result. ### Lightweighting #### Volumetric > **[Infill Delaunay Lattice](blocks/architected-materials/latticing/infill-delaunay-lattice)** > > Create a thickened lattice from a Delaunay tetrahedralization within an Implicit Body. > **[Infill Gyroid](blocks/additive-manufacturing/material-reduction/infill-gyroid)** > > Create a walled gyroid structure within an Implicit Body. > **[Infill Lattice between Faces](blocks/architected-materials/latticing/infill-lattice-between-faces)** > > Fill lattice between two CAD faces. > **[Infill Volume Lattice](blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > > Create a thickened lattice within an Implicit body with a custom lattice type. > **[Infill Tet Lattice](blocks/architected-materials/latticing/infill-tet-lattice)** > > Create tetrahedral mesh from CAD body. > **[Infill Voronoi Lattice](blocks/architected-materials/latticing/infill-voronoi-lattice)** > > Create a thickened Voronoi lattice within an Implicit body. #### Surface > **[Conformal Foam](blocks/lightweighting/surface/conformal-foam)** > > Create a conformal foam structure from the U and V parameters of an input CAD face. > **[Honeycomb Ribbing](blocks/lightweighting/surface/honeycomb-ribbing)** > > Create a honeycomb ribbing from the U and V parameters of an input CAD face. > **[Structural Ribbing](blocks/lightweighting/surface/structural-ribbing)** > > Create structural ribbing from the U and V parameters of an input CAD face. > **[Voronoi Structural Ribbing](blocks/lightweighting/surface/voronoi-structural-ribbing)** > > Create structural ribbing from a Voronoi Lattice along the surface of a CAD face. > **[Perforate Body](blocks/architected-materials/texturing/perforate-body)** > > Perforate an Implicit body with cylindrical holes. #### Shelling > **[Shell](blocks/modeling/operations/shell)** > > Hollow an object by offsetting inward or outward the outer surface of an implicit body. > **[Shell with Reinforcement](blocks/additive-manufacturing/material-reduction/shell-with-reinforcement)** > > Shell an Implicit Body with reinforced zones near selected CAD faces. > **[Merge Shell and Infill](blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** > > Merge infill geometry with shell geometry with a blend radius to create rounds between the two. > **[Shell and Gyroid](blocks/lightweighting/shelling/shell-and-gyroid)** > > Shell an Implicit Body and fill with a gyroid structure. > **[Shell and Voronoi Lattice](blocks/lightweighting/shelling/shell-and-voronoi-lattice)** > > Shell an Implicit Body and fill with a voronoi lattice. #### Utilities > **[Remove Any Beams](blocks/architected-materials/utilities/remove-any-beams)** > > Remove any kind of beam (closed, floating, and open) from any kind of beam based lattice within an input Implicit Body volume. > **[Remove Floating Beams](blocks/architected-materials/utilities/remove-floating-beams)** > > Remove floating beams from any kind of beam based lattice. > **[Remove Open Beams](blocks/architected-materials/utilities/remove-open-beams)** > > Remove open beams from any kind of beam based lattice. > **[Simple Remesh Body](blocks/architected-materials/utilities/simple-remesh-body)** > > Remesh an Implicit body with a simple set of parameters. > **[Remesh CAD Face](blocks/architected-materials/utilities/remesh-cad-face)** > > Remesh a CAD face with a simple set of parameters. > **[Weight Savings](blocks/lightweighting/utilities/weight-savings)** > > Compare the weight savings in terms of a volume percentage between two objects. For best results, the lightweight body should be derived from the original body. > **[Extrude Lattice](blocks/lattices/utilities/extrude-lattice)** > > Creates directional ribs from the beams of a Lattice. > **[Mix](blocks/math/utilities/mix)** > > Mix one scalar value with another scalar value, based on a mixing factor. # Additive Manufacturing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing ## Material Reduction > **[Shell with Reinforcement](../../block-documentation/blocks/additive-manufacturing/material-reduction/shell-with-reinforcement)** > **[Perforate from CAD Face](../../block-documentation/blocks/additive-manufacturing/material-reduction/perforate-from-cad-face)** > **[Infill Volume Lattice](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > **[Infill Gyroid](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid)** > **[Merge Shell and Infill](../../block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** ## Build Preparation > **[Orient Body on Build Plane](../../block-documentation/blocks/additive-manufacturing/build-preparation/orient-body-on-build-plane)** > **[Slice on Build Plane](../../block-documentation/blocks/additive-manufacturing/build-preparation/slice-on-build-plane)** > **[Offset and Checkerboard Slices](../../block-documentation/blocks/additive-manufacturing/build-preparation/offset-and-checkerboard-slices)** > **[Centered Plane from Box Floor](../../block-documentation/blocks/additive-manufacturing/build-preparation/centered-plane-from-box-floor)** > **[Corner Plane from Box Floor](../../block-documentation/blocks/additive-manufacturing/build-preparation/corner-plane-from-box-floor)** > **[Translate Object](../../block-documentation/blocks/utilities/transforms/translate-object)** > **[Orient Object](../../block-documentation/blocks/utilities/transforms/orient-object)** > **[Minimum Height Orientation](../../block-documentation/blocks/additive-manufacturing/build-preparation/minimum-height-orientation)** ## Build Volumes > **[EOS M 270 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-270-build-volume)** > **[EOS M 280 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-280-build-volume)** > **[EOS M 290 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-290-build-volume)** > **[EOS M 300-4 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-300-4-build-volume)** > **[EOS M 400 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-build-volume)** > **[EOS M 400-4 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-4-build-volume)** > **[Renishaw AM 250 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-250-build-volume)** > **[Renishaw AM 400 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-400-build-volume)** > **[RenAM 500M Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500m-build-volume)** > **[RenAM 500Q Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500q-build-volume)** > **[RenAM 500S Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500s-build-volume)** ## Export > **[Export Slices to CLI](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cli)** > **[Export Slices to CLF](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-clf)** > **[Export Slices to Renishaw](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-renishaw)** > **[Export Slices to EOS](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-eos)** > **[Export Slices to SSL](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-ssl)** > **[Export Slices to Arcam ABF](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-arcam-abf)** # Build Preparation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-preparation > **[Orient Body on Build Plane](../../../block-documentation/blocks/additive-manufacturing/build-preparation/orient-body-on-build-plane)** > **[Slice on Build Plane](../../../block-documentation/blocks/additive-manufacturing/build-preparation/slice-on-build-plane)** > **[Offset and Checkerboard Slices](../../../block-documentation/blocks/additive-manufacturing/build-preparation/offset-and-checkerboard-slices)** > **[Centered Plane from Box Floor](../../../block-documentation/blocks/additive-manufacturing/build-preparation/centered-plane-from-box-floor)** > **[Corner Plane from Box Floor](../../../block-documentation/blocks/additive-manufacturing/build-preparation/corner-plane-from-box-floor)** > **[Translate Object](../../../block-documentation/blocks/utilities/transforms/translate-object)** > **[Orient Object](../../../block-documentation/blocks/utilities/transforms/orient-object)** > **[Minimum Height Orientation](../../../block-documentation/blocks/additive-manufacturing/build-preparation/minimum-height-orientation)** # Centered Plane from Box Floor Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-preparation/centered-plane-from-box-floor Get a plane centered at the floor of a box. ### Inputs | Name | Type | Description | | - | - | - | | Box | [Box](../../../../block-documentation/types/box) | The box to get the centered plane from. | ### Outputs | Type | | - | | [Plane](../../../../block-documentation/types/plane) | # Corner Plane from Box Floor Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-preparation/corner-plane-from-box-floor Get a plane at the minimum point of the floor of a box. ### Inputs | Name | Type | Description | | - | - | - | | Box | [Box](../../../../block-documentation/types/box) | The box to get the centered plane from. | ### Outputs | Type | | - | | [Plane](../../../../block-documentation/types/plane) | # Minimum Height Orientation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-preparation/minimum-height-orientation > **[Implicit Body](#implicit-body)** > **[Implicit Body, 1.1.0](#implicit-body-110)** *** ## Implicit Body Find an orientation that minimizes the height of the bounding box of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to orient. | ### Outputs | Type | | - | | [Transformation](../../../../block-documentation/types/transformation) | *** ## Implicit Body, 1.1.0 Find an orientation that minimizes the height of the bounding box of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to orient. | ### Outputs | Type | | - | | [Transformation](../../../../block-documentation/types/transformation) | # Offset and Checkerboard Slices Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-preparation/offset-and-checkerboard-slices Create a slice stack by offsetting an existing slice stack inwards, and filling it with checkerboard hatch pattern. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Initial boundary slice stack to augment. | | Boundary offset | [Scalar](../../../../block-documentation/types/scalar) | Length to offset the outer contour. | | Checker width | [Scalar](../../../../block-documentation/types/scalar) | Dimension of the squares in the checkerboard. | | Checker gap | [Scalar](../../../../block-documentation/types/scalar) | Gap between squares in the checkerboard. | | Checker hatch spacing | [Scalar](../../../../block-documentation/types/scalar) | Spacing between the hatch lines within the squares of the checkerboard. | | Layer rotation | [Scalar](../../../../block-documentation/types/scalar) | Angular rotation between layers. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Orient Body on Build Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-preparation/orient-body-on-build-plane Rotate an Implicit Body and place its lowest point on an input build plane. ### Inputs | Name | Type | Description | | - | - | - | | Body to orient | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to rotate and place on build plane. | | Build plane | [Plane](../../../../block-documentation/types/plane) | Build plane to orient the body to. | | Rotation axis | [Vector](../../../../block-documentation/types/vector) | Axis to rotate around, relative to the body's centroid. | | Rotation angle | [Scalar](../../../../block-documentation/types/scalar) | Angle to rotate the body about the orientation axis. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Slice on Build Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-preparation/slice-on-build-plane Slice an Implicit Body above the input build plane. The slice placements are calculated in a vertically centered fashion relative to the object to prevent slicing directly on an upper or lower boundary. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to slice. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture details. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Origin plane | [Plane](../../../../block-documentation/types/plane) | Build plane to orient the slices. This also dictates the origin frame of the slice data when exporting. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Build Volumes Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes > **[EOS M 270 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-270-build-volume)** > **[EOS M 280 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-280-build-volume)** > **[EOS M 290 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-290-build-volume)** > **[EOS M 300-4 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-300-4-build-volume)** > **[EOS M 400 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-build-volume)** > **[EOS M 400-4 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-4-build-volume)** > **[Renishaw AM 250 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-250-build-volume)** > **[Renishaw AM 400 Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-400-build-volume)** > **[RenAM 500M Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500m-build-volume)** > **[RenAM 500Q Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500q-build-volume)** > **[RenAM 500S Build Volume](../../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500s-build-volume)** # EOS M 270 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-270-build-volume Build volume for preparing a print for an EOS M 270, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # EOS M 280 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-280-build-volume Build volume for preparing a print for an EOS M 280, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # EOS M 290 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-290-build-volume Build volume for preparing a print for an EOS M 290, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # EOS M 300-4 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-300-4-build-volume Build volume for preparing a print for an EOS M 300-4, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # EOS M 400-4 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-4-build-volume Build volume for preparing a print for an EOS M 400-4, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # EOS M 400 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-build-volume Build volume for preparing a print for an EOS M 400, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # RenAM 500M Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/renam-500m-build-volume Build volume for preparing a print for a Renishaw RenAM 500M, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # RenAM 500Q Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/renam-500q-build-volume Build volume for preparing a print for a Renishaw RenAM 500Q, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # RenAM 500S Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/renam-500s-build-volume Build volume for preparing a print for a Renishaw RenAM 500S, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # Renishaw AM 250 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-250-build-volume Build volume for preparing a print for a Renishaw AM 250, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # Renishaw AM 400 Build Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-400-build-volume Build volume for preparing a print for a Renishaw AM 400, placed so that the world origin represents the build volume's origin. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # Export Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/export > **[Export Slices to CLI](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cli)** > **[Export Slices to CLF](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-clf)** > **[Export Slices to Renishaw](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-renishaw)** > **[Export Slices to EOS](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-eos)** > **[Export Slices to SSL](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-ssl)** > **[Export Slices to Arcam ABF](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-arcam-abf)** # Material Reduction Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/material-reduction > **[Shell with Reinforcement](../../../block-documentation/blocks/additive-manufacturing/material-reduction/shell-with-reinforcement)** > **[Perforate from CAD Face](../../../block-documentation/blocks/additive-manufacturing/material-reduction/perforate-from-cad-face)** > **[Infill Volume Lattice](../../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > **[Infill Gyroid](../../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid)** > **[Merge Shell and Infill](../../../block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** # Infill Gyroid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid > **[Implicit Body, Vector, Scalar Field](#implicit-body-vector-scalar-field)** > **[Implicit Body, Vector, Scalar Field, 1.0.1](#implicit-body-vector-scalar-field-101)** *** ## Implicit Body, Vector, Scalar Field Create a walled gyroid structure within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a Delaunay beam lattice. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Adjust size of gyroid cell. | | Approx. thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of gyroid wall. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Vector, Scalar Field, 1.0.1 Create a walled gyroid structure within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a Delaunay beam lattice. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Adjust size of gyroid cell. | | Approx. thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of gyroid wall. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Infill Volume Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice > **[Implicit Body, Vector, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Bool, 2.0.0](#implicit-body-vector-volumetric-rule-permutation-enum-vector-scalar-field-bool-200)** > **[Implicit Body, Volumetric Rule, Vector, Vector, Scalar Field](#implicit-body-volumetric-rule-vector-vector-scalar-field)** > **[Implicit Body, Volumetric Rule, Vector, Vector, Scalar Field, 1.0.1](#implicit-body-volumetric-rule-vector-vector-scalar-field-101)** *** ## Implicit Body, Vector, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Bool, 2.0.0 Create a thickened lattice within an Implicit body with a custom lattice type. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a volumetric lattice. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Length of the unit cell's X, Y and Z dimensions | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Lattice unit cell | | Orientation | Permutation Enum | Orientation of Unit Cell | | Rotation | [Vector](../../../../block-documentation/types/vector) | Rotation of the unit about the X,Y, and Z axes. | | Lattice thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice geometry. | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Volumetric Rule, Vector, Vector, Scalar Field Create a thickened lattice within an Implicit body with a custom lattice type. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a volumetric lattice. | | Lattice type | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Lattice type to generate. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Cell size of the lattice. | | Rotation | [Vector](../../../../block-documentation/types/vector) | Rotation of the unit about the X,Y, and Z axes. | | Lattice thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice geometry. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Volumetric Rule, Vector, Vector, Scalar Field, 1.0.1 Create a thickened lattice within an Implicit Body with a custom lattice type. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to fill with a volumetric lattice. | | Lattice type | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Lattice type to generate. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Cell size of the lattice. | | Rotation | [Vector](../../../../block-documentation/types/vector) | Rotation of the lattice. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Merge Shell and Infill Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill > **[Implicit Body, Implicit Body, Implicit Body, Scalar](#implicit-body-implicit-body-implicit-body-scalar)** > **[Implicit Body, Implicit Body, Implicit Body, Scalar, 1.0.1](#implicit-body-implicit-body-implicit-body-scalar-101)** > **[Implicit Body, Lattice, Implicit Body, Scalar, 2.0.0](#implicit-body-lattice-implicit-body-scalar-200)** *** ## Implicit Body, Implicit Body, Implicit Body, Scalar Merge infill geometry with shell geometry with a blend radius to create rounds between the two. ### Inputs | Name | Type | Description | | - | - | - | | Shell body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Shell body to merge with an infill body. | | Infill body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Infil body to merge with a shell body. | | Boundary body | [Implicit Body](../../../../block-documentation/types/implicit-body) | A body that represents the outer envelope of the final geometry. This is used to remove ant excess geometry that extends past the shell geometry. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the rounds between the infill body and the shell body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Implicit Body, Implicit Body, Scalar, 1.0.1 Merge infill geometry with shell geometry with a blend radius to create rounds between the two. ### Inputs | Name | Type | Description | | - | - | - | | Shell body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Shell body to merge with an infill body. | | Infill body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Infil body to merge with a shell body. | | Boundary body | [Implicit Body](../../../../block-documentation/types/implicit-body) | A body that represents the outer envelope of the final geometry. This is used to remove ant excess geometry that extends past the shell geometry. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the rounds between the infill body and the shell body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Lattice, Implicit Body, Scalar, 2.0.0 Merge infill geometry with shell geometry with a blend radius to create rounds between the two. ### Inputs | Name | Type | Description | | - | - | - | | Shell body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Shell body to merge with the infill lattice. | | Infill body | [Lattice](../../../../block-documentation/types/lattice) | Infil lattice to merge with the shell body. | | Boundary body | [Implicit Body](../../../../block-documentation/types/implicit-body) | A body that represents the outer envelope of the final geometry. This is used to remove any excess geometry that extends past the shell geometry. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the rounds between the infill body and the shell body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Perforate from CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/material-reduction/perforate-from-cad-face > **[Implicit Body, CAD Face, Integer, Integer, Scalar Field, Scalar, Scalar](#implicit-body-cad-face-integer-integer-scalar-field-scalar-scalar)** > **[Implicit Body, CAD Face, Integer, Integer, Scalar Field, Scalar, Scalar, 2.0.0](#implicit-body-cad-face-integer-integer-scalar-field-scalar-scalar-200)** *** ## Implicit Body, CAD Face, Integer, Integer, Scalar Field, Scalar, Scalar Perforate an object using a CAD face to determine where the perforation occurs. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to perforate. | | Face to perforate | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to use as the location of perforation. | | U perforation count | [Integer](../../../../block-documentation/types/integer) | Amount of holes along the U direction of the input CAD face. | | V perforation count | [Integer](../../../../block-documentation/types/integer) | Amount of holes along the V direction of the input CAD face. | | Diameter | [Scalar Field](../../../../block-documentation/types/scalar-field) | Diameter of perforation holes. | | Depth | [Scalar](../../../../block-documentation/types/scalar) | Depth of perforation holes in the body. | | Border offset | [Scalar](../../../../block-documentation/types/scalar) | Distance away from the border of the CAD face to place the perforation. This value will be more accurate if the input CAD face is planar. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, CAD Face, Integer, Integer, Scalar Field, Scalar, Scalar, 2.0.0 Perforate an object using a CAD face to determine where the perforation occurs. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to perforate. | | Face to perforate | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to use as the location of perforation. | | U perforation count | [Integer](../../../../block-documentation/types/integer) | Amount of holes along the U direction of the input CAD face. | | V perforation count | [Integer](../../../../block-documentation/types/integer) | Amount of holes along the V direction of the input CAD face. | | Diameter | [Scalar Field](../../../../block-documentation/types/scalar-field) | Diameter of perforation holes. | | Depth | [Scalar](../../../../block-documentation/types/scalar) | Depth of perforation holes in the body. | | Border offset | [Scalar](../../../../block-documentation/types/scalar) | Distance away from the border of the CAD face to place the perforation. This value will be more accurate if the input CAD face is planar. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Shell with Reinforcement Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/additive-manufacturing/material-reduction/shell-with-reinforcement > **[Implicit Body, Faces to reinforce, Scalar, Scalar Field, Scalar Field](#implicit-body-faces-to-reinforce-scalar-scalar-field-scalar-field)** > **[Implicit Body, Faces to reinforce, Scalar, Scalar Field, Scalar Field, 1.0.1](#implicit-body-faces-to-reinforce-scalar-scalar-field-scalar-field-101)** *** ## Implicit Body, Faces to reinforce, Scalar, Scalar Field, Scalar Field Shell an Implicit Body with reinforced zones near selected CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to shell and reinforce. | | Faces to reinforce | [CAD Face List](../../../../block-documentation/types/cad-face) | CAD faces to apply additional reinforcement. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a length to maintain detail of the input faces. | | Shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Shell thickness to apply to entire body, except for the selected reinforced faces. Input positive values. | | Reinforce thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Shell thickness of the body near selected faces. Input positive values. For proper reinforcement, input a reinforcement thickness greater than the shell thickness. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Faces to reinforce, Scalar, Scalar Field, Scalar Field, 1.0.1 Shell an Implicit Body with reinforced zones near selected CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to shell and reinforce. | | Faces to reinforce | [CAD Face List](../../../../block-documentation/types/cad-face) | CAD faces to apply additional reinforcement. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a length to maintain detail of the input faces. | | Shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Shell thickness to apply to entire body, except for the selected reinforced faces. Input positive values. | | Reinforce thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Shell thickness of the body near selected faces. Input positive values. For proper reinforcement, input a reinforcement thickness greater than the shell thickness. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Architected Materials Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials ## Latticing > **[Infill Gyroid](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid)** > **[Infill Volume Lattice](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > **[Infill Orthofoam Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-orthofoam-lattice)** > **[Infill Tet Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-tet-lattice)** > **[Infill Voronoi Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-voronoi-lattice)** > **[Infill Delaunay Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-delaunay-lattice)** > **[Infill Lattice between Faces](../../block-documentation/blocks/architected-materials/latticing/infill-lattice-between-faces)** > **[Simple Conformal Lattice from Face](../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-from-face)** > **[Simple Conformal Lattice between Faces](../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-between-faces)** > **[Tet Lattice from CAD Body](../../block-documentation/blocks/architected-materials/latticing/tet-lattice-from-cad-body)** > **[Voronoi Surface Lattice from CAD Face](../../block-documentation/blocks/architected-materials/latticing/voronoi-surface-lattice-from-cad-face)** > **[Conformal Branching Lattice](../../block-documentation/blocks/architected-materials/latticing/conformal-branching-lattice)** > **[Surface Lattice from CAD Face](../../block-documentation/blocks/architected-materials/latticing/surface-lattice-from-cad-face)** ## Texturing > **[Surface Roughness](../../block-documentation/blocks/architected-materials/texturing/surface-roughness)** > **[Voronoi Emboss](../../block-documentation/blocks/architected-materials/texturing/voronoi-emboss)** > **[Voronoi Deboss](../../block-documentation/blocks/architected-materials/texturing/voronoi-deboss)** > **[Tessellate Body](../../block-documentation/blocks/architected-materials/texturing/tessellate-body)** > **[Perforate Body](../../block-documentation/blocks/architected-materials/texturing/perforate-body)** > **[Simplex Noise Deboss](../../block-documentation/blocks/architected-materials/texturing/simplex-noise-deboss)** > **[Cellular Noise Deboss](../../block-documentation/blocks/architected-materials/texturing/cellular-noise-deboss)** > **[Subtractive Lattice Texture](../../block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture)** > **[Subtractive Lattice Texture Blended](../../block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture-blended)** > **[Sphere Grid Deboss](../../block-documentation/blocks/architected-materials/texturing/sphere-grid-deboss)** > **[Triangle Wave Texture](../../block-documentation/blocks/architected-materials/texturing/triangle-wave-texture)** > **[Voronoi Bubbles](../../block-documentation/blocks/architected-materials/texturing/voronoi-bubbles)** ## Utilities > **[Remove Any Beams](../../block-documentation/blocks/architected-materials/utilities/remove-any-beams)** > **[Remove Floating Beams](../../block-documentation/blocks/architected-materials/utilities/remove-floating-beams)** > **[Remove Open Beams](../../block-documentation/blocks/architected-materials/utilities/remove-open-beams)** > **[Simple Remesh Body](../../block-documentation/blocks/architected-materials/utilities/simple-remesh-body)** > **[Remesh CAD Face](../../block-documentation/blocks/architected-materials/utilities/remesh-cad-face)** > **[Merge Shell and Infill](../../block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** > **[Merge Graphs](../../block-documentation/blocks/modeling/utilities/merge-graphs)** > **[Trim Lattice](../../block-documentation/blocks/lattices/utilities/trim-lattice)** # Latticing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing > **[Infill Gyroid](../../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid)** > **[Infill Volume Lattice](../../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > **[Infill Orthofoam Lattice](../../../block-documentation/blocks/architected-materials/latticing/infill-orthofoam-lattice)** > **[Infill Tet Lattice](../../../block-documentation/blocks/architected-materials/latticing/infill-tet-lattice)** > **[Infill Voronoi Lattice](../../../block-documentation/blocks/architected-materials/latticing/infill-voronoi-lattice)** > **[Infill Delaunay Lattice](../../../block-documentation/blocks/architected-materials/latticing/infill-delaunay-lattice)** > **[Infill Lattice between Faces](../../../block-documentation/blocks/architected-materials/latticing/infill-lattice-between-faces)** > **[Simple Conformal Lattice from Face](../../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-from-face)** > **[Simple Conformal Lattice between Faces](../../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-between-faces)** > **[Tet Lattice from CAD Body](../../../block-documentation/blocks/architected-materials/latticing/tet-lattice-from-cad-body)** > **[Voronoi Surface Lattice from CAD Face](../../../block-documentation/blocks/architected-materials/latticing/voronoi-surface-lattice-from-cad-face)** > **[Conformal Branching Lattice](../../../block-documentation/blocks/architected-materials/latticing/conformal-branching-lattice)** > **[Surface Lattice from CAD Face](../../../block-documentation/blocks/architected-materials/latticing/surface-lattice-from-cad-face)** # Conformal Branching Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/conformal-branching-lattice > **[CAD Face, Integer, CAD Face, Integer, Integer, Integer](#cad-face-integer-cad-face-integer-integer-integer)** > **[CAD Face, Integer, CAD Face, Integer, Integer, Integer, Scalar Field, 2.0.0](#cad-face-integer-cad-face-integer-integer-integer-scalar-field-200)** *** ## CAD Face, Integer, CAD Face, Integer, Integer, Integer Generate a branching lattice between two input CAD Faces ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to apply random points. | | Point count 1 | [Integer](../../../../block-documentation/types/integer) | Number of points to apply to the first CAD face. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to apply random points. | | Point count 2 | [Integer](../../../../block-documentation/types/integer) | Number of points to apply to the second CAD face. | | Global relaxation | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the points on both CAD faces. | | Layers | [Integer](../../../../block-documentation/types/integer) | The number of intermediate layers in the branched tree-like structure. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## CAD Face, Integer, CAD Face, Integer, Integer, Integer, Scalar Field, 2.0.0 Generate a branching lattice body between two input CAD Faces ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to apply random points. | | Point count 1 | [Integer](../../../../block-documentation/types/integer) | Number of points to apply to the first CAD face. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to apply random points. | | Point count 2 | [Integer](../../../../block-documentation/types/integer) | Number of points to apply to the second CAD face. | | Global relaxations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the points on both CAD faces. | | Layers | [Integer](../../../../block-documentation/types/integer) | The number of intermediate layers in the branched tree-like structure. | | Lattice thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The diameter of the lattice beams | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Infill Delaunay Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/infill-delaunay-lattice > **[Implicit Body, Scalar Field, Integer, Scalar Field](#implicit-body-scalar-field-integer-scalar-field)** > **[Implicit Body, Scalar Field, Integer, Scalar Field, 1.0.1](#implicit-body-scalar-field-integer-scalar-field-101)** > **[Implicit Body, Scalar Field, Volume Lattice Enum, Integer, Scalar Field, Bool, Bool, 2.0.0](#implicit-body-scalar-field-volume-lattice-enum-integer-scalar-field-bool-bool-200)** *** ## Implicit Body, Scalar Field, Integer, Scalar Field Create a thickened lattice from a Delaunay tetrahedralization within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to fill with a Delaunay beam lattice. | | Vertex spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the vertices of the Delaunay lattice. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of delaunay lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar Field, Integer, Scalar Field, 1.0.1 Create a thickened lattice from a Delaunay tetrahedralization within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to fill with a Delaunay beam lattice. | | Vertex spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the vertices of the Delaunay lattice. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of delaunay lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar Field, Volume Lattice Enum, Integer, Scalar Field, Bool, Bool, 2.0.0 Create a thickened lattice from a Delaunay tetrahedralization within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to fill with a Delaunay beam lattice. | | Vertex spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the vertices of the Delaunay lattice. | | Method | Volume Lattice Enum | Mesh features for lattice body creation | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of delaunay lattice beams. | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate a lattice on the surface | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Infill Lattice between Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/infill-lattice-between-faces > **[CAD Face, CAD Face, Bool, Bool, UV Position Enum, UV Position Enum, Volumetric Rule, Permutation Enum, Vector, Scalar Field, 2.0.0](#cad-face-cad-face-bool-bool-uv-position-enum-uv-position-enum-volumetric-rule-permutation-enum-vector-scalar-field-200)** > **[CAD Face, CAD Face, UV Position Enum, Bool, Vector, Conformal Rule, Scalar Field](#cad-face-cad-face-uv-position-enum-bool-vector-conformal-rule-scalar-field)** > **[CAD Face, CAD Face, UV Position Enum, Bool, Vector, Conformal Rule, Scalar Field, 1.0.1](#cad-face-cad-face-uv-position-enum-bool-vector-conformal-rule-scalar-field-101)** > **[CAD Face, CAD Face, Volumetric Rule, Permutation Enum, Vector, Scalar Field, 2.0.0](#cad-face-cad-face-volumetric-rule-permutation-enum-vector-scalar-field-200)** *** ## CAD Face, CAD Face, Bool, Bool, UV Position Enum, UV Position Enum, Volumetric Rule, Permutation Enum, Vector, Scalar Field, 2.0.0 Fill lattice between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to generate lattice between. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to generate lattice between. | | Flip first uv | [Bool](../../../../block-documentation/types/bool) | Flip the U and V parameter directions of the surface. Change this parameter and the "Origin position" parameter to adjust the lattice if the two sides do not align correctly. | | Flip second uv | [Bool](../../../../block-documentation/types/bool) | Flip the U and V parameter directions of the surface. Change this parameter and the "Origin position" parameter to adjust the lattice if the two sides do not align correctly. | | First uv origin | UV Position Enum | Corner parameter to set origin for first face | | Second uv origin | UV Position Enum | Corner parameter to set origin for second face | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Select lattice type to fill between CAD faces. | | Orientation | Permutation Enum | Orientation of Unit Cell | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | Number of unit cells in X,Y,Z directions | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## CAD Face, CAD Face, UV Position Enum, Bool, Vector, Conformal Rule, Scalar Field Fill lattice between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to generate lattice between. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to generate lattice between. | | Origin position | UV Position Enum | Origin of the UV parameterization of the second face. Change this parameter and the "Flip UV" parameter to adjust the lattice if the two sides do not align correctly. | | Flip uv | [Bool](../../../../block-documentation/types/bool) | Flip the U and V parameter directions of the surface. Change this parameter and the "Origin position" parameter to adjust the lattice if the two sides do not align correctly. | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | UVW tessellation for latticing. | | Unit type | [Conformal Rule](../../../../block-documentation/types/conformal-rule) | Select lattice type to fill between CAD faces. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## CAD Face, CAD Face, UV Position Enum, Bool, Vector, Conformal Rule, Scalar Field, 1.0.1 Fill lattice between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to generate lattice between. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to generate lattice between. | | Origin position | UV Position Enum | Origin of the UV parameterization of the second face. Change this parameter and the "Flip UV" parameter to adjust the lattice if the two sides do not align correctly. | | Flip uv | [Bool](../../../../block-documentation/types/bool) | Flip the U and V parameter directions of the surface. Change this parameter and the "Origin position" parameter to adjust the lattice if the two sides do not align correctly. | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | UVW tessellation for latticing. | | Unit type | [Conformal Rule](../../../../block-documentation/types/conformal-rule) | Select lattice type to fill between CAD faces. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## CAD Face, CAD Face, Volumetric Rule, Permutation Enum, Vector, Scalar Field, 2.0.0 Fill lattice between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to generate lattice between. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to generate lattice between. | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Select lattice type to fill between CAD faces. | | Orientation | Permutation Enum | Orientation of Unit Cell | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | Number of cells in X,Y,Z directions | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Infill Orthofoam Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/infill-orthofoam-lattice > **[Implicit Body, Implicit Body, Vector Field, Integer, Scalar Field](#implicit-body-implicit-body-vector-field-integer-scalar-field)** > **[Implicit Body, Scalar Field, Vector Field, Integer, Scalar Field, Bool, Scalar, Integer, 3.0.0](#implicit-body-scalar-field-vector-field-integer-scalar-field-bool-scalar-integer-300)** > **[Implicit Body, Scalar Field, Vector Field, Scalar Field, Scalar, Integer, 2.0.0](#implicit-body-scalar-field-vector-field-scalar-field-scalar-integer-200)** *** ## Implicit Body, Implicit Body, Vector Field, Integer, Scalar Field Create a thickened orthofoam lattice within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to fill with an orthofoam lattice. | | Vertex spacing | [Implicit Body](../../../../block-documentation/types/implicit-body) | The average spacing between the vertices of the orthofoam lattice. | | Direction | [Vector Field](../../../../block-documentation/types/vector-field) | Direction of the orthofoam lattice. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of orthofoam lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar Field, Vector Field, Integer, Scalar Field, Bool, Scalar, Integer, 3.0.0 Create a thickened orthofoam lattice within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with an orthofoam lattice. Body must have an appropriately sized bounding box. | | Vertex spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the vertices of the orthofoam lattice. | | Direction | [Vector Field](../../../../block-documentation/types/vector-field) | Direction of the orthofoam lattice. | | Valency | [Integer](../../../../block-documentation/types/integer) | Minimum number of nearest vertices to join to each vertex | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of orthofoam lattice beams. | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | | Scale factor | [Scalar](../../../../block-documentation/types/scalar) | Scale the beams along the input direction. Values greater than 1 will increase the beam lengths along the direction field, while values less than 1 will increase beam lengths perpendicular to the direction. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Scalar Field, Vector Field, Scalar Field, Scalar, Integer, 2.0.0 Create a thickened orthofoam lattice within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with an orthofoam lattice. Body must have an appropriately sized bounding box. | | Vertex spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the vertices of the orthofoam lattice. | | Direction | [Vector Field](../../../../block-documentation/types/vector-field) | Direction of the orthofoam lattice. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of orthofoam lattice beams. | | Scale factor | [Scalar](../../../../block-documentation/types/scalar) | Scale the beams along the input direction. Values greater than 1 will increase the beam lengths along the direction field, while values less than 1 will increase beam lengths perpendicular to the direction. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Infill Tet Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/infill-tet-lattice > **[Implicit Body, Scalar Field, Scalar Field](#implicit-body-scalar-field-scalar-field)** > **[Implicit Body, Scalar Field, Scalar Field, 1.0.1](#implicit-body-scalar-field-scalar-field-101)** > **[Implicit Body, Scalar Field, Scalar Field, Volume Lattice Enum, Bool, Bool, Scalar, 2.0.0](#implicit-body-scalar-field-scalar-field-volume-lattice-enum-bool-bool-scalar-200)** > **[Implicit Body, Scalar Field, Scalar Field, Volume Lattice Enum, Bool, Bool, Scalar, 2.1.0](#implicit-body-scalar-field-scalar-field-volume-lattice-enum-bool-bool-scalar-210)** > **[Implicit Body, Scalar Field, Scalar Field, Volume Lattice Enum, Bool, Bool, Scalar, 2.2.0](#implicit-body-scalar-field-scalar-field-volume-lattice-enum-bool-bool-scalar-220)** *** ## Implicit Body, Scalar Field, Scalar Field Create tetrahedral mesh from CAD body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a Tetrahedral lattice. | | Target beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired target length of lattice beams determined by the shape of the geometry. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of tetrahedral lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar Field, Scalar Field, 1.0.1 Create tetrahedral mesh from CAD body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to fill with a Tetrahedral lattice. | | Target beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired target length of lattice beams determined by the shape of the geometry. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of tetrahedral lattice beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar Field, Scalar Field, Volume Lattice Enum, Bool, Bool, Scalar, 2.0.0 Create tetrahedral lattice from Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a Tetrahedral lattice. | | Target beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired target length of lattice beams determined by the shape of the geometry. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of tetrahedral lattice beams. | | Method | Volume Lattice Enum | Features for lattice body creation. This will change how the tet lattice is generated and the resulting geometry. | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate lattice on surface | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to capture | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Scalar Field, Scalar Field, Volume Lattice Enum, Bool, Bool, Scalar, 2.1.0 Create tetrahedral lattice from Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a Tetrahedral lattice. | | Target beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired target length of lattice beams determined by the shape of the geometry. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of tetrahedral lattice beams. | | Method | Volume Lattice Enum | Features for lattice body creation. This will change how the tet lattice is generated and the resulting geometry. | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate lattice on surface | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to capture | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Scalar Field, Scalar Field, Volume Lattice Enum, Bool, Bool, Scalar, 2.2.0 Create tetrahedral lattice from Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with a Tetrahedral lattice. | | Target beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired target length of lattice beams determined by the shape of the geometry. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of tetrahedral lattice beams. | | Method | Volume Lattice Enum | Features for lattice body creation. This will change how the tet lattice is generated and the resulting geometry. | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate lattice on surface | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to capture | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Infill Voronoi Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/infill-voronoi-lattice > **[Implicit Body, Scalar, Scalar Field, Integer, Scalar Field](#implicit-body-scalar-scalar-field-integer-scalar-field)** > **[Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, 1.0.1](#implicit-body-scalar-scalar-field-integer-scalar-field-101)** > **[Implicit Body, Scalar Field, Integer, Scalar Field, Bool, Mesh, 2.0.0](#implicit-body-scalar-field-integer-scalar-field-bool-mesh-200)** > **[Implicit Body, Scalar Field, Integer, Scalar Field, Bool, Mesh, 2.1.0](#implicit-body-scalar-field-integer-scalar-field-bool-mesh-210)** *** ## Implicit Body, Scalar, Scalar Field, Integer, Scalar Field Create a thickened Voronoi lattice within an Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with Voronoi cells. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the input body to preserve. For larger bodies, increase the Feature size value. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the centeroid of the Voronoi cells. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of Voronoi beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, 1.0.1 Create a thickened Voronoi lattice within an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to fill with Voronoi cells. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the input body to preserve. For larger bodies, increase the Feature size value. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the centeroid of the Voronoi cells. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of Voronoi beams. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar Field, Integer, Scalar Field, Bool, Mesh, 2.0.0 Create a Voronoi lattice within an Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with Voronoi cells. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the centroid of the Voronoi cells. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of Voronoi beams. | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Optional input to generate beams on mesh boundary | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | *** ## Implicit Body, Scalar Field, Integer, Scalar Field, Bool, Mesh, 2.1.0 Create a Voronoi lattice within an Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to fill with Voronoi cells. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The average spacing between the centroid of the Voronoi cells. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of Voronoi beams. | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges | | Boundary | [Mesh](../../../../block-documentation/types/mesh) | Optional input to generate beams on mesh boundary | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | # Simple Conformal Lattice between Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-between-faces > **[CAD Face, CAD Face, Bool, Bool, UV Position Enum, UV Position Enum, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Bool, 2.0.0](#cad-face-cad-face-bool-bool-uv-position-enum-uv-position-enum-volumetric-rule-permutation-enum-vector-scalar-field-bool-200)** > **[CAD Face, CAD Face, UV Position Enum, Bool, Conformal Rule, Vector](#cad-face-cad-face-uv-position-enum-bool-conformal-rule-vector)** > **[CAD Face, CAD Face, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Bool, 2.0.0](#cad-face-cad-face-volumetric-rule-permutation-enum-vector-scalar-field-bool-200)** *** ## CAD Face, CAD Face, Bool, Bool, UV Position Enum, UV Position Enum, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Bool, 2.0.0 Fill lattice between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to generate lattice between. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to generate lattice between. | | Flip first uv | [Bool](../../../../block-documentation/types/bool) | Flip the U and V parameter directions of the surface. Change this parameter and the "Origin position" parameter to adjust the lattice if the two sides do not align correctly. | | Flip second uv | [Bool](../../../../block-documentation/types/bool) | Flip the U and V parameter directions of the surface. Change this parameter and the "Origin position" parameter to adjust the lattice if the two sides do not align correctly. | | First uv origin | UV Position Enum | Corner parameter to set origin for first face | | Second uv origin | UV Position Enum | Corner parameter to set origin for second face | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Select lattice type to fill between CAD faces. | | Orientation | Permutation Enum | Orientation of Unit Cell | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | UVW tessellation for latticing. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved lattice. Curved lattices conform more closely to the CAD faces. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## CAD Face, CAD Face, UV Position Enum, Bool, Conformal Rule, Vector Create a lattice graph that conforms between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to generate lattice between. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to generate lattice between. | | Origin position | UV Position Enum | Origin of the UV parameterization of the second face. Change this parameter and the "Flip UV" parameter to adjust the lattice if the two sides do not align correctly. | | Flip uv | [Bool](../../../../block-documentation/types/bool) | Flip the U and V parameter directions of the surface. Change this parameter and the "Origin position" parameter to adjust the lattice if the two sides do not align correctly. | | Unit type | [Conformal Rule](../../../../block-documentation/types/conformal-rule) | Select lattice type to fill between CAD faces. | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | 3 Dimensional divisions within the parameterized space. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## CAD Face, CAD Face, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Bool, 2.0.0 Fill lattice between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad face 1 | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD face to generate lattice between. | | Cad face 2 | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD face to generate lattice between. | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Select lattice type to fill between CAD faces. | | Orientation | Permutation Enum | Orientation of Unit Cell | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | UVW tessellation for latticing. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved lattice. Curved lattices conform closer to the CAD faces. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Simple Conformal Lattice from Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-from-face > **[CAD Face, Conformal Rule, Vector, Scalar](#cad-face-conformal-rule-vector-scalar)** > **[CAD Face, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Scalar Field, Bool, 2.0.0](#cad-face-volumetric-rule-permutation-enum-vector-scalar-field-scalar-field-bool-200)** *** ## CAD Face, Conformal Rule, Vector, Scalar Create a lattice graph that conforms inward or outward from a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to apply conformal lattice. | | Unit type | [Conformal Rule](../../../../block-documentation/types/conformal-rule) | Conformal unit to generate with. | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | 3 Dimensional divisions within the parameterized space. | | Offset distance | [Scalar](../../../../block-documentation/types/scalar) | The height of the lattice relative to the normal direction of the input CAD face. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## CAD Face, Volumetric Rule, Permutation Enum, Vector, Scalar Field, Scalar Field, Bool, 2.0.0 Create a lattice graph that conforms inward or outward from a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to apply conformal lattice. | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Conformal unit to generate with. | | Orientation | Permutation Enum | Orientation of Unit cell | | Uvw divisions | [Vector](../../../../block-documentation/types/vector) | 3 Dimensional divisions within the parameterized space. | | Offset distance | [Scalar Field](../../../../block-documentation/types/scalar-field) | The height of the lattice relative to the normal direction of the input CAD face. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of lattice beams | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved lattice. Curved lattices conform closer to the CAD face. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Surface Lattice from CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/surface-lattice-from-cad-face > **[CAD Body, Scalar, Surface Mesh Shape Enum, Scalar Field, Surface Rule](#cad-body-scalar-surface-mesh-shape-enum-scalar-field-surface-rule)** > **[CAD Body, Surface Mesh Shape Enum, Surface Lattice Enum, Scalar Field, Scalar Field, 2.0.0](#cad-body-surface-mesh-shape-enum-surface-lattice-enum-scalar-field-scalar-field-200)** > **[CAD Body, Surface Mesh Shape Enum, Surface Lattice Enum, Scalar Field, Scalar Field, 2.1.0](#cad-body-surface-mesh-shape-enum-surface-lattice-enum-scalar-field-scalar-field-210)** > **[CAD Body, Surface Mesh Shape Enum, Surface Lattice Enum, Scalar Field, Scalar Field, 2.2.0](#cad-body-surface-mesh-shape-enum-surface-lattice-enum-scalar-field-scalar-field-220)** *** ## CAD Body, Scalar, Surface Mesh Shape Enum, Scalar Field, Surface Rule Create a conformal surface lattice from a CAD Face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Body](../../../../block-documentation/types/cad-body) | CAD face to apply a surface lattice. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD face. | | Remesh shape | Surface Mesh Shape Enum | The mesh topology to apply the input CAD face. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The edge length of the mesh faces of the mesh topology. | | Lattice type | [Surface Rule](../../../../block-documentation/types/surface-rule) | The surface lattice type to derive from the mesh topology. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## CAD Body, Surface Mesh Shape Enum, Surface Lattice Enum, Scalar Field, Scalar Field, 2.0.0 Create a conformal surface lattice from a CAD Face. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to apply a surface lattice. | | Shape | Surface Mesh Shape Enum | The mesh topology to apply the input CAD face. | | Method | Surface Lattice Enum | The surface lattice type to derive from the mesh topology. (Mesh edges is typically used) | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The edge length of the mesh faces of the mesh topology. (Roughly the size of the cells of the lattice) | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice beam thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## CAD Body, Surface Mesh Shape Enum, Surface Lattice Enum, Scalar Field, Scalar Field, 2.1.0 Create a conformal surface lattice from a CAD Face. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to apply a surface lattice. | | Shape | Surface Mesh Shape Enum | The mesh topology to apply the input CAD face. | | Method | Surface Lattice Enum | The surface lattice type to derive from the mesh topology. (Mesh edges is typically used) | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The edge length of the mesh faces of the mesh topology. (Roughly the size of the cells of the lattice) | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice beam thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## CAD Body, Surface Mesh Shape Enum, Surface Lattice Enum, Scalar Field, Scalar Field, 2.2.0 Create a conformal surface lattice from a CAD Face. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to apply a surface lattice. | | Shape | Surface Mesh Shape Enum | The mesh topology to apply the input CAD face. | | Method | Surface Lattice Enum | The surface lattice type to derive from the mesh topology. (Mesh edges is typically used) | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The edge length of the mesh faces of the mesh topology. (Roughly the size of the cells of the lattice) | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice beam thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Tet Lattice from CAD Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/tet-lattice-from-cad-body > **[CAD Body, Scalar, Scalar Field](#cad-body-scalar-scalar-field)** > **[CAD Body, Volume Lattice Enum, Bool, Scalar Field, Scalar Field, 2.0.0](#cad-body-volume-lattice-enum-bool-scalar-field-scalar-field-200)** > **[CAD Body, Volume Lattice Enum, Bool, Scalar Field, Scalar Field, 2.1.0](#cad-body-volume-lattice-enum-bool-scalar-field-scalar-field-210)** > **[CAD Body, Volume Lattice Enum, Bool, Scalar Field, Scalar Field, 2.2.0](#cad-body-volume-lattice-enum-bool-scalar-field-scalar-field-220)** *** ## CAD Body, Scalar, Scalar Field Create tetrahedral mesh from CAD body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to generate lattice. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD body. | | Beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired length of lattice beams. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## CAD Body, Volume Lattice Enum, Bool, Scalar Field, Scalar Field, 2.0.0 Create tetrahedral lattice from CAD body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to generate lattice. | | Method | Volume Lattice Enum | Mesh features for lattice body generation | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate lattice on surface | | Beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired (and approximate) length of lattice beams. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired thickness of lattice beams | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## CAD Body, Volume Lattice Enum, Bool, Scalar Field, Scalar Field, 2.1.0 Create tetrahedral lattice from CAD body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to generate lattice. | | Method | Volume Lattice Enum | Mesh features for lattice body generation | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate lattice on surface | | Beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired (and approximate) length of lattice beams. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired thickness of lattice beams | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## CAD Body, Volume Lattice Enum, Bool, Scalar Field, Scalar Field, 2.2.0 Create tetrahedral lattice from CAD body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to generate lattice. | | Method | Volume Lattice Enum | Mesh features for lattice body generation | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate lattice on surface | | Beam length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired (and approximate) length of lattice beams. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Desired thickness of lattice beams | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Voronoi Surface Lattice from CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/latticing/voronoi-surface-lattice-from-cad-face > **[CAD Face, Scalar, Integer, Integer, Integer](#cad-face-scalar-integer-integer-integer)** > **[CAD Face, Scalar, Integer, Integer, Integer, Scalar Field, Scalar Field, 2.0.0](#cad-face-scalar-integer-integer-integer-scalar-field-scalar-field-200)** *** ## CAD Face, Scalar, Integer, Integer, Integer Apply a 2 Dimensional voronoi lattice to a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to apply the voronoi surface lattice. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD Face. | | Voronoi cell count | [Integer](../../../../block-documentation/types/integer) | The number of voronoi cells to apply to the input CAD face. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the voronoi cells on the mesh. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## CAD Face, Scalar, Integer, Integer, Integer, Scalar Field, Scalar Field, 2.0.0 Generates a 2D lattice along a cad face ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate Voronoi lattice along. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD Face. | | Voronoi cell count | [Integer](../../../../block-documentation/types/integer) | The number of voronoi cells to apply to the input CAD face. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the voronoi cells on the mesh. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field with thickness values of lattice beams. | | Spatial weighting | [Scalar Field](../../../../block-documentation/types/scalar-field) | An optional input to control the spacing of the generated cells. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Texturing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing > **[Surface Roughness](../../../block-documentation/blocks/architected-materials/texturing/surface-roughness)** > **[Voronoi Emboss](../../../block-documentation/blocks/architected-materials/texturing/voronoi-emboss)** > **[Voronoi Deboss](../../../block-documentation/blocks/architected-materials/texturing/voronoi-deboss)** > **[Tessellate Body](../../../block-documentation/blocks/architected-materials/texturing/tessellate-body)** > **[Perforate Body](../../../block-documentation/blocks/architected-materials/texturing/perforate-body)** > **[Simplex Noise Deboss](../../../block-documentation/blocks/architected-materials/texturing/simplex-noise-deboss)** > **[Cellular Noise Deboss](../../../block-documentation/blocks/architected-materials/texturing/cellular-noise-deboss)** > **[Subtractive Lattice Texture](../../../block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture)** > **[Subtractive Lattice Texture Blended](../../../block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture-blended)** > **[Sphere Grid Deboss](../../../block-documentation/blocks/architected-materials/texturing/sphere-grid-deboss)** > **[Triangle Wave Texture](../../../block-documentation/blocks/architected-materials/texturing/triangle-wave-texture)** > **[Voronoi Bubbles](../../../block-documentation/blocks/architected-materials/texturing/voronoi-bubbles)** # Cellular Noise Deboss Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/cellular-noise-deboss Apply cellular noise to an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to texture. | | Frequency | [Scalar](../../../../block-documentation/types/scalar) | The frequency of the noise. This affects how coarse the noise output is. | | Depth factor | [Scalar Field](../../../../block-documentation/types/scalar-field) | The depth of the surface noise. | | Distance | Noise Distance Enum | The cellular distance function. | | Return type | Noise Return Enum | How to return the distance to n points. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Perforate Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/perforate-body > **[Implicit Body, Scalar, Vector, Scalar](#implicit-body-scalar-vector-scalar)** > **[Implicit Body, Scalar, Vector, Scalar, 1.0.1](#implicit-body-scalar-vector-scalar-101)** > **[Implicit Body, Scalar, Vector, Scalar, 2.0.0](#implicit-body-scalar-vector-scalar-200)** > **[Implicit Body, Scalar, Vector, Scalar, 2.1.0](#implicit-body-scalar-vector-scalar-210)** *** ## Implicit Body, Scalar, Vector, Scalar Perforate an Implicit body with cylindrical holes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to perforate. | | Hole size | [Scalar](../../../../block-documentation/types/scalar) | Size of the hole perforations. | | Rotation axis | [Vector](../../../../block-documentation/types/vector) | Axis direction to rotate the perforation pattern around. | | Rotation angle | [Scalar](../../../../block-documentation/types/scalar) | The rotation angle in radians. Type "deg" to convert Angle value to degrees. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Vector, Scalar, 1.0.1 Perforate an Implicit body with cylindrical holes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to perforate. | | Hole size | [Scalar](../../../../block-documentation/types/scalar) | Size of the hole perforations. | | Rotation axis | [Vector](../../../../block-documentation/types/vector) | Axis direction to rotate the perforation pattern around. | | Rotation angle | [Scalar](../../../../block-documentation/types/scalar) | The rotation angle in radians. Type "deg" to convert Angle value to degrees. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Vector, Scalar, 2.0.0 Perforate an Implicit body with cylindrical holes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to perforate. | | Hole diameter | [Scalar](../../../../block-documentation/types/scalar) | Size of the hole perforations. | | Rotation axis | [Vector](../../../../block-documentation/types/vector) | Axis direction to rotate the perforation pattern around. | | Rotation angle | [Scalar](../../../../block-documentation/types/scalar) | The rotation angle in radians. Type "deg" to convert Angle value to degrees. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Vector, Scalar, 2.1.0 Perforate an Implicit body with cylindrical holes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to perforate. | | Hole diameter | [Scalar](../../../../block-documentation/types/scalar) | Size of the hole perforations. | | Rotation axis | [Vector](../../../../block-documentation/types/vector) | Axis direction to rotate the perforation pattern around. | | Rotation angle | [Scalar](../../../../block-documentation/types/scalar) | The rotation angle in radians. Type "deg" to convert Angle value to degrees. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Simplex Noise Deboss Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/simplex-noise-deboss Apply Simplex Noise to an Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to texture. | | Frequency | [Integer](../../../../block-documentation/types/integer) | The frequency of the noise. This affects how coarse the noise output is. | | Depth factor | [Scalar Field](../../../../block-documentation/types/scalar-field) | The depth of the surface noise. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Sphere Grid Deboss Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/sphere-grid-deboss Deboss surface with sphere grid from CAD body ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Convert the CAD Body to Implicit Body. | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face of the nTop body to apply the texture to. | | Sphere radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | The radius of the spheres of the sphere grid. | | U count | [Integer](../../../../block-documentation/types/integer) | The density of the sphere grid in the U direction. | | V count | [Integer](../../../../block-documentation/types/integer) | The density of the sphere grid in the V direction. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Subtractive Lattice Texture Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture > **[Implicit Body, CAD Face, Conformal Rule, Integer, Integer, Scalar](#implicit-body-cad-face-conformal-rule-integer-integer-scalar)** > **[Implicit Body, CAD Face, Volumetric Rule, Permutation Enum, Integer, Integer, Scalar Field, 2.0.0](#implicit-body-cad-face-volumetric-rule-permutation-enum-integer-integer-scalar-field-200)** *** ## Implicit Body, CAD Face, Conformal Rule, Integer, Integer, Scalar Subtract a thickened conformal beam-based lattice from an input Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to texture. | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to apply the texture. | | Lattice type | [Conformal Rule](../../../../block-documentation/types/conformal-rule) | Type of lattice to apply to the CAD face as a texture. | | U cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the V direction of the CAD face. | | Depth | [Scalar](../../../../block-documentation/types/scalar) | The depth of the lattice. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, CAD Face, Volumetric Rule, Permutation Enum, Integer, Integer, Scalar Field, 2.0.0 Subtract a conformal beam-based lattice body from an input Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to texture. | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to apply the texture. | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Type of lattice to apply to the CAD face as a texture. | | Orientation | Permutation Enum | Orientation of Unit Cell | | U cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the V direction of the CAD face. | | Depth | [Scalar Field](../../../../block-documentation/types/scalar-field) | The depth of the lattice. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Subtractive Lattice Texture Blended Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture-blended > **[Implicit Body, CAD Face, Conformal Rule, Conformal Rule, Integer, Integer, Scalar, Scalar Field](#implicit-body-cad-face-conformal-rule-conformal-rule-integer-integer-scalar-scalar-field)** > **[Implicit Body, CAD Face, Volumetric Rule, Permutation Enum, Volumetric Rule, Permutation Enum, Integer, Integer, Scalar Field, Scalar Field, 2.0.0](#implicit-body-cad-face-volumetric-rule-permutation-enum-volumetric-rule-permutation-enum-integer-integer-scalar-field-scalar-field-200)** *** ## Implicit Body, CAD Face, Conformal Rule, Conformal Rule, Integer, Integer, Scalar, Scalar Field Subtract a blended thickened conformal beam-based lattice form an input Implicit body, using a blending field to control where the blending occurs. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to be subtracted from. | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to apply the texture. | | Lattice 1 type | [Conformal Rule](../../../../block-documentation/types/conformal-rule) | Type of lattice to apply to the CAD face as a texture wherever the mixing field is 0. | | Lattice 2 type | [Conformal Rule](../../../../block-documentation/types/conformal-rule) | Type of lattice to apply to the CAD face as a texture wherever the mixing field is 1. | | U cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the V direction of the CAD face. | | Depth | [Scalar](../../../../block-documentation/types/scalar) | The depth of the lattice. | | Blend field | [Scalar Field](../../../../block-documentation/types/scalar-field) | A parameter field to drive the blending of the two lattices. Values between 0 and 1 will interpolate between lattice 1 and lattice 2 at that location. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, CAD Face, Volumetric Rule, Permutation Enum, Volumetric Rule, Permutation Enum, Integer, Integer, Scalar Field, Scalar Field, 2.0.0 Subtract a blended conformal beam-based lattice body from an input Implicit body, using a blending field to control where the blending occurs. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to be subtracted from. | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to apply the texture. | | Unit cell 1 type | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Type of lattice to apply to the CAD face as a texture wherever the mixing field is 0. | | Unit cell 1 orientation | Permutation Enum | Orientation of Lattice 1 | | Unit cell 2 type | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | Type of lattice to apply to the CAD face as a texture wherever the mixing field is 1. | | Unit cell 2 orientation | Permutation Enum | Orientation of Lattice 2 | | U cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | Amount of lattice cells in the V direction of the CAD face. | | Depth | [Scalar Field](../../../../block-documentation/types/scalar-field) | The depth of the lattice. | | Blend field | [Scalar Field](../../../../block-documentation/types/scalar-field) | A parameter field to drive the blending of the two lattices. Values between 0 and 1 will interpolate between lattice 1 and lattice 2 at that location. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Surface Roughness Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/surface-roughness Alter the roughness of a surface. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Input the implicit body you wish to alter the surface of. | | Roughness frequency | [Integer](../../../../block-documentation/types/integer) | Higher frequency will result in a smoother look. | | Roughess amplitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | Higher amplitude will result in great area effected. | | Seed value | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Tessellate Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/tessellate-body Tessellate an Implicit body in the positive X, Y, and Z direction by count. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to be tessellated in space. | | Count | [Vector](../../../../block-documentation/types/vector) | X Y Z tesselation count. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Triangle Wave Texture Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/triangle-wave-texture Apply a wave texture to an Implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to texture. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction of wave. | | Wave height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of wave displacement. | | Wave spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | Width of each wave along the wave direction. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Voronoi Bubbles Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/voronoi-bubbles > **[Implicit Body, Integer, Integer, Scalar](#implicit-body-integer-integer-scalar)** > **[Implicit Body, Integer, Integer, Scalar, Scalar, 1.1.0](#implicit-body-integer-integer-scalar-scalar-110)** > **[Implicit Body, Integer, Integer, Scalar, Scalar, 2.0.0](#implicit-body-integer-integer-scalar-scalar-200)** *** ## Implicit Body, Integer, Integer, Scalar Texture the exterior surface of an Implicit body with an organic bubble-like deboss. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to texture. | | Cell count | [Integer](../../../../block-documentation/types/integer) | The number of cells to texture the body. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | The number of iteratations to evenly distribute the points on the Implicit body. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blending. Increasing this value will increase the depth of the texture. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Integer, Integer, Scalar, Scalar, 1.1.0 Texture the exterior surface of an Implicit Body with an organic bubble-like deboss. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to texture. | | Cell count | [Integer](../../../../block-documentation/types/integer) | The number of cells to texture the body. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | The number of iteratations to evenly distribute the points on the Implicit body. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blending. Increasing this value will increase the depth of the texture. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the Implicit body to preserve for generating the texture. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Integer, Integer, Scalar, Scalar, 2.0.0 Texture the exterior surface of an Implicit Body with an organic bubble-like deboss. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to texture. | | Cell count | [Integer](../../../../block-documentation/types/integer) | The number of cells to texture the body. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | The number of iterations to evenly distribute the points on the Implicit body. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blending. Increasing this value will increase the depth of the texture. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the Implicit body to preserve for generating the texture. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Voronoi Deboss Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/voronoi-deboss > **[Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar](#implicit-body-scalar-integer-integer-scalar-field-blend-enum-scalar)** > **[Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar, Scalar Field, 2.0.0](#implicit-body-scalar-integer-integer-scalar-field-blend-enum-scalar-scalar-field-200)** *** ## Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar Create a Voronoi debossing pattern on an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to texture. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the Implicit Body to preserve for generating the voronoi diagram. | | Voronoi cell count | [Integer](../../../../block-documentation/types/integer) | The number of Voronoi cells. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | The number of iterations to evenly distribute points on the input Implicit Body. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The width and depth of the Voronoi debossing. | | Blend type | Blend Enum | Type of blend between the Voronoi deboss and the Implicit Body. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend. This value will be ignored if "sharp" is selected. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar, Scalar Field, 2.0.0 Debosses a Voronoi lattice pattern on an implicit body ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to texture. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the Implicit Body to preserve for generating the voronoi pattern. | | Voronoi cell count | [Integer](../../../../block-documentation/types/integer) | The number of Voronoi cells. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | The number of iterations to evenly distribute points on the input Implicit Body. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The depth and thickness of the deboss. | | Blend type | Blend Enum | Type of blend between the Voronoi emboss and the Implicit Body. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Spatial weighting | [Scalar Field](../../../../block-documentation/types/scalar-field) | An optional input to control the spacing of the generated voronoi cells | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Voronoi Emboss Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/texturing/voronoi-emboss > **[Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar](#implicit-body-scalar-integer-integer-scalar-field-blend-enum-scalar)** > **[Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar, Scalar Field, 2.0.0](#implicit-body-scalar-integer-integer-scalar-field-blend-enum-scalar-scalar-field-200)** *** ## Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar Create a Voronoi embossing pattern on an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to texture. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the Implicit Body to preserve for generating the voronoi diagram. | | Voronoi cell count | [Integer](../../../../block-documentation/types/integer) | The number of Voronoi cells. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | The number of iterations to evenly distribute points on the input Implicit Body. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The width and height of the Voronoi embossing. | | Blend type | Blend Enum | Type of blend between the Voronoi emboss and the Implicit Body. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend. This value will be ignored if "sharp" is selected. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Integer, Integer, Scalar Field, Blend Enum, Scalar, Scalar Field, 2.0.0 Embosses a Voronoi pattern onto an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to texture. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the Implicit Body to preserve for generating the voronoi pattern. | | Voronoi cell count | [Integer](../../../../block-documentation/types/integer) | The number of Voronoi cells. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | The number of iterations to evenly distribute points on the input Implicit Body. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The depth and width of the Voronoi embossing. | | Blend type | Blend Enum | Type of blend between the Voronoi emboss and the Implicit Body. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Spatial weighting | [Scalar Field](../../../../block-documentation/types/scalar-field) | An optional input to control the spacing of the generated voronoi cells | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/utilities > **[Remove Any Beams](../../../block-documentation/blocks/architected-materials/utilities/remove-any-beams)** > **[Remove Floating Beams](../../../block-documentation/blocks/architected-materials/utilities/remove-floating-beams)** > **[Remove Open Beams](../../../block-documentation/blocks/architected-materials/utilities/remove-open-beams)** > **[Simple Remesh Body](../../../block-documentation/blocks/architected-materials/utilities/simple-remesh-body)** > **[Remesh CAD Face](../../../block-documentation/blocks/architected-materials/utilities/remesh-cad-face)** > **[Merge Shell and Infill](../../../block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** > **[Merge Graphs](../../../block-documentation/blocks/modeling/utilities/merge-graphs)** > **[Trim Lattice](../../../block-documentation/blocks/lattices/utilities/trim-lattice)** # Remesh CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/utilities/remesh-cad-face > **[CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar](#cad-body-scalar-field-surface-mesh-shape-enum-scalar)** > **[CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar, 1.0.1](#cad-body-scalar-field-surface-mesh-shape-enum-scalar-101)** > **[CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar, 1.1.0](#cad-body-scalar-field-surface-mesh-shape-enum-scalar-110)** > **[CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar, 1.2.0](#cad-body-scalar-field-surface-mesh-shape-enum-scalar-120)** *** ## CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar Remesh a CAD face with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Body](../../../../block-documentation/types/cad-body) | CAD face to remesh. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD Face. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar, 1.0.1 Remesh a CAD face with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Body](../../../../block-documentation/types/cad-body) | CAD face to remesh. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD Face. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar, 1.1.0 Remesh a CAD face with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Body](../../../../block-documentation/types/cad-body) | CAD face to remesh. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD Face. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## CAD Body, Scalar Field, Surface Mesh Shape Enum, Scalar, 1.2.0 Remesh a CAD face with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Body](../../../../block-documentation/types/cad-body) | CAD face to remesh. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance as a size to maintain detail of the input CAD Face. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Remove Any Beams Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/utilities/remove-any-beams > **[Graph, Implicit Body, Scalar](#graph-implicit-body-scalar)** > **[Graph, Implicit Body, Scalar, 1.0.1](#graph-implicit-body-scalar-101)** > **[Lattice, Implicit Body, Choice, 2.0.0](#lattice-implicit-body-choice-200)** *** ## Graph, Implicit Body, Scalar Remove any kind of beam (closed, floating, and open) from any kind of beam based lattice within an input Implicit Body volume. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Graph](../../../../block-documentation/types/graph) | Lattice to remove beams from. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body defining the beam selection region. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the nTop body. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Graph, Implicit Body, Scalar, 1.0.1 Remove any kind of beam (closed, floating, and open) from any kind of beam based lattice within an input Implicit Body volume. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Graph](../../../../block-documentation/types/graph) | Lattice to remove beams from. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body defining the beam selection region. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the Implicit Body. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Lattice, Implicit Body, Choice, 2.0.0 Remove any kind of beam (closed, floating, and open) from any kind of beam based lattice within an input Implicit Body volume. ### Inputs | Name | Type | Description | | - | - | - | | Lattice body | [Lattice](../../../../block-documentation/types/lattice) | Lattice to remove beams from. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body defining the beam selection region. | | Containment | [Choice](../../../../block-documentation/types/choice) | Option to include beams based on full containment (both nodes fall within domain) or partial containment (either node falls within domain). | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Remove Floating Beams Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/utilities/remove-floating-beams > **[Graph, Scalar](#graph-scalar)** > **[Graph, Scalar, 1.0.1](#graph-scalar-101)** > **[Lattice, 2.0.0](#lattice-200)** *** ## Graph, Scalar Remove floating beams from any kind of beam based lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Graph](../../../../block-documentation/types/graph) | Lattice to remove beams from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the Implicit Body. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Graph, Scalar, 1.0.1 Remove floating beams from any kind of beam based lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Graph](../../../../block-documentation/types/graph) | Lattice to remove beams from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the Implicit Body. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Lattice, 2.0.0 Remove floating beams from any kind of beam based lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to remove beams from. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Remove Open Beams Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/utilities/remove-open-beams > **[Graph, Scalar](#graph-scalar)** > **[Graph, Scalar, 1.0.1](#graph-scalar-101)** > **[Lattice, 2.0.0](#lattice-200)** *** ## Graph, Scalar Remove open beams from any kind of beam based lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Graph](../../../../block-documentation/types/graph) | Lattice to remove beams from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the Implicit Body. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Graph, Scalar, 1.0.1 Remove open beams from any kind of beam based lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Graph](../../../../block-documentation/types/graph) | Lattice to remove beams from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the Implicit Body. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Lattice, 2.0.0 Remove open beams from any kind of beam based lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to remove open beams from. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Simple Remesh Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/architected-materials/utilities/simple-remesh-body > **[Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum](#implicit-body-scalar-scalar-field-surface-mesh-shape-enum)** > **[Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum, 1.0.1](#implicit-body-scalar-scalar-field-surface-mesh-shape-enum-101)** > **[Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum, 1.1.0](#implicit-body-scalar-scalar-field-surface-mesh-shape-enum-110)** > **[Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum, 1.2.0](#implicit-body-scalar-scalar-field-surface-mesh-shape-enum-120)** *** ## Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum Remesh an Implicit body with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to remesh. | | Body feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size of body to take into account for meshing. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum, 1.0.1 Remesh an Implicit Body with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to remesh. | | Body feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size of body to take into account for meshing. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum, 1.1.0 Remesh an Implicit Body with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to remesh. | | Body feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size of body to take into account for meshing. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar Field, Surface Mesh Shape Enum, 1.2.0 Remesh an Implicit Body with a simple set of parameters. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to remesh. | | Body feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size of body to take into account for meshing. | | Target edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Target Edge length of the generated elements. | | Mesh face type | Surface Mesh Shape Enum | Type of mesh faces to produce in the remesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Beta Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta ## Create > **[If-Else](../../block-documentation/blocks/beta/create/if-else)** > **[JSON From Tuple](../../block-documentation/blocks/beta/create/json-from-tuple)** ## Modeling > **[Set Body Name](../../block-documentation/blocks/beta/modeling/set-body-name)** ## Conversion > **[Convergent Body from Named Body](../../block-documentation/blocks/beta/conversion/convergent-body-from-named-body)** ## Simulation > **[Static Analysis with Inertia Relief](../../block-documentation/blocks/beta/simulation/static-analysis-with-inertia-relief)** ## Topology Optimization > **[Extract Optimization History](../../block-documentation/blocks/parameter-optimization-beta/utilities/extract-optimization-history)** ## Utilities > **[Mesh from Implicit by AT](../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-at)** > **[Multi-Region Mesh from Implicit](../../block-documentation/blocks/utilities/conversion/multi-region-mesh-from-implicit)** > **[Mesh from Implicit Body 2](../../block-documentation/blocks/beta/utilities/mesh-from-implicit-body-2)** > **[CAD Body from Implicit Body](../../block-documentation/blocks/beta/utilities/cad-body-from-implicit-body)** > **[Surface Plot](../../block-documentation/blocks/beta/utilities/surface-plot)** ## Manufacturing > **[Manufacturing Support Beams](../../block-documentation/blocks/beta/manufacturing/manufacturing-support-beams)** > **[Add Draft](../../block-documentation/blocks/beta/manufacturing/add-draft)** ## Shell Modeling > **[Meshes From Profiles](../../block-documentation/blocks/beta/shell-modeling/meshes-from-profiles)** > **[Align Mesh Normals](../../block-documentation/blocks/beta/shell-modeling/align-mesh-normals)** > **[Boundary Nodes from Open Mesh](../../block-documentation/blocks/beta/shell-modeling/boundary-nodes-from-open-mesh)** > **[Boundary Polycurves from Open Mesh](../../block-documentation/blocks/beta/shell-modeling/boundary-polycurves-from-open-mesh)** > **[Clean Mesh Faces](../../block-documentation/blocks/beta/shell-modeling/clean-mesh-faces)** > **[Merge and Weld Meshes](../../block-documentation/blocks/beta/shell-modeling/merge-and-weld-meshes)** > **[Intersect Meshes](../../block-documentation/blocks/beta/shell-modeling/intersect-meshes)** > **[Split Welded Mesh](../../block-documentation/blocks/beta/shell-modeling/split-welded-mesh)** ## Fluids > **[Aircraft Flow Analysis](../../block-documentation/blocks/beta/fluids/aircraft-flow-analysis)** # Conversion Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/conversion > **[Convergent Body from Named Body](../../../block-documentation/blocks/beta/conversion/convergent-body-from-named-body)** # Convergent Body from Named Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/conversion/convergent-body-from-named-body > **[Implicit Body, Implicit Body, Scalar Field, Bool, Bool, Scalar Field, Bool, Scalar, Bool, Scalar, Text, Bool, 6.2.0](#implicit-body-implicit-body-scalar-field-bool-bool-scalar-field-bool-scalar-bool-scalar-text-bool-620)** > **[Implicit Body, Implicit Body, Scalar Field, Bool, Feature surfaces, Scalar Field, Bool, Scalar, Bool, Scalar, Text, Bool, 6.2.0](#implicit-body-implicit-body-scalar-field-bool-feature-surfaces-scalar-field-bool-scalar-bool-scalar-text-bool-620)** > **[Implicit Body, Implicit Body, Scalar Field, Bool, Scalar, 6.2.0](#implicit-body-implicit-body-scalar-field-bool-scalar-620)** *** ## Implicit Body, Implicit Body, Scalar Field, Bool, Bool, Scalar Field, Bool, Scalar, Bool, Scalar, Text, Bool, 6.2.0 Create a convergent CAD Body from a named Implicit Body using adaptive tessellation. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to be meshed. | | Mask | [Implicit Body](../../../../block-documentation/types/implicit-body) | Mask used to further divide the output into faces. | | Tolerance | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges, corners, as well as walls thinner than meshing tolerance. If you check this option, the block will take longer to compute. NOTE: only geometric surface features corresponding to named face boundaries will be preserved! | | Low face count | [Bool](../../../../block-documentation/types/bool) | This option reduces tessellation time and produces a lower triangle count along thin walls, small gaps, and high curvature ridges at the same tolerance, but may adversely affect tessellation quality. | | Max. edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Specifies the largest edge size at each point on the tessellation. | | Remesh surf. proj. | [Bool](../../../../block-documentation/types/bool) | Project vertices to implicit surface. Note: this risks self-intersections if the tolerance is too low. | | Remesh sag refine | [Scalar](../../../../block-documentation/types/scalar) | Refines mesh density in high curvature regions and projects vertices to implicit surface to ensure edges are not sagging above or below the implicit surface within a given fraction of input tessellation tolerance. Note: setting this fraction too low where the tessellation tolerance is a poor representation of the implicit geometry risks creating self-intersections and poor quality elements. | | Remesh anisotropic | [Bool](../../../../block-documentation/types/bool) | If Remesh Sag Refine is set less than 1.0, sag refinement produces an anisotropic mesh with triangles elongated along curvature. This reduces triangle count where there is high curvature along ridges while staying within sag tolerance. | | Component min. size | [Scalar](../../../../block-documentation/types/scalar) | If the output contains more than one disconnected components, setting this input will delete any disconnected component whose bounding box diagonal is smaller than the provided value. | | Default name | [Text](../../../../block-documentation/types/text) | Name to be applied to a face that don't have any name | | Merge faces | [Bool](../../../../block-documentation/types/bool) | If checked, neighboring faces with the same name will be merged into one. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | *** ## Implicit Body, Implicit Body, Scalar Field, Bool, Feature surfaces, Scalar Field, Bool, Scalar, Bool, Scalar, Text, Bool, 6.2.0 Create a convergent CAD Body from a named Implicit Body using adaptive tessellation. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to be meshed. | | Mask | [Implicit Body](../../../../block-documentation/types/implicit-body) | Mask used to further divide the output into faces. | | Tolerance | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Low face count | [Bool](../../../../block-documentation/types/bool) | This option reduces tessellation time and produces a lower triangle count along thin walls, small gaps, and high curvature ridges at the same tolerance, but may adversely affect tessellation quality. | | Feature surfaces | [Implicit Body List](../../../../block-documentation/types/implicit-body) | Force the mesh to have feature edges. | | Max. edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Specifies the largest edge size at each point on the tessellation. | | Remesh surf. proj. | [Bool](../../../../block-documentation/types/bool) | Project vertices to implicit surface. Note: this risks self-intersections if the tolerance is too low. | | Remesh sag refine | [Scalar](../../../../block-documentation/types/scalar) | Refines mesh density in high curvature regions and projects vertices to implicit surface to ensure edges are not sagging above or below the implicit surface within a given fraction of input tessellation tolerance. Note: setting this fraction too low where the tessellation tolerance is a poor representation of the implicit geometry risks creating self-intersections and poor quality elements. | | Remesh anisotropic | [Bool](../../../../block-documentation/types/bool) | If Remesh Sag Refine is set less than 1.0, sag refinement produces an anisotropic mesh with triangles elongated along curvature. This reduces triangle count where there is high curvature along ridges while staying within sag tolerance. | | Component min. size | [Scalar](../../../../block-documentation/types/scalar) | If the output contains more than one disconnected components, setting this input will delete any disconnected component whose bounding box diagonal is smaller than the provided value. | | Default name | [Text](../../../../block-documentation/types/text) | Name to be applied to a face that don't have any name | | Merge faces | [Bool](../../../../block-documentation/types/bool) | If checked, neighboring faces with the same name will be merged into one. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | *** ## Implicit Body, Implicit Body, Scalar Field, Bool, Scalar, 6.2.0 Create a convergent CAD Body from a named Implicit Body using adaptive tessellation. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to be meshed. | | Mask | [Implicit Body](../../../../block-documentation/types/implicit-body) | Mask used to further divide the output into faces. | | Tolerance | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges, corners, as well as walls thinner than meshing tolerance. If you check this option, the block will take longer to compute. NOTE: only geometric surface features corresponding to named face boundaries will be preserved! | | Component min. size | [Scalar](../../../../block-documentation/types/scalar) | If the output contains more than one disconnected components, setting this input will delete any disconnected component whose bounding box diagonal is smaller than the provided value. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | # Create Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/create > **[If-Else](../../../block-documentation/blocks/beta/create/if-else)** > **[JSON From Tuple](../../../block-documentation/blocks/beta/create/json-from-tuple)** # If-Else Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/create/if-else > **[Bool, Any, Any](#bool-any-any)** > **[Bool Field, Scalar Field, Scalar Field](#bool-field-scalar-field-scalar-field)** > **[Bool Field, Vector Field, Vector Field](#bool-field-vector-field-vector-field)** > **[Bool Field, 2D Vector Field, 2D Vector Field, 5.31.0](#bool-field-2d-vector-field-2d-vector-field-5310)** *** ## About this Block ### What it does: The **If-Else** block provides control flow to your nTop workflow, enabling it to make decisions based on a condition. It evaluates the boolean *Condition* input and returns the *Then* branch if the *Condition* is true or the Else branch if the *Condition* is false. We will refer to both *Then* and *Else* outputs as "branches." Below is a common schematic of the If-Else. ![If Else Flow Chart](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/if_else_flow_chart.png) ### Running: To better understand **If-Else**, it is important to understand how the nTop notebook blocks are ran. When you place blocks into the notebook, the block will always run unless: * The block’s required inputs are empty * The block is set to Manual Run Mode * Any block referenced by the block upstream does not have its required inputs entered * Any block referenced by the block upstream is set to Manual Run Mode * Autorun is toggled off **If-Else** works differently than other nTop blocks - when set up correctly, only the *Then* or *Else* branch will run based on the Condition, returning that output value to the **If-Else** block. Your nTop workflow not running the unneeded branch is beneficial if you run computationally expensive workflows (e.g., meshing) or have a branch that produces a failure. **Common uses:** * General Logic * Mesh Setup * Simulation Setup * Scan Data Alignment * Field Logic **Tips:** * When **If-Else** branches are made into variables, they will always run. When running computationally expensive branches of **If-Else**, we recommend not making the branches variables. ![If Else Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/if_else_running.gif) * We recommend only referencing the **If-Else** output properties downstream, not the output properties from either of the branches. If you do reference the output properties of a branch downstream, nTop will require this branch to run regardless of the *Condition*. * If needed, create branch nestings and make variables of lower-level nestings. * The bracket example below shows the correct setup. * The "Implicit->Mesh," "Amount," and "Edge length" variables are used in both branches of **If-Else** so that they can be kept as variables outside of **If-Else**. * (Red Arrow) The "Simple" mesh is self-intersecting. In this instance, the output property of the "self-intersecting" boolean equals True and is used as the *Condition*. * Due to the *Condition* being True, only the "Then - Volume Mesh" branch runs, providing a suitable mesh. * Due to the *Condition* being True, the "Else - Volume Mesh" branch does not run and returns an error. ![If Else Example Self-intersection](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/if_else_example_self_intersection.png) * When creating notebooks, you will likely create the blocks you need in the notebook and then drag them into the branches of the **If-Else**. * These blocks will run automatically until they are used as Branches in **If-Else** - in which case only the one that matches the *Condition* input will run. This is very helpful for reusable workflows. * If you want to ensure neither branch is ever run, ensure the *Condition* is unbuilt or in Manual Run Mode, then create your logic encapsulated in the If-Else via the input dropdown. * The two overloads of **If-Else** enable you to leverage a Bool Field *Condition* to return either a Scalar Field or Vector Field value. Since evaluating fields leverages mathematics, both branches will always run for these overloads and be computationally fast. ![If Else Example Bool Field Overloads](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/if_else_example_bool_field_overloads.gif) *** ## Bool, Any, Any Returns a value based on a given condition. ### Inputs | Name | Type | Description | | - | - | - | | Condition | [Bool](../../../../block-documentation/types/bool) | Condition used to evaluate execution. | | Then | [Any](../../../../block-documentation/types/any) | Output when the Condition is True. | | Else | [Any](../../../../block-documentation/types/any) | Output when the Condition is False. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | *** ## Bool Field, Scalar Field, Scalar Field Returns a field of values evaluated based on a given condition. ### Inputs | Name | Type | Description | | - | - | - | | Condition | [Bool Field](../../../../block-documentation/types/bool-field) | Condition used to evaluate execution at a field point. | | Then | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output when the field value of Condition is True at the evaluated point. | | Else | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output when the field value of Condition is False at the evaluated point. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Bool Field, Vector Field, Vector Field Returns a field of values evaluated based on a given condition. ### Inputs | Name | Type | Description | | - | - | - | | Condition | [Bool Field](../../../../block-documentation/types/bool-field) | Condition used to evaluate execution at a field point. | | Then | [Vector Field](../../../../block-documentation/types/vector-field) | Output when the field value of Condition is True at the evaluated point. | | Else | [Vector Field](../../../../block-documentation/types/vector-field) | Output when the field value of Condition is False at the evaluated point. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## Bool Field, 2D Vector Field, 2D Vector Field, 5.31.0 Returns a field of values evaluated based on a given condition. ### Inputs | Name | Type | Description | | - | - | - | | Condition | [Bool Field](../../../../block-documentation/types/bool-field) | Condition used to evaluate execution at a field point. | | Then | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Output when the field value of Condition is True at the evaluated point. | | Else | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Output when the field value of Condition is False at the evaluated point. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # JSON From Tuple Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/create/json-from-tuple Converts a Tuple\ into a JSON format.. ### Inputs | Name | Type | Description | | - | - | - | | Tuple | [Tuple](../../../../block-documentation/types/tuple) | Scalar-based Tuple to convert into a JSON format. | | Keys | [Text List](../../../../block-documentation/types/text) | Specify keys for JSON | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Unit system that the data should be translated to. | ### Outputs | Type | | - | | [JSON](../../../../block-documentation/types/json) | # Fluids Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/fluids > **[Aircraft Flow Analysis](../../../block-documentation/blocks/beta/fluids/aircraft-flow-analysis)** # Aircraft Flow Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/fluids/aircraft-flow-analysis > **[Implicit Body, Scalar, Scalar, Scalar, Scalar, Scalar, 5.32.0](#implicit-body-scalar-scalar-scalar-scalar-scalar-5320)** > **[Implicit Body, Scalar, Scalar, Scalar, Scalar, Scalar, 6.2.0](#implicit-body-scalar-scalar-scalar-scalar-scalar-620)** *** Beta/Fluids/aircraft\_flow\_analysis ## About this Block **What it does:** The **Aircraft Analysis** block calculates time-averaged and instantaneous pressure, velocity, and boundary force fields around aircraft geometries using the Lattice Boltzmann Method (LBM). It uses a solver setup optimized for external aerodynamics, producing results specialized for lifting bodies and surfaces that differ from the standard **Flow Analysis** block *Note: This block requires an NVIDIA GPU* **Common uses:** * Predicting lift and drag coefficients across a range of angles of attack. * Analyzing surface pressure distributions and identifying flow separation zones. * Comparing aerodynamic performance between geometry variants or configurations. * Capturing unsteady wake structures and vortex shedding behind lifting surfaces. **Setup Requirements:** Ensure the following conditions are met before running the block: * The geometry must be a closed, watertight surface representing the aircraft. * No manual fluid domain or far-field boundary conditions are required; the block generates these automatically. **Automated Simulation Setup:** The block automatically constructs a simulation domain by extending the geometry's bounding box. The resulting domain length can be calculated using the formula L\_i(pad) ≈ L\_i × (1 + p\_i⁻ + p\_i⁺), using the following padding factors p\_i: | Direction | Factor | | :- | :- | | -x (Upstream) | 0.5 | | +x (Downstream) | 1.5 | | -y / +y (Sides) | 0.5 | | -z (Below) | 1.5 | | +z (Above) | 1.0 | ### Simulation Domain Padding Example The padded domain length is estimated as: L\_i(pad) ≈ L\_i × (1 + p\_i⁻ + p\_i⁺) where L\_i is the bounding box span in direction i, and p\_i⁻, p\_i⁺ are the upstream/downstream padding factors. ### Reference Geometry: [Aircraft Flow Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/aircraft_flow_analysis.ntop) | Property | Value (mm) | | - | - | | Max point | \[10,437.0213, 16,113.2812, 1,869.2176] | | Min point | \[-8,178.7195, -488.2812, -1,869.2181] | **Bounding box spans L\_i:** | Direction | Span (mm) | | - | - | | X | 18,615.74 | | Y | 16,601.56 | | Z | 3,738.44 | **Example — X axis:** L\_x(pad) ≈ 18,615.74 × (1 + 0.5 + 1.5) = 18,615.74 × 3.0 = 55,847.22 mm **Example — Z axis:** L\_z(pad) ≈ 3,738.44 × (1 + 1.5 + 1.0) = 3,738.44 × 3.5 = 13,084.54 mm * Boundary Conditions: The upstream face applies a **velocity inlet**, while the downstream face applies a **pressure outlet**. Lateral far-field faces use a **slip boundary condition** to minimize wall interference. * Surface Modeling: A **wall model** is applied automatically to the aircraft surface. * Compressibility: For higher Mach numbers, a **Prandtl-Glauert compressibility correction** is applied. Note that as the Mach number approaches 0.7, this correction noticeably reduces effective resolution in the Y and Z directions; plan your Cell Size accordingly. **Tips on Cell Size:** The simulation uses a uniform Cartesian mesh defined by the **Cell Size** parameter. * **Quantitative Results:** To achieve accurate force coefficients, resolve the smallest relevant features (e.g., gaps, control surface edges, or slat tracks) with at least **7 cells**. * **Qualitative Results:** For flow visualization and identifying separation patterns, a minimum of **3 cells** across the smallest feature is sufficient. * **Memory Estimation:** Ten million cells require approximately **1.3 GB** of dedicated GPU memory. This is roughly 30% higher than the **Flow Analysis** block due to force field computations. ### Memory Estimate Given a uniform cell size of Δ = 330 mm, the approximate cell count per axis is: N\_i = ⌈ L\_i(pad) / Δ ⌉ | Axis | Padded Span (mm) | Cells N\_i | | - | - | - | | X | 55,847.22 | 169 | | Y | 33,203.12 | 101 | | Z | 13,084.54 | 40 | **Total cell count:** N\_total = N\_x × N\_y × N\_z = 169 × 101 × 40 ≈ 682,360 cells **Estimated GPU memory** using the reference rate of 1.3 GB per 10 million cells: M ≈ (682,360 / 10,000,000) × 1.3 GB ≈ 88.7 MB **Notes on Transient Simulations:** * **Iterative Process:** LBM is inherently transient and advances the solution through discrete time steps until results are statistically steady-state. * **Instantaneous vs. Time-Averaged:** The block exposes two result fields. The instantaneous field (first) captures unsteady fluctuations like turbulence and vortex dynamics. The time-averaged field (second) reveals the mean flow structure suitable for coefficient extraction. * **Force Coefficients:** Lift, drag, and moment coefficients are derived from the time-averaged boundary force field as the simulation converges. **How to Use and Analyze Results:** 1. Run the Simulation: Run the block. The simulation advances until it reaches a steady state and outputs a CFD Analysis Result, which is used for visualization and data extraction. 2. View Streamlines: To visualize the flow field, select the result in the notebook and update its Display Mode to Streamlines in the View Settings. 3. Extract Near-Body Data (Advanced): To extract data points from a specific area (e.g., near the aircraft surface): * Find Region ID: Select the block and switch the Heads-Up Display (HUD) to Cell Region. Identify the region ID you want to analyze (e.g., Region 3 is typically the area near the body). * Filter Points: Add a **Filter Cell Region** block. Input the CFD Analysis Result and the Region ID to generate a Point List. * Evaluate Data: Use the **Evaluate Field** block with the Point List for detailed analysis of pressure or velocity near the surface. **Tips for Resolving Errors:** * **Solver Diverged:** Verify that the Mach number and angle of attack are within supported ranges. Ensure the **Cell Size** is not too coarse; poorly resolved gaps or excessively large time steps are common causes. * **Geometry Issues:** Ensure the surface is watertight and free of self-intersections or open edges. Non-manifold geometry causes incorrect wall detection. * **Insufficient GPU Memory:** Incrementally increase the **Cell Size** or simplify the geometry to remove small features that drive up cell count without impacting the primary aerodynamic result. * **Incorrect far-field domain:** The simulation domain is derived from the geometry's bounding box, which can sometimes be computed incorrectly for certain complex implicits. If the domain looks wrong, use a **Voxel Grid From Implicit** block to voxelize the geometry, convert it back to an implicit, and set the bounding box of the original geometry to that explicitly. ## Example File Download Example: [Aircraft Flow Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/aircraft_flow_analysis.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/aircraft_flow_analysis.png) *** ## Implicit Body, Scalar, Scalar, Scalar, Scalar, Scalar, 5.32.0 Calculates the pressure, velocity, and surface forces on an implicit body. The implicit body must be oriented in the default aircraft position with flow direction aligned to the positive X-axis, Y-axis the starboard/right wing direction and Z-axis pointing upward (lift direction). The solution uses a Lattice Boltzmann Method. A transient simulation is initiated and continues until the flow reaches a statistically steady state, then returns time-averaged pressure, velocity fields, along with the force on the implicit body surfaces. Streamlines will be calculated on the time-averaged velocity results. This block requires an NVIDIA GPU. ### Inputs | Name | Type | Description | | - | - | - | | Aircraft body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The implicit body used for aerodynamic evaluation. | | Mach number | [Scalar](../../../../block-documentation/types/scalar) | The Mach number of the freestream. | | Temperature | [Scalar](../../../../block-documentation/types/scalar) | Defines the temperature of the freestream | | Pressure | [Scalar](../../../../block-documentation/types/scalar) | Defines the pressure of the freestream | | Angle of attack | [Scalar](../../../../block-documentation/types/scalar) | The angle between the body reference line and the airflow direction. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The size of the cells used in the analysis. | ### Outputs | Type | | - | | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | *** ## Implicit Body, Scalar, Scalar, Scalar, Scalar, Scalar, 6.2.0 Calculates the pressure, velocity, and surface forces on an implicit body. The implicit body must be oriented in the default aircraft position with flow direction aligned to the positive X-axis, Y-axis the starboard/right wing direction and Z-axis pointing upward (lift direction). The solution uses a Lattice Boltzmann Method. A transient simulation is initiated and continues until the flow reaches a statistically steady state, then returns time-averaged pressure, velocity fields, along with the force on the implicit body surfaces. Streamlines will be calculated on the time-averaged velocity results. This block requires an NVIDIA GPU. ### Inputs | Name | Type | Description | | - | - | - | | Aircraft body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The implicit body used for aerodynamic evaluation. | | Mach number | [Scalar](../../../../block-documentation/types/scalar) | The Mach number of the freestream. | | Temperature | [Scalar](../../../../block-documentation/types/scalar) | Defines the temperature of the freestream | | Pressure | [Scalar](../../../../block-documentation/types/scalar) | Defines the pressure of the freestream | | Angle of attack | [Scalar](../../../../block-documentation/types/scalar) | The angle between the body reference line and the airflow direction. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The size of the cells used in the analysis. | ### Outputs | Type | | - | | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | # Manufacturing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/manufacturing > **[Manufacturing Support Beams](../../../block-documentation/blocks/beta/manufacturing/manufacturing-support-beams)** > **[Add Draft](../../../block-documentation/blocks/beta/manufacturing/add-draft)** # Add Draft Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/manufacturing/add-draft Applies a draft/taper angle to a mesh or a region of a mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh body to apply draft to. Draft will be applied to entire body unless a region is specified. | | Demolding direction | [Vector](../../../../block-documentation/types/vector) | Vector representing the demolding direction. Draft will be applied in this direction. | | Draft angle | [Scalar](../../../../block-documentation/types/scalar) | Draft angle to apply to mesh. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations per attempt to converge each mesh element to be compliant with the desired draft. Increasing the number of iterations is beneficial for meshes with a large number of faces. | | Max attempts | [Integer](../../../../block-documentation/types/integer) | The maximum number of attempts to achieve a mesh compliant with the draft angle. While a larger number of attempts increases solve time, it also increases the likelihood of creating convergent meshes on more complex parts (overhangs, larger draft angles etc). As soon as all faces of the initial region achieve the input draft, the block finishes execution successfully. | | Smoothening | [Scalar](../../../../block-documentation/types/scalar) | Value used to adjust the smoothness. Values can range from 0-1 with 0 turning off the smoothening function and 1 making the output shape as smooth as possible. | | Height stability | [Scalar](../../../../block-documentation/types/scalar) | Value to adjust the importance of maintaining height values (according to demolding direction). Values can range from 0-1 with 0 allowing for unlimited movement and 1 allowing very little movement. | | Region | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional input to limit draft to being applied only to a specific region of the input mesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Manufacturing Support Beams Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/manufacturing/manufacturing-support-beams Beta/Manufacturing/manufacturing\_support\_beams ## About this Block **What it does:** The **Manufacturing Support Beams** block generates beam-based support structures under points on a body that require support for additive manufacturing. It identifies these regions based on a user-defined overhang angle relative to the build plane. **Common uses:** * Automating the generation of support structures for additive manufacturing build preparation. * Creating efficient, easily removable lattice-based or single-face mesh supports. * Reducing manual intervention and "clicks" in the build prep process. **Tips:** * Spacing: This input defines the distance between support points on the build plane. A smaller spacing increases the number of calculated support points, which improves support density but increases algorithmic computation time. * Overhang Angle: Regions on the body with a shallower angle than this value (relative to the build plane) will receive support structures. * Min Overhang Angle: Use this optional parameter to define a minimum threshold, confining the support volume only to a specific angular range. * Support Region: You can choose to build supports for internal regions, external regions, or both. ## Example File Download Example: [Manufacturing Support Beams](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/manufacturing_support_beams.ntop) ![Manufacturing Support Beams](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/manufacturing_support_beams.png) *** Generate beams under the points needing support on a body for an additive manufacturing process based on overhang angle. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to support. | | Build plane | [Plane](../../../../block-documentation/types/plane) | The build plane. | | Spacing | [Scalar](../../../../block-documentation/types/scalar) | Distance between support points on the build plane. This input will affect the number of support points calculated and the speed of the algorithm. | | Overhang angle | [Scalar](../../../../block-documentation/types/scalar) | The overhang angle that will define where supports are required. Regions on the body that form a shallower angle than the overhang angle with respect to the build plane will define the support volume. | | Min overhang angle | [Scalar](../../../../block-documentation/types/scalar) | An option to define the support volume only to this minimum overhang angle. | | Support region | Manufacturing Support Region Type Enum | An option to define whether to build supports for internal, external, or both regions of the body. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Modeling Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/modeling > **[Set Body Name](../../../block-documentation/blocks/beta/modeling/set-body-name)** # Set Body Name Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/modeling/set-body-name Set the name of an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to apply name to. | | Name | [Text](../../../../block-documentation/types/text) | Name to apply. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Shell Modeling Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling > **[Meshes From Profiles](../../../block-documentation/blocks/beta/shell-modeling/meshes-from-profiles)** > **[Align Mesh Normals](../../../block-documentation/blocks/beta/shell-modeling/align-mesh-normals)** > **[Boundary Nodes from Open Mesh](../../../block-documentation/blocks/beta/shell-modeling/boundary-nodes-from-open-mesh)** > **[Boundary Polycurves from Open Mesh](../../../block-documentation/blocks/beta/shell-modeling/boundary-polycurves-from-open-mesh)** > **[Clean Mesh Faces](../../../block-documentation/blocks/beta/shell-modeling/clean-mesh-faces)** > **[Merge and Weld Meshes](../../../block-documentation/blocks/beta/shell-modeling/merge-and-weld-meshes)** > **[Intersect Meshes](../../../block-documentation/blocks/beta/shell-modeling/intersect-meshes)** > **[Split Welded Mesh](../../../block-documentation/blocks/beta/shell-modeling/split-welded-mesh)** # Align Mesh Normals Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/align-mesh-normals Orient all mesh faces consistently using a flood-fill sweep. For closed manifold meshes, also ensures normals point outward. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh whose face normals will be reoriented. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Boundary Nodes from Open Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/boundary-nodes-from-open-mesh Extract all vertices lying on free edges (edges shared by exactly one face) of an open surface mesh as a list of Points. Returns an empty list for closed (watertight) meshes. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Open surface mesh to extract free-edge vertices from. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Boundary Polycurves from Open Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/boundary-polycurves-from-open-mesh Chain the free edges of an open surface mesh into ordered boundary loops and return each loop as a Polycurve. Returns an empty list for closed (watertight) meshes. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Open surface mesh to extract boundary loops from. | ### Outputs | Type | | - | | [Polycurve List](../../../../block-documentation/types/polycurve) | # Clean Mesh Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/clean-mesh-faces Remove degenerate faces below a given area and small disconnected components from a surface mesh. Faces are first filtered by area, then edge-connected components with fewer faces than the minimum are removed. Set Min Face Area to 0 (or leave unconnected) to skip area filtering. Set Min Component Faces to 0 or 1 (or leave unconnected) to skip component filtering. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to clean. | | Min face area | [Scalar](../../../../block-documentation/types/scalar) | Remove faces whose area is strictly below this value. Disabled when 0. | | Min component faces | [Integer](../../../../block-documentation/types/integer) | Remove edge-connected components with fewer faces than this count. Disabled when 0 or 1. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Intersect Meshes Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/intersect-meshes Intersects a list of surface meshes, embedding the intersection seam into each mesh and returning the corefined meshes as a list. ### Inputs | Name | Type | Description | | - | - | - | | Meshes | [Mesh List](../../../../block-documentation/types/mesh) | Surface meshes to intersect. All meshes must be triangulated. | | Protrusion tolerance | [Scalar](../../../../block-documentation/types/scalar) | Removes protrusions where the boundary of one mesh extends slightly past the surface of another. Faces on the protruding side within this distance of the intersection curve are removed, along with any pieces left disconnected (with a warning). Set to 0 or leave unconnected to disable. | ### Outputs | Type | | - | | [Mesh List](../../../../block-documentation/types/mesh) | # Merge and Weld Meshes Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/merge-and-weld-meshes Combine multiple Meshes into a single Mesh and collapse vertices within a given distance threshold. ### Inputs | Name | Type | Description | | - | - | - | | Meshes | [Mesh List](../../../../block-documentation/types/mesh) | Meshes to merge. | | Distance threshold | [Scalar](../../../../block-documentation/types/scalar) | Vertices within this distance threshold will be merged together into one vertex. If not provided, meshes are concatenated without any vertex welding. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Meshes From Profiles Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/meshes-from-profiles Mesh a list of pre-computed profiles, meshing each with shared intersection edges as hard constraints, and returning the results as a list of surface meshes in the same order as the input profiles. ### Inputs | Name | Type | Description | | - | - | - | | Profiles | [Profile List](../../../../block-documentation/types/profile) | Pre-computed planar profiles to mesh. Each profile produces one mesh in the output list. | | Max. edge length | [Scalar](../../../../block-documentation/types/scalar) | Maximum triangle edge length in the output meshes. Pass 0 for no size constraint. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Controls the tolerance for resolving shared intersection vertices and sampling curved profile boundaries. Defaults to 10% of Max. Edge Length when set, otherwise 1% of the profiles' bounding box diagonal. | ### Outputs | Type | | - | | [Mesh List](../../../../block-documentation/types/mesh) | # Split Welded Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/shell-modeling/split-welded-mesh Split a mesh into a list of separate mesh patches, using non-manifold and boundary edges as split barriers. Optionally, an angle threshold lets patches on either side of a non-manifold edge merge back together: each face pairs with the face across the edge that continues it most smoothly, when the two are within the threshold of being flat. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to split. | | Angle threshold | [Scalar](../../../../block-documentation/types/scalar) | Patches on either side of a non-manifold edge are merged if the angle between their faces is within this threshold of flat (for example, 90 degrees allows right-angle bends). Each face is matched to the face that continues it most smoothly across the edge, rather than merging every qualifying pair. If 0 or not provided, patches are always split at every non-manifold or boundary edge. Must be less than 180 degrees. | ### Outputs | Type | | - | | [Mesh List](../../../../block-documentation/types/mesh) | # Simulation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/simulation > **[Static Analysis with Inertia Relief](../../../block-documentation/blocks/beta/simulation/static-analysis-with-inertia-relief)** # Static Analysis with Inertia Relief Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/simulation/static-analysis-with-inertia-relief Calculate displacements, strains, stresses, and reaction forces on an FE Model subject to applied boundary conditions. The loads are assumed to be applied slowly until the model reaches a state of equilibrium, and the relationship between loads and displacements is assumed to be linear. All inertial and damping forces are neglected. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | ### Outputs | Type | | - | | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | # Topology Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/topology-optimization > **[Extract Optimization History](../../../block-documentation/blocks/parameter-optimization-beta/utilities/extract-optimization-history)** # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/utilities > **[Mesh from Implicit by AT](../../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-at)** > **[Multi-Region Mesh from Implicit](../../../block-documentation/blocks/utilities/conversion/multi-region-mesh-from-implicit)** > **[Mesh from Implicit Body 2](../../../block-documentation/blocks/beta/utilities/mesh-from-implicit-body-2)** > **[CAD Body from Implicit Body](../../../block-documentation/blocks/beta/utilities/cad-body-from-implicit-body)** > **[Surface Plot](../../../block-documentation/blocks/beta/utilities/surface-plot)** # CAD Body from Implicit Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/utilities/cad-body-from-implicit-body ## About this Block **What it does:** The **CAD Body from Implicit Body** block converts an input Implicit Body to a CAD Body. This block is useful for exporting parts made in nTop back to other CAD software, as a Parasolid (X\_T, X\_B) or STEP file (.STEP), using the **Export Part** block. **Common uses:** * Convert implicit to CAD Body **Tips:** * We recommend this block for medium complexity models. See the Part Complexity [section below](https://support.ntopology.com/hc/en-us/articles/360048784874#h_01GXXM35GE8NWHGK3ADDZ4P5BQ) to understand how to categorize the complexity of your part. This block produces NURBS surfaces that are not aligned with the part’s features, but it’s more likely to succeed on medium-complex models where the quad meshing workflow would fail. * For highly complex models, we recommend using the [Simplified Body Representation](/block-documentation/blocks/beta/utilities/simplified-body-representation.html) block. * For low complexity models, use the [CAD Body from Quad Mesh](/block-documentation/blocks/utilities/conversion/cad-body-from-quad-mesh.html) block . See Procedure 1 in [this support article](https://support.ntopology.com/hc/articles/7323484481555-How-to-export-geometry-as-a-CAD-part-STEP-or-Parasolid-) for a full overview and example nTop file. * The optional *Preserved CAD* input lets you provide a list of CAD Bodies, and the block will attempt to sew-in faces from the CAD Bodies into the final result. If the face extends outside of the boundary of the implicit, or if the algorithm didn’t succeed in sewing, the face will be ignored. ![Preserved CAD Input](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/preserved.png) * For a complete overview of export workflows, including what data types and blocks to use for each particular downstream activity, see [this article.](https://support.ntopology.com/hc/articles/360048784874-How-to-export-geometry-Overview-of-export-workflows) **Part Complexity** In this context, complexity relates to the number of CAD faces required to represent an implicit body. This determines the usability of the model within traditional CAD systems. * Low * Parts that are generated from Topology Optimization, unfilled shells, and parts with very coarse patterns or ribs. These usually require only a few hundred to a few thousand CAD faces to represent their geometry. ![Low](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/low.png) * Medium * These are parts with medium-coarse textured models or lattices containing beams, faces, or TPMS cells: * Beam or face-based lattices: up to 10k beams or faces * TPMS: up to 1k unit cells * Implicit models at this level of complexity can be converted into CAD Bodies with 50k or fewer faces, so their detailed geometry can be consumed by traditional CAD systems. ![Medium](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/medium.png) * High * These are parts with fine-grain textures, beam or face-based lattices with over 10k beams or faces, or TPMS lattices with over 1k unit cells. Typically, these require many thousands or even millions of CAD faces, so their detailed geometry can not be used by traditional CAD systems. ![High](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/high.png) ## Example File Download Example: [CAD Body from Implicit Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/CADBodyfromImplicitBody.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cadbodyfromimp.png) *** Converts an Implicit Body to a CAD Body within a specified Tolerance. As the Tolerance increases, the CAD Body may contain fewer faces and be generated faster. Works best for medium complexity Lattices and Implicit Bodies. For lower complexities, use Mesh from Implicit Body, Quadrangulate Mesh, then CAD Body from Quad Mesh. For higher complexities, use the Simplified Body Representation block. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to convert to a CAD Body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable distance deviation of the CAD Body from the Implicit Body. As this value increases, the CAD Body will have fewer faces and generate faster, but deviate further from the body. We recommend starting with a value of approximately 1/2 of the body's thinnest feature. | | Preserved cad | [CAD Body List](../../../../block-documentation/types/cad-body) | Optional List of CAD Bodies. When provided, the block will attempt to stitch the CAD faces from the Preserved CAD into the final output. Faces that are not entirely contained on the surface of the Body will be ignored. | ### Outputs | Type | | - | | [CAD Body](../../../../block-documentation/types/cad-body) | # Mesh from Implicit Body 2 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/utilities/mesh-from-implicit-body-2 Convert an Implicit Body to a Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to be meshed. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Surface Plot Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/beta/utilities/surface-plot A shaded view of a Scalar Field on a Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to plot values on. | | Value | [Scalar Field](../../../../block-documentation/types/scalar-field) | Values to plot. | ### Outputs | Type | | - | | [Surface Plot](../../../../block-documentation/types/surface-plot) | # Create Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create ## Primitives > **[Box](../../block-documentation/blocks/create/primitives/box)** > **[Cube](../../block-documentation/blocks/create/primitives/cube)** > **[Box from Corners](../../block-documentation/blocks/create/primitives/box-from-corners)** > **[Rounded Box](../../block-documentation/blocks/create/primitives/rounded-box)** > **[Skewed Box](../../block-documentation/blocks/create/primitives/skewed-box)** > **[Cylinder](../../block-documentation/blocks/create/primitives/cylinder)** > **[Cylinder from Line Segment](../../block-documentation/blocks/create/primitives/cylinder-from-line-segment)** > **[Rounded Cylinder](../../block-documentation/blocks/create/primitives/rounded-cylinder)** > **[Capsule](../../block-documentation/blocks/create/primitives/capsule)** > **[Sphere](../../block-documentation/blocks/create/primitives/sphere)** > **[Cone](../../block-documentation/blocks/create/primitives/cone)** > **[Torus](../../block-documentation/blocks/create/primitives/torus)** > **[Regular Polygon](../../block-documentation/blocks/create/primitives/regular-polygon)** > **[Circle](../../block-documentation/blocks/create/primitives/circle)** > **[Bounding Box](../../block-documentation/blocks/create/primitives/bounding-box)** > **[Rectangle](../../block-documentation/blocks/create/primitives/rectangle)** > **[Rectangle by Points](../../block-documentation/blocks/create/primitives/rectangle-by-points)** > **[Slot](../../block-documentation/blocks/create/primitives/slot)** > **[Slot by Points](../../block-documentation/blocks/create/primitives/slot-by-points)** > **[Spline Distance Field](../../block-documentation/blocks/create/primitives/spline-distance-field)** > **[Cubic Bezier Distance Field](../../block-documentation/blocks/create/primitives/cubic-bezier-distance-field)** > **[Conic Distance Field](../../block-documentation/blocks/create/primitives/conic-distance-field)** ## Vectors > **[Point](../../block-documentation/blocks/create/vectors/point)** > **[Vector](../../block-documentation/blocks/create/vectors/vector)** > **[Plane](../../block-documentation/blocks/create/vectors/plane)** > **[Plane from Normal](../../block-documentation/blocks/create/vectors/plane-from-normal)** > **[Axis](../../block-documentation/blocks/create/vectors/axis)** > **[Frame](../../block-documentation/blocks/create/vectors/frame)** > **[Offset Plane](../../block-documentation/blocks/create/vectors/offset-plane)** > **[Point between Points](../../block-documentation/blocks/create/vectors/point-between-points)** > **[Point in Frame](../../block-documentation/blocks/create/vectors/point-in-frame)** ## Curves > **[Line](../../block-documentation/blocks/create/curves/line)** > **[Line by Direction](../../block-documentation/blocks/create/curves/line-by-direction)** > **[Spline by Control Points](../../block-documentation/blocks/create/curves/spline-by-control-points)** > **[Spline through Points](../../block-documentation/blocks/create/curves/spline-through-points)** > **[Spline by Tangents](../../block-documentation/blocks/create/curves/spline-by-tangents)** > **[Polyline](../../block-documentation/blocks/create/curves/polyline)** > **[Polycurve from Curves](../../block-documentation/blocks/create/curves/polycurve-from-curves)** > **[Arc](../../block-documentation/blocks/create/curves/arc)** > **[Arc by Tangent](../../block-documentation/blocks/create/curves/arc-by-tangent)** > **[Arc by Angle](../../block-documentation/blocks/create/curves/arc-by-angle)** > **[Arc Tangent to Curve](../../block-documentation/blocks/create/curves/arc-tangent-to-curve)** > **[Fillet Curves](../../block-documentation/blocks/create/curves/fillet-curves)** > **[Fillet Polycurve Vertices](../../block-documentation/blocks/create/curves/fillet-polycurve-vertices)** > **[Conic by Points](../../block-documentation/blocks/create/curves/conic-by-points)** > **[Conic by Tangents](../../block-documentation/blocks/create/curves/conic-by-tangents)** > **[Bridge Curve](../../block-documentation/blocks/create/curves/bridge-curve)** > **[Trim Curve](../../block-documentation/blocks/create/curves/trim-curve)** > **[Extend Curve](../../block-documentation/blocks/create/curves/extend-curve)** > **[Intersection Points](../../block-documentation/blocks/create/curves/intersection-points)** > **[Point along Curve](../../block-documentation/blocks/create/curves/point-along-curve)** > **[Frame Along Curve](../../block-documentation/blocks/create/curves/frame-along-curve)** > **[Mirror Curve](../../block-documentation/blocks/create/curves/mirror-curve)** > **[Evaluate Curvature](../../block-documentation/blocks/create/curves/evaluate-curvature)** > **[Polygon from Points](../../block-documentation/blocks/create/curves/polygon-from-points)** > **[Profile from Curves](../../block-documentation/blocks/create/curves/profile-from-curves)** > **[Merge Profiles](../../block-documentation/blocks/create/curves/merge-profiles)** ## Color > **[Color](../../block-documentation/blocks/create/color/color)** # Color Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/color > **[Color](../../../block-documentation/blocks/create/color/color)** # Color Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/color/color ## About this Block **What it does:** The **Color** block creates a color from R, G, B, and A values. The values must be in the range \[0, 1]. **Common uses:** Filtering CAD faces ## Example File Download Example: [Color](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Color.ntop) ![Color](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Color.jpg) *** Create a color from R, G, B, and A values between 0 and 1. ### Inputs | Name | Type | Description | | - | - | - | | R | [Scalar](../../../../block-documentation/types/scalar) | Red value. | | G | [Scalar](../../../../block-documentation/types/scalar) | Green value. | | B | [Scalar](../../../../block-documentation/types/scalar) | Blue value. | | A | [Scalar](../../../../block-documentation/types/scalar) | Alpha value. | ### Outputs | Type | | - | | [Color](../../../../block-documentation/types/color) | # Curves Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves > **[Line](../../../block-documentation/blocks/create/curves/line)** > **[Line by Direction](../../../block-documentation/blocks/create/curves/line-by-direction)** > **[Spline by Control Points](../../../block-documentation/blocks/create/curves/spline-by-control-points)** > **[Spline through Points](../../../block-documentation/blocks/create/curves/spline-through-points)** > **[Spline by Tangents](../../../block-documentation/blocks/create/curves/spline-by-tangents)** > **[Polyline](../../../block-documentation/blocks/create/curves/polyline)** > **[Polycurve from Curves](../../../block-documentation/blocks/create/curves/polycurve-from-curves)** > **[Arc](../../../block-documentation/blocks/create/curves/arc)** > **[Arc by Tangent](../../../block-documentation/blocks/create/curves/arc-by-tangent)** > **[Arc by Angle](../../../block-documentation/blocks/create/curves/arc-by-angle)** > **[Arc Tangent to Curve](../../../block-documentation/blocks/create/curves/arc-tangent-to-curve)** > **[Fillet Curves](../../../block-documentation/blocks/create/curves/fillet-curves)** > **[Fillet Polycurve Vertices](../../../block-documentation/blocks/create/curves/fillet-polycurve-vertices)** > **[Conic by Points](../../../block-documentation/blocks/create/curves/conic-by-points)** > **[Conic by Tangents](../../../block-documentation/blocks/create/curves/conic-by-tangents)** > **[Bridge Curve](../../../block-documentation/blocks/create/curves/bridge-curve)** > **[Trim Curve](../../../block-documentation/blocks/create/curves/trim-curve)** > **[Extend Curve](../../../block-documentation/blocks/create/curves/extend-curve)** > **[Intersection Points](../../../block-documentation/blocks/create/curves/intersection-points)** > **[Point along Curve](../../../block-documentation/blocks/create/curves/point-along-curve)** > **[Frame Along Curve](../../../block-documentation/blocks/create/curves/frame-along-curve)** > **[Mirror Curve](../../../block-documentation/blocks/create/curves/mirror-curve)** > **[Evaluate Curvature](../../../block-documentation/blocks/create/curves/evaluate-curvature)** > **[Polygon from Points](../../../block-documentation/blocks/create/curves/polygon-from-points)** > **[Profile from Curves](../../../block-documentation/blocks/create/curves/profile-from-curves)** > **[Merge Profiles](../../../block-documentation/blocks/create/curves/merge-profiles)** # Arc Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/arc ## About this Block **What it does:** The **Arc** block creates an arc using three defined points. The points order must be start, intermediate, and end. **Common uses:** * Input for Sweep Profile * Creating Profiles ## Example File ![Arc](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Arc.jpg) *** Create an arc intersecting three points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Start point of arc. | | Point 2 | [Point](../../../../block-documentation/types/point) | Intermediate point of arc. | | Point 3 | [Point](../../../../block-documentation/types/point) | End point of arc. | ### Outputs | Type | | - | | [Arc](../../../../block-documentation/types/arc) | # Arc by Angle Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/arc-by-angle Create an arc from an axis, start point, and angle. ### Inputs | Name | Type | Description | | - | - | - | | Center axis | [Axis](../../../../block-documentation/types/axis) | Axis that goes through the center point of the arc. | | Start point | [Point](../../../../block-documentation/types/point) | Start point of the arc. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Angle of the arc. It will be clamped to within -360 degrees and +360 degrees. | ### Outputs | Type | | - | | [Arc](../../../../block-documentation/types/arc) | # Arc by Tangent Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/arc-by-tangent Create an arc from a start point, tangent direction, and end point. ### Inputs | Name | Type | Description | | - | - | - | | Start point | [Point](../../../../block-documentation/types/point) | Start point of the arc. | | Start tangent | [Vector](../../../../block-documentation/types/vector) | Vector representing the tangent direction of the arc at the start point. | | End point | [Point](../../../../block-documentation/types/point) | End point of the arc. | ### Outputs | Type | | - | | [Arc](../../../../block-documentation/types/arc) | # Arc Tangent to Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/arc-tangent-to-curve Create an Arc tangent to a curve from an end point and radius. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to which the start point of the Arc will be tangent. | | Point | [Point](../../../../block-documentation/types/point) | End point of the Arc. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the Arc. | | Flip | [Bool](../../../../block-documentation/types/bool) | Flips the Arc to the opposite valid solution. | ### Outputs | Type | | - | | [Arc](../../../../block-documentation/types/arc) | # Bridge Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/bridge-curve Create a smooth spline connection with G0, G1 or G2 continuity, and optionally trim the input curves and join the result into a Polycurve. ### Inputs | Name | Type | Description | | - | - | - | | Curve 1 | [Curve](../../../../block-documentation/types/curve) | First curve. | | Curve 2 | [Curve](../../../../block-documentation/types/curve) | Second curve. | | Distance 1 | [Scalar](../../../../block-documentation/types/scalar) | Arc length from the start point along Curve 1 to the junction. | | Distance 2 | [Scalar](../../../../block-documentation/types/scalar) | Arc length from the start point along Curve 2 to the junction. | | Continuity 1 | Continuity Enum | Smoothness of the resulting curve at the Curve 1 junction. The higher the order, the smoother the transition. | | Continuity 2 | Continuity Enum | Smoothness of the resulting curve at the Curve 2 junction. The higher the order, the smoother the transition. | | Tangent scale 1 | [Scalar](../../../../block-documentation/types/scalar) | Scale factor applied to the tangent vector of the bridge curve at the Curve 1 junction. | | Tangent scale 2 | [Scalar](../../../../block-documentation/types/scalar) | Scale factor applied to the tangent vector of the bridge curve at the Curve 2 junction. | | Flip 1 | [Bool](../../../../block-documentation/types/bool) | If checked, Distance 1 will be calculated from the end point of the Curve 1 and the tangent direction of the bridge curve at this point will be reversed. | | Flip 2 | [Bool](../../../../block-documentation/types/bool) | If checked, Distance 2 will be calculated from the end point of the Curve 2 and the tangent direction of the bridge curve at this point will be reversed. | | Merge with inputs | [Bool](../../../../block-documentation/types/bool) | If checked, trim the inputs and join the three resulting curves into a Polycurve. | ### Outputs | Type | | - | | [Polycurve](../../../../block-documentation/types/polycurve) | # Conic by Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/conic-by-points Create a conic specified by three points and a rho value. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Start point of the Conic. | | Point 2 | [Point](../../../../block-documentation/types/point) | Apex point of the Conic. The tangent lines at the start and end points meet at this point. | | Point 3 | [Point](../../../../block-documentation/types/point) | End point of the Conic. | | Rho | [Scalar](../../../../block-documentation/types/scalar) | Rho value of the conic in the range (0.02,0.95). | ### Outputs | Type | | - | | [Spline](../../../../block-documentation/types/spline) | # Conic by Tangents Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/conic-by-tangents Create a conic specified by two points, two tangents, and a rho value. The apex point of the conic will be determined by the intersection of the tangent lines at the start and end points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Start point of the Conic. | | Point 2 | [Point](../../../../block-documentation/types/point) | End point of the Conic. | | Tangent 1 | [Vector](../../../../block-documentation/types/vector) | Tangent Vector at the start point. | | Tangent 2 | [Vector](../../../../block-documentation/types/vector) | Tangent Vector at the end point. | | Rho | [Scalar](../../../../block-documentation/types/scalar) | Rho value of the conic in the range (0.02,0.95). | ### Outputs | Type | | - | | [Spline](../../../../block-documentation/types/spline) | # Evaluate Curvature Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/evaluate-curvature Evaluate the curvature of a curve at a specified distance along a curve. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to evaluate. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Distance along the curve. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Extend Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/extend-curve Extend a curve by a given distance from one or both of its ends, returning the extended curve as a Polycurve. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to extend. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Distance by which to extend the curve. | | Extend from | Extend From Enum | End or ends of the curve to extend from. | | Extension type | Extension Type Enum | Method of extension. Linear (G1) appends a straight line along the end tangent. Curvature (G2) extends along a circular arc matching the end tangent and curvature; always well-behaved. Natural (G-infinity) analytically continues the curve's own equation for an infinitely smooth junction, capping the analytic part before it can fold back on itself and continuing with an arc. | ### Outputs | Type | | - | | [Polycurve](../../../../block-documentation/types/polycurve) | # Fillet Curves Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/fillet-curves Create an arc connection between coplanar curves sharing an endpoint and trim the inputs. Fillet is applied at the interior of the vertex. ### Inputs | Name | Type | Description | | - | - | - | | Curve 1 | [Curve](../../../../block-documentation/types/curve) | First curve to fillet. | | Curve 2 | [Curve](../../../../block-documentation/types/curve) | Second curve to fillet. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the fillet arc. | ### Outputs | Type | | - | | [Polycurve](../../../../block-documentation/types/polycurve) | # Fillet Polycurve Vertices Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/fillet-polycurve-vertices Create a fillet arc at each vertex of a polycurve. Fillets are applied to the interior angle at each vertex. Neighboring segments must be coplanar. ### Inputs | Name | Type | Description | | - | - | - | | Polycurve | [Polycurve](../../../../block-documentation/types/polycurve) | Polycurve whose vertices will be filleted. Neighboring segments must be coplanar. | | Radii | [Scalar List](../../../../block-documentation/types/scalar) | Fillet radius at each vertex. The number of values must match the number of vertices. | ### Outputs | Type | | - | | [Polycurve](../../../../block-documentation/types/polycurve) | # Frame Along Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/frame-along-curve Create a frame at a specified distance along a curve. The resulting frame will have its Z axis along the curve tangent, its X axis along the curve normal, and its Y axis along the curve binormal. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to evaluate. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Distance along the curve to create the frame. If this value is outside of the range from zero to the length of Curve, the point will be extrapolated. The extrapolation will be linear for Lines and Splines, and circular for Arcs. If Curve is a Polycurve, the extrapolation will be based on the type of the segment at the corresponding endpoint. | ### Outputs | Type | | - | | [Frame](../../../../block-documentation/types/frame) | # Intersection Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/intersection-points Returns a list of intersection points between a Curve and an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to intersect with the body. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to intersect with the curve. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Optional value to specify the approximate size of the smallest feature(s) on the implicit body to be detected along the curve. If not specified, a value is chosen based on the input curve. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Line Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/line ## About this Block **What it does:** The **Line** block creates a line segment from two defined points. **Common uses:** * Creating graphs * Selecting specific boundaries for simulation * Custom unit cells **Tips:** * To convert CAD sketches into lattices: ([https://support.ntopology.com/hc/articles/4411160432531](https://support.ntopology.com/hc/articles/4411160432531)) * To export Lines from a lattice as a CSV: ([https://support.ntopology.com/hc/articles/4775350585875](https://support.ntopology.com/hc/articles/4775350585875)) *** Create a line with the given two points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Start of the line. | | Point 2 | [Point](../../../../block-documentation/types/point) | End of the line. | ### Outputs | Type | | - | | [Line](../../../../block-documentation/types/line) | # Line by Direction Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/line-by-direction Create a line segment from a point, direction, and length. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | Start point of the line segment. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction of the line segment. This vector will be normalized. | | Length | [Scalar](../../../../block-documentation/types/scalar) | Length of the line segment. | | Centered | [Bool](../../../../block-documentation/types/bool) | If checked, the line will be centered on the Point. | ### Outputs | Type | | - | | [Line](../../../../block-documentation/types/line) | # Merge Profiles Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/merge-profiles Merge multiple Profiles into a single Profile. Duplicate vertices will not be removed. ### Inputs | Name | Type | Description | | - | - | - | | Profiles | [Profile List](../../../../block-documentation/types/profile) | Profiles to merge. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Mirror Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/mirror-curve Mirror a curve about a plane, returning only the mirrored copy. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to mirror. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane about which to mirror the curve. | ### Outputs | Type | | - | | [Curve](../../../../block-documentation/types/curve) | # Point along Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/point-along-curve Create a point at a specified distance along a curve. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve along which to create a point. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Distance along the curve to create the point. If this value is outside of the range from zero to the length of Curve, the point will be extrapolated. The extrapolation will be linear for Lines and Splines, and circular for Arcs. If Curve is a Polycurve, the extrapolation will be based on the type of the segment at the corresponding endpoint. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | # Polycurve from Curves Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/polycurve-from-curves Create a polycurve from a list of curves. Curves must have shared endpoints. ### Inputs | Name | Type | Description | | - | - | - | | Curves | [Curve List](../../../../block-documentation/types/curve) | List of curves to join into a single polycurve. | ### Outputs | Type | | - | | [Polycurve](../../../../block-documentation/types/polycurve) | # Polygon from Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/polygon-from-points > **[Points](#points)** > **[Points, 5.20.0](#points-5200)** *** ## About this Block **What it does:** The **Profile from Points** block creates a profile from planar points. The order of the points is essential when entering them. **Common uses:** * Custom profiles for lofting, extruding, sweeping, etc. ## Example File ![Profile from Points](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/profile_from_points.png) *** ## Points Create a polygon from planar points. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | Ordered list of points. Points of polygon must be planar. | ### Outputs | Type | | - | | [Polygon (old)](../../../../block-documentation/types/polygon-old) | *** ## Points, 5.20.0 Create a closed Profile from an ordered list of points. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | An ordered list of points representing the vertices of the Profile. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Polyline Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/polyline Create a Polyline from a list of points. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | List of points to connect with line segments. | ### Outputs | Type | | - | | [Polycurve](../../../../block-documentation/types/polycurve) | # Profile from Curves Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/profile-from-curves Create a profile from a list of curves. ### Inputs | Name | Type | Description | | - | - | - | | Curves | [Curve List](../../../../block-documentation/types/curve) | List of planar curves. | | Normal | [Vector](../../../../block-documentation/types/vector) | Direction to view the curve plane and orient open curves with respect to. This is only used when open curves are present to determine their inside and outside, and is ignored when all curves are closed. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Spline by Control Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/spline-by-control-points ## About this Block **What it does:** The **Spline by Control Points** block creates a spline using a list of points. The spline is only guaranteed to intersect with the starting and ending points. The other points merely influence its direction and curvature. **Common uses:** * Input for Sweep Profile * Creating Profiles ## Example Image ![Spline by Control Points](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/spline_by_control_points.png) *** Create a Spline using a list of points as control points. ### Inputs | Name | Type | Description | | - | - | - | | Control points | [Point List](../../../../block-documentation/types/point) | Control points of the Spline. | | Degree | [Integer](../../../../block-documentation/types/integer) | Degree of the Spline. | ### Outputs | Type | | - | | [Spline](../../../../block-documentation/types/spline) | # Spline by Tangents Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/spline-by-tangents Create a cubic spline that passes through multiple points with corresponding tangent vectors. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | Ordered list of points to pass the curve through. Curve will be closed if start and end point are the same. | | Tangents | [Vector List](../../../../block-documentation/types/vector) | Tangent vectors of the spline at each point. The magnitude of this value will determine the distance to the adjacent control points. | ### Outputs | Type | | - | | [Spline](../../../../block-documentation/types/spline) | # Spline through Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/spline-through-points > **[Points, Integer, Bool, 5.20.0](#points-integer-bool-5200)** > **[Points, Integer, Bool, Vector, Vector, 5.28.0](#points-integer-bool-vector-vector-5280)** *** ## About this Block **What it does:** The **Spline through Points** block creates a spline from a list of points. The order of points in this list determine how the spline passes through them. The spline travels from point to point, so the order will greatly affect the output curve. **Common uses:** * Input for Sweep Profile * Creating Profiles **Tips:** * If the first and last point are the same, it will create a closed curve. * By checking the periodic input, the curve will also be closed even if it does not have the same start and end point. ## Example Image ![Spline through Points](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/spline_through_points.png) *** ## Points, Integer, Bool, 5.20.0 Create a Spline that passes through multiple points. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | Ordered list of points to pass the curve through. Curve will be closed if start and end point are the same. | | Degree | [Integer](../../../../block-documentation/types/integer) | Degree of the Spline. | | Periodic | [Bool](../../../../block-documentation/types/bool) | Make the Spline periodic. This will close the curve even if the start and end point are not the same. | ### Outputs | Type | | - | | [Spline](../../../../block-documentation/types/spline) | *** ## Points, Integer, Bool, Vector, Vector, 5.28.0 Create a Spline that passes through multiple points. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | Ordered list of points to pass the curve through. Curve will be closed if start and end point are the same. | | Degree | [Integer](../../../../block-documentation/types/integer) | Degree of the Spline. | | Periodic | [Bool](../../../../block-documentation/types/bool) | Make the Spline periodic. This will close the Spline even if the start and end point are not the same. If both the Start Tangent and End Tangent inputs are not specified, the Spline's start and end tangent will be made the same. | | Start tangent | [Vector](../../../../block-documentation/types/vector) | Optional tangent vector of the spline at the start point. The magnitude of this value will determine the distance to the adjacent control point. | | End tangent | [Vector](../../../../block-documentation/types/vector) | Optional tangent vector of the spline at the end point. The magnitude of this value will determine the distance to the adjacent control point. | ### Outputs | Type | | - | | [Spline](../../../../block-documentation/types/spline) | # Trim Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/curves/trim-curve Trim a curve with an implicit body. A list of trimmed curves is returned. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to trim. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to trim the curve with. | | Invert | [Bool](../../../../block-documentation/types/bool) | When true, returns portions of the curve inside the body instead of outside. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Optional value to specify the approximate size of the smallest feature(s) on the implicit body to be detected along the curve. If not specified, a value is chosen based on the input curve. | ### Outputs | Type | | - | | [Curve List](../../../../block-documentation/types/curve) | # Primitives Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives > **[Box](../../../block-documentation/blocks/create/primitives/box)** > **[Cube](../../../block-documentation/blocks/create/primitives/cube)** > **[Box from Corners](../../../block-documentation/blocks/create/primitives/box-from-corners)** > **[Rounded Box](../../../block-documentation/blocks/create/primitives/rounded-box)** > **[Skewed Box](../../../block-documentation/blocks/create/primitives/skewed-box)** > **[Cylinder](../../../block-documentation/blocks/create/primitives/cylinder)** > **[Cylinder from Line Segment](../../../block-documentation/blocks/create/primitives/cylinder-from-line-segment)** > **[Rounded Cylinder](../../../block-documentation/blocks/create/primitives/rounded-cylinder)** > **[Capsule](../../../block-documentation/blocks/create/primitives/capsule)** > **[Sphere](../../../block-documentation/blocks/create/primitives/sphere)** > **[Cone](../../../block-documentation/blocks/create/primitives/cone)** > **[Torus](../../../block-documentation/blocks/create/primitives/torus)** > **[Regular Polygon](../../../block-documentation/blocks/create/primitives/regular-polygon)** > **[Circle](../../../block-documentation/blocks/create/primitives/circle)** > **[Bounding Box](../../../block-documentation/blocks/create/primitives/bounding-box)** > **[Rectangle](../../../block-documentation/blocks/create/primitives/rectangle)** > **[Rectangle by Points](../../../block-documentation/blocks/create/primitives/rectangle-by-points)** > **[Slot](../../../block-documentation/blocks/create/primitives/slot)** > **[Slot by Points](../../../block-documentation/blocks/create/primitives/slot-by-points)** > **[Spline Distance Field](../../../block-documentation/blocks/create/primitives/spline-distance-field)** > **[Cubic Bezier Distance Field](../../../block-documentation/blocks/create/primitives/cubic-bezier-distance-field)** > **[Conic Distance Field](../../../block-documentation/blocks/create/primitives/conic-distance-field)** # Bounding Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/bounding-box ## About this Block **What it does:** The **Bounding Box** block creates a bounding box from two corner points. **Common uses:** * Creating custom Unit cells * Object modification (translate, rotate, scale, etc.) * Custom build volumes ## Example File ![Bounding Box](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/ExtendedBlockDocs/boundingbox.jpg) *** Create a bounding box from two corner points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Minimum point of bounding box. | | Point 2 | [Point](../../../../block-documentation/types/point) | Maximum point of bounding box. | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/box ## About this Block **What it does:** The **Box** block creates a box from a center point, length, width, and height. **Common uses:** * Creating a part from scratch * Boolean operations * Defining rectangular cell maps ## Example File ![Boxes](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Boxes.jpg) *** Create a box from a center point, length, width, and height. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center Point of box. | | Length | [Scalar](../../../../block-documentation/types/scalar) | Length of the box along the X-axis. | | Width | [Scalar](../../../../block-documentation/types/scalar) | Width of the box along the Y-axis | | Height | [Scalar](../../../../block-documentation/types/scalar) | Height of the box along the Z-axis. | ### Outputs | Type | | - | | [Box](../../../../block-documentation/types/box) | # Box from Corners Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/box-from-corners ## About this Block **What it does:** The **Box from Corners** block creates a box from two opposite corner points. **Common uses:** * Creating implicits from scratch * Boolean operations * Defining rectangular cell maps ## Example File ![Boxes](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Boxes.jpg) *** Create a box from two corner points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Minimum point of box. | | Point 2 | [Point](../../../../block-documentation/types/point) | Maximum point of box. | ### Outputs | Type | | - | | [Box](../../../../block-documentation/types/box) | # Capsule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/capsule Create a capsule. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Point 1 of the capsule. | | Point 2 | [Point](../../../../block-documentation/types/point) | Point 2 of the capsule. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the capsule. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Circle Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/circle > **[Point, Scalar, Vector](#point-scalar-vector)** > **[Point, Scalar, Vector, 5.20.0](#point-scalar-vector-5200)** *** ## About this Block **What it does**: The **Circle** block generates a circle about a normal vector at a user-defined point and radius. **Common uses:** * Circle can be used as profiles and are utilized in several modeling blocks such as Sweep Profile and Revolve Profile. *** ## Point, Scalar, Vector Create a circle from a center point, radius, and normal vector. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center Point of circle. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of circle. | | Normal | [Vector](../../../../block-documentation/types/vector) | Normal direction of circle. | ### Outputs | Type | | - | | [Circle (old)](../../../../block-documentation/types/circle-old) | *** ## Point, Scalar, Vector, 5.20.0 Create a circle from a center point, radius, and normal vector. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center Point of circle. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of circle. | | Normal | [Vector](../../../../block-documentation/types/vector) | Normal direction of circle. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Cone Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/cone ## About this Block **What it does:** The **Cone** block creates a cone from two points and two radii. **Common uses:** * Boolean operations *** Create a cone from two points and two radii. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Point 1 of the cone. | | Point 2 | [Point](../../../../block-documentation/types/point) | Point 2 of the cone. | | Radius 1 | [Scalar](../../../../block-documentation/types/scalar) | Radius 1 of the cone. | | Radius 2 | [Scalar](../../../../block-documentation/types/scalar) | Radius 2 of the cone. | ### Outputs | Type | | - | | [Cone](../../../../block-documentation/types/cone) | # Conic Distance Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/conic-distance-field ## About this Block **What it does:** The **Conic** block creates an Implicit Body defined by an implicit conic section curve. The signed distance of a planar conic segment will be returned. The block uses three control points (Point 1, Point 2, and Point 3) and a Rho value to define the curve's shape. ![Conic](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/conic.png) * The Conic block takes input of Point 1, Point 2, Point 3, Rho, and the Coordinate Space to create the conic section. Point 4 is the midpoint of the chord between Point 1 and Point 3. Point 5 is where the curve intersects the chord between Point 4 and Point 2. * You can use the **Vector Field from Components** block to create your control point vector fields and use a **Ramp** block to vary rho value. **Common uses:** * Designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Modeling smooth transitions in components like ducts, inlets, and nozzles to manage fluid flow. * Creating architectural features like arches and curved facades. **Tips:** * For advanced applications, you can use a **Ramp** block to vary the Rho value, which will change the curve's shape across a spatial domain. * You would need to combine it with a **Boolean Intersect** block to create a solid since the block only outputs the implicit surface. * Rho Parameter Values. The Rho value defines the "bulge" or shape of the conic curve as it's pulled toward Point 2.
**Rho Value** **Resulting Curve Type** **Example**
Rho\<0.5 Ellipse ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ellipse.png)
Rho=0.5 Parabola ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parabola.png)
Rho>0.5 Hyperbola ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/hyperbola.png)
## Example File Download Example: [Conic](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/conic_and_cubic.ntop) ![Conic Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/conic_example.png) *** Create a conic section distance field. The signed distance of a planar conic curve will be returned. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Start point of the conic curve. | | Point 2 | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Apex point of the conic curve. The tangent lines at the start and end points meet at this point. | | Point 3 | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | End point of the conic curve. | | Rho | [Scalar Field](../../../../block-documentation/types/scalar-field) | Rho value of the conic in the range (0,1). | | Coordinate space | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Vector Field representing the basis in which to evaluate the curve. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Cube Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/cube ## About this Block **What it does:** The **Cube** block creates a cube with equal-length sides. **Common uses:** * Creating from scratch * Boolean operations * Defining rectangular cell maps ## Example File ![Boxes](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Boxes.jpg) *** Create a Cube with equal length sides. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center Point of the Cube. | | Size | [Scalar](../../../../block-documentation/types/scalar) | Size of the cube. | ### Outputs | Type | | - | | [Box](../../../../block-documentation/types/box) | # Cubic Bezier Distance Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/cubic-bezier-distance-field ## About this Block **What it does:** The **Cubic Bezier** block creates an Implicit Body whose boundary is formed by a smooth, implicit cubic Bézier curve. The shape of the curve is controlled by four points. ![Cubic Bezier](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cubic_bezier.png) **Common uses:** * Designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Modeling smooth transitions in components like ducts, inlets, and nozzles to manage fluid flow. * Creating architectural features like arches and curved facades. **Tips:** * For advanced applications, you can use a **Ramp** or **Distance to Curve from Axis** block to vary the points. * You would need to combine it with a **Boolean Intersect** block to create a solid since the block only outputs the implicit surface. ## Example File Download Example: [Cubic Bezier](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/conic_and_cubic.ntop) ![Cubic Bezier Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cubic_bezier_example.png) *** Create a cubic Bezier distance field. The signed distance of a planar cubic Bezier curve will be returned. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Control Point 1. | | Point 2 | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Control Point 2. | | Point 3 | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Control Point 3. | | Point 4 | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Control Point 4. | | Coordinate space | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Vector Field representing the basis in which to evaluate the curve. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Cylinder Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/cylinder ## About this Block **What it does:** The **Cylinder** block creates a cylinder from two points. **Common uses:** * Boolean operations * Defining cylindrical cell maps ## Example File ![Cylinder](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Cylinders.jpg) *** Create a cylinder from two points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Point 1 of the cylinder. | | Point 2 | [Point](../../../../block-documentation/types/point) | Point 2 of the cylinder. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the cylinder. | ### Outputs | Type | | - | | [Cylinder](../../../../block-documentation/types/cylinder) | # Cylinder from Line Segment Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/cylinder-from-line-segment ## About this Block **What it does:** The **Cylinder from Line Segment** block creates a cylinder along a line segment with a given radius. **Common uses:** * Boolean operations * Cylindrical cell maps *** Create a Cylinder along a line segment with a given radius. ### Inputs | Name | Type | Description | | - | - | - | | Line segment | [Line](../../../../block-documentation/types/line) | Center line of cylinder. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of cylinder. | ### Outputs | Type | | - | | [Cylinder](../../../../block-documentation/types/cylinder) | # Rectangle Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/rectangle Create a rectangle from a center point, length, and width. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center point of the rectangle. If this does not lie on the Plane, it will be projected. | | Length | [Scalar](../../../../block-documentation/types/scalar) | Length of the rectangle along the X-axis. | | Width | [Scalar](../../../../block-documentation/types/scalar) | Width of the rectangle along the Y-axis. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Angle of the rectangle with respect to the X-axis. | | Corner radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Circular radius to apply to the rectangle corners. The value will be queried from the Corner Radius field at the original Rectangle corners. The value will be clamped to a valid range if necessary. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to define the orientation of the Rectangle. If no Plane is provided, the global XY plane will be used. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Rectangle by Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/rectangle-by-points Create a rectangle from two corner points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Minimum corner point of the rectangle. If this does not lie on the Plane, it will be projected. | | Point 2 | [Point](../../../../block-documentation/types/point) | Maximum corner point of the rectangle. If this does not lie on the Plane, it will be projected. | | Corner radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Circular radius to apply to the rectangle corners. The value will be queried from the Corner Radius field at the original Rectangle corners. The value will be clamped to a valid range if necessary. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to define the orientation of the Rectangle. If no Plane is provided, the global XY plane will be used. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Regular Polygon Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/regular-polygon > **[Plane, Integer, Scalar](#plane-integer-scalar)** > **[Plane, Integer, Scalar, Bool, 5.20.0](#plane-integer-scalar-bool-5200)** *** ## About this Block **What it does:** The **Regular Polygon** block creates a polygon from a Plane, the number of sides, and a Radius of the circle that circumscribes the resulting polygon. **Common uses:** * Polygons can be used as profiles and are utilized in several modeling blocks such as Sweep Profile and Revolve Profile. **Tips:** * We can generate the Mesh of the polygon by dragging the vertices property from the **Regular Polygon** block onto the Points input of **Create Single Face Mesh** block for Point list of size 3 and 4. ## Example File ![Regular Polygon](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/regular_polygon.png) *** ## Plane, Integer, Scalar Create a radially symmetric polygon. ### Inputs | Name | Type | Description | | - | - | - | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to locate and orient polygon. | | Sides | [Integer](../../../../block-documentation/types/integer) | Number of sides on polygon. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of polygon vertices. | ### Outputs | Type | | - | | [Polygon (old)](../../../../block-documentation/types/polygon-old) | *** ## Plane, Integer, Scalar, Bool, 5.20.0 Create a radially symmetric polygon. ### Inputs | Name | Type | Description | | - | - | - | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to locate and orient polygon. | | Sides | [Integer](../../../../block-documentation/types/integer) | Number of sides on polygon. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of polygon vertices. | | Inscribed | [Bool](../../../../block-documentation/types/bool) | If checked, all vertices of the polygon will lie on the circumference of the circle specified by the Radius. If not selected, the midpoint of each polygon's side will be tangent to the circle specified by the Radius. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Rounded Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/rounded-box > **[Point, Point, Scalar, 5.26.0](#point-point-scalar-5260)** > **[Point, Scalar, Scalar, Scalar, Scalar, 5.26.0](#point-scalar-scalar-scalar-scalar-5260)** *** ## Point, Point, Scalar, 5.26.0 Create a box from two corner points and an edge radius. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Minimum point of box. | | Point 2 | [Point](../../../../block-documentation/types/point) | Maximum point of box. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius applied to the edges of the box. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Point, Scalar, Scalar, Scalar, Scalar, 5.26.0 Create a Rounded Box from a center point, length, width, height, and an edge radius. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center Point of box. | | Length | [Scalar](../../../../block-documentation/types/scalar) | Length of the box along the X-axis. | | Width | [Scalar](../../../../block-documentation/types/scalar) | Length of the box along the Y-axis. | | Height | [Scalar](../../../../block-documentation/types/scalar) | Length of the box along the Z-axis. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius applied to the edges of the box. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Rounded Cylinder Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/rounded-cylinder Create a Rounded Cylinder from two points and two radii. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Point 1 of the cylinder. | | Point 2 | [Point](../../../../block-documentation/types/point) | Point 2 of the cylinder. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the cylinder. | | Cap radius | [Scalar](../../../../block-documentation/types/scalar) | Radius applied to the top and bottom faces of the cylinder. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Skewed Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/skewed-box ## About this Block **What it does:** The **Skewed Box** block generates an implicit Box with a point and 3 Axis inputs. **Common uses:** * Creating a part from scratch * Boolean operations ## Example File ![Skewed Box](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/skewed_box.png) *** Create a skewed box from 3 vectors. ### Inputs | Name | Type | Description | | - | - | - | | Start point | [Point](../../../../block-documentation/types/point) | Starting point of skewed box. | | Vector 1 | [Vector](../../../../block-documentation/types/vector) | Local X vector of skewed box. | | Vector 2 | [Vector](../../../../block-documentation/types/vector) | Local Y vector of skewed box. | | Vector 3 | [Vector](../../../../block-documentation/types/vector) | Local Z vector of skewed box. | ### Outputs | Type | | - | | [Box](../../../../block-documentation/types/box) | # Slot Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/slot Create a slot from a center point, width, and height. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center point of the slot. If this does not lie on the Plane, it will be projected. | | Length | [Scalar](../../../../block-documentation/types/scalar) | Length of the slot along the X-axis. Defined by the center to center distance of the two arcs. | | Width | [Scalar](../../../../block-documentation/types/scalar) | Width of the slot along the Y-axis. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Angle of the slot with respect to the X-axis. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to define the orientation of the Rectangle. If no Plane is provided, the global XY plane will be used. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Slot by Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/slot-by-points Create a slot from two end points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | Point 1 of the slot. If this does not lie on the Plane, it will be projected. | | Point 2 | [Point](../../../../block-documentation/types/point) | Point 2 of the slot. If this does not lie on the Plane, it will be projected. | | Width | [Scalar](../../../../block-documentation/types/scalar) | Width of the slot. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to define the orientation of the slot. If no Plane is provided, the global XY plane will be used. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Sphere Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/sphere ## About this Block **What it does:** The **Sphere** block creates a sphere from a user-defined center point and radius. **Common uses:** * Texturing * Boolean Operations * Spherical cell maps **Tips:** * To add texture to a surface using random points: ([https://support.ntopology.com/hc/articles/360060794753](https://support.ntopology.com/hc/articles/360060794753)) * To add perforations: ([https://support.ntopology.com/hc/articles/1500012943262](https://support.ntopology.com/hc/articles/1500012943262)) ## Example File ![Sphere](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Sphere.jpg) *** Create a sphere from a center point and radius. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Center point of sphere. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of sphere. | ### Outputs | Type | | - | | [Sphere](../../../../block-documentation/types/sphere) | # Spline Distance Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/spline-distance-field Create a Spline distance field. The signed distance of a planar Spline curve will be returned. ### Inputs | Name | Type | Description | | - | - | - | | Control points | [2D Vector Field List](../../../../block-documentation/types/2d-vector-field) | List of control points of the Spline curve. | | Degree | [Integer](../../../../block-documentation/types/integer) | Degree of the Spline. | | Coordinate space | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Vector Field representing the basis in which to evaluate the curve. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Torus Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/primitives/torus ## About this Block **What it does:** The **Torus** block creates a torus from a center point, axis, and two radii. **Common uses:** * Boolean operations ## Example File ![Torus](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Torus.jpg) *** Create a torus from a center point, axis, and two radii. ### Inputs | Name | Type | Description | | - | - | - | | Center | [Point](../../../../block-documentation/types/point) | Center point of torus. | | Axis | [Vector](../../../../block-documentation/types/vector) | Normal direction of torus. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the center line of the torus. | | Torus radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the torus. | ### Outputs | Type | | - | | [Torus](../../../../block-documentation/types/torus) | # Vectors Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors > **[Point](../../../block-documentation/blocks/create/vectors/point)** > **[Vector](../../../block-documentation/blocks/create/vectors/vector)** > **[Plane](../../../block-documentation/blocks/create/vectors/plane)** > **[Plane from Normal](../../../block-documentation/blocks/create/vectors/plane-from-normal)** > **[Axis](../../../block-documentation/blocks/create/vectors/axis)** > **[Frame](../../../block-documentation/blocks/create/vectors/frame)** > **[Offset Plane](../../../block-documentation/blocks/create/vectors/offset-plane)** > **[Point between Points](../../../block-documentation/blocks/create/vectors/point-between-points)** > **[Point in Frame](../../../block-documentation/blocks/create/vectors/point-in-frame)** # Axis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/axis ## About this Block **What it does:** The **Axis** block creates an axis from a point and a direction vector. **Common uses:** * Revolve * Polar Array Body * Cylindrical Constraint ## Example File ![Axis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Axis.jpg) *** Create an Axis from a point and a direction Vector. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | Starting point to define the axis. | | Vector | [Vector](../../../../block-documentation/types/vector) | Vector to define the direction of the axis. | ### Outputs | Type | | - | | [Axis](../../../../block-documentation/types/axis) | # Frame Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/frame ## About this Block The Frame block creates a reference frame from an origin point, and two vectors defining the local x and y axes of the frame. The z axis of the frame will be perpendicular to the x and y axes, and its positive and negative directions are determined by the right-hand rule. The x and y input axes cannot be parallel. Frames are primarily used in finite element processes. Several blocks have optional Frame inputs, allowing geometric inputs to be reoriented according to a local frame of reference, as opposed to the system-wide default frame at 0,0,0. These include the FE Attribute blocks and any FE boundary condition blocks. ## Example File Download Example: [Frame](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Frame.ntop) *In the example file, a reference frame is added to a Force boundary condition, which causes the force vector to be applied with respect to a new local axis. In this case, the force vector is tilted by 45 degrees from the default x,y,z frame.* ![Frame](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Frame.gif) *** Create a frame from an origin and axes. ### Inputs | Name | Type | Description | | - | - | - | | Origin | [Point](../../../../block-documentation/types/point) | Origin point of frame. | | X axis | [Vector](../../../../block-documentation/types/vector) | Local X Axis of frame. | | Y axis | [Vector](../../../../block-documentation/types/vector) | Local Y Axis of frame. | ### Outputs | Type | | - | | [Frame](../../../../block-documentation/types/frame) | # Offset Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/offset-plane Offset a plane by a distance. Positive values will offset along the plane's normal and negative directions will offset against the plane's normal. ### Inputs | Name | Type | Description | | - | - | - | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to offset. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Negative or positive distance to offset the Plane. | ### Outputs | Type | | - | | [Plane](../../../../block-documentation/types/plane) | # Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/plane ## About this Block **What it does:** The **Plane** block creates a plane from an origin Point and vector directions as X and Y axes. **Common uses:** * Mirroring operations * Defining build planes **Tips:** * To create a coincident plane from a CAD face: ([https://support.ntopology.com/hc/articles/360057071993](https://support.ntopology.com/hc/articles/360057071993)) * How to split an implicit body along a plane: ([https://support.ntopology.com/hc/articles/1500003479501](https://support.ntopology.com/hc/articles/1500003479501)) * How to use the FE Mirror Mesh block: ([https://support.ntopology.com/hc/articles/360060940234](https://support.ntopology.com/hc/articles/360060940234)) ## Example File ![Plane](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Plane.jpg) *** Create a Plane from an origin and Vector directions as axes. ### Inputs | Name | Type | Description | | - | - | - | | Origin | [Point](../../../../block-documentation/types/point) | Origin point of plane. | | X axis | [Vector](../../../../block-documentation/types/vector) | Local X Axis of plane. | | Y axis | [Vector](../../../../block-documentation/types/vector) | Local Y Axis of plane. | ### Outputs | Type | | - | | [Plane](../../../../block-documentation/types/plane) | # Plane from Normal Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/plane-from-normal > **[Point, Vector](#point-vector)** > **[Point, Vector, 1.1.0](#point-vector-110)** *** ## About this Block **What it does:** The **Plane from Normal** block creates a plane from an origin and a Vector normal direction. **Common uses:** * Section cuts * Mirroring operations * Ramps **Tips:** * How to calculate surface area of a cross-section: ([https://support.ntopology.com/hc/articles/360059905913](https://support.ntopology.com/hc/articles/360059905913)) * How to modify geometry using ramps: ([https://support.ntopology.com/hc/articles/360042294794](https://support.ntopology.com/hc/articles/360042294794)) * How to mirror an implicit body: ([https://support.ntopology.com/hc/articles/360056411314](https://support.ntopology.com/hc/articles/360056411314)) ## Example File ![Plane from Normal](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Planefromnormal.gif) *** ## Point, Vector Create a Plane from an origin and a Vector normal direction. ### Inputs | Name | Type | Description | | - | - | - | | Origin | [Point](../../../../block-documentation/types/point) | Origin point of plane. | | Normal | [Vector](../../../../block-documentation/types/vector) | Normal direction of plane. | ### Outputs | Type | | - | | [Plane](../../../../block-documentation/types/plane) | *** ## Point, Vector, 1.1.0 Create a Plane from an origin and a Vector normal direction. ### Inputs | Name | Type | Description | | - | - | - | | Origin | [Point](../../../../block-documentation/types/point) | Origin point of plane. | | Normal | [Vector](../../../../block-documentation/types/vector) | Normal direction of plane. | ### Outputs | Type | | - | | [Plane](../../../../block-documentation/types/plane) | # Point Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/point ## About this Block **What it does:** The **Point** block creates a point from its XYZ components. **Common uses:** * Point Maps * Defining origins **Tips:** * You can extract points from a block’s properties panel for downstream operations. *** Create a point from its XYZ components. ### Inputs | Name | Type | Description | | - | - | - | | X | [Scalar](../../../../block-documentation/types/scalar) | X component of the point. | | Y | [Scalar](../../../../block-documentation/types/scalar) | Y component of the point. | | Z | [Scalar](../../../../block-documentation/types/scalar) | Z component of the point. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | # Point between Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/point-between-points Create a point linearly interpolated between two points. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [Point](../../../../block-documentation/types/point) | First Point to be interpolated. | | Point 2 | [Point](../../../../block-documentation/types/point) | First Point to be interpolated. | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Interpolation factor. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | # Point in Frame Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/point-in-frame Create a Point at specified local coordinates within a Frame. ### Inputs | Name | Type | Description | | - | - | - | | X | [Scalar](../../../../block-documentation/types/scalar) | Local X component of the Point. | | Y | [Scalar](../../../../block-documentation/types/scalar) | Local Y component of the Point. | | Z | [Scalar](../../../../block-documentation/types/scalar) | Local Z component of the Point. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame in which to create the Point. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | # Vector Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/create/vectors/vector ## About this Block **What it does:** The **Vector** block creates a vector from its XYZ components. **Common uses:** * Defining Forces * Creating an array of bodies * Extruding a profile * Translating objects * Defining planes **Tips:** * A vector cannot be visualized in the viewport * You can extract vectors from a block’s properties panel for downstream operations. An example of this is an implicit body's bounding box will have vector property chip called "span". * How to translate and array an object to a set of points: ([https://support.ntopology.com/hc/articles/4408131838483](https://support.ntopology.com/hc/articles/4408131838483)) ## Example File ![Vector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Vector.jpg) *** Create a vector from its XYZ components. ### Inputs | Name | Type | Description | | - | - | - | | X | [Scalar](../../../../block-documentation/types/scalar) | X component of the vector. | | Y | [Scalar](../../../../block-documentation/types/scalar) | Y component of the vector. | | Z | [Scalar](../../../../block-documentation/types/scalar) | Z component of the vector. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | # Design Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis ## Sample Materials > **[Al 6061-T6](../../block-documentation/blocks/design-analysis/sample-materials/al-6061-t6)** > **[Al 7050-T7451](../../block-documentation/blocks/design-analysis/sample-materials/al-7050-t7451)** > **[Al 7075-T6](../../block-documentation/blocks/design-analysis/sample-materials/al-7075-t6)** > **[Al-Si-10Mg](../../block-documentation/blocks/design-analysis/sample-materials/al-si-10mg)** > **[Inconel 625](../../block-documentation/blocks/design-analysis/sample-materials/inconel-625)** > **[Inconel 718](../../block-documentation/blocks/design-analysis/sample-materials/inconel-718)** > **[Ti-6Al-4V](../../block-documentation/blocks/design-analysis/sample-materials/ti-6al-4v)** > **[Stainless Steel 316](../../block-documentation/blocks/design-analysis/sample-materials/stainless-steel-316)** ## Mesh Generation > **[FE CAD Solid Mesh](../../block-documentation/blocks/structures/mesh/fe-cad-solid-mesh)** > **[FE Volume Mesh from Implicit](../../block-documentation/blocks/design-analysis/mesh-generation/fe-volume-mesh-from-implicit)** > **[FE Tetrahedral Mesh](../../block-documentation/blocks/design-analysis/mesh-generation/fe-tetrahedral-mesh)** > **[FE Robust Tetrahedral Mesh](../../block-documentation/blocks/design-analysis/mesh-generation/fe-robust-tetrahedral-mesh)** > **[FE Shell Mesh from CAD](../../block-documentation/blocks/structures/mesh/fe-shell-mesh-from-cad)** > **[FE Shell Mesh](../../block-documentation/blocks/design-analysis/mesh-generation/fe-shell-mesh)** > **[FE Lattice Mesh](../../block-documentation/blocks/structures/mesh/fe-lattice-mesh)** > **[FE Point](../../block-documentation/blocks/structures/mesh/fe-point)** > **[Mirror FE Mesh](../../block-documentation/blocks/structures/mesh/mirror-fe-mesh)** > **[Merge FE Meshes](../../block-documentation/blocks/structures/mesh/merge-fe-meshes)** ## Model Assembly > **[FE Solid Model](../../block-documentation/blocks/design-analysis/model-assembly/fe-solid-model)** > **[FE Solid Domain](../../block-documentation/blocks/design-analysis/model-assembly/fe-solid-domain)** > **[Lattice Domain](../../block-documentation/blocks/structures/model/lattice-domain)** > **[FE Lattice Connector](../../block-documentation/blocks/design-analysis/model-assembly/fe-lattice-connector)** ## Selection Sets > **[FE Boundary by CAD Face](../../block-documentation/blocks/design-analysis/selection-sets/fe-boundary-by-cad-face)** > **[FE Region by CAD Body](../../block-documentation/blocks/design-analysis/selection-sets/fe-region-by-cad-body)** > **[FE Boundary by Flood Fill](../../block-documentation/blocks/structures/utilities/fe-boundary-by-flood-fill)** ## Restraints > **[FE Fixed Faces](../../block-documentation/blocks/design-analysis/restraints/fe-fixed-faces)** > **[Displacement Restraint](../../block-documentation/blocks/structures/boundary-conditions/displacement-restraint)** > **[Temperature Restraint](../../block-documentation/blocks/structures/boundary-conditions/temperature-restraint)** ## Loads > **[Force](../../block-documentation/blocks/structures/boundary-conditions/force)** > **[Surface Force](../../block-documentation/blocks/structures/boundary-conditions/surface-force)** > **[Pressure](../../block-documentation/blocks/structures/boundary-conditions/pressure)** > **[Point Force](../../block-documentation/blocks/structures/boundary-conditions/point-force)** > **[Point Moment](../../block-documentation/blocks/structures/boundary-conditions/point-moment)** > **[Acceleration Load](../../block-documentation/blocks/structures/boundary-conditions/acceleration-load)** > **[Surface Heat Flux](../../block-documentation/blocks/structures/boundary-conditions/surface-heat-flux)** ## Analysis > **[Static Analysis](../../block-documentation/blocks/structures/analysis/static-analysis)** > **[Modal Analysis](../../block-documentation/blocks/structures/analysis/modal-analysis)** > **[Buckling Analysis](../../block-documentation/blocks/structures/analysis/buckling-analysis)** > **[Thermal Analysis](../../block-documentation/blocks/structures/analysis/thermal-analysis)** ## Fields > **[Stress Thickness Modifier](../../block-documentation/blocks/design-analysis/fields/stress-thickness-modifier)** > **[Displacement Vector Modifier](../../block-documentation/blocks/design-analysis/fields/displacement-vector-modifier)** > **[Temperature Thickness Modifier](../../block-documentation/blocks/design-analysis/fields/temperature-thickness-modifier)** > **[Advanced Stress Thickness Modifier](../../block-documentation/blocks/design-analysis/fields/advanced-stress-thickness-modifier)** ## Export > **[Export FE Mesh](../../block-documentation/blocks/structures/exchange/export-fe-mesh)** > **[Export FE Model](../../block-documentation/blocks/structures/exchange/export-fe-model)** > **[Export Static Analysis](../../block-documentation/blocks/structures/exchange/export-static-analysis)** > **[Export Modal Analysis](../../block-documentation/blocks/structures/exchange/export-modal-analysis)** > **[Export Buckling Analysis](../../block-documentation/blocks/structures/exchange/export-buckling-analysis)** > **[Export Thermal Analysis](../../block-documentation/blocks/structures/exchange/export-thermal-analysis)** > **[Export Static Analysis Result](../../block-documentation/blocks/design-analysis/export/export-static-analysis-result)** > **[Export Modal Analysis Result](../../block-documentation/blocks/design-analysis/export/export-modal-analysis-result)** > **[Export Buckling Analysis Result](../../block-documentation/blocks/design-analysis/export/export-buckling-analysis-result)** > **[Export Thermal Analysis Result](../../block-documentation/blocks/design-analysis/export/export-thermal-analysis-result)** > **[Export Time Dependent Thermal Analysis Result](../../block-documentation/blocks/design-analysis/export/export-time-dependent-thermal-analysis-result)** # Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/analysis > **[Static Analysis](../../../block-documentation/blocks/structures/analysis/static-analysis)** > **[Modal Analysis](../../../block-documentation/blocks/structures/analysis/modal-analysis)** > **[Buckling Analysis](../../../block-documentation/blocks/structures/analysis/buckling-analysis)** > **[Thermal Analysis](../../../block-documentation/blocks/structures/analysis/thermal-analysis)** # Export Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/export > **[Export FE Mesh](../../../block-documentation/blocks/structures/exchange/export-fe-mesh)** > **[Export FE Model](../../../block-documentation/blocks/structures/exchange/export-fe-model)** > **[Export Static Analysis](../../../block-documentation/blocks/structures/exchange/export-static-analysis)** > **[Export Modal Analysis](../../../block-documentation/blocks/structures/exchange/export-modal-analysis)** > **[Export Buckling Analysis](../../../block-documentation/blocks/structures/exchange/export-buckling-analysis)** > **[Export Thermal Analysis](../../../block-documentation/blocks/structures/exchange/export-thermal-analysis)** > **[Export Static Analysis Result](../../../block-documentation/blocks/design-analysis/export/export-static-analysis-result)** > **[Export Modal Analysis Result](../../../block-documentation/blocks/design-analysis/export/export-modal-analysis-result)** > **[Export Buckling Analysis Result](../../../block-documentation/blocks/design-analysis/export/export-buckling-analysis-result)** > **[Export Thermal Analysis Result](../../../block-documentation/blocks/design-analysis/export/export-thermal-analysis-result)** > **[Export Time Dependent Thermal Analysis Result](../../../block-documentation/blocks/design-analysis/export/export-time-dependent-thermal-analysis-result)** # Export Buckling Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/export/export-buckling-analysis-result Export a Buckling Analysis Result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Buckling analysis | [Buckling Result](../../../../block-documentation/types/buckling-result) | Buckling Analysis Result to export. | | Compression | File Compression Enum | The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size or no compression (largest file size). | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Target unit system for the exported grid and data. By default data will be exported in MKS units. | ### Outputs | Type | | - | | [Analysis File Data](../../../../block-documentation/types/analysis-file-data) | # Export Modal Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/export/export-modal-analysis-result Export a Modal Analysis Result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Modal analysis | [Modal Result](../../../../block-documentation/types/modal-result) | Modal Analysis Result to export. | | Compression | File Compression Enum | The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size or no compression (largest file size). | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Target unit system for the exported grid and data. By default data will be exported in MKS units. | ### Outputs | Type | | - | | [Analysis File Data](../../../../block-documentation/types/analysis-file-data) | # Export Static Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/export/export-static-analysis-result Export a Static Analysis Result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Static analysis | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | Static Analysis Result to export. | | Compression | File Compression Enum | The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size or no compression (largest file size). | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Target unit system for the exported grid and data. By default data will be exported in MKS units. | ### Outputs | Type | | - | | [Analysis File Data](../../../../block-documentation/types/analysis-file-data) | # Export Thermal Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/export/export-thermal-analysis-result Export a Thermal Analysis Result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Thermal analysis | [Static Thermal Result](../../../../block-documentation/types/static-thermal-result) | Thermal Analysis Result to export. | | Compression | File Compression Enum | The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size or no compression (largest file size). | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Target unit system for the exported grid and data. By default data will be exported in MKS units. | ### Outputs | Type | | - | | [Analysis File Data](../../../../block-documentation/types/analysis-file-data) | # Export Time Dependent Thermal Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/export/export-time-dependent-thermal-analysis-result Export a Time Dependent Thermal Analysis Result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Time dependent thermal analysis | [Time Dependent Thermal Result](../../../../block-documentation/types/time-dependent-thermal-result) | Time Dependent Thermal Analysis Result to export. | | Compression | File Compression Enum | The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size or no compression (largest file size). | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Target unit system for the exported grid and data. By default data will be exported in MKS units. | ### Outputs | Type | | - | | [Analysis File Data](../../../../block-documentation/types/analysis-file-data) | # Fields Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/fields > **[Stress Thickness Modifier](../../../block-documentation/blocks/design-analysis/fields/stress-thickness-modifier)** > **[Displacement Vector Modifier](../../../block-documentation/blocks/design-analysis/fields/displacement-vector-modifier)** > **[Temperature Thickness Modifier](../../../block-documentation/blocks/design-analysis/fields/temperature-thickness-modifier)** > **[Advanced Stress Thickness Modifier](../../../block-documentation/blocks/design-analysis/fields/advanced-stress-thickness-modifier)** # Advanced Stress Thickness Modifier Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/fields/advanced-stress-thickness-modifier Create a real field that will output a thickness value based on the Von Mises stress results of a static analysis. This advanced version allows the user to supply their own minimum and maximum version of stress values rather than automatically deriving it from the input analysis. ### Inputs | Name | Type | Description | | - | - | - | | Static analysis | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | The input static analysis. | | Min thickness | [Scalar](../../../../block-documentation/types/scalar) | The minimum thickness value that will correlated to the minimum stress value. | | Max thickness | [Scalar](../../../../block-documentation/types/scalar) | The maximum thickness value that will correlated to the maximum stress value. | | Override min stress | [Bool](../../../../block-documentation/types/bool) | An option to override the minimum stress found from the input analysis and use the supplied value instead. | | Supplied min stress | [Scalar](../../../../block-documentation/types/scalar) | The user-defined minimum stress value. | | Override max stress | [Bool](../../../../block-documentation/types/bool) | An option to override the maximum stress found from the input analysis and use the supplied value instead. | | Supplied max stress | [Scalar](../../../../block-documentation/types/scalar) | The user-defined maximum stress value. | | Interpolation | Point Cloud Interpolation Enum (old) | The field interpolation method. | | Extrapolation | Point Cloud Extrapolation Enum | The field extrapolation method. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Displacement Vector Modifier Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/fields/displacement-vector-modifier Create a vector field that will output a displacement based on the nodal displacement results of a static analysis. ### Inputs | Name | Type | Description | | - | - | - | | Static analysis | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | The input static analysis. | | Interpolation | Point Cloud Interpolation Enum (old) | The field interpolation method. | | Extrapolation | Point Cloud Extrapolation Enum | The field extrapolation method. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | # Stress Thickness Modifier Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/fields/stress-thickness-modifier Create a Scalar Field that will output a thickness value based on the Von Mises stress results of a static analysis. ### Inputs | Name | Type | Description | | - | - | - | | Static analysis | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | The input static analysis. | | Min thickness | [Scalar](../../../../block-documentation/types/scalar) | The minimum thickness value that will correlated to the minimum stress value. | | Max thickness | [Scalar](../../../../block-documentation/types/scalar) | The maximum thickness value that will correlated to the maximum stress value. | | Interpolation | Point Cloud Interpolation Enum (old) | The field interpolation method. | | Extrapolation | Point Cloud Extrapolation Enum | The field extrapolation method. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Temperature Thickness Modifier Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/fields/temperature-thickness-modifier Create a Scalar Field that will output a thickness value based on the nodal temperature results of a thermal analysis. ### Inputs | Name | Type | Description | | - | - | - | | Thermal analysis | [Thermal Result](../../../../block-documentation/types/thermal-result) | The input steady-state thermal analysis. | | Min thickness | [Scalar](../../../../block-documentation/types/scalar) | The minimum thickness value that will correlated to the minimum temperature. | | Max thickness | [Scalar](../../../../block-documentation/types/scalar) | The maximum thickness value that will correlated to the maximum temperature. | | Interpolation | Point Cloud Interpolation Enum (old) | The field interpolation method. | | Extrapolation | Point Cloud Extrapolation Enum | The field extrapolation method. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Loads Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/loads > **[Force](../../../block-documentation/blocks/structures/boundary-conditions/force)** > **[Surface Force](../../../block-documentation/blocks/structures/boundary-conditions/surface-force)** > **[Pressure](../../../block-documentation/blocks/structures/boundary-conditions/pressure)** > **[Point Force](../../../block-documentation/blocks/structures/boundary-conditions/point-force)** > **[Point Moment](../../../block-documentation/blocks/structures/boundary-conditions/point-moment)** > **[Acceleration Load](../../../block-documentation/blocks/structures/boundary-conditions/acceleration-load)** > **[Surface Heat Flux](../../../block-documentation/blocks/structures/boundary-conditions/surface-heat-flux)** # Mesh Generation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/mesh-generation > **[FE CAD Solid Mesh](../../../block-documentation/blocks/structures/mesh/fe-cad-solid-mesh)** > **[FE Volume Mesh from Implicit](../../../block-documentation/blocks/design-analysis/mesh-generation/fe-volume-mesh-from-implicit)** > **[FE Tetrahedral Mesh](../../../block-documentation/blocks/design-analysis/mesh-generation/fe-tetrahedral-mesh)** > **[FE Robust Tetrahedral Mesh](../../../block-documentation/blocks/design-analysis/mesh-generation/fe-robust-tetrahedral-mesh)** > **[FE Shell Mesh from CAD](../../../block-documentation/blocks/structures/mesh/fe-shell-mesh-from-cad)** > **[FE Shell Mesh](../../../block-documentation/blocks/design-analysis/mesh-generation/fe-shell-mesh)** > **[FE Lattice Mesh](../../../block-documentation/blocks/structures/mesh/fe-lattice-mesh)** > **[FE Point](../../../block-documentation/blocks/structures/mesh/fe-point)** > **[Mirror FE Mesh](../../../block-documentation/blocks/structures/mesh/mirror-fe-mesh)** > **[Merge FE Meshes](../../../block-documentation/blocks/structures/mesh/merge-fe-meshes)** # FE Robust Tetrahedral Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/mesh-generation/fe-robust-tetrahedral-mesh Create an FE Mesh of solid tetrahedral elements from a domain defined by a closed surface mesh that is known to have defects. This function will remesh the input domain to generate FEA quality elements in the volume. Note that this function is extremely robust and can handle severe defects. Although, the trade-off for this robustness is speed as the algorithm will be noticeably slower than other alternatives. This function is only recommended if the input domain is known to have severe defects. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The input domain defined by a watertight surface mesh. The input surface mesh will be remeshed to obtain FEA quality elements. | | Edge length | [Scalar](../../../../block-documentation/types/scalar) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # FE Shell Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/mesh-generation/fe-shell-mesh > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar](#mesh-scalar-field-surface-mesh-shape-enum-geometric-order-enum-scalar-scalar-scalar)** > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0](#mesh-scalar-field-surface-mesh-shape-enum-geometric-order-enum-scalar-scalar-scalar-110)** > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.2.0](#mesh-scalar-field-surface-mesh-shape-enum-geometric-order-enum-scalar-scalar-scalar-120)** *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar Create an FE Mesh of shell elements from an input surface mesh. This function will remesh the input surface mesh to generate FEA quality elements. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The input domain defined by a watertight surface mesh. The input surface mesh will be remeshed to obtain FEA quality elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a Scalar Field to achieve a spatially varying mesh size. | | Shape | Surface Mesh Shape Enum | The desired element shape. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0 Create an FE Mesh of shell elements from an input surface mesh. This function will remesh the input surface mesh to generate FEA quality elements. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The input domain defined by a watertight surface mesh. The input surface mesh will be remeshed to obtain FEA quality elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a Scalar Field to achieve a spatially varying mesh size. | | Shape | Surface Mesh Shape Enum | The desired element shape. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.2.0 Create an FE Mesh of shell elements from an input surface mesh. This function will remesh the input surface mesh to generate FEA quality elements. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The input domain defined by a watertight surface mesh. The input surface mesh will be remeshed to obtain FEA quality elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a Scalar Field to achieve a spatially varying mesh size. | | Shape | Surface Mesh Shape Enum | The desired element shape. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # FE Tetrahedral Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/mesh-generation/fe-tetrahedral-mesh > **[Mesh, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar](#mesh-scalar-field-geometric-order-enum-scalar-scalar-scalar)** > **[Mesh, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0](#mesh-scalar-field-geometric-order-enum-scalar-scalar-scalar-110)** > **[Mesh, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, 1.2.0](#mesh-scalar-field-geometric-order-enum-scalar-scalar-scalar-120)** *** ## Mesh, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar Create an FE Mesh of solid tetrahedral elements from a domain defined by a closed surface mesh. This function will remesh the input domain to generate FEA quality elements. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The input domain defined by a watertight surface mesh. The input surface mesh will be remeshed to obtain FEA quality elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## Mesh, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0 Create an FE Mesh of solid tetrahedral elements from a domain defined by a closed surface mesh. This function will remesh the input domain to generate FEA quality elements. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The input domain defined by a watertight surface mesh. The input surface mesh will be remeshed to obtain FEA quality elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## Mesh, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, 1.2.0 Create an FE Mesh of solid tetrahedral elements from a domain defined by a closed surface mesh. This function will remesh the input domain to generate FEA quality elements. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The input domain defined by a watertight surface mesh. The input surface mesh will be remeshed to obtain FEA quality elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # FE Volume Mesh from Implicit Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/mesh-generation/fe-volume-mesh-from-implicit Create an FE Mesh of solid tetrahedral elements from an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body to mesh. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size to preserve in the Implicit Body. | | Edge length | [Scalar](../../../../block-documentation/types/scalar) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # Model Assembly Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/model-assembly > **[FE Solid Model](../../../block-documentation/blocks/design-analysis/model-assembly/fe-solid-model)** > **[FE Solid Domain](../../../block-documentation/blocks/design-analysis/model-assembly/fe-solid-domain)** > **[Lattice Domain](../../../block-documentation/blocks/structures/model/lattice-domain)** > **[FE Lattice Connector](../../../block-documentation/blocks/design-analysis/model-assembly/fe-lattice-connector)** # FE Lattice Connector Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/model-assembly/fe-lattice-connector Create an FE Connector, in this case a tie constraint, between a solid and lattice FE Mesh. This is useful when simulating a lattice using beam elements and the connecting structure as a solid. Using the provided lattice region, this function will attempt to automatically find the nodes on the lattice mesh that should be connected to the nearby faces of the solid mesh. Within the tie constraint, the rotational degrees-of-freedom are connected by default. ### Inputs | Name | Type | Description | | - | - | - | | Lattice mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input lattice mesh defined by beam elements. | | Fe volume mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input FE volume mesh. | | Lattice region | [Implicit Body](../../../../block-documentation/types/implicit-body) | The region containing the lattice mesh. This is the body used to automatically detect which nodes of the lattice should be connected to which faces of the solid elements. It is important that this region accurately represent the volumetric body of the lattice. This should typically be the same body used to trim the beam lattice earlier in the workflow. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The search tolerance used when attempting to automatically detect the correct lattice nodes and solid element faces. If the result of this function does not detect all the required nodes, try increasing this tolerance. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | # FE Solid Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/model-assembly/fe-solid-domain Create an FE Domain for a 3-D solid mesh. ### Inputs | Name | Type | Description | | - | - | - | | Fe volume mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input FE Mesh of solid elements. | | Material | [Material](../../../../block-documentation/types/material) | The material for the solid domain. | | Material frame | [Frame](../../../../block-documentation/types/frame) | The material coordinate system. A default frame is provided that aligns with the global coordinate system. This is only used for orthotropic or anisotropic materials. | ### Outputs | Type | | - | | [FE Domain](../../../../block-documentation/types/fe-domain) | # FE Solid Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/model-assembly/fe-solid-model Create an FE Model for a 3-D solid FE mesh. ### Inputs | Name | Type | Description | | - | - | - | | Fe volume mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input FE Mesh of solid elements. | | Material | [Material](../../../../block-documentation/types/material) | The material for the solid model | | Material frame | [Frame](../../../../block-documentation/types/frame) | The material coordinate system. A default frame is provided that aligns with the global coordinate system. This is only used for orthotropic or anisotropic materials. | ### Outputs | Type | | - | | [FE Model](../../../../block-documentation/types/fe-model) | # Restraints Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/restraints > **[FE Fixed Faces](../../../block-documentation/blocks/design-analysis/restraints/fe-fixed-faces)** > **[Displacement Restraint](../../../block-documentation/blocks/structures/boundary-conditions/displacement-restraint)** > **[Temperature Restraint](../../../block-documentation/blocks/structures/boundary-conditions/temperature-restraint)** # FE Fixed Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/restraints/fe-fixed-faces Create a fixed displacement restraint by using a list of CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The input CAD face. The distance to these faces will be the searching criteria for finding restrained entities of the input FE Mesh. | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input FE Mesh to search for restrained entities. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The search tolerance for finding restrained mesh entities. If this function does not detect the desired entities, try increasing this tolerance. | ### Outputs | Type | | - | | [Restraint](../../../../block-documentation/types/restraint) | # Sample Materials Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials > **[Al 6061-T6](../../../block-documentation/blocks/design-analysis/sample-materials/al-6061-t6)** > **[Al 7050-T7451](../../../block-documentation/blocks/design-analysis/sample-materials/al-7050-t7451)** > **[Al 7075-T6](../../../block-documentation/blocks/design-analysis/sample-materials/al-7075-t6)** > **[Al-Si-10Mg](../../../block-documentation/blocks/design-analysis/sample-materials/al-si-10mg)** > **[Inconel 625](../../../block-documentation/blocks/design-analysis/sample-materials/inconel-625)** > **[Inconel 718](../../../block-documentation/blocks/design-analysis/sample-materials/inconel-718)** > **[Ti-6Al-4V](../../../block-documentation/blocks/design-analysis/sample-materials/ti-6al-4v)** > **[Stainless Steel 316](../../../block-documentation/blocks/design-analysis/sample-materials/stainless-steel-316)** # Al 6061-T6 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/al-6061-t6 General Aluminum 6061 characteristics and uses: Excellent joining characteristics, good acceptance of applied coatings. Combines relatively high strength, good workability, and high resistance to corrosion; widely available. The T8 and T9 tempers offer better chipping characteristics over the T6 temper. Reference: matweb.com Density: 2.70 g/cc Elastic modulus: 68.9 GPa Poisson's ratio: 0.33 Conductivity: 167 W/m/K Specific heat: 0.896 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Al 7050-T7451 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/al-7050-t7451 Aluminum 7050 has very high strength coupled with high resistance to exfoliation corrosion and stress-corrosion cracking, high fracture toughness, and fatigue resistance. This leads to applications in aircraft structures. Reference: matweb.com Density: 2.83 g/cc Elastic modulus: 71.7 GPa Poisson's ratio: 0.33 Conductivity: 157 W/m/K Specific heat: 0.86 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Al 7075-T6 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/al-7075-t6 General Aluminum 7075 characteristics and uses: Very high strength material used for highly stressed structural parts. The T7351 temper offers improved stress-corrosion cracking resistance. Reference: matweb.com Density: 2.81 g/cc Elastic modulus: 71.7 GPa Poisson's ratio: 0.33 Conductivity: 130 W/m/K Specific heat: 0.96 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Al-Si-10Mg Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/al-si-10mg A popular aluminum alloy for additive manufacturing. Melting characteristics may prohibit fine feature sizes with powder bed processes. Reference: matweb.com Density: 2.68 g/cc Elastic modulus: 70.0 GPa Poisson's ratio: 0.33 Conductivity: 115 W/m/K Specific heat: 0.92 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Inconel 625 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/inconel-625 Heat-resistant, corrosion-resistant, material for high performance at high temperatures. High weldability enables very fine feature sizes. Properties are annealed. Reference: matweb.com Density: 8.44 g/cc Elastic modulus: 208 GPa Poisson's ratio: 0.28 Conductivity: 9.7 W/m/K Specific heat: 0.41 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Inconel 718 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/inconel-718 Heat-resistant, corrosion-resistant, material for high performance at high temperatures. High weldability enables very fine feature sizes. Properties are annealed. Reference: matweb.com Density: 8.19 g/cc Elastic modulus: 205 GPa Poisson's ratio: 0.284 Conductivity: 11.1 W/m/K Specific heat: 0.435 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Stainless Steel 316 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/stainless-steel-316 General purpose stainless steel. Reference: matweb.com Density: 8.0 g/cc Elastic modulus: 193 GPa Poisson's ratio: 0.28 Conductivity: 16.3 W/m/K Specific heat: 0.5 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Ti-6Al-4V Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/sample-materials/ti-6al-4v General purpose titanium suitable for applications in blades, discs, rings, airframes, fasteners, components, vessels, cases, hubs, forgings, and biomedical implants. Reference: matweb.com Density: 4.43 g/cc Elastic modulus: 113.8 GPa Poisson's ratio: 0.342 Conductivity: 6.7 W/m/K Specific heat: 0.5263 J/g/C ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Selection Sets Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/selection-sets > **[FE Boundary by CAD Face](../../../block-documentation/blocks/design-analysis/selection-sets/fe-boundary-by-cad-face)** > **[FE Region by CAD Body](../../../block-documentation/blocks/design-analysis/selection-sets/fe-region-by-cad-body)** > **[FE Boundary by Flood Fill](../../../block-documentation/blocks/structures/utilities/fe-boundary-by-flood-fill)** # FE Boundary by CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/selection-sets/fe-boundary-by-cad-face Create an FE Boundary of mesh entities using a list of CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The input CAD faces. The distance to these faces will be the searching criteria for finding entities of the input FE Mesh. | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input FE Mesh to search for mesh entities. | | Entity | FE Boundary Enum | The type of mesh entity the boundary output should consist of. | | Reverse | [Bool](../../../../block-documentation/types/bool) | An option to reverse the selected entities. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The search tolerance for finding mesh entities. If this function does not detect the desired entities, try increasing this tolerance. | ### Outputs | Type | | - | | [FE Boundary](../../../../block-documentation/types/fe-boundary) | # FE Region by CAD Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/design-analysis/selection-sets/fe-region-by-cad-body Create an FE Region of mesh elements using a CAD Body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | The input CAD Body. Mesh elements inside the body will be included in the output region. | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input FE Mesh to search for mesh entities. | | Entity | FE Interior Region Enum | The type of element to select in the region. | | Reverse | [Bool](../../../../block-documentation/types/bool) | An option to reverse the selection to be outside the body instead of inside. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The search tolerance for finding mesh elements. If this function does not detect the desired elements, try increasing this tolerance. | ### Outputs | Type | | - | | [FE Region](../../../../block-documentation/types/fe-region) | # Fields Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields ## Remap > **[Remap Field](../../block-documentation/blocks/fields/remap/remap-field)** > **[Remap Cylindrical Field](../../block-documentation/blocks/fields/remap/remap-cylindrical-field)** > **[Remap Spherical Field](../../block-documentation/blocks/fields/remap/remap-spherical-field)** > **[Remap Scale Field](../../block-documentation/blocks/fields/remap/remap-scale-field)** ## Periodic > **[Gyroid Field](../../block-documentation/blocks/fields/periodic/gyroid-field)** > **[Diamond Field](../../block-documentation/blocks/fields/periodic/diamond-field)** > **[Schwarz Field](../../block-documentation/blocks/fields/periodic/schwarz-field)** > **[Lidinoid Field](../../block-documentation/blocks/fields/periodic/lidinoid-field)** > **[SplitP Field](../../block-documentation/blocks/fields/periodic/splitp-field)** > **[Neovius Field](../../block-documentation/blocks/fields/periodic/neovius-field)** ## Noise > **[Simplex Noise 3D](../../block-documentation/blocks/fields/noise/simplex-noise-3d)** > **[Cellular Noise 3D](../../block-documentation/blocks/fields/noise/cellular-noise-3d)** ## Utilities > **[Smoothen Field](../../block-documentation/blocks/fields/utilities/smoothen-field)** > **[Evaluate Field](../../block-documentation/blocks/fields/utilities/evaluate-field)** > **[Evaluate Field Gradient](../../block-documentation/blocks/fields/utilities/evaluate-field-gradient)** > **[Set Bounding Box](../../block-documentation/blocks/modeling/utilities/set-bounding-box)** > **[Angle Field](../../block-documentation/blocks/fields/utilities/angle-field)** > **[Field from Mesh Thickness](../../block-documentation/blocks/fields/utilities/field-from-mesh-thickness)** > **[Field from Point Map](../../block-documentation/blocks/fields/utilities/field-from-point-map)** > **[Radial Basis Field from Point Map](../../block-documentation/blocks/fields/utilities/radial-basis-field-from-point-map)** > **[Point Map](../../block-documentation/blocks/fields/utilities/point-map)** > **[Import Scalar Point Map](../../block-documentation/blocks/fields/utilities/import-scalar-point-map)** > **[Import Vector Point Map](../../block-documentation/blocks/fields/utilities/import-vector-point-map)** > **[Filter Points by Volume](../../block-documentation/blocks/fields/utilities/filter-points-by-volume)** > **[Two Body Field](../../block-documentation/blocks/fields/utilities/two-body-field)** # Noise Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/noise > **[Simplex Noise 3D](../../../block-documentation/blocks/fields/noise/simplex-noise-3d)** > **[Cellular Noise 3D](../../../block-documentation/blocks/fields/noise/cellular-noise-3d)** # Cellular Noise 3D Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/noise/cellular-noise-3d ## About this Block The Cellular Noise 3D block creates a scalar field gradient composed of pseudorandom values, using the Worley noise algorithm. The field generated by the Cellular Noise block is infinite and non-dimensional. ## Example File Download Example: [Cellular Noise 3D](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/CellularNoise3D.ntop) *This file creates a scalar field from a Cellular Noise 3D block, and uses it to Offset a Sphere.* ![Cellular Noise 3D](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/CellularNoise3D.png) *** Create a cellular noise function. ### Inputs | Name | Type | Description | | - | - | - | | Random seed | [Integer](../../../../block-documentation/types/integer) | Random seed value. | | Frequency | [Scalar](../../../../block-documentation/types/scalar) | Affects how coarse the noise output is. | | Jitter | [Scalar](../../../../block-documentation/types/scalar) | Affects how regular the cells are. | | Distance | Noise Distance Enum | Cellular distance function. | | Return type | Noise Return Enum | How to return the distance to n points. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Simplex Noise 3D Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/noise/simplex-noise-3d ## About this Block The Simplex Noise 3D block creates a scalar field gradient composed of pseudorandom values, using the Simplex Noise algorithm. The field generated by the Simplex Noise block is infinite and non-dimensional. ## Example File Download Example: [Simplex Noise 3D](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SimplexNoise3D.ntop) *This file creates a scalar field from a Simplex Noise 3D block and uses it to Offset a Sphere.* ![Simplex Noise 3D](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SimplexNoise3D.png) *** Create a simplex noise function. ### Inputs | Name | Type | Description | | - | - | - | | Random seed | [Integer](../../../../block-documentation/types/integer) | Random seed value. | | Frequency | [Scalar](../../../../block-documentation/types/scalar) | Affects how coarse the noise output is. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Periodic Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/periodic > **[Gyroid Field](../../../block-documentation/blocks/fields/periodic/gyroid-field)** > **[Diamond Field](../../../block-documentation/blocks/fields/periodic/diamond-field)** > **[Schwarz Field](../../../block-documentation/blocks/fields/periodic/schwarz-field)** > **[Lidinoid Field](../../../block-documentation/blocks/fields/periodic/lidinoid-field)** > **[SplitP Field](../../../block-documentation/blocks/fields/periodic/splitp-field)** > **[Neovius Field](../../../block-documentation/blocks/fields/periodic/neovius-field)** # Diamond Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/periodic/diamond-field ## About this Block **What it does:** Creates an unbounded Scalar Field of a dimensionless Diamond Triply Periodic Minimal Surface ([**TPMS**](/block-documentation/blocks/lattices/implicit/tpms.html)). The following equation defines the field: ``` sin(x)*sin(y)*sin(z)+sin(x)*cos(y)*cos(z)+cos(x)*sin(y)*cos(z)+cos(x)*cos(y)*sin(z) = 0 ``` The Cell size input specifies the size of the period for a single repetition in x, y, and z. The amplitude of the distance field scales from -1 to 1 through one period of the pattern. **Common uses:** Scalar Field input for a **Ramp** block. **Tips:** * View the field by using the Field Viewer (hot-key f). * The values in the **Diamond Field** are unitless and do not represent an implicit body. Alternatively, the [**Diamond Body**](/block-documentation/blocks/lattices/periodic/diamond-body.html) block creates a similar field with distance units and an approximate distance field. ![Diamond Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/diamond_field.jpg) *** Create an unbounded Scalar Field of a dimensionless Diamond periodic pattern, with values ranging from -1 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | Size of a single period of the Diamond function. Amplitude is normalized between -1 and +1. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Gyroid Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/periodic/gyroid-field ## About this Block **What it does:** Generates an unbounded field defined by a Gyroid Triply Periodic Minimal Surface ([**TPMS**](/block-documentation/blocks/lattices/implicit/tpms.html)). The gyroid creates two separate congruent paths, separated by a surface twisting in all three axes. The following equation defines the field: ``` sin(x)cos(y) + sin(y)cos(z) + sin(z)cos(z) = 0 ``` The Cell size input specifies the size of the period for a single gyroid repetition in x, y, and z. The amplitude of the distance field scales from -1 to 1 through one period of the pattern. **Common uses:** Scalar Field input for a **Ramp** block. **Tips:** * View the field by using the Field Viewer (hot-key f). * The values in the **Gyroid Field** are unitless and do not represent an implicit body. Alternatively, the [**Gyroid Body**](/block-documentation/blocks/lattices/periodic/gyroid-body.html) block creates a similar field with distance units and an approximate distance field. ![Gyroid Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/gyroid_field.jpg) *** Create an unbounded Scalar Field of a dimensionless Gyroid periodic pattern, with values ranging from -1 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | Size of a single period of the Gyroid function. Amplitude is normalized between -1 and +1. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Lidinoid Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/periodic/lidinoid-field ## About this Block **What it does:** Creates an unbounded Scalar Field defined by a Lidinoid Triply Periodic Minimal Surface ([**TPMS**](/block-documentation/blocks/lattices/implicit/tpms.html)). The following equation defines the field: ``` sin(2*x) * cos(y) * sin(z) + sin(2*y) * cos(z) * sin(x) + sin(2*z) * cos(x) * sin(y) - cos(2*x) * cos(2*y) - cos(2*y) * cos(2*z) - cos(2*z) * cos(2*x) + .3 = 0 ``` The Cell size input specifies the size of the period for a single repetition in x, y, and z. The amplitude of the distance field scales from -1 to 1 through one period of the pattern. **Common uses:** Scalar Field input for a **Ramp** block. **Tips:** * View the field by using the Field Viewer (hot-key f). * The values in the **Lidinoid Field** are unitless and do not represent an implicit body. Alternatively, the [**Lidinoid Body**](/block-documentation/blocks/lattices/periodic/lidinoid-body.html) block creates a similar field with distance units and an approximate distance field. ![Lidinoid Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/lidinoid_field.jpg) *** Create an unbounded Scalar Field of a dimensionless Lidinoid periodic pattern, with values ranging from -1 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | Size of a single period of the Lidinoid function. Amplitude is normalized between -1 and +1. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Neovius Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/periodic/neovius-field ## About this Block **What it does:** Creates an unbounded Scalar Field defined by a Neovius Triply Periodic Minimal Surface ([**TPMS**](/block-documentation/blocks/lattices/implicit/tpms.html)). The following equation defines the field: ``` 3[cos(x) + cos(y) + cos(z)] + 4cos(x)cos(y)cos(z)= 0 ``` The Cell size input specifies the size of the period for a single repetition in x, y, and z. The amplitude of the distance field scales from -1 to 1 through one period of the pattern. **Common uses:** Scalar Field input for a **Ramp** block. **Tips:** * View the field by using the Field Viewer (hot-key f). * The values in the **Neovius Field** are unitless and do not represent an implicit body. Alternatively, the [**Neovius Body**](/block-documentation/blocks/lattices/periodic/neovius-body.html) block creates a similar field with distance units and an approximate distance field. ![SplitP Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/neovius_field.jpg) *** Create an unbounded Scalar Field of a dimensionless Neovius periodic pattern, with values ranging from -1 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | Size of a single period of the Neovius function. Amplitude is normalized between -1 and +1. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Schwarz Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/periodic/schwarz-field ## About this Block **What it does:** Creates an unbounded Scalar Field defined by a Schwarz Triply Periodic Minimal Surface ([**TPMS**](/block-documentation/blocks/lattices/implicit/tpms.html)). The following equation defines the field: ``` cos(x) + cos(y) + cos(z) = 0 ``` The Cell size input specifies the size of the period for a single repetition in x, y, and z. The amplitude of the distance field scales from -1 to 1 through one period of the pattern. **Common uses:** Scalar Field input for a **Ramp** block. **Tips:** * View the field by using the Field Viewer (hot-key f). * The values in the **Schwarz Field** are unitless and do not represent an implicit body. Alternatively, the [**Schwarz Body**](/block-documentation/blocks/lattices/periodic/schwarz-body.html) block creates a similar field with distance units and an approximate distance field. ![Schwarz Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/schwarz_field.jpg) *** Create an unbounded Scalar Field of a dimensionless Schwarz periodic pattern, with values ranging from -1 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | Size of a single period of the Schwarz function. Amplitude is normalized between -1 and +1. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # SplitP Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/periodic/splitp-field ## About this Block **What it does:** Creates an unbounded Scalar Field defined by a SplitP Triply Periodic Minimal Surface ([**TPMS**](/block-documentation/blocks/lattices/implicit/tpms.html)). The following equation defines the field: ``` 1.1*(sin(2*x)*sin(z)*cos(y)+sin(2*y)*sin(x)*cos(z)+sin(2*z)*sin(y)*cos(x))-0.2*(cos(2*x)*cos(2*y)+cos(2*y)*cos(2*z)+cos(2*z)*cos(2*x))-0.4*(cos(2*x) + cos(2*y) +cos(2*z))= 0 ``` The Cell size input specifies the size of the period for a single repetition in x, y, and z. The amplitude of the distance field scales from -1 to 1 through one period of the pattern. **Common uses:** Scalar Field input for a **Ramp** block. **Tips:** * View the field by using the Field Viewer (hot-key f). * The values in the **SplitP Field** are unitless and do not represent an implicit body. Alternatively, the [**SplitP Body**](/block-documentation/blocks/lattices/periodic/splitp-body.html) block creates a similar field with distance units and an approximate distance field. ![SplitP Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/splitp_field.jpg) *** Create an unbounded Scalar Field of a dimensionless SplitP periodic pattern, with values ranging from -1 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | Size of a single period of the SplitP function. Amplitude is normalized between -1 and +1. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Remap Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/remap > **[Remap Field](../../../block-documentation/blocks/fields/remap/remap-field)** > **[Remap Cylindrical Field](../../../block-documentation/blocks/fields/remap/remap-cylindrical-field)** > **[Remap Spherical Field](../../../block-documentation/blocks/fields/remap/remap-spherical-field)** > **[Remap Scale Field](../../../block-documentation/blocks/fields/remap/remap-scale-field)** # Remap Cylindrical Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/remap/remap-cylindrical-field ## About this Block **What it does:** Uses a Remap function to transform a scalar field from XYZ coordinates into cylindrical coordinates. **Tips:** * All Remap-based functions are centered on the world origin. * Use the Y mapping length input to specify the length of the input field to be wrapped about the Cylinder's circumference. ## Example File Download Example: [Remap Fields and Bodies Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_bodies_fields.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_cyl_field_label.jpg) *** Remap a scalar field into a cylindrical space. The only values that will be mapped are values along the positive X-axis, and the Y-axis between -length/2 and +length/2. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Cylindrical Body block. ### Inputs | Name | Type | Description | | - | - | - | | Field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Scalar field to remap. | | Y mapping length | [Scalar](../../../../block-documentation/types/scalar) | The length of the scalar field along the Y-axis to wrap the around the circumference of the cylindrical space. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Remap Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/remap/remap-field > **[Scalar Field, Scalar Field, Scalar Field, Scalar Field](#scalar-field-scalar-field-scalar-field-scalar-field)** > **[Scalar Field, Vector Field, 5.43.0](#scalar-field-vector-field-5430)** *** ## About this Block **What it does:** Redefines the axes on which a scalar field is defined, from the default global X, Y, and Z global axes, to a new set of axes defined in the block's inputs. The block can take in an Implicit Body in the 'Scalar field' input. **Common uses:** * Manipulating Implicit bodies * Mirroring * Arraying * Sectioning and extruding * Putting images on bodies * Spatially-varying shifting and stretching * Warping using Shape Fields **Tips:** * In any scalar field input, we can type X, Y, or Z, which represent the global axes, meaning the following settings reassign the default axes and have no effect on the input object. ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap1.png) * A simple demonstration of remapping, shown below, is to add or subtract a number from one of the axes, which shifts the object by that amount—adding to an axis shifts the body in the reverse direction (an easier way to move a body is to use the Translate Object block). ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap2.png) * You can stretch and compress objects by multiplying the axes by a factor. ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap3.png) * You can modify not just by constant values but also by spatially varying fields. In the example below, we multiply the new X-axis by a factor ranging from 1x to 2x. ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap4.png) * You can perform a wide range of operations on a field or Implicit Body, either by modifying the axes using math blocks like in the examples above or by replacing axes with a new scalar field altogether. Learn more about what you can do with the Remap Field block with [this video in the Knowledge Base.](https://support.ntopology.com/hc/en-us/articles/4408249667731) The corresponding example file is below. ## Example File Download Example: [Remap Field Lesson](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_field_lesson.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_field.jpg) *** ## Scalar Field, Scalar Field, Scalar Field, Scalar Field Remap the values of a field by using separate X, Y, and Z scalar field components for a new evaluation location. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to remap values of. | | X | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to evaluate for the X component of the new evaluation location. | | Y | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to evaluate for the Y component of the new evaluation location. | | Z | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to evaluate for the Z component of the new evaluation location. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar Field, Vector Field, 5.43.0 Remap the values of a field by using a vector field as a coordinate space for a new evaluation location. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to remap values of. | | Coordinate space | [Vector Field](../../../../block-documentation/types/vector-field) | Field to evaluate to obtain XYZ components of the new evaluation location. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Remap Scale Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/remap/remap-scale-field ## About this Block **What it does:** Uses a Remap function to change the size of a Scalar Field according to X, Y, Z scales. **Common uses:** To non-uniformly scale a field. **Tips:** * All Remap-based functions are centered on the world origin. * This block is a custom block, which means it has a workflow of blocks running within it. To see what processes it is running, export the block by right-clicking on it and selecting "Export Block". Open the block to see the workflow beneath. ## Example File Download Example: [Remap Scale Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_scale_field.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/scale_field.jpg) *** Remap a scalar field to scale it in the X, Y, and Z directions. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Scale Body block. ### Inputs | Name | Type | Description | | - | - | - | | Field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Scalar field to remap. | | X scale | [Scalar](../../../../block-documentation/types/scalar) | Scale factor in the X direction. | | Y scale | [Scalar](../../../../block-documentation/types/scalar) | Scale factor in the Y direction. | | Z scale | [Scalar](../../../../block-documentation/types/scalar) | Scale factor in the Z direction. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Remap Spherical Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/remap/remap-spherical-field ## About this Block **What it does:** Uses a Remap function to transform a scalar field from XYZ coordinates into spherical coordinates. **Tips:** * All Remap-based functions are centered on the world origin. * The Y mapping length input specifies the length of the input field to be wrapped about the Sphere's longitudinal circumference. * The Z mapping length input specifies the length of the input field to be wrapped about the Sphere's latitudinal circumference. ## Example File Download Example: [Remap Fields and Bodies Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_bodies_fields.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_cyl_field_label.jpg) *** Remap a scalar field into a spherical space. The only values that will be mapped are values along the positive X-axis, the Y-axis between -length/2 and +length/2, and the positive Z-axis. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Spherical Body block. ### Inputs | Name | Type | Description | | - | - | - | | Field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Scalar field to remap. | | Y mapping length | [Scalar](../../../../block-documentation/types/scalar) | The length of the scalar field along the Y-axis to wrap around the longitudinal circumference of the spherical space. | | Z mapping length | [Scalar](../../../../block-documentation/types/scalar) | The length of the scalar field along the Z-axis to wrap around the latitudinal circumference of the spherical space. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities > **[Smoothen Field](../../../block-documentation/blocks/fields/utilities/smoothen-field)** > **[Evaluate Field](../../../block-documentation/blocks/fields/utilities/evaluate-field)** > **[Evaluate Field Gradient](../../../block-documentation/blocks/fields/utilities/evaluate-field-gradient)** > **[Set Bounding Box](../../../block-documentation/blocks/modeling/utilities/set-bounding-box)** > **[Angle Field](../../../block-documentation/blocks/fields/utilities/angle-field)** > **[Field from Mesh Thickness](../../../block-documentation/blocks/fields/utilities/field-from-mesh-thickness)** > **[Field from Point Map](../../../block-documentation/blocks/fields/utilities/field-from-point-map)** > **[Radial Basis Field from Point Map](../../../block-documentation/blocks/fields/utilities/radial-basis-field-from-point-map)** > **[Point Map](../../../block-documentation/blocks/fields/utilities/point-map)** > **[Import Scalar Point Map](../../../block-documentation/blocks/fields/utilities/import-scalar-point-map)** > **[Import Vector Point Map](../../../block-documentation/blocks/fields/utilities/import-vector-point-map)** > **[Filter Points by Volume](../../../block-documentation/blocks/fields/utilities/filter-points-by-volume)** > **[Two Body Field](../../../block-documentation/blocks/fields/utilities/two-body-field)** # Angle Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/angle-field ## About this Block **What it does:** Creates an angle field from an Implicit Body and a vector input to help you determine if your model needs support structures. **Common uses:** * Visualizing overhang angles and determining the need for support structures for additive manufacturing. * Combine with the **Overhang Constraint** block in topology optimization. **Tips:** * Use the Field Viewer (f) and Probe Values to see what the angles are. ## Example File Download Example: [Angle Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/angle_field.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/angle_field_1.jpg) *** Generates a field that indicates angle with respect to a direction. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to detect the angle with respect to the direction. | | Direction | [Vector](../../../../block-documentation/types/vector) | Vector that corresponds to the direction. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Evaluate Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/evaluate-field > **[Scalar Field, Points](#scalar-field-points)** > **[Scalar Field, Point](#scalar-field-point)** > **[Vector Field, Points](#vector-field-points)** > **[Vector Field, Point](#vector-field-point)** *** ## About this Block **What it does:** Evaluates the field at a specified point (or multiple points) and returns the value as a property within the block. **Common uses:** * Turning a field into a **Point Map**. **Tips:** * To run the block, provide a Field and a Point (or Point List) in which to probe the Field values. * Turn the evaluated field of Point Lists into a **Point Map** to visualize and analyze the results. * Similar to using the Field Viewer with the Probe Values option, but the returned value is a property. ## Example File Download Example: [Evaluate Fields](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/evaluate_field.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/evaluate_field.jpg) *** ## Scalar Field, Points Return the Scalar values at specified locations of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Scalar Field to evaluate. | | Points | [Point List](../../../../block-documentation/types/point) | Locations to evaluate. | ### Outputs | Type | | - | | [Scalar List](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Point Return the Scalar value at a specified location of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Scalar Field to evaluate. | | Point | [Point](../../../../block-documentation/types/point) | Location to evaluate. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Vector Field, Points Return the Vector values at specified locations of a Vector Field. ### Inputs | Name | Type | Description | | - | - | - | | Vector field | [Vector Field](../../../../block-documentation/types/vector-field) | Vector Field to evaluate. | | Points | [Point List](../../../../block-documentation/types/point) | Locations to evaluate. | ### Outputs | Type | | - | | [Vector List](../../../../block-documentation/types/vector) | *** ## Vector Field, Point Return the Vector value at a specified location of a Vector Field. ### Inputs | Name | Type | Description | | - | - | - | | Vector field | [Vector Field](../../../../block-documentation/types/vector-field) | Vector Field to evaluate. | | Point | [Point](../../../../block-documentation/types/point) | Location to evaluate. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | # Evaluate Field Gradient Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/evaluate-field-gradient > **[Scalar Field, Points](#scalar-field-points)** > **[Scalar Field, Point](#scalar-field-point)** *** ## About this Block **What it does:** Returns a Vector that represents the rate of change along a Scalar Field at a specific location. **Common uses:** * Turning a field into a Vector **Point Map**. **Tips:** * To run the block, provide a Field and a Point (or Point List) in which to probe the Field values. * Turn the evaluated field gradient of Point Lists into a **Point Map** to visualize and analyze the results. * Similar to using the Field Viewer with the Probe Values option, but the returned value is a property. ## Example File Download Example: [Evaluate Fields](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/evaluate_field.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/evaluate_field.jpg) *** ## Scalar Field, Points Evaluate the gradient of a scalar field at specific locations. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to evaluate. | | Points | [Point List](../../../../block-documentation/types/point) | Locations to evaluate. | ### Outputs | Type | | - | | [Vector List](../../../../block-documentation/types/vector) | *** ## Scalar Field, Point Evaluate the gradient of a scalar field at a specific location. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to evaluate. | | Point | [Point](../../../../block-documentation/types/point) | Location to evaluate. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | # Field from Mesh Thickness Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/field-from-mesh-thickness ## About this Block **What it does:** Measures the thickness of a Mesh and creates a Scalar Field of the values. Mesh thickness is defined as twice the distance from a point on the Mesh's medial axis to its surface. This block only supports objects with medial axes. Spheres and other objects with degenerate meidal axes are not supported. **Common uses:** * Evaluating a model's local feature size or wall thickness. **Tips:** * Create a **Point Map** from the field to help evaluate the approximate wall thickness of your mesh. ## Example File Download Example: [Field from Mesh Thickness](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/field_from_mesh_thickness.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/field_mesh.jpg) *** Measures the thickness of a Mesh and creates a Scalar Field of the values. The thickness of a Mesh is defined as twice the distance from a point on its medial axis to the surface. Only Meshes with non-degenerate medial axes are supported. Meshes with a degenerate medial axis, such as a sphere, may give unexpected results. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to extract thickness values from. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Field from Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/field-from-point-map > **[Scalar Point Map, Point Cloud Interpolation Enum (old), Point Cloud Extrapolation Enum](#scalar-point-map-point-cloud-interpolation-enum-old-point-cloud-extrapolation-enum)** > **[Scalar Point Map, Point Cloud Interpolation Enum, 1.1.0](#scalar-point-map-point-cloud-interpolation-enum-110)** > **[Temperature Point Map, Point Cloud Interpolation Enum (old), Point Cloud Extrapolation Enum](#temperature-point-map-point-cloud-interpolation-enum-old-point-cloud-extrapolation-enum)** > **[Temperature Point Map, Point Cloud Interpolation Enum, 1.1.0](#temperature-point-map-point-cloud-interpolation-enum-110)** > **[Vector Point Map, Point Cloud Interpolation Enum (old), Point Cloud Extrapolation Enum](#vector-point-map-point-cloud-interpolation-enum-old-point-cloud-extrapolation-enum)** > **[Vector Point Map, Point Cloud Interpolation Enum, 1.1.0](#vector-point-map-point-cloud-interpolation-enum-110)** *** ## About this Block **What it does:** Creates a field interpolated from Point Map data. The block creates a Scalar Field from an imported Scalar Point Map, or a Vector Field from a Vector Point Map. **Common uses:** * Converting simulation results into a field (which enables you to edit your part with the simulation results). **Tips:** * View the field using the Field Viewer (f). * If the point map is collinear or coplanar, the block will not interpolate a field, and only extrapolate. The interpolation and extrapolation methods are described below: **Interpolation** * Linear: Values in between points are linearly scaled from the values of the nearest points. * Natural: Values in between points are scaled while considering the nearest points and points further out, to smoothen out the interpolation. * Nearest: Values maintain the exact value of the nearest point. * Barycentric: Values are interpolated linearly from the three closest points, which define a tetrahedral. This method is recommended for point maps extracted from tetrahedral mesh, like **Von Mises Stress Point Map** or **Temperature Point Map**. ![Interpolation](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/interpolation1.jpg) **Extrapolation** * Nearest: Values match the values at the end of the extrapolation region and extend outward with that value. * Linear: Values scale outward from the trend of values of the field as it reaches the extrapolation region. * Exponential: Values scale outward while considering the trend of multiple points sampled inward into the interpolation region. * None: Outside of the interpolation region, the values are set to zero. ## Example File Download Example: [Field from Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_map.ntop) ![Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/field_pointmap.jpg) *** ## Scalar Point Map, Point Cloud Interpolation Enum (old), Point Cloud Extrapolation Enum Create a Scalar Field from a map of points and value data. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | Map of points list and values | | Interpolation | Point Cloud Interpolation Enum (old) | Interpolation method | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar Point Map, Point Cloud Interpolation Enum, 1.1.0 Create a Scalar Field from a map of points and value data. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | Map of points list and values | | Interpolation | Point Cloud Interpolation Enum | Interpolation method | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Temperature Point Map, Point Cloud Interpolation Enum (old), Point Cloud Extrapolation Enum Create a Temperature Field from a map of points and value data. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | Map of points list and values | | Interpolation | Point Cloud Interpolation Enum (old) | Interpolation method | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Temperature Field](../../../../block-documentation/types/temperature-field) | *** ## Temperature Point Map, Point Cloud Interpolation Enum, 1.1.0 Create a Temperature Field from a map of points and value data. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | Map of points list and values | | Interpolation | Point Cloud Interpolation Enum | Interpolation method | ### Outputs | Type | | - | | [Temperature Field](../../../../block-documentation/types/temperature-field) | *** ## Vector Point Map, Point Cloud Interpolation Enum (old), Point Cloud Extrapolation Enum Create a Vector Field from a map of points and value data. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | Map of points list and values | | Interpolation | Point Cloud Interpolation Enum (old) | Interpolation method | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## Vector Point Map, Point Cloud Interpolation Enum, 1.1.0 Create a Vector Field from a map of points and value data. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | Map of points list and values | | Interpolation | Point Cloud Interpolation Enum | Interpolation method | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | # Filter Points by Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/filter-points-by-volume > **[Points, Implicit Body, Choice](#points-implicit-body-choice)** > **[Scalar Point Map, Implicit Body, Choice](#scalar-point-map-implicit-body-choice)** > **[Vector Point Map, Implicit Body, Choice](#vector-point-map-implicit-body-choice)** *** ## About this Block **What it does:** Filters points from a list that intersect with a specified volume. The result can be within the volume, outside of the volume, or any points lying on the boundary. **Common Uses:** * Choosing locations for perforations or removing perforations (points) near the edges of parts. **Tips:** * Can filter Point lists, Scalar Point Maps, and Vector Point Maps. * Open up the block by using "Export Block" to see how the workflow under the hood is created. ## Example File Download Example: [Filter Points by Volume](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filter_volume.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filter_by_volume.jpg) *** ## Points, Implicit Body, Choice Filters a list of points to retain those either inside, outside, or along the boundary of a implicit body and returns a point list of those satisfying the criteria. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | The points that will be filtered. | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Volume to perform the filtering with. | | Region | [Choice](../../../../block-documentation/types/choice) | The region of points to retain via filtering. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | *** ## Scalar Point Map, Implicit Body, Choice Filters a scalar point map to retain those either inside, outside, or along the boundary of a implicit body and returns a scalar point map of those satisfying the criteria. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | The point map that will be filtered. | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Volume to perform the filtering with. | | Region | [Choice](../../../../block-documentation/types/choice) | The region of points to retain via filtering. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | *** ## Vector Point Map, Implicit Body, Choice Filters a vector point map to retain those either inside, outside, or along the boundary of a implicit body and returns a vector point map of those satisfying the criteria. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | The point map that will be filtered. | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Volume to perform the filtering with. | | Region | [Choice](../../../../block-documentation/types/choice) | The region of points to retain via filtering. | ### Outputs | Type | | - | | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | # Import Scalar Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/import-scalar-point-map ## About this Block **What it does:** Imports external data from a source .csv file into a Scalar Point Map. The .csv file needs to contain lines of four scalar numbers separated by commas. The first three numbers in the row define the position of a point, and the last number defines a vector assigned to that point. You can generate the input .csv file from external CAD software, spreadsheet software, or a scripting language like MATLAB or Python. The input file must be a .csv, but .xls, .txt, or other readable file formats can be saved as .csv before importing. **Tips:** * The Units input specifies the length units that you assign to the points. * The Scale input allows you to scale the values (the 4th column in the file) by a scalar number and optionally, specify units. * The .csv file should not contain units, but units can be assigned to the input value by Scale input. ## Example File Download Example: [Import Scalar Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportScalarPointMap.ntop) Download CSV: [Import Scalar Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportScalarPointMap.csv) *In this example, a scalar point map is imported, and the values have been given a unit (Newtons) by using a Scale input of 1 N.* ![Import Scalar Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportScalarPointMap.jpg) *** Import scalar point map data from a CSV file. Each row of the source file should be formatted as "x, y, z, s." ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The source file. | | Units | Length Unit Enum | The units of the points in the source file. | | Scale | [Scalar Field](../../../../block-documentation/types/scalar-field) | A scale factor to apply to the source data. Units can also be assigned with this input. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | # Import Vector Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/import-vector-point-map ## About this Block **What it does:** Imports external data from a source .csv file into a Vector Point Map. The .csv file needs to contain lines of six scalar numbers separated by commas. The first three numbers in the row define the position of a point, and the last three numbers define a vector assigned to that point. You can generate the input .csv file from external CAD software, spreadsheet software, or a scripting language like MATLAB or Python. The input file must be a .csv, but .xls, .txt, or other readable file formats can be saved as .csv before importing. **Tips:** * The Units input specifies the length units that you assign to the points. * The Scale input allows you to scale the vector by a scalar number and set its units if needed. * The .csv file should not contain units, but units can be assigned to the vector by the Scale input. ## Example File Download Example: [Import Vector Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportVectorPointMap.ntop) Download CSV: [Import Vector Point Map](/ExtendedBlockDocs/ImportVectorPointMap.csv) ![Import Vector Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportVectorPointMap.jpg) *** Import vector point map data from a CSV file. Each row of the source file should be formatted as "x, y, z, u, v, w." ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The source file. | | Units | Length Unit Enum | The units of the points in the source file. | | Scale | [Scalar Field](../../../../block-documentation/types/scalar-field) | A scale factor to apply to the source data. Units can also be assigned with this input. | ### Outputs | Type | | - | | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | # Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/point-map > **[Points, Values](#points-values)** > **[Points, Values](#points-values)** > **[Points, Values](#points-values)** *** ## About this Block **What it does:** Assigns values, in scalar, vector, or temperature formats, to locations in space defined by a Point list. The block takes in a Point list and a Value list. The first point in the Point list is assigned the first value from the Value list. This pattern repeats for all remaining points and values. **Common uses:** * Useful for creating a 3D representation of sampled discrete data, such as Stress, Displacement, Temperature, or any other compatible data type. **Tips:** * The Point and Values list size must be equal to ensure every point is assigned a value. Values must also be of the same units and type. * This block has a separate type for temperature versus scalar data because temperature (in Kelvin) represents an absolute temperature, while scalars are relative. * Point Maps can be extracted from simulation results, imported and outputted as CSV text files, and created by manually entering point lists and value lists. Point maps have a dedicated visualization system, which appears when the Point map block is visible. The values for each point are color mapped between a lower and upper bound. You can edit the lower and upper bounds, which hides values that are below and above the bounds, respectively. The Temperature Point Map has a simulation visualization system. Vector Point maps use arrows representing the vector length and direction placed in their respective point locations. ![Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pointmap.gif) ## Example File Download Example: [Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_map.ntop) *** ## Points, Values Create a Point Map by assigning a list of Scalars to a list of Points of the same length. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | lists of points | | Values | [Scalar List](../../../../block-documentation/types/scalar) | lists of values | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | *** ## Points, Values Create a Point Map by assigning a list of Temperatures to a list of Points of the same length. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | lists of points | | Values | [Temperature List](../../../../block-documentation/types/temperature) | lists of values | ### Outputs | Type | | - | | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | *** ## Points, Values Create a Point Map by assigning a list of Vectors to a list of Points of the same length. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | lists of points | | Values | [Vector List](../../../../block-documentation/types/vector) | lists of values | ### Outputs | Type | | - | | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | # Radial Basis Field from Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/radial-basis-field-from-point-map > **[Scalar Point Map, Scalar, 1.2.0](#scalar-point-map-scalar-120)** > **[Scalar Point Map, Scalar, Point Cloud Extrapolation Enum](#scalar-point-map-scalar-point-cloud-extrapolation-enum)** > **[Scalar Point Map, Scalar, Point Cloud Extrapolation Enum, 1.1.0](#scalar-point-map-scalar-point-cloud-extrapolation-enum-110)** > **[Temperature Point Map, Scalar, 1.2.0](#temperature-point-map-scalar-120)** > **[Temperature Point Map, Scalar, Point Cloud Extrapolation Enum](#temperature-point-map-scalar-point-cloud-extrapolation-enum)** > **[Temperature Point Map, Scalar, Point Cloud Extrapolation Enum, 1.1.0](#temperature-point-map-scalar-point-cloud-extrapolation-enum-110)** > **[Vector Point Map, Scalar, 1.2.0](#vector-point-map-scalar-120)** > **[Vector Point Map, Scalar, Point Cloud Extrapolation Enum](#vector-point-map-scalar-point-cloud-extrapolation-enum)** > **[Vector Point Map, Scalar, Point Cloud Extrapolation Enum, 1.1.0](#vector-point-map-scalar-point-cloud-extrapolation-enum-110)** *** ## About this Block **What it does:** Creates a smooth field from a point map by using a Radial Basis Interpolation. **Common uses:** * When the interpolation options from **Field from Point Map** aren't creating the results you want. **Tips:** * Has the same extrapolation options as [**Field from Point Map**](/block-documentation/blocks/fields/utilities/field-from-point-map.html). * The factor controls the size of the neighborhood that influences the field at a point. A lower factor enables a larger neighborhood, while a higher factor does the opposite. * The image below shows the effect a low and high factor value has on the interpolation of the field. ![Interpolation](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/radial.png) ## Example File Download Example: [Radial Basis Field from Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_map.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/radial_basis.jpg) *** ## Scalar Point Map, Scalar, 1.2.0 Create a Scalar Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar Point Map, Scalar, Point Cloud Extrapolation Enum Create a Scalar Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar Point Map, Scalar, Point Cloud Extrapolation Enum, 1.1.0 Create a Scalar Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Temperature Point Map, Scalar, 1.2.0 Create a Temperature Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | ### Outputs | Type | | - | | [Temperature Field](../../../../block-documentation/types/temperature-field) | *** ## Temperature Point Map, Scalar, Point Cloud Extrapolation Enum Create a Temperature Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Temperature Field](../../../../block-documentation/types/temperature-field) | *** ## Temperature Point Map, Scalar, Point Cloud Extrapolation Enum, 1.1.0 Create a Temperature Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Temperature Field](../../../../block-documentation/types/temperature-field) | *** ## Vector Point Map, Scalar, 1.2.0 Create a Vector Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## Vector Point Map, Scalar, Point Cloud Extrapolation Enum Create a Vector Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## Vector Point Map, Scalar, Point Cloud Extrapolation Enum, 1.1.0 Create a Vector Field from a map of points and value data using radial basis interpolation. ### Inputs | Name | Type | Description | | - | - | - | | Point map | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | Map of points list and values | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor that scales radius support region | | Extrapolation | Point Cloud Extrapolation Enum | Extrapolation method | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | # Smoothen Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/smoothen-field ## About this Block **What it does:** Inputs any Scalar Field and uses a Gaussian Blur function to smooth values in the field. **Common uses:** * Smoothening fields from topology optimization results * Blurring fields for textures **Tips:** * Requires a field discretization, which uses the Grid Size input as a modifier. Grid Size represents the spacing between each sample point. Smaller Grid Size values return a Scalar Field that captures finer detail but takes longer to compute. * The number of iterations contributes to both the overall smoothness and computation time. * The iterations control how many times it applies the Gaussian smoothing algorithm to the input Scalar Field ## Example File Download Example: [Smoothen Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/smoothen_field.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/smoothen_field.jpg) *** Smoothen a field with a Gaussian image kernel. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to smooth. | | Grid size | [Scalar](../../../../block-documentation/types/scalar) | Size of the sampled grid spacing. | | Smooth iterations | [Integer](../../../../block-documentation/types/integer) | Number of smoothing iterations. | | Interpolation type | Interpolation Enum | Interpolation type. | | Domain | [Bounding Box](../../../../block-documentation/types/bounding-box) | Optional bounding box to specify the region of the field to smoothen. If no domain is specified, it will attempt to smoothen with the input field's bounding box. Note that if the field's bounding box is too large, the algorithm may take a long time to run. | | Extrapolation | Blending Side Enum | Specifies the smoothing region when a Domain is provided. Select inside to fully constrain the smoothing to within the Domain, and select Outside to extend the smoothing outside of the Domain input. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Two Body Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fields/utilities/two-body-field Generate a two body interpolation field from two implicits. ### Inputs | Name | Type | Description | | - | - | - | | Implicit a | [Scalar Field](../../../../block-documentation/types/scalar-field) | The first implicit. Values of the resulting field will be equal to -1 at the surface of this implicit. | | Implicit b | [Scalar Field](../../../../block-documentation/types/scalar-field) | The second implicit. Values of the resulting field will be equal to 1 at the surface of this implicit. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Fluids Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids ## Analysis > **[Flow Analysis](../../block-documentation/blocks/fluids/analysis/flow-analysis)** ## Model > **[Simulation Model](../../block-documentation/blocks/structures/model/simulation-model)** > **[Fluid Domain](../../block-documentation/blocks/fluids/model/fluid-domain)** ## Material Information > **[Air](../../block-documentation/blocks/fluids/material-information/air)** > **[Water](../../block-documentation/blocks/fluids/material-information/water)** > **[Isotropic Material](../../block-documentation/blocks/structures/material-attributes/isotropic-material)** > **[Isotropic Fluid Property](../../block-documentation/blocks/fluids/material-information/isotropic-fluid-property)** > **[Isotropic Porous Medium Property](../../block-documentation/blocks/fluids/material-information/isotropic-porous-medium-property)** > **[Fluid Attribute](../../block-documentation/blocks/fluids/material-information/fluid-attribute)** ## Boundary Conditions > **[Pressure](../../block-documentation/blocks/structures/boundary-conditions/pressure)** > **[Velocity](../../block-documentation/blocks/structures/boundary-conditions/velocity)** ## Utilities > **[Virtual Region by Body](../../block-documentation/blocks/structures/utilities/virtual-region-by-body)** > **[Virtual Boundary by Body](../../block-documentation/blocks/structures/utilities/virtual-boundary-by-body)** > **[Flow Analysis Results on Boundary](../../block-documentation/blocks/fluids/utilities/flow-analysis-results-on-boundary)** > **[Filter Cell Region](../../block-documentation/blocks/fluids/utilities/filter-cell-region)** > **[Streamline](../../block-documentation/blocks/fluids/utilities/streamline)** ## Exchange > **[Import CFD Analysis Result](../../block-documentation/blocks/fluids/exchange/import-cfd-analysis-result)** > **[Export CFD Analysis Result](../../block-documentation/blocks/fluids/exchange/export-cfd-analysis-result)** > **[Export FE Mesh to CFD](../../block-documentation/blocks/fluids/exchange/export-fe-mesh-to-cfd)** > **[CFD Boundary on FE Mesh](../../block-documentation/blocks/fluids/exchange/cfd-boundary-on-fe-mesh)** > **[Velocity Point Map](../../block-documentation/blocks/structures/exchange/velocity-point-map)** > **[Pressure Point Map](../../block-documentation/blocks/structures/exchange/pressure-point-map)** > **[Temperature Point Map](../../block-documentation/blocks/structures/exchange/temperature-point-map)** # Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/analysis > **[Flow Analysis](../../../block-documentation/blocks/fluids/analysis/flow-analysis)** # Flow Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/analysis/flow-analysis ## About this Block **What it does:** The **Flow Analysis** block calculates time-averaged and instantaneous pressure and velocity fields using the Lattice Boltzmann Method (LBM). The Lattice Boltzmann Method (LBM) is a numerical approach that simulates fluid flow by the evolution of particle distribution functions. It recovers the Navier-Stokes equations with a mesoscopic model where particle distribution functions propagate and collide on a voxel grid. The method operates directly on implicit geometry definitions without generating body-fitted meshes. Its high parallel efficiency makes it ideal for GPU computation and large-scale simulations. *Note: This block requires an NVIDIA GPU* **Common uses:** * Predicting Pressure drop across complex geometries to minimize energy losses and optimize system designs. * Simulating laminar, turbulent, and transitional flow regimes for comprehensive and accurate flow behavior analysis. * Identifying unequal flow distributions, recirculation zones, and vortex structures to improve flow efficiency and system reliability. * Calculating maximum flow velocity to detect critical high-speed zones and prevent erosion or mechanical failure. * Detecting blockages and inefficiencies in flow paths to enhance fluid distribution and reduce pressure losses. **Tips:** * Ensure that these requirements are met for the block to run * The Boundary Conditions must contain at least one **Pressure** and **Velocity** Boundary condition. * The **Virtual Model** must contain a **Fluid Domain** with a **Fluid Attribute**. * The Fluid properties and density are specified with the Isotropic Material input to the **Fluid Attribute** block, whereas the Fluid's kinematic viscosity is specified within th Isotopic Fluid Property. Kinematic viscosity is calculated as dynamic viscosity divided by fluid density. * Every remaining boundary not defined as a **Velocity** or **Pressure** boundary is set to a no-slip boundary condition. * The **Pressure** boundary serves as a reference value for system pressure. The simulation only considers pressure differences, so setting the pressure at an outlet to zero is the simplest approach and gives correct results if the fluid density corresponds to the static pressure level expected in the system. * The **Velocity** at an inlet is given as a vector in global space. The magnitude of the velocity can be determined by dividing a volume flow rate by the inlet boundary area. **Routine Options:** The solver operates in sequential stages. The **Routine** option effectively tells the solver when to stop its progression: * **Cell Regions:** Translates continuous geometry into a discrete voxel grid and stops before any physics calculations, resulting in a cell region distribution before a real run. * **Potential Flow:** Runs the mesh generation plus a fast, simplified physics calculation (Laplace equation) to establish a starting guess. Best for debugging boundary conditions and ensuring the flow path is connected from inlet to outlet without waiting for a heavy solve. * **Full Analysis (Default):** Runs the entire pipeline — meshing, initialization, and the full Lattice Boltzmann Method iteration until steady state. Best for getting your final, complete CFD results. **Tips of Cell Size:** * The flow analysis uses a uniform Cartesian mesh, defined by a single parameter: Cell Size. * For quantitative results, use at least seven cells to resolve the smallest flow diameter, gap, or hole; for turbulent boundary layers, 20+ cells are recommended. * At least **3** cells should resolve the smallest flow features for qualitative results. ![Smallest Flow Feature](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/flowanalysis_1.png) * Solid structures should be resolved with at least 2 cells. ![Solid Structures](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/flowanalysis_2.png) * Memory estimation: Ten million cells require approximately one GB of dedicated GPU memory. The following calculation provides a conservative estimate of the required GPU memory (in GB). Note that a Conjugate Heat Transfer Analysis requires approximately 40% additional memory. ![Memory Estimation](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/memory_estimation.png) **Further Notes on Transient Simulations:** * The Lattice Boltzmann Method (LBM) is transient by nature and uses a time-stepping solution scheme. * The simulation runs until the results become statistically steady-state or reach a maximum time. * The HUD and block properties include the time-averaged and instantaneous results from the last time step. The instantaneous result is the first field, and the time-averaged result is the second field. * The instantaneous velocity and pressure fields capture all unsteady fluctuations at a given moment, including turbulence structures. * The time-averaged fields smooth out these fluctuations by averaging over time, revealing the mean flow structure. **Tips for resolving errors** * Fluid solver diverged: The numerical solver can diverge for multiple reasons, such as incorrect boundary conditions, initial conditions, or cell size input. Please check your setup and modify these parameters to ensure they are correct. * Voxelization fails for the implicit body in boundary condition list element X: The boundary condition is set up incorrectly. Please check to ensure the boundary condition is selected correctly. ## Example ![Flow Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/flow_analysis.png) [Example File](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/flow_analysis.ntop) *** Calculates the pressure and velocity on a Virtual Model. The solution uses a Lattice Boltzmann Method. A transient simulation is initiated and continues until the flow reaches a statistically steady state, then returns time-averaged pressure and velocity fields. Streamlines will be calculated on the time averaged velocity results. This block requires an NVIDIA GPU. ### Inputs | Name | Type | Description | | - | - | - | | Model | [Virtual Model](../../../../block-documentation/types/virtual-model) | The Virtual Model representing the fluid domains to be simulated. | | Boundary conditions | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The Boundary Conditions to be used for the analysis. At least one Pressure and one Velocity Boundary condition are required. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The size of the cells used in the analysis. | | Routine | [Choice](../../../../block-documentation/types/choice) | The solver operates in sequential stages. The Routine option effectively tells the solver when to stop its progression:
 | | Cell Regions: Translates continuous geometry into a discrete voxel grid and stops before any physics calculations, resulting in a cell region distribution. Best for visually validating voxel resolution and boundary region assignments before a real run.
 | | | | Potential Flow: Runs the mesh generation plus a fast, simplified physics calculation (Laplace equation) to establish a starting guess. Best for debugging boundary conditions and ensuring the flow path is connected from inlet to outlet without waiting for a heavy solve.
 | | | | Full Analysis (Default): Runs the entire pipeline — meshing, initialization, and the full Lattice Boltzmann Method iteration until steady state. Best for getting your final, complete CFD results. | | | ### Outputs | Type | | - | | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | # Boundary Conditions Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/boundary-conditions > **[Pressure](../../../block-documentation/blocks/structures/boundary-conditions/pressure)** > **[Velocity](../../../block-documentation/blocks/structures/boundary-conditions/velocity)** # Exchange Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/exchange > **[Import CFD Analysis Result](../../../block-documentation/blocks/fluids/exchange/import-cfd-analysis-result)** > **[Export CFD Analysis Result](../../../block-documentation/blocks/fluids/exchange/export-cfd-analysis-result)** > **[Export FE Mesh to CFD](../../../block-documentation/blocks/fluids/exchange/export-fe-mesh-to-cfd)** > **[CFD Boundary on FE Mesh](../../../block-documentation/blocks/fluids/exchange/cfd-boundary-on-fe-mesh)** > **[Velocity Point Map](../../../block-documentation/blocks/structures/exchange/velocity-point-map)** > **[Pressure Point Map](../../../block-documentation/blocks/structures/exchange/pressure-point-map)** > **[Temperature Point Map](../../../block-documentation/blocks/structures/exchange/temperature-point-map)** # CFD Boundary on FE Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/exchange/cfd-boundary-on-fe-mesh Identifies a CFD boundary on an FE mesh which then can be exported to an external CFD file format. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | Element set on which the CFD boundary should be applied. | | Type | CFD Boundary Enum | CFD boundary type. Parameters of the boundary condition are specified in the external CFD application. | | Name | [Text](../../../../block-documentation/types/text) | The name of the boundary zone in the exported mesh file. | ### Outputs | Type | | - | | [CFD Boundary](../../../../block-documentation/types/cfd-boundary) | # Export CFD Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/exchange/export-cfd-analysis-result Export a CFD Analysis Result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Cfd analysis result | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | CFD Analysis Result to export. | | Compression | File Compression Enum | The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size or no compression (largest file size). | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Target unit system for the exported grid and data. By default data will be exported in MKS units. | ### Outputs | Type | | - | | [Analysis File Data](../../../../block-documentation/types/analysis-file-data) | # Export FE Mesh to CFD Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/exchange/export-fe-mesh-to-cfd Exports an FE mesh and optional CFD boundary zones to an external CFD file format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported CFD mesh file. | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The mesh to export. | | Units | Length Unit Enum | The target units. | | Boundaries | [CFD Boundary List](../../../../block-documentation/types/cfd-boundary) | The CFD boundary conditions to export with the mesh. | | Wall name | [Text](../../../../block-documentation/types/text) | The name of the exterior regions of the mesh that do not have user-defined boundary conditions. These regions will be named 'default\_exterior' if this input is empty. | ### Outputs | Type | | - | | [FE Mesh File Data](../../../../block-documentation/types/fe-mesh-file-data) | # Import CFD Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/exchange/import-cfd-analysis-result > **[Path, Path, Unit System](#path-path-unit-system)** > **[Path, Unit System](#path-unit-system)** *** ## About this Block **What it does:** Imports structured simulation result files from disk. VTK file formats (`.vtk`, `.vtu`) have the most comprehensive feature coverage and are recommended for simulation data exchange. Other file formats may behave differently from what the tips below describe. **Common uses:** * Importing results from external solvers. * Importing ML inference outputs. ## Block Types and Field Schemas Each import block defines a schema of expected fields (for example, displacement, stress, temperature). When a VTK file is loaded, nTop matches the data arrays in the file against this schema using name-based substring matching, assembles the results, and applies unit conversion. ### Import Static Structural Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | strain principal | min, mid, max | Vector-3 | — | | strain | xx, yy, zz, xy, yz, xz | Tensor-6 | — | | stress von\_mises | — | Scalar-1 | M L⁻¹ T⁻² | | stress principal | min, mid, max | Vector-3 | M L⁻¹ T⁻² | | stress | xx, yy, zz, xy, yz, xz | Tensor-6 | M L⁻¹ T⁻² | | reaction force | x, y, z | Vector-3 | M L T⁻² | Where multiple field labels share a common substring (for example, `stress von_mises`, `stress principal`, `stress`), the table order reflects the matching priority — more specific labels are listed first. See the Label Priority section below for details. ### Import Time Dependent Structural Result (.vtk, .vtu) All fields from Import Static Structural Result, plus: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | velocity | x, y, z | Vector-3 | L T⁻¹ | | acceleration | x, y, z | Vector-3 | L T⁻² | ### Import Static Thermal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | heat flux | x, y, z | Vector-3 | M T⁻³ | | temperature | — | Scalar-1 | Θ | | thermal reaction flux | — | Scalar-1 | M T⁻³ | ### Import Time Dependent Thermal Result (.vtk, .vtu) Same fields as Import Static Thermal Result. ### Import Modal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | eigen frequency | — | Field Data — Modes | T⁻¹ | ### Import Buckling Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | load factor | — | Field Data — Modes | — | ### Import CFD Analysis Result (.vtk, .vtu, .vti) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | density | — | Scalar-1 | M L⁻³ | | force | x, y, z | Vector-3 | M L T⁻² | | pressure | — | Scalar-1 | M L⁻¹ T⁻² | | temperature | — | Scalar-1 | Θ | | velocity | x, y, z | Vector-3 | L T⁻¹ | VTI-only fields: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | cell region | — | Scalar-1 | — | | implicit field | — | Scalar-1 | L | ## Data Array Matching nTop identifies importable fields by matching VTK data array names against the known field labels for each block type. ### Array Name Matching Matching checks whether the array name **contains** the field label as a substring. Before comparison, all underscores are replaced with spaces in both the array name and the field label, and matching is case-insensitive. For example, given the field label `displacement`: * `displacement` → match * `Displacement` → match * `my_displacement_results` → match (contains `displacement` after underscore replacement) * `nodal_displacement_field` → match * `disp` → no match ### Label Priority When an array name could match multiple field labels, a fixed priority order applies — more specific labels are checked before less specific ones. For stress-related fields the priority is: 1. `stress von_mises` (Scalar-1) 2. `stress principal` (Vector-3) 3. `stress` (Tensor-6) An array named `stress_von_mises_output` matches `stress von_mises` and is treated as a Scalar-1 field. It does not fall through to `stress` or `stress principal`. The same priority pattern applies to strain: 1. `strain principal` (Vector-3) 2. `strain` (Tensor-6) ### Component Names and Dimensionality Each field label has an expected dimensionality: Scalar-1, Vector-3, or Tensor-6. Once an array is matched to a field label, nTop checks the array's components to verify compatibility. Components must be packed into a single multi-component VTK array. nTop does not combine separate scalar arrays into vectors or tensors. A displacement field must be a single array with 3 components, not three separate arrays named `displacement_x`, `displacement_y`, `displacement_z`. **Component name resolution:** VTK arrays support named components (via `SetComponentName`/`GetComponentName`). nTop uses these names to map components to their expected slots: * **Vector-3 fields** (for example, `displacement`, `velocity`): components named `x`, `y`, `z` * **Vector-3 principal fields** (for example, `stress principal`): components named `min`, `mid`, `max` * **Tensor-6 fields** (for example, `stress`, `strain`): components named `xx`, `yy`, `zz`, `xy`, `yz`, `xz` **Numerical fallback:** If component names are not set, components are mapped by their numerical index (`0`, `1`, `2`, …) in positional order. For a Vector-3 field, component 0 maps to the first expected slot (for example, `x` or `min`), component 1 to the second, and so on. **Note on Voigt notation:** For Tensor-6 fields using the numerical fallback, nTop expects the component order `xx, yy, zz, xy, yz, xz` (indices 0–5). Different solvers may use different Voigt conventions. If your solver's default ordering does not match, use explicit component names to avoid silently scrambled tensor components. **Component count must match.** If the number of components in the array does not match the expected dimensionality of the matched field label, the field will fail to import. For example, an array matching `stress` (Tensor-6) must have exactly 6 components. A 3-component array matching `stress` will not import; it would need to match `stress principal` instead. ### Data Precision All imported data arrays are cast to double precision (float64), regardless of the precision in the source file. ## Point Data, Cell Data, and Field Data ### Point Data (Default) All importable fields are expected to be VTK point data arrays. This is the standard and recommended way to provide simulation results to nTop. ### Cell Data Fallback If a field label is matched by a cell data array but no corresponding point data array exists for the same label, nTop automatically interpolates the cell data to points using VTK's `vtkCellDataToPointData` filter. If both a point data array and a cell data array share the same field label, only the point data array is imported. The cell data array is ignored for that label. Other labels that only appear as cell data are still imported normally. **Cell data in time series and CFD:** When multiple arrays match the same label (triggering time series or CFD key-value behavior), cell data arrays are interpolated to point data individually before being assembled. For example, if `velocity_1` is point data and `velocity_2` is cell data, `velocity_2` is interpolated to points and both are included in the time series. ### Field Data VTK Field Data arrays have special handling and are only supported for specific attributes: * **Eigen frequency** in the Import Modal Result block * **Load factor** in the Import Buckling Result block * **Time** in the time-dependent Import Result blocks All other fields must be point data (or cell data that can be interpolated to points). Placing a regular field like `reaction_force` as VTK Field Data will cause a shape mismatch and the field will fail to import. If your solver outputs a field as Field Data, convert it to point data before importing — for example, by using ParaView's `FieldDataToDataSetAttribute` filter and saving the result. ## Time Series Behavior Time series import applies to all block types except CFD (see CFD-Specific Behavior below). When multiple VTK data arrays match the same field label, nTop interprets them as a time series. ### Time Series Detection Multiple arrays matching the same field label category trigger time series interpretation. The matching uses the same substring logic described above. For example, if a file contains three arrays named `displacement_1`, `displacement_2`, `displacement_3`, all three contain the substring `displacement` and are interpreted as a three-step time series. The suffix does not need to be numeric. Arrays named `displacement_foo` and `displacement_bar` would also be interpreted as a two-step time series. Only the storage order of the arrays in the file determines their placement in the series. **Caution:** This mechanism can be triggered unintentionally. If a file contains arrays named `temperature` and `ambient_temperature`, both match the `temperature` label and nTop will interpret them as a two-step time series rather than two distinct fields. To avoid this, rename or remove one of the arrays so that only one matches the label. ### Time Values Time values are determined by two mechanisms, in order of priority: 1. **Embedded metadata:** The number of time steps is read from VTK XML metadata on the UnstructuredGrid TimeValues attribute. The physical time value is furthermore read from a seperate scalar FieldData array `Time`. 2. **Dummy values:** If no time metadata is present, nTop assigns sequential integer time values starting from 0 (that is, 0, 1, 2, …). ### Step Count and Skipping The longest series of matching arrays across all field label categories determines the expected number of time steps. Any field label category that does not produce exactly that number of steps is skipped entirely. For example, if a file contains: * `displacement_1`, `displacement_2`, `displacement_3` → 3 steps (longest) * `stress_1`, `stress_2` → 2 steps The expected step count is 3. Because `stress` only produces 2 steps, it is skipped and not imported at all. Only `displacement` is imported. ### Static Blocks and Time Series Only the time-dependent block types (**Import Time Dependent Structural Result** and **Import Time Dependent Thermal Result**) return and visualize full time series data. If a file containing time series data is loaded into a static block type (for example, **Import Analysis Result**), the time series is still detected and processed, but only the last snapshot in the series is returned. nTop logs the following warning: `File contains time series but import is Static. Using last step only.` ## CFD-Specific Behavior The **Import CFD Analysis Result** block differs from the other block types in several ways. It supports `.vti` (uniform grid) files in addition to `.vtk` and `.vtu`, and it does not use the time series mechanism described above. ### Key-Value Results CFD results are structured as key-value pairs. When multiple arrays match the same field label, each is stored as a separate entry in a dictionary rather than being interpreted as a time series. For example, a file containing arrays named `velocity_initial`, `velocity_1_s`, and `velocity_time-averaged` produces a CFD result with three entries in the velocity dictionary. Downstream in nTop, CFD results expose a list of keys and a corresponding list of fields, allowing you to select individual entries. ### Cell Region (VTI Only) `cell region` is an optional scalar point data array of type unsigned char (values 0–255). It defines region association IDs for nodes in a uniform grid, typically used to distinguish between boundary conditions and bulk regions. For example, `cell region = 1` might indicate bulk fluid nodes, while `cell region = 2` indicates solid no-slip wall nodes. You can use this field with downstream blocks such as **Filter Cell Region**. ### Implicit Field (VTI Only) `implicit field` is a scalar point data array containing the signed distance field associated with the voxelization of the input geometry. This field is used purely for visualization — it determines the surface body displayed in the viewport for surface plots. If you can retain or reconstruct the signed distance field from the original voxelization, it is worth including as an implicit field. If no implicit field is provided, nTop falls back to treating the entire domain as interior, which still works but may produce less useful surface visualizations. ### Beam Radius (VTU Only) `beam radius` is a scalar point data array containing the radii of the associated beams in the FE Mesh. If beam radius is not provided for beam elements, nTop may fail to render surface visualizations of the imported result. ## Unit System The **Unit System** input tells nTop what units the data in the file is expressed in. If the specified unit system differs from SI, nTop converts the imported data from the given units to SI upon import. If the file already contains SI data, set the unit system to SI and no conversion is applied. Each field label has associated physical dimensions (see the Block Types and Field Schemas section above). nTop uses these dimensions to determine which unit conversions to apply. For example, a velocity field has dimensions of L T⁻¹ (length per time), so both the length and time unit factors from the selected unit system are used in the conversion. Fields with no physical dimensions listed (such as strain) are dimensionless and are not affected by the unit system setting. ## Supported Cell Types nTop supports the following VTK cell types: **Volume elements:** tetrahedron, hexahedron, voxel, wedge, pyramid **Surface elements:** triangle, quad **Beam elements:** line, vertex All other cell types are ignored during import. nTop logs a warning indicating the number of skipped cells per unsupported type. If a file consists entirely of unsupported cell types, nTop tries to fall back to a vertex representation or produce an error. ## Troubleshooting ### Field Not Appearing After Import **Component count mismatch.** The array's number of components does not match what the matched field label expects. For example, a 3-component array matching `stress` (which expects Tensor-6) will not import. Verify that the array has the correct number of components for its intended field label. **Field Data instead of Point Data.** Only eigen frequency and load factor use VTK Field Data. All other fields must be Point Data (or Cell Data). If your solver writes a result as Field Data, see the Field Data section above for the recommended workaround. ### Unintentional Time Series If a file contains multiple arrays whose names match the same field label, nTop interprets them as a time series. This can happen unintentionally when array names share a common substring. For example, arrays named `temperature_surface` and `temperature_volume` both match the `temperature` label and are treated as a two-step series rather than two distinct fields. To fix this, rename or remove one of the arrays so that only one matches the intended label. ### Separate Arrays Instead of Multi-Component nTop expects vector and tensor fields to be stored as a single multi-component array. Three separate scalar arrays named `displacement_x`, `displacement_y`, `displacement_z` will not be combined into a vector. Instead, all three match the `displacement` label and trigger the time series mechanism, producing incorrect results. Please make sure your solver or post-processor writes vectors as a single array with named components (`x`, `y`, `z`) or indexed components (`0`, `1`, `2`). ### Time Series Data in a Static Block If a file with time series data is loaded into a static import block (for example, **Import Analysis Result** instead of **Import Time Dependent Structural Result**), only the last time step is returned. nTop logs a warning when this occurs. If you need the full series, use the corresponding time-dependent block type. *** ## Path, Path, Unit System Import CFD Analysis Result file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Case file | [Path](../../../../block-documentation/types/path) | System path of CFD Analysis Result file. | | Data file | [Path](../../../../block-documentation/types/path) | System path of CFD Analysis Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | *** ## Path, Unit System Import CFD Analysis Result file from an external location. Streamlines will be calculated on the last velocity result available in the provided file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of CFD Analysis Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | # Material Information Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/material-information > **[Air](../../../block-documentation/blocks/fluids/material-information/air)** > **[Water](../../../block-documentation/blocks/fluids/material-information/water)** > **[Isotropic Material](../../../block-documentation/blocks/structures/material-attributes/isotropic-material)** > **[Isotropic Fluid Property](../../../block-documentation/blocks/fluids/material-information/isotropic-fluid-property)** > **[Isotropic Porous Medium Property](../../../block-documentation/blocks/fluids/material-information/isotropic-porous-medium-property)** > **[Fluid Attribute](../../../block-documentation/blocks/fluids/material-information/fluid-attribute)** # Air Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/material-information/air General Purpose Air at NIST (293.15K, 100kPa). Reference: engineeringtoolbox.com Density: 1.204 kg/m^3 Kinematic viscosity: 15.06E-6 m^2/s Thermal conductivity: 0.02587 W/(m-K) Specific heat: 1.006 J/(g-K) ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Fluid Attribute Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/material-information/fluid-attribute Define material properties as attributes of a fluid. ### Inputs | Name | Type | Description | | - | - | - | | Isotropic material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | The underlying material. | ### Outputs | Type | | - | | [Fluid Attribute](../../../../block-documentation/types/fluid-attribute) | # Isotropic Fluid Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/material-information/isotropic-fluid-property Defines an Isotropic Fluid Property. ### Inputs | Name | Type | Description | | - | - | - | | Kinematic viscosity | [Scalar](../../../../block-documentation/types/scalar) | Kinematic viscosity. | ### Outputs | Type | | - | | [Isotropic Fluid Property](../../../../block-documentation/types/isotropic-fluid-property) | # Isotropic Porous Medium Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/material-information/isotropic-porous-medium-property Defines an Isotropic Porous Medium Property. ### Inputs | Name | Type | Description | | - | - | - | | Permeability | [Scalar](../../../../block-documentation/types/scalar) | Permeability. | | Forchheimer parameter | [Scalar](../../../../block-documentation/types/scalar) | Forchheimer parameter. | ### Outputs | Type | | - | | [Isotropic Porous Medium Property](../../../../block-documentation/types/isotropic-porous-medium-property) | # Water Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/material-information/water General Purpose Water at NIST (293.15K, 100kPa). Reference: matweb.com Density: 998.23 kg/m^3 Kinematic viscosity: 1.002E-6 m^2/s Thermal conductivity: 0.5984 W/(m-K) Specific heat: 4.182 J/(g-K) ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/model > **[Simulation Model](../../../block-documentation/blocks/structures/model/simulation-model)** > **[Fluid Domain](../../../block-documentation/blocks/fluids/model/fluid-domain)** # Fluid Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/model/fluid-domain Creates a Fluid Domain by assigning a Fluid Attribute to an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body. | | Attribute | [Fluid Attribute](../../../../block-documentation/types/fluid-attribute) | The Fluid Attribute. | ### Outputs | Type | | - | | [Virtual Domain](../../../../block-documentation/types/virtual-domain) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/utilities > **[Virtual Region by Body](../../../block-documentation/blocks/structures/utilities/virtual-region-by-body)** > **[Virtual Boundary by Body](../../../block-documentation/blocks/structures/utilities/virtual-boundary-by-body)** > **[Flow Analysis Results on Boundary](../../../block-documentation/blocks/fluids/utilities/flow-analysis-results-on-boundary)** > **[Filter Cell Region](../../../block-documentation/blocks/fluids/utilities/filter-cell-region)** > **[Streamline](../../../block-documentation/blocks/fluids/utilities/streamline)** # Filter Cell Region Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/utilities/filter-cell-region Create a list of points from the cell region values of a virtual CFD Analysis result. ### Inputs | Name | Type | Description | | - | - | - | | Cfd analysis result | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | The CFD Analysis Result containing the cell region data to filter. | | Region | [Integer](../../../../block-documentation/types/integer) | Only include points with this region ID (optional - if not provided, all regions are included) | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Flow Analysis Results on Boundary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/utilities/flow-analysis-results-on-boundary > **[CFD Analysis Result, Scalar Field, Boundary, 5.23.0](#cfd-analysis-result-scalar-field-boundary-5230)** > **[CFD Analysis Result, Scalar Field, Virtual Boundary, 5.23.0](#cfd-analysis-result-scalar-field-virtual-boundary-5230)** *** ## CFD Analysis Result, Scalar Field, Boundary, 5.23.0 Calculates the average flow property on the boundary of a Flow Analysis CFD Result. For correct property results, provide the boundary used in the Flow Analysis execution. ### Inputs | Name | Type | Description | | - | - | - | | Result | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | Result to extract boundary values from. | | Property field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Property field from Flow Analysis. | | Boundary | [CAD Face List](../../../../block-documentation/types/cad-face) | Boundary to average Flow Analysis property on. Provided CAD Faces must be the same CAD Faces as used in the Flow Analysis. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## CFD Analysis Result, Scalar Field, Virtual Boundary, 5.23.0 Calculates the average flow property on the boundary of a Flow Analysis CFD Result. For correct property results, provide the boundary used in the Flow Analysis execution. ### Inputs | Name | Type | Description | | - | - | - | | Result | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | Result to extract boundary values from. | | Property field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Property field from Flow Analysis. | | Boundary | [Virtual Boundary](../../../../block-documentation/types/virtual-boundary) | Boundary to average Flow Analysis property on. Provided boundary must be the same boundary as used in the Flow Analysis. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Streamline Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/fluids/utilities/streamline > **[Vector Field, Implicit Body, Seed points, Scalar, Scalar, 5.38.0](#vector-field-implicit-body-seed-points-scalar-scalar-5380)** > **[Vector Field, Implicit Body, Point, Scalar, Scalar, 5.38.0](#vector-field-implicit-body-point-scalar-scalar-5380)** *** ## Vector Field, Implicit Body, Seed points, Scalar, Scalar, 5.38.0 Creates streamlines from a vector field and a list of seed points. ### Inputs | Name | Type | Description | | - | - | - | | Vector field | [Vector Field](../../../../block-documentation/types/vector-field) | Input vector field. | | Domain | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit domain of vector field. | | Seed points | [Point List](../../../../block-documentation/types/point) | Seed points. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance used in the integration method. If not provided, the value defaults to the domain diagonal scaled by 10^-6 | | Terminal speed | [Scalar](../../../../block-documentation/types/scalar) | Speed to be used as a stopping criteria for the integration method. If not provided, the value will be calculated based on the rest of the inputs. | ### Outputs | Type | | - | | [Curve List](../../../../block-documentation/types/curve) | *** ## Vector Field, Implicit Body, Point, Scalar, Scalar, 5.38.0 Creates a streamline from a vector field and a seed point. ### Inputs | Name | Type | Description | | - | - | - | | Vector field | [Vector Field](../../../../block-documentation/types/vector-field) | Input vector field. | | Domain | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit domain of vector field. | | Seed point | [Point](../../../../block-documentation/types/point) | Seed point. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance used in the integration method. If not provided, the value defaults to the domain diagonal scaled by 10^-6 | | Terminal speed | [Scalar](../../../../block-documentation/types/scalar) | Speed to be used as a stopping criteria for the integration method. If not provided, the value will be calculated based on the rest of the inputs. | ### Outputs | Type | | - | | [Curve](../../../../block-documentation/types/curve) | # Lattices Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices ## Lattice > **[Rectangular Volume Lattice](../../block-documentation/blocks/lattices/lattice/rectangular-volume-lattice)** > **[Cylindrical Volume Lattice](../../block-documentation/blocks/lattices/lattice/cylindrical-volume-lattice)** > **[Spherical Volume Lattice](../../block-documentation/blocks/lattices/lattice/spherical-volume-lattice)** > **[Periodic Lattice](../../block-documentation/blocks/lattices/lattice/periodic-lattice)** ## Unit Cells > **[Graph Unit Cell](../../block-documentation/blocks/lattices/unit-cells/graph-unit-cell)** > **[TPMS Unit Cell with Offset](../../block-documentation/blocks/lattices/unit-cells/tpms-unit-cell-with-offset)** > **[Walled TPMS Unit Cell](../../block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell)** > **[Walled TPMS Unit Cell with Offset](../../block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell-with-offset)** > **[Orient Unit Cell](../../block-documentation/blocks/lattices/unit-cells/orient-unit-cell)** > **[Custom Unit Cell](../../block-documentation/blocks/lattices/unit-cells/custom-unit-cell)** > **[Import Unit Cell Rule](../../block-documentation/blocks/lattices/unit-cells/import-unit-cell-rule)** ## Cell Maps > **[Rectangular Cell Map](../../block-documentation/blocks/lattices/cell-maps/rectangular-cell-map)** > **[Cylindrical Cell Map](../../block-documentation/blocks/lattices/cell-maps/cylindrical-cell-map)** > **[Spherical Cell Map](../../block-documentation/blocks/lattices/cell-maps/spherical-cell-map)** > **[Cell Map from CAD Face](../../block-documentation/blocks/lattices/cell-maps/cell-map-from-cad-face)** > **[Cell Map between CAD Faces](../../block-documentation/blocks/lattices/cell-maps/cell-map-between-cad-faces)** > **[Cell Map from Quad Mesh](../../block-documentation/blocks/lattices/cell-maps/cell-map-from-quad-mesh)** ## Conformal > **[Lattice from Surface Mesh](../../block-documentation/blocks/lattices/conformal/lattice-from-surface-mesh)** > **[Lattice from Volume Mesh](../../block-documentation/blocks/lattices/conformal/lattice-from-volume-mesh)** ## Stochastic > **[Voronoi Surface Lattice](../../block-documentation/blocks/lattices/stochastic/voronoi-surface-lattice)** > **[Voronoi Volume Lattice](../../block-documentation/blocks/lattices/stochastic/voronoi-volume-lattice)** > **[Branched Lattice](../../block-documentation/blocks/lattices/stochastic/branched-lattice)** > **[Delaunay Lattice](../../block-documentation/blocks/lattices/stochastic/delaunay-lattice)** > **[Orthofoam Lattice](../../block-documentation/blocks/lattices/stochastic/orthofoam-lattice)** ## Utilities > **[Trim Cell Map](../../block-documentation/blocks/lattices/utilities/trim-cell-map)** > **[Warp Cell Map](../../block-documentation/blocks/lattices/utilities/warp-cell-map)** > **[Trim Lattice](../../block-documentation/blocks/lattices/utilities/trim-lattice)** > **[Modify Lattice Thickness](../../block-documentation/blocks/lattices/utilities/modify-lattice-thickness)** > **[Merge Graphs](../../block-documentation/blocks/modeling/utilities/merge-graphs)** > **[Extrude Lattice](../../block-documentation/blocks/lattices/utilities/extrude-lattice)** > **[Extend Open Lattice Beams](../../block-documentation/blocks/lattices/utilities/extend-open-lattice-beams)** > **[Collapse Vertices](../../block-documentation/blocks/modeling/utilities/collapse-vertices)** > **[Collapse Vertices by Angle](../../block-documentation/blocks/lattices/utilities/collapse-vertices-by-angle)** > **[Graph from Line Segments](../../block-documentation/blocks/lattices/utilities/graph-from-line-segments)** > **[Graph from Mesh Faces](../../block-documentation/blocks/lattices/utilities/graph-from-mesh-faces)** > **[Lattice from Beams](../../block-documentation/blocks/lattices/utilities/lattice-from-beams)** > **[Lattice from Graph](../../block-documentation/blocks/lattices/utilities/lattice-from-graph)** > **[Filter Beams by Length](../../block-documentation/blocks/lattices/utilities/filter-beams-by-length)** > **[Filter Beams by Angle](../../block-documentation/blocks/lattices/utilities/filter-beams-by-angle)** > **[Filter Beams by Connectivity](../../block-documentation/blocks/lattices/utilities/filter-beams-by-connectivity)** > **[Filter Beams by Containment](../../block-documentation/blocks/lattices/utilities/filter-beams-by-containment)** > **[Filter Beams by Thickness](../../block-documentation/blocks/lattices/utilities/filter-beams-by-thickness)** > **[Filter Beams](../../block-documentation/blocks/lattices/utilities/filter-beams)** > **[Warp Cell Map to Body](../../block-documentation/blocks/lattices/utilities/warp-cell-map-to-body)** > **[Lattice Pore Size](../../block-documentation/blocks/lattices/utilities/lattice-pore-size)** # Cell Maps Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/cell-maps > **[Rectangular Cell Map](../../../block-documentation/blocks/lattices/cell-maps/rectangular-cell-map)** > **[Cylindrical Cell Map](../../../block-documentation/blocks/lattices/cell-maps/cylindrical-cell-map)** > **[Spherical Cell Map](../../../block-documentation/blocks/lattices/cell-maps/spherical-cell-map)** > **[Cell Map from CAD Face](../../../block-documentation/blocks/lattices/cell-maps/cell-map-from-cad-face)** > **[Cell Map between CAD Faces](../../../block-documentation/blocks/lattices/cell-maps/cell-map-between-cad-faces)** > **[Cell Map from Quad Mesh](../../../block-documentation/blocks/lattices/cell-maps/cell-map-from-quad-mesh)** # Cell Map between CAD Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/cell-maps/cell-map-between-cad-faces > **[CAD Face, CAD Face, Vector, Bool](#cad-face-cad-face-vector-bool)** > **[CAD Face, CAD Face, Vector, Bool, 1.1.0](#cad-face-cad-face-vector-bool-110)** > **[CAD Face, CAD Face, Vector, Bool, 1.2.0](#cad-face-cad-face-vector-bool-120)** > **[CAD Face, UV Position Enum, Bool, CAD Face, UV Position Enum, Bool, Vector, Bool](#cad-face-uv-position-enum-bool-cad-face-uv-position-enum-bool-vector-bool)** > **[CAD Face, UV Position Enum, Bool, CAD Face, UV Position Enum, Bool, Vector, Bool, 1.1.0](#cad-face-uv-position-enum-bool-cad-face-uv-position-enum-bool-vector-bool-110)** > **[CAD Face, UV Position Enum, Bool, CAD Face, UV Position Enum, Bool, Vector, Bool, 1.2.0](#cad-face-uv-position-enum-bool-cad-face-uv-position-enum-bool-vector-bool-120)** *** ## About this Block **What it does:** Constructs a Cell Map between two CAD Faces. The UVW count input specifies the number of cells in the three coordinate directions. This map serves as a layout for the lattice Unit Cells. **Common uses:** * Used as an input for the **Periodic Lattice** block. **Tips:** * The UVW count input follows the UVW parameterization of the CAD Face. Once the block has run, UWV guides will appear on the Cell Map allowing you to visualize the CAD Face's parameterization. * If you're unsure of what U, V, and W represent on your particular CAD Face, try inputting sample values so that the block runs. Then the UVW guides will appear. * By default, this block tries to automatically pick the parameterizations of the input CAD Faces to achieve the best Cell Map between them. An overload is available to choose the input CAD Faces' parameterizations manually. * By default, the Cell Map contains straight edges only. Uncheck the Linear input for edges that curve more conformally to the CAD Faces. * If the input CAD Face has an edge that degenerates to a point, then cells incident on that edge will be degenerate. Degenerate cells may be removed with the **Trim Cell Map** block if desired. ![CAD Face](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cellmapbtwcadface.png) *** ## CAD Face, CAD Face, Vector, Bool Constructs volumetric lattice cells between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | First face | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD surface to apply the cell map. | | Second face | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD surface to apply the cell map. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in three directions. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD faces are curved so that the Cell Map conforms more closely to the faces, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## CAD Face, CAD Face, Vector, Bool, 1.1.0 Constructs volumetric lattice cells between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | First face | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD surface to apply the cell map. | | Second face | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD surface to apply the cell map. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in three directions. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD faces are curved so that the Cell Map conforms more closely to the faces, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## CAD Face, CAD Face, Vector, Bool, 1.2.0 Constructs volumetric lattice cells between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | First face | [CAD Face](../../../../block-documentation/types/cad-face) | First CAD surface to apply the cell map. | | Second face | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD surface to apply the cell map. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in three directions. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD faces are curved so that the Cell Map conforms more closely to the faces, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## CAD Face, UV Position Enum, Bool, CAD Face, UV Position Enum, Bool, Vector, Bool Constructs a Cell Map between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | First face | [CAD Face](../../../../block-documentation/types/cad-face) | The first CAD surface to apply the cell map. | | First uv origin | UV Position Enum | Corner parameter to set as origin for UV space of first face. | | Flip first uv | [Bool](../../../../block-documentation/types/bool) | Swap the direction of U and V for first face. | | Second face | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD surface to apply the cell map. | | Second uv origin | UV Position Enum | Corner parameter to set as origin for UV space of second face. | | Flip second uv | [Bool](../../../../block-documentation/types/bool) | Swap the direction of U and V for second face. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in the U, V and W directions. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD faces are curved so that the Cell Map conforms more closely to the faces, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## CAD Face, UV Position Enum, Bool, CAD Face, UV Position Enum, Bool, Vector, Bool, 1.1.0 Constructs a Cell Map between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | First face | [CAD Face](../../../../block-documentation/types/cad-face) | The first CAD surface to apply the cell map. | | First uv origin | UV Position Enum | Corner parameter to set as origin for UV space of first face. | | Flip first uv | [Bool](../../../../block-documentation/types/bool) | Swap the direction of U and V for first face. | | Second face | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD surface to apply the cell map. | | Second uv origin | UV Position Enum | Corner parameter to set as origin for UV space of second face. | | Flip second uv | [Bool](../../../../block-documentation/types/bool) | Swap the direction of U and V for second face. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in the U, V and W directions. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD faces are curved so that the Cell Map conforms more closely to the faces, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## CAD Face, UV Position Enum, Bool, CAD Face, UV Position Enum, Bool, Vector, Bool, 1.2.0 Constructs a Cell Map between two CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | First face | [CAD Face](../../../../block-documentation/types/cad-face) | The first CAD surface to apply the cell map. | | First uv origin | UV Position Enum | Corner parameter to set as origin for UV space of first face. | | Flip first uv | [Bool](../../../../block-documentation/types/bool) | Swap the direction of U and V for first face. | | Second face | [CAD Face](../../../../block-documentation/types/cad-face) | Second CAD surface to apply the cell map. | | Second uv origin | UV Position Enum | Corner parameter to set as origin for UV space of second face. | | Flip second uv | [Bool](../../../../block-documentation/types/bool) | Swap the direction of U and V for second face. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in the U, V and W directions. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD faces are curved so that the Cell Map conforms more closely to the faces, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Cell Map from CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/cell-maps/cell-map-from-cad-face > **[CAD Face, Vector, Scalar Field, Bool](#cad-face-vector-scalar-field-bool)** > **[CAD Face, Vector, Scalar Field, Bool, 1.1.0](#cad-face-vector-scalar-field-bool-110)** > **[CAD Face, Vector, Scalar Field, Bool, 1.2.0](#cad-face-vector-scalar-field-bool-120)** *** ## About this Block **What it does:** Constructs a Cell Map from a selected CAD Face. The UVW count input specifies the number of cells in the three coordinate directions. This map serves as a layout for the lattice Unit Cells. **Common uses:** * Used as an input for the **Periodic Lattice** block. **Tips:** * The UVW count input follows the UVW parameterization of the CAD Face. Once the block has run, UWV guides will appear on the Cell Map allowing you to visualize the CAD Face's parameterization. * If you're unsure of what U, V, and W represent on your particular CAD Face, try inputting sample values so that the block runs. Then the UVW guides will appear. * Points in the Cell Map are generated as normal offsets of points on the input CAD Face. * Self-intersections may occur in the Cell Map due to nearby surface points colliding while offsetting along their normals. * By default, the Cell Map contains straight edges only. Uncheck the Linear input for edges that curve more conformally to the CAD Face. * If the input CAD Face has an edge that degenerates to a point, then cells incident on that edge will be degenerate. Degenerate cells may be removed with the **Trim Cell Map** block if desired. ![CAD Face](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cellmapcadface.png) *** ## CAD Face, Vector, Scalar Field, Bool Constructs a Cell Map from a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD surface on which to apply the Cell Map. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in the U, V, and W directions. | | Height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the Cell Map from the CAD face. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD face is curved so that the Cell Map conforms more closely to the face, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## CAD Face, Vector, Scalar Field, Bool, 1.1.0 Constructs a Cell Map from a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD surface on which to apply the Cell Map. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in the U, V, and W directions. | | Height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the Cell Map from the CAD face. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD face is curved so that the Cell Map conforms more closely to the face, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## CAD Face, Vector, Scalar Field, Bool, 1.2.0 Constructs a Cell Map from a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD surface on which to apply the Cell Map. | | Uvw count | [Vector](../../../../block-documentation/types/vector) | Number of cells in the U, V, and W directions. | | Height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the Cell Map from the CAD face. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option if your CAD face is curved so that the Cell Map conforms more closely to the face, although this will vary depending on the application. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Cell Map from Quad Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/cell-maps/cell-map-from-quad-mesh ## About this Block **What it does:** Constructs a Cell Map from a Quad Mesh. The cells are constructed by offsetting along the normals of each quad face of the input Surface Mesh. This domain is then subdivided by the Layer count value. This map serves as a layout for the lattice Unit Cells. **Common uses:** * Used as an input for the **Periodic Lattice** block. * When you need to stitch together several CAD Faces to create a conformal lattice. **Tips:** * A Cell Map from a Quad Mesh is unstructured and does not have U, V, W guides. * It maps out a Unit Cell to each quad face. * The input Surface Mesh must contain only quad faces. ![Quad](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/quadcellmap.png) *** Creates a Cell Map that is conformal to a quad mesh. Note that the underlying U, V field properties will not be continuous. ### Inputs | Name | Type | Description | | - | - | - | | Surface mesh | [Mesh](../../../../block-documentation/types/mesh) | Quad mesh that the cell map will be generated from. | | Height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the Cell Map from the surface of the Mesh | | Layer count | [Integer](../../../../block-documentation/types/integer) | Number of cell layers that the domain will be subdivided into. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Cylindrical Cell Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/cell-maps/cylindrical-cell-map > **[Implicit Body, Scalar, Scalar, Integer, Bool, Frame](#implicit-body-scalar-scalar-integer-bool-frame)** > **[Implicit Body, Scalar, Scalar, Integer, Bool, Frame, 1.1.0](#implicit-body-scalar-scalar-integer-bool-frame-110)** > **[Implicit Body, Scalar, Scalar, Integer, Bool, Frame, 1.2.0](#implicit-body-scalar-scalar-integer-bool-frame-120)** > **[Implicit Body, Scalar, Scalar, Integer, Bool, Frame, 1.3.0](#implicit-body-scalar-scalar-integer-bool-frame-130)** *** ## About this Block **What it does:** Generates a Cell Map with a cylindrical coordinate system that covers the entire input Volume with cells using the specified Cell radius, Cell height, and Arc count. This map serves as a layout for the lattice Unit Cells. **Common uses:** * Used as an input for the **Periodic Lattice** block. **Tips:** * The Cell radius, Cell height, and Arc count inputs follow the U, V, W guides displayed once the block has run. * The default Cell Map's starting point is auto-computed based on the Volume's principal axes about the center of mass. * A face of a cell will degenerate into an edge if it is incident on the Frame's Z-axis. Degenerate cells may be removed with the **Trim Cell Map** block if desired. * The Frame input controls the orientation and position of the Cell Map. * By default, the Cell Map edges will be curved to the cylindrical coordinate system. Check the Linear input to generate straight edges only. As a general rule, check the Linear input when using a Graph Unit Cell and uncheck the Linear input when using a TPMS Unit Cell in the **Periodic Lattice** block, although this will vary depending on your application and design goals. * If the cells extend beyond the input Volume, you can try the following options to meet your design goals. * Use the Cell Map in its too-large form to construct a lattice with the **Periodic Lattice** block, and then trim the lattice back down to the Volume using the **Trim Lattice** block. * Use the **Trim Cell Map** block to reduce the cell count. Note that depending on the Fill type you select, some cells may still be outside the Volume. * Adjust the Cell radius, Cell height, or Arc count. * Adjust the size of the Volume input. ![Cylindrical](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cylindricalmap.png) *** ## Implicit Body, Scalar, Scalar, Integer, Bool, Frame Creates a cylindrical Cell Map within an Implicit Body. By default, the Cell Map's starting point is auto-computed based on the body's principal axes about the center of mass. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of cells in circumferential direction. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option to create a linear map when using a Graph Unit Cell, and uncheck when using a TPMS Unit Cell, although this will vary depending on the application. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the cell map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## Implicit Body, Scalar, Scalar, Integer, Bool, Frame, 1.1.0 Creates a cylindrical Cell Map within an Implicit Body. By default, the Cell Map's starting point is auto-computed based on the body's principal axes about the center of mass. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of cells in circumferential direction. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option to create a linear map when using a Graph Unit Cell, and uncheck when using a TPMS Unit Cell, although this will vary depending on the application. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the cell map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## Implicit Body, Scalar, Scalar, Integer, Bool, Frame, 1.2.0 Creates a cylindrical Cell Map within an Implicit Body. By default, the Cell Map's starting point is auto-computed based on the body's principal axes about the center of mass. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of cells in circumferential direction. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option to create a linear map when using a Graph Unit Cell, and uncheck when using a TPMS Unit Cell, although this will vary depending on the application. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the cell map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## Implicit Body, Scalar, Scalar, Integer, Bool, Frame, 1.3.0 Creates a cylindrical Cell Map within an Implicit Body. By default, the Cell Map's starting point is auto-computed based on the body's principal axes about the center of mass. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of cells in circumferential direction. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option to create a linear map when using a Graph Unit Cell, and uncheck when using a TPMS Unit Cell, although this will vary depending on the application. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the cell map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Rectangular Cell Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/cell-maps/rectangular-cell-map > **[Implicit Body, Vector, Frame](#implicit-body-vector-frame)** > **[Implicit Body, Vector, Frame, 1.1.0](#implicit-body-vector-frame-110)** *** ## About this Block **What it does:** Generates a Cell Map that covers the entire input Volume with cells of defined size in a rectangular layout. This map serves as a layout for the lattice Unit Cells. **Common uses:** * Used as an input for the **Periodic Lattice** block. **Tips:** * The Cell size X, Y, Z inputs follows U, V, W guides. * When creating the Cell Map, you can view the Full map or Navigate the Map using the heads-up display. The navigate map allows you to take a closer look at each unit cell location. * The default Cell Map's starting point is the Min point of the body's Bounding box. * The Frame input controls the orientation and position of the Cell Map. * If the cells extend beyond the input Volume, you can try the following options to meet your design goals. * Use the Cell Map in its too-large form to construct a lattice with the **Periodic Lattice** block, and then trim the lattice back down to the Volume using the **Trim Lattice** block. * Use the **Trim Cell Map** block to reduce the cell count. Note that depending on the Fill type you select, some cells may still be outside the Volume. * Adjust the Cell size input. * Adjust the size of the Volume input. ![Rectangular](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/rectangularmap.png) *** ## Implicit Body, Vector, Frame Creates a rectangular Cell Map within an Implicit Body. By default, the Cell Map's starting point is set to the min point of the body's bounding box. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Size of the cells in the X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the Cell Map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## Implicit Body, Vector, Frame, 1.1.0 Creates a rectangular Cell Map within an Implicit Body. By default, the Cell Map's starting point is set to the min point of the body's bounding box. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Size of the cells in the X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the Cell Map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Spherical Cell Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/cell-maps/spherical-cell-map > **[Implicit Body, Scalar, Integer, Integer, Bool, Frame](#implicit-body-scalar-integer-integer-bool-frame)** > **[Implicit Body, Scalar, Integer, Integer, Bool, Frame, 1.1.0](#implicit-body-scalar-integer-integer-bool-frame-110)** > **[Implicit Body, Scalar, Integer, Integer, Bool, Frame, 1.2.0](#implicit-body-scalar-integer-integer-bool-frame-120)** *** ## About this Block **What it does:** Generates a Cell Map with a spherical coordinate system that covers the entire input Volume with cells using the specified Cell radius, Latitude count, and Longitude count. This map serves as a layout for the lattice Unit Cells. **Common uses:** * Used as an input for the **Periodic Lattice** block. **Tips:** * The Cell radius, Latitude count, and Longitude count inputs follow the U, V, W guides displayed once the block has run. * The default Cell Map's starting point is the center point of the volume. * A face of a cell will degenerate into an edge if it is incident on the Frame's Z-axis. Degenerate cells may be removed with the **Trim Cell Map** block if desired. * A face of a cell will degenerate into a point if it is incident on the Frame's origin. Degenerate cells may be removed with the **Trim Cell Map** block if desired. * The Frame input controls the orientation and position of the Cell Map. * By default, the Cell Map edges will be curved to the spherical coordinate system. Check the Linear input to generate straight edges only. As a general rule, check the Linear input when using a Graph Unit Cell and uncheck the Linear input when using a TPMS Unit Cell in the **Periodic Lattice** block, although this will vary depending on your application and design goals. * If the cells extend beyond the input Volume, you can try the following options to meet your design goals. * Use the Cell Map in its too-large form to construct a lattice with the **Periodic Lattice** block, and then trim the lattice back down to the Volume using the **Trim Lattice** block. * Use the **Trim Cell Map** block to reduce the cell count. Note that depending on the Fill type you select, some cells may still be outside the Volume. * Adjust the Cell radius, Latitude count, or Longitude count inputs. * Adjust the size of the Volume input. ![Spherical](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/sphericalmap.png) *** ## Implicit Body, Scalar, Integer, Integer, Bool, Frame Creates a spherical Cell Map within an Implicit Body. By default, the Cell Map's starting point is set to the centroid of the body's bounding box. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Cell size in radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of unit cells in latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of unit cells in longitudinal direction. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option to create a linear map when using a Graph Unit Cell, and uncheck when using a TPMS Unit Cell, although this will vary depending on the application. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the cell map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## Implicit Body, Scalar, Integer, Integer, Bool, Frame, 1.1.0 Creates a spherical Cell Map within an Implicit Body. By default, the Cell Map's starting point is set to the centroid of the body's bounding box. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Cell size in radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of unit cells in latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of unit cells in longitudinal direction. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option to create a linear map when using a Graph Unit Cell, and uncheck when using a TPMS Unit Cell, although this will vary depending on the application. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the cell map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | *** ## Implicit Body, Scalar, Integer, Integer, Bool, Frame, 1.2.0 Creates a spherical Cell Map within an Implicit Body. By default, the Cell Map's starting point is set to the centroid of the body's bounding box. To customize the map's orientation and position, use the optional Frame input. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body volume to define the minimum extent of the cell map. The volume must be 3 dimensional and closed. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Cell size in radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of unit cells in latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of unit cells in longitudinal direction. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved cell map. As a general rule, check this option to create a linear map when using a Graph Unit Cell, and uncheck when using a TPMS Unit Cell, although this will vary depending on the application. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the starting point and orientation of the cell map. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Conformal Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/conformal > **[Lattice from Surface Mesh](../../../block-documentation/blocks/lattices/conformal/lattice-from-surface-mesh)** > **[Lattice from Volume Mesh](../../../block-documentation/blocks/lattices/conformal/lattice-from-volume-mesh)** # Lattice from Surface Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/conformal/lattice-from-surface-mesh ## About this Block **What it does:** Creates a Lattice from a Surface Mesh, with a configurable method of latticing and thickness. **Tips:** * Choose from the following lattice creation methods: * **Mesh edges:** Creates lattice beams along the mesh edges. * **Vertex Centroid:** Creates a vertex at each mesh face's centroid and the mesh vertices. Lattice beams connect the vertices. * **Dual:** Creates a vertex at the centroid of each mesh face and creates a connecting beam to the next closest mesh centroid. * **Mesh Boundary:** Creates lattice beams around the boundary of the mesh. There is no boundary if the mesh is closed, so no lattice is created. * **Mesh Features:** Creates lattice beams at the mesh features, like edges. * You can use triangular and quad meshes. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Lattice from Surface Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/lattice_from_surface_mesh.png) *** Creates a Lattice from a surface Mesh using the features specified in the method input. ### Inputs | Name | Type | Description | | - | - | - | | Surface mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh from which to construct the Lattice. | | Method | Surface Lattice Enum | The Mesh features to use for Lattice construction. | | Mesh Edges: Beams created from Mesh element edges. | | | | Vertex Centroid: Beams created from the centroid of each face to each vertex. | | | | Dual: Beams created from the centroid of each face to the midpoint of each face's edge. | | | | Mesh Boundary: Beams created from the boundary edge (if exists) of the Mesh. | | | | Mesh Features: Beams created from the boundary edges, from edges with 2 incident triangles where the angle between their face normals is > 20 degrees, and from non-manifold edges. | | | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice beam thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Lattice from Volume Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/conformal/lattice-from-volume-mesh ## About this Block **What it does:** Creates a Lattice from a Volume Mesh with a configurable thickness and latticing method. **Tips:** * Choose from the following lattice creation methods: * **Mesh edges:** Creates lattice beams along the mesh edges. * **Vertex Centroid:** Creates a vertex at each mesh face's centroid and the mesh vertices. Lattice beams connect the vertices. * **Dual:** Creates a vertex at the centroid of each mesh face and creates connecting beams to the next closest mesh centroid. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Lattice from Volume Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/lattice_from_mesh.png) *** Creates a Lattice from a Volume Mesh using the features specified in the method input. ### Inputs | Name | Type | Description | | - | - | - | | Volume mesh | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | Volumetric Mesh from which to construct the Lattice. | | Method | Volume Lattice Enum | The mesh features to use for Lattice construction. | | Mesh Edges: Beams created from Mesh element edges. | | | | Vertex Centroid: Beams created from centroid of each face to each vertex. | | | | Dual: Beams created from the centroid of each face to the midpoint of each face's edge. | | | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice beam thickness. | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate a Lattice on the Volume Mesh's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/lattice > **[Rectangular Volume Lattice](../../../block-documentation/blocks/lattices/lattice/rectangular-volume-lattice)** > **[Cylindrical Volume Lattice](../../../block-documentation/blocks/lattices/lattice/cylindrical-volume-lattice)** > **[Spherical Volume Lattice](../../../block-documentation/blocks/lattices/lattice/spherical-volume-lattice)** > **[Periodic Lattice](../../../block-documentation/blocks/lattices/lattice/periodic-lattice)** # Cylindrical Volume Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/lattice/cylindrical-volume-lattice > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool](#implicit-body-non-parametric-unit-cell-scalar-scalar-integer-frame-bool)** > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.1.0](#implicit-body-non-parametric-unit-cell-scalar-scalar-integer-frame-bool-110)** > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.2.0](#implicit-body-non-parametric-unit-cell-scalar-scalar-integer-frame-bool-120)** > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.3.0](#implicit-body-non-parametric-unit-cell-scalar-scalar-integer-frame-bool-130)** > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.4.0](#implicit-body-non-parametric-unit-cell-scalar-scalar-integer-frame-bool-140)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field](#implicit-body-1-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.1.0](#implicit-body-1-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-110)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.2.0](#implicit-body-1-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-120)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.3.0](#implicit-body-1-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-130)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.4.0](#implicit-body-1-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-140)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field](#implicit-body-2-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-scalar-field)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.1.0](#implicit-body-2-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-scalar-field-110)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.2.0](#implicit-body-2-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-scalar-field-120)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.3.0](#implicit-body-2-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-scalar-field-130)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.4.0](#implicit-body-2-parameter-unit-cell-scalar-scalar-integer-frame-bool-scalar-field-scalar-field-140)** *** ## About this Block **What it does:** Creates a periodic lattice with built in **Cylindrical Cell Map**, **Trim Lattice**, and **Trim Cell Map** blocks. **Common uses:** * Quick method of creating a periodic lattice. ![Image](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/volume_lattices.png) *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.3.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Scalar, Integer, Frame, Bool, 1.4.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.3.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, 1.4.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.3.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Scalar, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.4.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Cell height | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's height direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's circumferential direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about it's center of mass. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Periodic Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/lattice/periodic-lattice > **[Non-Parametric Unit Cell, Cell Map](#non-parametric-unit-cell-cell-map)** > **[1 Parameter Unit Cell, Cell Map, Scalar Field](#1-parameter-unit-cell-cell-map-scalar-field)** > **[2 Parameter Unit Cell, Cell Map, Scalar Field, Scalar Field](#2-parameter-unit-cell-cell-map-scalar-field-scalar-field)** *** ## About this Block **What it does:** The base block for creating all periodic lattices. It combines all of the building blocks to construct a lattice: the Unit Cell, the Cell Map, and the Unit Cell's parameters. **Common uses:** * Base block for all periodic lattices. **Tips:** * This block has three overloads: No Parameter, 1 Parameter, and 2 Parameters. * The overload and parameter names automatically update to match the Unit Cell's parameters * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Periodic Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/periodic_lattice.png) *** ## Non-Parametric Unit Cell, Cell Map Generates a Lattice by tessellating a Unit Cell through a Cell Map. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Unit Cell to tessellate. | | Cell map | [Cell Map](../../../../block-documentation/types/cell-map) | Cell Map for unit cell placement. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## 1 Parameter Unit Cell, Cell Map, Scalar Field Generates a Lattice by tessellating a Unit Cell through a Cell Map. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Unit Cell to tessellate. | | Cell map | [Cell Map](../../../../block-documentation/types/cell-map) | Cell Map for unit cell placement. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | The value of the first parameter of the unit cell. | | This input is a dependent input, meaning that the value you provide, such as thickness, will depend on the selected unit cell. Each unit cell's documentation lists the specific parameter(s) associated with that cell. | | | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## 2 Parameter Unit Cell, Cell Map, Scalar Field, Scalar Field Generates a Lattice by tessellating a Unit Cell through a Cell Map. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Unit Cell to tessellate. | | Cell map | [Cell Map](../../../../block-documentation/types/cell-map) | Cell Map for unit cell placement. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | The value of the first parameter of the unit cell. | | This input is a dependent input, meaning that the value you provide, such as thickness, will depend on the selected unit cell. Each unit cell's documentation lists the specific parameter(s) associated with that cell. | | | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | The value of the second parameter of the unit cell. | | This input is a dependent input, meaning that the value you provide, such as thickness, will depend on the selected unit cell. Each unit cell's documentation lists the specific parameter(s) associated with that cell. | | | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Rectangular Volume Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/lattice/rectangular-volume-lattice > **[Implicit Body, Non-Parametric Unit Cell, Vector, Frame, Bool](#implicit-body-non-parametric-unit-cell-vector-frame-bool)** > **[Implicit Body, Non-Parametric Unit Cell, Vector, Frame, Bool, 1.1.0](#implicit-body-non-parametric-unit-cell-vector-frame-bool-110)** > **[Implicit Body, Non-Parametric Unit Cell, Vector, Frame, Bool, 1.2.0](#implicit-body-non-parametric-unit-cell-vector-frame-bool-120)** > **[Implicit Body, 1 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field](#implicit-body-1-parameter-unit-cell-vector-frame-bool-scalar-field)** > **[Implicit Body, 1 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, 1.1.0](#implicit-body-1-parameter-unit-cell-vector-frame-bool-scalar-field-110)** > **[Implicit Body, 1 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, 1.2.0](#implicit-body-1-parameter-unit-cell-vector-frame-bool-scalar-field-120)** > **[Implicit Body, 2 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, Scalar Field](#implicit-body-2-parameter-unit-cell-vector-frame-bool-scalar-field-scalar-field)** > **[Implicit Body, 2 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, Scalar Field, 1.1.0](#implicit-body-2-parameter-unit-cell-vector-frame-bool-scalar-field-scalar-field-110)** > **[Implicit Body, 2 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, Scalar Field, 1.2.0](#implicit-body-2-parameter-unit-cell-vector-frame-bool-scalar-field-scalar-field-120)** *** ## About this Block **What it does:** Creates a periodic lattice with built in **Rectangular Cell Map**, **Trim Lattice**, and **Trim Cell Map** blocks. **Common uses:** * Quick method of creating a periodic lattice. ![Image](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/volume_lattices.png) *** ## Implicit Body, Non-Parametric Unit Cell, Vector, Frame, Bool Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Vector, Frame, Bool, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Vector, Frame, Bool, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, Scalar Field Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, Scalar Field, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Vector, Frame, Bool, Scalar Field, Scalar Field, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Unit cell size | [Vector](../../../../block-documentation/types/vector) | Size of the Unit Cells in the Frame's X, Y, and Z directions. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Spherical Volume Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/lattice/spherical-volume-lattice > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool](#implicit-body-non-parametric-unit-cell-scalar-integer-integer-frame-bool)** > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool, 1.1.0](#implicit-body-non-parametric-unit-cell-scalar-integer-integer-frame-bool-110)** > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool, 1.2.0](#implicit-body-non-parametric-unit-cell-scalar-integer-integer-frame-bool-120)** > **[Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool, 1.3.0](#implicit-body-non-parametric-unit-cell-scalar-integer-integer-frame-bool-130)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field](#implicit-body-1-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, 1.1.0](#implicit-body-1-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field-110)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, 1.2.0](#implicit-body-1-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field-120)** > **[Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, 1.3.0](#implicit-body-1-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field-130)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field](#implicit-body-2-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field-scalar-field)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.1.0](#implicit-body-2-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field-scalar-field-110)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.2.0](#implicit-body-2-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field-scalar-field-120)** > **[Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.3.0](#implicit-body-2-parameter-unit-cell-scalar-integer-integer-frame-bool-scalar-field-scalar-field-130)** *** ## About this Block **What it does:** Creates a periodic lattice with built in **Spherical Cell Map**, **Trim Lattice**, and **Trim Cell Map** blocks. **Common uses:** * Quick method of creating a periodic lattice. ![Image](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/volume_lattices.png) *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-Parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, Non-Parametric Unit Cell, Scalar, Integer, Integer, Frame, Bool, 1.3.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a Non-Parametric Unit Cell, with additional overloads for 1 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Non-parametric Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 1 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, 1.3.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 2 or 0 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | One-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.1.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.2.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice's beams at the Volume input's surface. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Implicit Body, 2 Parameter Unit Cell, Scalar, Integer, Integer, Frame, Bool, Scalar Field, Scalar Field, 1.3.0 Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 2 Parameter Unit Cell, with additional overloads for 0 or 1 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. ### Inputs | Name | Type | Description | | - | - | - | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body in which the Lattice will be generated. | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Two-parameter Unit Cell to tessellate within the Volume input. | | Cell radius | [Scalar](../../../../block-documentation/types/scalar) | Unit Cell length in the Frame's radial direction. | | Latitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's latitudinal direction. | | Longitude count | [Integer](../../../../block-documentation/types/integer) | Number of Unit Cells in the Frame's longitudinal direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Optional Frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the Volume input's bounding box. | | Trim | [Bool](../../../../block-documentation/types/bool) | Option to trim the Lattice at the Volume input's surface. Trimming tolerance is 0.1% of the average of the input Volume's bounding box dimensions. | | Unit cell parameter 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | | Unit cell parameter 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value of the Unit Cell's second parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Stochastic Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/stochastic > **[Voronoi Surface Lattice](../../../block-documentation/blocks/lattices/stochastic/voronoi-surface-lattice)** > **[Voronoi Volume Lattice](../../../block-documentation/blocks/lattices/stochastic/voronoi-volume-lattice)** > **[Branched Lattice](../../../block-documentation/blocks/lattices/stochastic/branched-lattice)** > **[Delaunay Lattice](../../../block-documentation/blocks/lattices/stochastic/delaunay-lattice)** > **[Orthofoam Lattice](../../../block-documentation/blocks/lattices/stochastic/orthofoam-lattice)** # Branched Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/stochastic/branched-lattice ## About this Block **What it does:** Creates a branching tree-like Lattice between two lists of points. The Layers input specifies the number of intermediate layers in the branched tree-like structure. **Common uses:** * Useful for [converting CAD sketches into lattices](https://support.ntopology.com/hc/en-us/articles/4411160432531). **Tips:** * Zero layers create a lattice with no branches. * The Start points refer to where the lattice begins from and the End points are where the lattice ends. * The Layers refer to the amount of "branches" you want in your lattice. * High Layer values try to create branches equal to the Layer value, but is limited by the number and location of the End points. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Branched Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/branched.png) *** Creates a branching tree-like Lattice between two lists of points. ### Inputs | Name | Type | Description | | - | - | - | | Start points | [Point List](../../../../block-documentation/types/point) | The starting points. | | End points | [Point List](../../../../block-documentation/types/point) | The ending points. | | Layers | [Integer](../../../../block-documentation/types/integer) | The number of branching layers. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Delaunay Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/stochastic/delaunay-lattice ## About this Block **What it does:** Creates a Lattice forming a Delaunay tetrahedralization from a list of points. **Tips:** * You can configure the Method input to change the mesh features for creating the lattice. * Tetrahedralization requires at least four points to run. * Choose from the following lattice creation methods: * **Mesh edges:** Creates lattice beams along the mesh edges. * **Vertex Centroid:** Creates a vertex at each mesh face's centroid and the mesh vertices. Lattice beams connect the vertices. * **Dual:** Creates a vertex at the centroid of each mesh face and creates a connecting beam to the next closest mesh centroid. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Delaunay](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/delaunaymethods.png) *** Creates a Lattice forming a Delaunay tetrahedralization from a Point List. ### Inputs | Name | Type | Description | | - | - | - | | Vertices | [Point List](../../../../block-documentation/types/point) | Point List to connect via a Delaunay tetrahedralization. | | Method | Volume Lattice Enum | Mesh features for Lattice creation. | | Mesh Edges: Beams created from Mesh element edges. | | | | Vertex Centroid: Beams created from the centroid of each face to each vertex | | | | Dual: Beams created from the centroid of each face to the midpoint of each face's edge. | | | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice beam thickness. | | Include surface | [Bool](../../../../block-documentation/types/bool) | Option to generate a Lattice on the surface. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Orthofoam Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/stochastic/orthofoam-lattice ## About this Block **What it does:** Creates an Orthofoam Lattice by generating beams between points within a certain distance and direction of each other. **Tips:** * A scaling vector field is used to help influence the direction in which points will be connected. * The Valency input controls the minimum number of nearest vertices to join each vertex. * All of the points listed in the Vertices input cannot be on the same plane. At least one point must have a third coordinate value. Otherwise, the lattice will not generate. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Orthofoam Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/orthofoam.png) *** Creates an Orthofoam Lattice by generating beams between points within a certain distance and direction of each other. A scaling vector field is used to help influence the direction in which points will be connected. ### Inputs | Name | Type | Description | | - | - | - | | Vertices | [Point List](../../../../block-documentation/types/point) | List of points from which to generate the Lattice. | | Scale vector | [Vector Field](../../../../block-documentation/types/vector-field) | Vector field to scale the distance function used to connect neighboring vertices. | | Valency | [Integer](../../../../block-documentation/types/integer) | Minimum number of nearest vertices to join to each vertex. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Voronoi Surface Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/stochastic/voronoi-surface-lattice ## About this Block **What it does:** Creates a Lattice from the Voronoi diagram of a list of Seed points and a Surface Mesh. **Tips:** * Seed points not on the Mesh are not included in the Voronoi Surface Lattice. * The blocks **Random Points in Body** or **Random Points on Mesh** help create seed points. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Lattice from Surface Voronoi](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/surface_voronoi.png) *** Creates a Lattice from the Voronoi diagram of a list of Points restricted to the surface boundary of a body. ### Inputs | Name | Type | Description | | - | - | - | | Seed points | [Point List](../../../../block-documentation/types/point) | List of Points to generate the Voronoi Lattice from. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to generate the Voronoi Lattice on. | ### Outputs | Type | | - | | [Voronoi Surface Lattice](../../../../block-documentation/types/voronoi-surface-lattice) | # Voronoi Volume Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/stochastic/voronoi-volume-lattice > **[Seed points, Scalar Field, Mesh](#seed-points-scalar-field-mesh)** > **[Seed points, Scalar Field, Mesh, 1.1.0](#seed-points-scalar-field-mesh-110)** > **[Seed points, Scalar Field, Mesh, 1.2.0](#seed-points-scalar-field-mesh-120)** > **[Seed points, Scalar Field, Volume Mesh](#seed-points-scalar-field-volume-mesh)** *** ## About this Block **What it does:** Creates a Lattice from the Voronoi diagram of a list of seed points within a specified volume. **Tips:** * The Mesh input is optional, however; supplying a mesh will slow down the operation. Seed points not within the Mesh are not included in the Voronoi Lattice. * The block, **Random Points in Body**, is useful for creating seed points. * The seed points can be varied by using a Scalar Field, such as a **Ramp**, in their Point spacing input. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Lattice from Volume Voronoi](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/volume_voronoi.png) *** ## Seed points, Scalar Field, Mesh Creates a Lattice from the Voronoi diagram of a list of Points within a volume. ### Inputs | Name | Type | Description | | - | - | - | | Seed points | [Point List](../../../../block-documentation/types/point) | List of Points to generate the Voronoi Lattice from. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh or Volume Mesh to generate the Voronoi Lattice within. Providing a Volume Mesh will improve the speed of the operation. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | *** ## Seed points, Scalar Field, Mesh, 1.1.0 Creates a Lattice from the Voronoi diagram of a list of Points within a volume. ### Inputs | Name | Type | Description | | - | - | - | | Seed points | [Point List](../../../../block-documentation/types/point) | List of Points from which to generate the Voronoi Cells of the Lattice. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | | Boundary | [Mesh](../../../../block-documentation/types/mesh) | An optional boundary on which to generate a conformal Surface Voronoi Lattice. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | *** ## Seed points, Scalar Field, Mesh, 1.2.0 Creates a Lattice from the Voronoi diagram of a list of Points within a volume. ### Inputs | Name | Type | Description | | - | - | - | | Seed points | [Point List](../../../../block-documentation/types/point) | List of Points from which to generate the Voronoi Cells of the Lattice. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | | Boundary | [Mesh](../../../../block-documentation/types/mesh) | An optional boundary on which to generate a conformal Surface Voronoi Lattice. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | *** ## Seed points, Scalar Field, Volume Mesh Creates a Lattice from the Voronoi diagram of a list of Points within a volume. ### Inputs | Name | Type | Description | | - | - | - | | Seed points | [Point List](../../../../block-documentation/types/point) | List of Points to generate the Voronoi Lattice from. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | | Mesh | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | Mesh or Volume Mesh to generate the Voronoi Lattice within. Providing a Volume Mesh will improve the speed of the operation. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | # Unit Cells Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells > **[Graph Unit Cell](../../../block-documentation/blocks/lattices/unit-cells/graph-unit-cell)** > **[TPMS Unit Cell with Offset](../../../block-documentation/blocks/lattices/unit-cells/tpms-unit-cell-with-offset)** > **[Walled TPMS Unit Cell](../../../block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell)** > **[Walled TPMS Unit Cell with Offset](../../../block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell-with-offset)** > **[Orient Unit Cell](../../../block-documentation/blocks/lattices/unit-cells/orient-unit-cell)** > **[Custom Unit Cell](../../../block-documentation/blocks/lattices/unit-cells/custom-unit-cell)** > **[Import Unit Cell Rule](../../../block-documentation/blocks/lattices/unit-cells/import-unit-cell-rule)** # Custom Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells/custom-unit-cell > **[Implicit Body, Bounding Box](#implicit-body-bounding-box)** > **[Graph, Bounding Box](#graph-bounding-box)** *** ## About this Block **What it does:** The Custom Unit Cell block constructs a Custom Implicit Unit Cell from an Implicit Body. Any Implicit Body can be used in conjunction with a Unit Cell Domain Bounding Box. The Bounding Box defines the domain of the custom Unit cell. This is a Non-Parametric Unit Cell because it requires no additional parameters to define it, such as thickness. **Common uses:** * Used with a Cell Map to create a **Periodic Lattice**. **Tips:** * You cannot define additional parameters, such as thickness. * For Custom Unit Cells, it is ideal to have it be of equal size in X, Y, and Z directions to be easily scalable. * If you want to create a face-based Unit Cell you can import a thin CAD surface. When you convert it to an implicit, you will need to use the **Thicken Body** block to give it some thickness. Adding the thickness allows you to insert it into the Body input of the **Custom Unit Cell**. ![Custom Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/custom_lattice.png) Beta overload: ## About this Block **What it does:** The Beta overload of the **Custom Unit Cell** block constructs a 1-Paramater Unit Cell from a Graph. The Graph can consist of beams, faces, or a mix of both. **Common uses:** * Generate lattice structures using the Periodic Lattice block. **Tips:** * You can use the **Graph from Line Segments** block as a helper block for generating beam-based lattices. * Downstream operations such as simulation and filtering require accurate node and beam connectivity. Ensure the input Graph has vertices at all beam-beam intersections. Also, the Graph has beams at all face-face and co-planar beam-face intersections. * The Domain must be 3D. If you’re making a 2D unit cell, provide a 3D bounding box. * You can import a sketch from CAD, drag out the curves, construct line segments from the curves and use Graph from Line Segments block. * If the Graph extends outside the Domain, Graph won’t be trimmed. To fix, you must either scale the Graph down or increase the domain volume. Download Example: [Custom Implicit Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Graph_from_Line_Segments.ntop) ![Custom Implicit Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Custom_Implicit_Unit_Cell.png) *** ## Implicit Body, Bounding Box Constructs a Non-parametric Unit Cell from an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert to an implicit unit cell. | | Domain | [Bounding Box](../../../../block-documentation/types/bounding-box) | Bounding box to define the domain of the custom Unit Cell. | ### Outputs | Type | | - | | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | *** ## Graph, Bounding Box Constructs a 1 Parameter Unit Cell from a Graph. Parameter 1: Thickness ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph from which to construct the custom Unit Cell. | | Domain | [Bounding Box](../../../../block-documentation/types/bounding-box) | Bounding Box to define the domain of the custom Unit Cell. | ### Outputs | Type | | - | | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | # Graph Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells/graph-unit-cell ## About this Block **What it does:** Allows you to select a Unit Cell from a library of graph-based Unit Cells. This block is a 1 Parameter Unit Cell, requiring only one parameter to define it. The one parameter is the Thickness of the beam or face. **Common uses:** * Used with a Cell Map to create a **Periodic Lattice**. **Tips:** * The orientation changes the layout of the Unit Cell, which can affect the structure based on its usage. * A Unit Cell Preview window appears when the block is visible. It allows you to change between the Graph or Implicit view, preview the Thickness, and toggle on or off the Bounding Box and the UVW guides. ![Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/graphunit.png) *** Single parameter graph Unit Cell. Parameter 1: Thickness. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [Volumetric Rule](../../../../block-documentation/types/volumetric-rule) | The selected Unit Cell for the Lattice generation workflow. | | Orientation | Permutation Enum | Unit Cell orientation (UVW). | ### Outputs | Type | | - | | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | # Import Unit Cell Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells/import-unit-cell-rule ## About this Block **What it does:** Imports a lattice .rule file from an external location. The output of this block is a 1 Parameter Unit Cell. **Common uses:** * Used with a Cell Map to create a **Periodic Lattice**. *** Import Unit Cell Rule file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Unit Cell Rule file. | ### Outputs | Type | | - | | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | # Orient Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells/orient-unit-cell > **[Non-Parametric Unit Cell, Permutation Enum](#non-parametric-unit-cell-permutation-enum)** > **[1 Parameter Unit Cell, Permutation Enum](#1-parameter-unit-cell-permutation-enum)** > **[2 Parameter Unit Cell, Permutation Enum](#2-parameter-unit-cell-permutation-enum)** *** ## About this Block **What it does:** Changes the orientation of a Unit Cell. **Common uses:** * To change the orientation when using the **Custom Implicit Unit Cell** and **Import Element Pro Rule** blocks. **Tips:** * The other Unit Cell blocks have orientation configuration built-in. *** ## Non-Parametric Unit Cell, Permutation Enum Changes the orientation of a Unit Cell. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | Unit Cell to orient. | | Orientation | Permutation Enum | Unit Cell UVW orientation. | ### Outputs | Type | | - | | [Non-Parametric Unit Cell](../../../../block-documentation/types/non-parametric-unit-cell) | *** ## 1 Parameter Unit Cell, Permutation Enum Changes the orientation of a Unit Cell. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Unit Cell to orient. | | Orientation | Permutation Enum | Unit Cell UVW orientation. | ### Outputs | Type | | - | | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | *** ## 2 Parameter Unit Cell, Permutation Enum Changes the orientation of a Unit Cell. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | Unit Cell to orient. | | Orientation | Permutation Enum | Unit Cell UVW orientation. | ### Outputs | Type | | - | | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | # TPMS Unit Cell with Offset Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells/tpms-unit-cell-with-offset ## About this Block **What it does:** Allows you to select a unit cell from a library of TPMS Unit Cells. This block is a 1 Parameter Unit Cell, requiring only one parameter to define it. The parameter is the Mid-surface offset of the TPMS as either a positive or negative distance. **Common uses:** * Used with a Cell Map to create a **Periodic Lattice**. **Tips:** * The Mid-surface offset wall shifts inward for negative values and outward for positive values. * The orientation changes the layout of the Unit Cell, which can affect the structure based on its usage. * A Unit Cell Preview window appears when the block is visible. It allows you to preview the Mid-surface offset and toggle the Bounding Box and the UVW guides on or off. ![Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/tpmsbias.png) *** Single Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS are crystalline minimal surfaces, meaning they are periodic in 3 dimensions. Parameter 1: Mid-surface Offset - Offset of the TPMS as a positive or negative approximate distance. This will shift the mid-surface wall inward or outward. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | TPMS Enum | The selected Unit Cell for the Lattice generation workflow. | | Orientation | Permutation Enum | Unit Cell Orientaion (UVW). | ### Outputs | Type | | - | | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | # Walled TPMS Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell ## About this Block **What it does:** Selects a Unit Cell from a library of Walled TPMS Unit Cells. This block is a 1 Parameter Unit Cell, requiring one parameter to define it. The Unit Cell’s parameter is the Approximate thickness of the TPMS walls. Lattices generated may have a different wall thickness than your input value, and the deviation from the value may vary from one location to another on the part. **Common uses:** * Used with a Cell Map to create a **Periodic Lattice** **Tips:** * Use this block for initial design exploration when fast iterations are needed or for scenarios where exact wall thickness isn’t required. If you require exact thickness, use the Beta overload [Walled TPMS Unit Cell (Beta)](/block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell.html/#beta) with the Exact thickness input checked. * If you need to re-orient the Unit Cell, specify a new UVW using the Orientation drop-down. * A Unit Cell Preview window appears when the block is visible. The preview shows the effect of different Approximate thickness and Mid-surface offset values and allows you to toggle the visibility of the Unit Cell’s Bounding Box and UVW guides. ![Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/walledtpms.png) ### [Beta overload](#beta) ## About this Block **What it does:** Selects a Unit Cell from a library of Walled TPMS Unit Cells. This block is a 1 Parameter Unit Cell, requiring one parameter to define it. The Unit Cell’s parameter is the Thickness of the TPMS walls. When the Exact thickness input is not checked, the thickness value is approximate. Lattices generated may have a different wall thickness than desired, and the deviation from the input value may vary from one location to another on the part. **Common uses:** * Used with a Cell Map to create a **Periodic Lattice** **Tips:** * Lattices will generate much faster when Exact thickness is unchecked. Use this setting when fast iterations are needed or for scenarios where you do not require exact wall thickness. At later stages in the process, once you have finalized the design, check Exact thickness. This will refine the lattice’s wall thickness to match your input value. * When Exact thickness is checked, all downstream operations, such as Booleans, meshing, slicing, etc., will take longer. To avoid this slow-down affecting multiple operations, you can mesh your Exact thickness TPMS using the **Mesh from Implicit Body block**, and then convert it back into an Implicit Body using the **Implicit Body from Mesh** block. Use this new implicit from the **Implicit Body from Mesh** block for all downstream modeling operations. * If you need to re-orient the Unit Cell, specify a new UVW using the Orientation drop-down. * A Unit Cell Preview window appears when the block is visible. The preview shows the effect of different Approximate thickness and Mid-surface offset values and allows you to toggle the visibility of the Unit Cell’s Bounding Box and UVW guides. *** Single Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS Unit Cells are periodic in all 3 dimensions. Parameter 1: Thickness - Thickness of the TPMS walls. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | TPMS Enum | The selected Unit Cell to populate the Lattice. | | Orientation | Permutation Enum | Unit Cell Orientaion (UVW). | | Exact thickness | [Bool](../../../../block-documentation/types/bool) | Option to refine wall thickness to match the desired value. When selected, generation of lattices that use this cell will be slower. Other downstream operations on this lattice, such as meshing and slicing, will also be slower. | ### Outputs | Type | | - | | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | # Walled TPMS Unit Cell with Offset Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell-with-offset ## About this Block **What it does** Selects a Unit Cell from a library of Walled TPMS Unit Cells. This block is a 2 Parameter Unit Cell, requiring two parameters to define it. The first parameter is the Approximate thickness of the TPMS walls, shown as T in the image below. Lattices generated may have a different wall thickness than your input value, and the deviation from the value may vary from one location to another on the part. The second parameter is the Mid-surface offset distance of the TPMS, shown as D in the image below. The offset can be a positive or negative distance. When viewing the Unit Cell in Front view, positive values move the mid-surface left, and negative values move it right. ![Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/walledtpmsoffset_beta.png) **Common uses:** * Used with a Cell Map to create a **Periodic Lattice**. **Tips:** * Use this block for initial design exploration when fast iterations are needed or for scenarios where exact wall thickness isn’t required. If you require exact thickness, use the Beta overload [Walled TPMS Unit Cell with Offset (Beta)](/block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell-with-offset.html/#beta) with the Exact thickness input checked. * If you need to re-orient the Unit Cell, specify a new UVW using the Orientation drop-down. * A Unit Cell Preview window appears when the block is visible. The preview shows the effect of different Approximate thickness and Mid-surface offset values and allows you to toggle the visibility of the Unit Cell’s Bounding Box and UVW guides. ### [Beta overload](#beta) ## About this Block **What it does:** Selects a Unit Cell from a library of Walled TPMS Unit Cells. This block is a 2 Parameter Unit Cell, requiring two parameters to define it. The first parameter is the Thickness of the TPMS walls, shown as T in the image below. When the Exact thickness input is not checked, the thickness value is approximate. Lattices generated may have a different wall thickness than desired, and the deviation from the input value may vary from one location to another on the part. The second parameter is the Mid-surface offset distance of the TPMS, shown as D in the image below. The offset can be a positive or negative distance. When viewing the Unit Cell in Front view, positive values move the mid-surface left, and negative values move it right. ![Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/walledtpmsoffset_beta.png) **Common uses:** * Used with a Cell Map to create a **Periodic Lattice** **Tips:** * Lattices will generate much faster when Exact thickness is unchecked. Use this setting when fast iterations are needed or for scenarios where you do not require exact wall thickness. At later stages in the process, once you have finalized the design, check Exact thickness. This will refine the lattice’s wall thickness to match your input value. * When Exact thickness is checked, all downstream operations, such as Booleans, meshing, slicing, etc., will take longer. To avoid this slow-down affecting multiple operations, you can mesh your Exact thickness TPMS using the **Mesh from Implicit Body block**, and then convert it back into an Implicit Body using the **Implicit Body from Mesh** block. Use this new implicit from the **Implicit Body from Mesh** block for all downstream modeling operations. * If you need to re-orient the Unit Cell, specify a new UVW using the Orientation drop-down. * A Unit Cell Preview window appears when the block is visible. The preview shows the effect of different Approximate thickness and Mid-surface offset values and allows you to toggle the visibility of the Unit Cell’s Bounding Box and UVW guides. *** 2 Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS Unit Cells are periodic in all 3 dimensions. Parameter 1: Thickness - Thickness of the TPMS walls. Parameter 2: Mid-surface Offset - Offset of the TPMS as a positive or negative approximate distance. This will shift the mid-surface wall inward or outward. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | TPMS Enum | The selected Unit Cell to populate the Lattice. | | Orientation | Permutation Enum | Unit Cell Orientaion (UVW). | | Exact thickness | [Bool](../../../../block-documentation/types/bool) | Option to refine wall thickness to match the desired value. When selected, generation of lattices that use this cell will be slower. Other downstream operations on this lattice, such as meshing and slicing, will also be slower. | ### Outputs | Type | | - | | [2 Parameter Unit Cell](../../../../block-documentation/types/2-parameter-unit-cell) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities > **[Trim Cell Map](../../../block-documentation/blocks/lattices/utilities/trim-cell-map)** > **[Warp Cell Map](../../../block-documentation/blocks/lattices/utilities/warp-cell-map)** > **[Trim Lattice](../../../block-documentation/blocks/lattices/utilities/trim-lattice)** > **[Modify Lattice Thickness](../../../block-documentation/blocks/lattices/utilities/modify-lattice-thickness)** > **[Merge Graphs](../../../block-documentation/blocks/modeling/utilities/merge-graphs)** > **[Extrude Lattice](../../../block-documentation/blocks/lattices/utilities/extrude-lattice)** > **[Extend Open Lattice Beams](../../../block-documentation/blocks/lattices/utilities/extend-open-lattice-beams)** > **[Collapse Vertices](../../../block-documentation/blocks/modeling/utilities/collapse-vertices)** > **[Collapse Vertices by Angle](../../../block-documentation/blocks/lattices/utilities/collapse-vertices-by-angle)** > **[Graph from Line Segments](../../../block-documentation/blocks/lattices/utilities/graph-from-line-segments)** > **[Graph from Mesh Faces](../../../block-documentation/blocks/lattices/utilities/graph-from-mesh-faces)** > **[Lattice from Beams](../../../block-documentation/blocks/lattices/utilities/lattice-from-beams)** > **[Lattice from Graph](../../../block-documentation/blocks/lattices/utilities/lattice-from-graph)** > **[Filter Beams by Length](../../../block-documentation/blocks/lattices/utilities/filter-beams-by-length)** > **[Filter Beams by Angle](../../../block-documentation/blocks/lattices/utilities/filter-beams-by-angle)** > **[Filter Beams by Connectivity](../../../block-documentation/blocks/lattices/utilities/filter-beams-by-connectivity)** > **[Filter Beams by Containment](../../../block-documentation/blocks/lattices/utilities/filter-beams-by-containment)** > **[Filter Beams by Thickness](../../../block-documentation/blocks/lattices/utilities/filter-beams-by-thickness)** > **[Filter Beams](../../../block-documentation/blocks/lattices/utilities/filter-beams)** > **[Warp Cell Map to Body](../../../block-documentation/blocks/lattices/utilities/warp-cell-map-to-body)** > **[Lattice Pore Size](../../../block-documentation/blocks/lattices/utilities/lattice-pore-size)** # Collapse Vertices by Angle Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/collapse-vertices-by-angle > **[Graph, Scalar](#graph-scalar)** > **[Lattice, Scalar](#lattice-scalar)** *** ## Graph, Scalar Remove all of the intermediate vertices of a Graph where the vertex valency is equal to 2. All intermediate vertices will be removed by default, but an optional threshold angle may be used to preserve sharp vertices. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | The Graph of which to collapse the beams. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowed angular difference between beams joined by a single vertex. Beam angles greater than this threshold will be removed, collapsing the neighboring beams into one. A value of 180 deg will preserve all vertices. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Lattice, Scalar Remove all of the intermediate vertices of a Lattice where the vertex valency is equal to 2. All intermediate vertices will be removed by default, but an optional threshold angle may be used to preserve sharp vertices. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | The Lattice of which to collapse the beams. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowed angular difference between beams joined by a single vertex. Beam angles greater than this threshold will be removed, collapsing the neighboring beams into one. A value of 180 deg will preserve all vertices. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Extend Open Lattice Beams Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/extend-open-lattice-beams > **[Lattice, Scalar Field, Implicit Body, Selection Region, Scalar](#lattice-scalar-field-implicit-body-selection-region-scalar)** > **[Lattice, Scalar Field, Implicit Body, Selection Region, Scalar, 1.1.0](#lattice-scalar-field-implicit-body-selection-region-scalar-110)** > **[Voronoi Volume Lattice, Scalar Field, Implicit Body, Selection Region, Scalar](#voronoi-volume-lattice-scalar-field-implicit-body-selection-region-scalar)** > **[Voronoi Volume Lattice, Scalar Field, Implicit Body, Selection Region, Scalar, 1.1.0](#voronoi-volume-lattice-scalar-field-implicit-body-selection-region-scalar-110)** *** ## About this Block **What it does:** Extends open beams within a Lattice by using a Body input to select which beams to extend. **Tips:** * The Region input allows for following selection methods: * **Inside:** Selects open beams inside the Body. * **Outside:** Selects open beams outside the Body. * **Boundary:** Selects open beams on the surface of the Body. * Adjusting the Tolerance input value determines which beams are considered inside, outside, or on the surface. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ## Example File Download Example: [Extend Open Lattice Beams](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/extend_open_lattice_body_beams.ntop) ![Extend Open Lattice Beams](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/extend.png) *** ## Lattice, Scalar Field, Implicit Body, Selection Region, Scalar Extends open beams within a Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice containing open beams to extend. | | Distance | [Scalar Field](../../../../block-documentation/types/scalar-field) | Distance to extend the open beams. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body defining the beam selection region. | | Region | [Selection Region](../../../../block-documentation/types/selection-region) | Option to select beams inside, outside, or touching the surface of the Implicit Body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the Implicit Body. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Lattice, Scalar Field, Implicit Body, Selection Region, Scalar, 1.1.0 Extends open beams within a Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice containing open beams to extend. | | Distance | [Scalar Field](../../../../block-documentation/types/scalar-field) | Distance to extend the open beams. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body defining the beam selection region. | | Region | [Selection Region](../../../../block-documentation/types/selection-region) | Option to select beams inside, outside, or touching the surface of the Implicit Body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the Implicit Body. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Voronoi Volume Lattice, Scalar Field, Implicit Body, Selection Region, Scalar Extend open beams within a Voronoi Volume Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Voronoi lattice | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | Voronoi Volume Lattice containing open beams to extend. | | Distance | [Scalar Field](../../../../block-documentation/types/scalar-field) | Distance to extend the open beams. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body defining the beam selection region. | | Region | [Selection Region](../../../../block-documentation/types/selection-region) | Option to select beams inside, outside, or touching the surface of the implicit body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the implicit body. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | *** ## Voronoi Volume Lattice, Scalar Field, Implicit Body, Selection Region, Scalar, 1.1.0 Extend open beams within a Voronoi Volume Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Voronoi lattice | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | Voronoi Volume Lattice containing open beams to extend. | | Distance | [Scalar Field](../../../../block-documentation/types/scalar-field) | Distance to extend the open beams. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body defining the beam selection region. | | Region | [Selection Region](../../../../block-documentation/types/selection-region) | Option to select beams inside, outside, or touching the surface of the implicit body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance value to use for determining when beams are inside, outside, or on the boundary of the implicit body. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | # Extrude Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/extrude-lattice > **[Lattice, Scalar Field, Scalar Field, Scalar Field](#lattice-scalar-field-scalar-field-scalar-field)** > **[Lattice, Vector Field, Scalar Field, Scalar Field](#lattice-vector-field-scalar-field-scalar-field)** *** ## About this Block **What it does:** Creates directional ribs from the beam elements of a Lattice. **Tips:** * The Direction input requires a field to derive the normal direction from. * Each beam's Height is measured from the surface of the initial lattice. * The Direction, Height, and Thickness inputs are all scalar field inputs that can use the **Ramp** block to vary the properties of the ribs. * The outward direction of the implicit body used in the Direction input is the positive direction of the field. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Rib Lattice from Beams](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/rib_lattice.png) *** ## Lattice, Scalar Field, Scalar Field, Scalar Field Creates directional ribs from the beams of a Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice from which to extrude ribs. | | Direction | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to derive the normal direction from. | | Height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to assign height at rib locations. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Lattice, Vector Field, Scalar Field, Scalar Field Creates directional ribs from the beams of a Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice from which to extrude ribs. | | Direction | [Vector Field](../../../../block-documentation/types/vector-field) | Field to derive the offset direction from. | | Height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to assign height at rib locations. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Filter Beams Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/filter-beams ## About this Block **What it does:** Filters a list of beams by a conditional statement that compares a list of corresponding values to a target reference value. **Common uses:** * Editing lattices. **Tips:** * Each value in the Values list is compared against the Criteria with the selected Condition. If the comparison is false, the corresponding element in the Lattice's beams list is filtered out of the resulting Lattice. Therefore, the number of Values must match the number of beams in the input Lattice. * The Criteria is the value to determine the requirement for filtering. * The Condition options are: * Equals * Not Equal * Less Than * Less Than or Equal to * Greater Than * Greater Than or Equal to * This block is a Custom Block. Right-click and select 'Export Block' to save and open up the Notebook that is running the block. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. *** Filters the beams of a Lattice based on a criteria. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to filter. | | Values | [Scalar List](../../../../block-documentation/types/scalar) | Values to compare against the criteria. There should be one value per beam. | | Condition | Comparison Enum | Logical arguments used with the filter criteria. | | Criteria | [Scalar](../../../../block-documentation/types/scalar) | Value to determine the requirement for filtering. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Filter Beams by Angle Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/filter-beams-by-angle ## About this Block **What it does:** Filters beams of a Lattice by their angle with respect to a plane. Conditions are applied with respect to the angle. **Common uses:** * Editing lattices. **Tips:** * The Condition options are: * Equals * Not Equal * Less Than * Less Than or Equal to * Greater Than * Greater Than or Equal to * This block is a Custom Block. Right-click and select 'Export Block' to save and open up the Notebook that is running the block. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Filter](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filterangle.png) *** Filters the beams of a Lattice by their angle with respect to a plane. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to filter. | | Condition | Comparison Enum | Logical arguments used with the filter criteria, Angle. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Beam angle filter criteria. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane used to determine the relative angle of the lattice beams. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Filter Beams by Connectivity Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/filter-beams-by-connectivity ## About this Block **What it does:** Filters beams of a Lattice by their connectivity. **Common uses:** * Editing lattices. **Tips:** * The Connectivity options are: * **Open:** Keeps only beams with one open node and one connected node. * **Closed:** Keeps only beams that are connected on both nodes. * **Floating:** Keeps only beams with two open nodes. * This block is a Custom Block. Right-click and select 'Export Block' to save and open up the Notebook that is running the block. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Filter](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filterconnect.png) *** Selects beams of an input Lattice that match a beam connectivity type. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to select beams from. | | Connectivity | [Choice](../../../../block-documentation/types/choice) | Type of beams to select from the input Lattice. A beam can be one of the following types: | * Closed: The beam is not floating and not open. * Floating: Both beam endpoints are only connected to each other. * Open: One endpoint of the beam is not the endpoint of any another beam. The other endpoint is the endpoint of more than one beam. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Filter Beams by Containment Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/filter-beams-by-containment ## About this Block **What it does:** Filters beams of a Lattice by a Region and a containment. **Common uses:** * Editing lattices. **Tips:** * The Inside region options are: * **Full:** Keeps only beams with both nodes within the Region. * **Partial:** Keeps only beams with at least one node within the Region. * The Region can be any object that can convert to a Scalar Field. A node is considered within the Region if its field's value is less than or equal to zero at the node's coordinate. * This block is a Custom Block. Right-click and select 'Export Block' to save and open up the Notebook that is running the block. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Filter](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filtercontain.png) *** Filters the beams of a Lattice by a region and a containment. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to filter. | | Region | [Implicit Body](../../../../block-documentation/types/implicit-body) | The volume that is used to determine if a beam is inside or outside the domain. | | Inside region | [Choice](../../../../block-documentation/types/choice) | Option to include beams based on full containment (both nodes fall within domain) or partial containment (either nodes falls within domain). | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Filter Beams by Length Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/filter-beams-by-length ## About this Block **What it does:** Filters the beams of a Lattice by a beam length criteria and a conditional. **Common uses:** * Editing lattices. **Tips:** * The Condition options are: * Equals * Not Equal * Less Than * Less Than or Equal to * Greater Than * Greater Than or Equal to * This block is a Custom Block. Right-click and select 'Export Block' to save and open up the Notebook that is running the block. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Filter](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filterlength.png) *** Filters the beams of a Lattice by a beam length criteria and a conditional. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to filter. | | Condition | Comparison Enum | Logical arguments used with the filter criteria, Length. | | Length | [Scalar](../../../../block-documentation/types/scalar) | The filter criteria, beam length from the Lattice. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Filter Beams by Thickness Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/filter-beams-by-thickness ## About this Block **What it does:** Filters the beams of a Lattice by a beam thickness criteria and a conditional. **Common uses:** * Editing lattices. **Tips:** * The Condition options are: * Equals * Not Equal * Less Than * Less Than or Equal to * Greater Than * Greater Than or Equal to * This block is a Custom Block. Right-click and select 'Export Block' to save and open up the Notebook that is running the block. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Filter](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filterthickness.png) *** Filters the beams of a Lattice by a beam thickness criteria and a conditional. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to filter. | | Condition | Comparison Enum | Logical arguments used with the filter criteria, Thickness. | | Thickness | [Scalar](../../../../block-documentation/types/scalar) | Beam thickness filter criteria. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Graph from Line Segments Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/graph-from-line-segments ## About this Block **What it does:** The **Graph from Line Segments** block converts line segments to a graph type. **Common uses:** * Used as a utility block for creating a Custom Graph Unit Cell. Use as the input into the **Custom Unit Cell** block. * Used for support structure generation. **Tips:** * Any invalid (infinite line or NaN endpoint) line segments are ignored and will not be in the output Graph. * Duplicate line segments are removed from the Graph. ## Example File Download Example: [Graph from Line Segments](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Graph_from_Line_Segments.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Graph_from_Line_Segments.png) *** Constructs a Graph from a list of Line Segments. Each Line Segment becomes a beam in the resulting Graph. Line Segments that share endpoints will join a shared vertex. Duplicate Line Segments will be removed. ### Inputs | Name | Type | Description | | - | - | - | | Line segments | [Line List](../../../../block-documentation/types/line) | Line Segments to construct the Graph. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Graph from Mesh Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/graph-from-mesh-faces Constructs a Graph from the faces of a Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Faces | [Mesh](../../../../block-documentation/types/mesh) | Mesh to construct the Graph. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Lattice from Beams Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/lattice-from-beams ## About this Block **What it does:** Converts a list of beams into a Lattice. **Tips:** * Beams are obtained from Lattice Properties in the Information Panel. * The thickness of the Beams is kept from the Lattice the Beams originated from. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. *** Creates a Lattice from a list of filtered Beams. The Beams must have originated from the same Lattice. This block is used internally in the Filter Beams utility blocks. ### Inputs | Name | Type | Description | | - | - | - | | Beams | [Beam List](../../../../block-documentation/types/beam) | Beams to be converted into a Lattice. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Lattice from Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/lattice-from-graph ## About this Block **What it does:** Creates a Lattice from a specified Graph and Thickness. **Common uses:** * Converting the Graph type used in the deprecated Lattice blocks into the third generation Lattice type. * Converting an imported Graph type into the Lattice type. **Tips:** * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. *** Creates a Lattice from a Graph and a Thickness Scalar Field. The Graph's existing thickness data will be overridden. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph to convert into a Lattice. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Lattice thickness. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Lattice Pore Size Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/lattice-pore-size ## About this Block This block calculates the pore diameters of any graph lattice. This is useful for verifying the pores are large enough for powder removal, as well as other applications such as filtration analysis. Pore diameter is defined as the diameter of the largest sphere that fits inside a pore without overlapping the structure. The output is a Point Map that contains each sphere’s center point and diameter. Depending on the size and complexity of your lattice, the calculation may be CPU intensive. Visualize the pore diameters by following these steps: * Add a **Sphere** block * Input the **Pore Diameters from Lattice** points properties into the Center point input * Add a **Divide** block to the Radius input (we need to divide the values by 2 since we are using diameters) * In Operand A input the **Pore Diameter from Lattice** values properties * In Operand B type in 2 These steps are shown in the image below: ![Pore Diameters from Lattice Visualize](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pore_diameter2.jpg) ## Example File Download Example: [Pore Diameters from Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pore_diameter.ntop) *In this example, create a point map of pore diameters and visualize them using spheres.* ![Pore Diameters from Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pore_diameter.jpg) *** Calculates the pore diameters of any graph lattice. Pore diameter is defined as the diameter of the largest sphere that fits inside a pore without overlapping the structure. The output is a Point Map that contains each sphere's center point and diameter. Depending on the size and complexity of your lattice, the calculation may be CPU intensive. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | The Lattice from which to calculate pore diameters. | | Smallest pore size | [Scalar](../../../../block-documentation/types/scalar) | The smallest anticipated pore size. Pores whose diameters are smaller than this value will be ignored and not included in the output. Must be greater than 0. As this value decreases the block will take longer to compute. | | Domain | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional boundary volume within which to calculate pores. | | Allow overlap | [Bool](../../../../block-documentation/types/bool) | Option to allow overlapping pores. If true, spheres created from the resulting Point Map may intersect. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | # Modify Lattice Thickness Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/modify-lattice-thickness > **[Lattice, Scalar Field](#lattice-scalar-field)** > **[Voronoi Volume Lattice, Scalar Field](#voronoi-volume-lattice-scalar-field)** *** ## About this Block **What it does:** Modifies the thickness of a selected Lattice. **Common uses:** * Testing out different lattice thickness. **Tips:** * Overrides the Thickness of the input lattice. * The Thickness of the lattice is a Scalar Field type, which allows for a variable Thickness. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. *** ## Lattice, Scalar Field Modifies the thickness of a Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to modify. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | New thickness field. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Voronoi Volume Lattice, Scalar Field Modify the thickness of a Voronoi Volume Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | Voronoi Volume Lattice which the thickness modification will be applied to. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | New thickness field. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | # Trim Cell Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/trim-cell-map ## About this Block **What it does:** Trims Unit Cells from a Cell Map by using an Implicit Body as the filter. The Unit Cells are chosen based on the Fill type and the Cells to remain. **Common uses:** * Custom Cell Map shapes. **Tips:** * Trims a Cell Map by removing entire Unit Cells. The Unit Cells maintain their size and aren't able to be partially trimmed. * The Unit Cells to be trimmed are chosen based on the Fill type. The following Fill types are available: * **Centroid Inside:** If the Unit Cell's *centroid* is within the Body. * **All inside:** The *entire* Unit Cell is within the Body. * **All touching:** If *any part* of the Unit Cell is within the Body. The tolerance for this option is 10^-5 m. * Depending on the Fill type you select, some cells may still be outside the Body. * The block keeps the Unit Cells based on the Cells to remain input. There are two options: * Inside: Keeps all the Unit Cells that satisfy to the selected Fill type. * Outside: Keeps all the Unit Cells that don't satisfy to the selected Fill type. * If **Trim Cell Map** doesn't create the results you are looking for, try using the **Trim Lattice** block. * The **Trim Cell Map** block doesn't trim Unit Cells. All Unit Cells are kept whole. * The **Trim Lattice** block trims the Lattice, allowing Unit Cells to be trimmed to the specified Body. ![Trim](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/trimcellmap.png) *** Trims a Cell Map with an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Cell map | [Cell Map](../../../../block-documentation/types/cell-map) | Cell Map to trim. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body trimming tool. | | Fill type | Volume Lattice Fill Enum | Rule for trimming the Cell Map. | Centroid inside: Unit Cells whose centroid is inside the Body will remain. All inside: Unit Cells with all eight corners inside the Body will remain. All touching: Unit Cells that touch or contain any part of the Body will remain. | \| Cells to remain | Inside or Outside Enum | Option to keep the cells that are inside or outside of the trimming tool. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Trim Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/trim-lattice > **[Graph, Implicit Body, Inside or Outside Enum, Scalar, 1.1.0](#graph-implicit-body-inside-or-outside-enum-scalar-110)** > **[Lattice, Implicit Body, Inside or Outside Enum, Scalar, Bool](#lattice-implicit-body-inside-or-outside-enum-scalar-bool)** > **[Voronoi Volume Lattice, Implicit Body, Inside or Outside Enum, Scalar, Bool](#voronoi-volume-lattice-implicit-body-inside-or-outside-enum-scalar-bool)** *** ## About this Block **What it does:** Trims lattice beams using a Volume, creating your desired lattice shape. You have the option to keep the beams inside of the Volume or outside, based on a Feature tolerance. A toggle switch allows you to round the edges of the remaining trimmed lattice. **Common uses:** * Creating custom lattice shapes. **Tips:** * The block keeps the lattice beams based on the Lattice to remain input. There are two options: * Inside: Keeps all the lattice beams within the Volume input. * Outside: Keeps all the lattice beams outside of the Volume input. * If you toggle on the Rounded edges input, the edges may protrude past your trimming volume. * You can use a Plane in the Volume input. * Open up the block's Properties Panel to view the beam, implicit, and thick graph properties. * These properties are populated based on the type of Unit Cell you use. An error sign with a tooltip appears next to the property if it is empty. ![Trim Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/trim_lattice_body.png) *** ## Graph, Implicit Body, Inside or Outside Enum, Scalar, 1.1.0 Trims a lattice with an Implicit Body as a trimming tool. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph to trim. | | Domain | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to act as trimming Domain. | | To remain | Inside or Outside Enum | Option to trim the lattice inside or outside of the trimming Domain. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture boundary. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Lattice, Implicit Body, Inside or Outside Enum, Scalar, Bool Trims a lattice with an Implicit Body as a trimming tool. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to be trimmed. | | Domain | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to act as trimming Domain. | | To remain | Inside or Outside Enum | Option to trim the lattice inside or outside of the trimming Domain. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture boundary. | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges of the resulting Lattice. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Voronoi Volume Lattice, Implicit Body, Inside or Outside Enum, Scalar, Bool Trims a lattice with an Implicit Body as a trimming tool. ### Inputs | Name | Type | Description | | - | - | - | | Voronoi lattice | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | Lattice to be trimmed. | | Domain | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to act as trimming Domain. | | To remain | Inside or Outside Enum | Option to trim the lattice inside or outside of the trimming Domain. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture boundary. | | Rounded edges | [Bool](../../../../block-documentation/types/bool) | Option to round edges of the resulting Lattice. | ### Outputs | Type | | - | | [Voronoi Volume Lattice](../../../../block-documentation/types/voronoi-volume-lattice) | # Warp Cell Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/warp-cell-map ## About this Block **What it does:** Warps the unit cell size distribution of a Cell Map using 3 sizing fields. **Common uses:** * Modifying Cell Maps. **Tips:** * Increase the Discretization value to capture more details from the input sizing fields. * The U, V, W scales control the stretch in their respective directions. Negative scale values shrink the cells, positive values expand the cells. * The lock U, V, and W bounds checkboxes provide the option to freeze in-plane displacement on each of the three boundaries. * Since the block prevents out-of-plane warping at the boundaries of the Cell Map, the amount of local stretching and compression that can take place is restricted. This means that local cell size depends on how large the weight field is locally relative to the weight field in the rest of the domain (where the domain refers to the body and boundary of the Cell Map). Hence, there is no direct correlation between the inputs of U, V, and W scale fields and the output cell size. * Some common warping fields include: * The U, V, or W fields from the original Cell Map properties with a **Multiply** or **Add** block. * **Ramp** with simulation results in the field. ![Warp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/warp_cell_map.gif) *** Warp the unit cell size distribution of a cell map using 3 sizing fields. ### Inputs | Name | Type | Description | | - | - | - | | Cell map | [Cell Map](../../../../block-documentation/types/cell-map) | Cell map to be warped. | | U scale | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to control stretch in U-direction. Negative will shrink, positive will expand. | | V scale | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to control stretch in V-direction. Negative will shrink, positive will expand. | | W scale | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to control stretch in W-direction. Negative will shrink, positive will expand. | | Lock u bounds | [Bool](../../../../block-documentation/types/bool) | Option to freeze in-plane displacement on U boundaries. | | Lock v bounds | [Bool](../../../../block-documentation/types/bool) | Option to freeze in-plane displacement on V boundaries. | | Lock w bounds | [Bool](../../../../block-documentation/types/bool) | Option to freeze in-plane displacement on W boundaries. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Warp Cell Map to Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lattices/utilities/warp-cell-map-to-body ## About this Block **What it does:** The **Warp Cell Map to Body** block warps a Cell Map to an Implicit Body’s inner surface by warping the Cell Map's outer layer of vertices to conform to the surface. A maximum of one layer of cells outside of the body’s volume is a good starting point. The block is designed to conform an entire Cell Map to an Implicit Body. Conforming only a partial section of the Cell Map is not supported. **Common uses:** * Used as input to the **Periodic Lattice** block when you require a conformal volume lattice with no trimmed or partial unit cells. **Tips:** * If your Cell Map contains many cells outside of the Implicit Body, first use the **Trim Cell Map** block to reduce the number of cells. * If you see a self-intersection warning, try using a different Fill Type in the **Trim Cell Map** block or changing your cell map generation parameters. * If the warning persists, or if the alternate Fill Type does not produce a desirable result, you can still create a lattice using the self-intersecting Cell Map. ## Example File Download Example: [Warp Cell Map to Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/warp_cellmap_body.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Warp_Cell_Map_Body.png) *** Warps the Cell Map to the Target Body's surface to achieve a conformal structure. The resulting cells will be warped to achieve conformality. To avoid large distortions, provide a Cell Map that is trimmed to the body with Trim Cell Map. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body target for the warped Cell Map. | | Cell map | [Cell Map](../../../../block-documentation/types/cell-map) | Cell Map to be warped. | ### Outputs | Type | | - | | [Cell Map](../../../../block-documentation/types/cell-map) | # Lightweighting Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting ## Volumetric > **[Infill Delaunay Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-delaunay-lattice)** > **[Infill Gyroid](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid)** > **[Infill Lattice between Faces](../../block-documentation/blocks/architected-materials/latticing/infill-lattice-between-faces)** > **[Infill Volume Lattice](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > **[Infill Tet Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-tet-lattice)** > **[Infill Voronoi Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-voronoi-lattice)** ## Surface > **[Conformal Foam](../../block-documentation/blocks/lightweighting/surface/conformal-foam)** > **[Honeycomb Ribbing](../../block-documentation/blocks/lightweighting/surface/honeycomb-ribbing)** > **[Structural Ribbing](../../block-documentation/blocks/lightweighting/surface/structural-ribbing)** > **[Voronoi Structural Ribbing](../../block-documentation/blocks/lightweighting/surface/voronoi-structural-ribbing)** > **[Perforate Body](../../block-documentation/blocks/architected-materials/texturing/perforate-body)** ## Shelling > **[Shell](../../block-documentation/blocks/modeling/operations/shell)** > **[Shell with Reinforcement](../../block-documentation/blocks/additive-manufacturing/material-reduction/shell-with-reinforcement)** > **[Merge Shell and Infill](../../block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** > **[Shell and Gyroid](../../block-documentation/blocks/lightweighting/shelling/shell-and-gyroid)** > **[Shell and Voronoi Lattice](../../block-documentation/blocks/lightweighting/shelling/shell-and-voronoi-lattice)** ## Utilities > **[Remove Any Beams](../../block-documentation/blocks/architected-materials/utilities/remove-any-beams)** > **[Remove Floating Beams](../../block-documentation/blocks/architected-materials/utilities/remove-floating-beams)** > **[Remove Open Beams](../../block-documentation/blocks/architected-materials/utilities/remove-open-beams)** > **[Simple Remesh Body](../../block-documentation/blocks/architected-materials/utilities/simple-remesh-body)** > **[Remesh CAD Face](../../block-documentation/blocks/architected-materials/utilities/remesh-cad-face)** > **[Weight Savings](../../block-documentation/blocks/lightweighting/utilities/weight-savings)** > **[Extrude Lattice](../../block-documentation/blocks/lattices/utilities/extrude-lattice)** > **[Mix](../../block-documentation/blocks/math/utilities/mix)** # Shelling Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/shelling > **[Shell](../../../block-documentation/blocks/modeling/operations/shell)** > **[Shell with Reinforcement](../../../block-documentation/blocks/additive-manufacturing/material-reduction/shell-with-reinforcement)** > **[Merge Shell and Infill](../../../block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill)** > **[Shell and Gyroid](../../../block-documentation/blocks/lightweighting/shelling/shell-and-gyroid)** > **[Shell and Voronoi Lattice](../../../block-documentation/blocks/lightweighting/shelling/shell-and-voronoi-lattice)** # Shell and Gyroid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/shelling/shell-and-gyroid > **[Implicit Body, Vector, Scalar Field, Scalar, Scalar](#implicit-body-vector-scalar-field-scalar-scalar)** > **[Implicit Body, Vector, Scalar Field, Scalar, Scalar, 1.1.0](#implicit-body-vector-scalar-field-scalar-scalar-110)** *** ## Implicit Body, Vector, Scalar Field, Scalar, Scalar Shell an Implicit Body and fill with a gyroid structure. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to be shelled and filled with a gyroid. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Adjust size of gyroid cell. | | Approx. thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of gyroid wall. | | Shell thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the shell. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend between the gyroid and the shelled Implicit Body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Vector, Scalar Field, Scalar, Scalar, 1.1.0 Shell an Implicit Body and fill with a gyroid structure. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicitody to be shelled and filled with a gyroid. | | Cell size | [Vector](../../../../block-documentation/types/vector) | Adjust size of gyroid cell. | | Approx. thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of gyroid wall. | | Shell thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the shell. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend between the gyroid and the shelled Implicit Body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Shell and Voronoi Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/shelling/shell-and-voronoi-lattice > **[Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, Scalar, Scalar](#implicit-body-scalar-scalar-field-integer-scalar-field-scalar-scalar)** > **[Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, Scalar, Scalar, 1.1.0](#implicit-body-scalar-scalar-field-integer-scalar-field-scalar-scalar-110)** > **[Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, Scalar, Scalar, 2.0.0](#implicit-body-scalar-scalar-field-integer-scalar-field-scalar-scalar-200)** *** ## Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, Scalar, Scalar Shell an Implicit Body and fill with a voronoi lattice. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to be shelled and latticed. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the input Implicit Body to preserve for generating a voronoi volume lattice. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The spacing between the centroids of each Voronoi cell. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of Voronoi brams. | | Shell thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the shell. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend between the Voronoi lattice and the shelled Implicit Body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, Scalar, Scalar, 1.1.0 Shell an Implicit Body and fill with a voronoi lattice. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to be shelled and latticed. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the input Implicit Body to preserve for generating a voronoi volume lattice. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The spacing between the centroids of each Voronoi cell. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of Voronoi brams. | | Shell thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the shell. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend between the Voronoi lattice and the shelled Implicit Body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, Scalar Field, Integer, Scalar Field, Scalar, Scalar, 2.0.0 Shell an Implicit Body and fill with a Voronoi lattice. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to be shelled and latticed. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size of the input Implicit Body to preserve for generating a Voronoi volume lattice. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | The spacing between the centroids of each Voronoi cell. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Beam thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of Voronoi beams. | | Shell thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the shell. | | Blend radius | [Scalar](../../../../block-documentation/types/scalar) | Radius of the blend between the Voronoi lattice and the shelled Implicit Body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Surface Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/surface > **[Conformal Foam](../../../block-documentation/blocks/lightweighting/surface/conformal-foam)** > **[Honeycomb Ribbing](../../../block-documentation/blocks/lightweighting/surface/honeycomb-ribbing)** > **[Structural Ribbing](../../../block-documentation/blocks/lightweighting/surface/structural-ribbing)** > **[Voronoi Structural Ribbing](../../../block-documentation/blocks/lightweighting/surface/voronoi-structural-ribbing)** > **[Perforate Body](../../../block-documentation/blocks/architected-materials/texturing/perforate-body)** # Conformal Foam Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/surface/conformal-foam > **[CAD Face, Integer, Integer, Integer, Scalar, Scalar Field](#cad-face-integer-integer-integer-scalar-scalar-field)** > **[Choice, CAD Face, Integer, Integer, Integer, Scalar Field, Scalar Field, Bool, 2.0.0](#choice-cad-face-integer-integer-integer-scalar-field-scalar-field-bool-200)** *** ## CAD Face, Integer, Integer, Integer, Scalar, Scalar Field Create a conformal foam structure from the U and V parameters of an input CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | U cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells in the U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells in the V direction of the CAD face. | | Layer count | [Integer](../../../../block-documentation/types/integer) | Amount of layers the structure has. | | Rib height | [Scalar](../../../../block-documentation/types/scalar) | Height of the structure perpendicular to the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the structure. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Choice, CAD Face, Integer, Integer, Integer, Scalar Field, Scalar Field, Bool, 2.0.0 Create a conformal foam structure from the U and V parameters of an input CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Foam type | [Choice](../../../../block-documentation/types/choice) | Select the infill foam type. | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | U cell count | [Integer](../../../../block-documentation/types/integer) | The number of the cells in the U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | The number of the cells in the V direction of the CAD face. | | Layer count | [Integer](../../../../block-documentation/types/integer) | Number of layers the structure has. | | Rib height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the structure perpendicular to the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the structure. | | Linear | [Bool](../../../../block-documentation/types/bool) | Option to create a linear or curved lattice. Curved lattices conform closer to the CAD face. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Honeycomb Ribbing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/surface/honeycomb-ribbing > **[CAD Face, Integer, Integer, Scalar, Scalar Field](#cad-face-integer-integer-scalar-scalar-field)** > **[Choice, CAD Face, Integer, Integer, Permutation Enum, Scalar Field, Scalar Field, 2.0.0](#choice-cad-face-integer-integer-permutation-enum-scalar-field-scalar-field-200)** *** ## CAD Face, Integer, Integer, Scalar, Scalar Field Create a honeycomb ribbing from the U and V parameters of an input CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | U cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells V direction of the CAD face. | | Rib height | [Scalar](../../../../block-documentation/types/scalar) | Height of the ribs perpendicular to the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the ribs. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Choice, CAD Face, Integer, Integer, Permutation Enum, Scalar Field, Scalar Field, 2.0.0 Create a honeycomb ribbing from the U and V parameters of an input CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Honeycomb | [Choice](../../../../block-documentation/types/choice) | The type of honeycomb | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | U cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells V direction of the CAD face. | | Hex orientation | Permutation Enum | Orientation of heaxagonal ribbing | | Rib height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the ribs perpendicular to the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the ribs. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Structural Ribbing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/surface/structural-ribbing > **[CAD Face, Integer, Integer, Scalar, Scalar Field](#cad-face-integer-integer-scalar-scalar-field)** > **[CAD Face, Integer, Integer, Scalar Field, Scalar Field, 2.0.0](#cad-face-integer-integer-scalar-field-scalar-field-200)** *** ## CAD Face, Integer, Integer, Scalar, Scalar Field Create structural ribbing from the U and V parameters of an input CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | U cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells V direction of the CAD face. | | Rib height | [Scalar](../../../../block-documentation/types/scalar) | Height of the ribs perpendicular to the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the ribs. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## CAD Face, Integer, Integer, Scalar Field, Scalar Field, 2.0.0 Create structural ribbing from the U and V parameters of an input CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | U cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells U direction of the CAD face. | | V cell count | [Integer](../../../../block-documentation/types/integer) | The amount of the cells V direction of the CAD face. | | Rib height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the ribs perpendicular to the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the ribs. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Voronoi Structural Ribbing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/surface/voronoi-structural-ribbing > **[CAD Face, Integer, Integer, Integer, Scalar Field, Scalar Field, 2.0.0](#cad-face-integer-integer-integer-scalar-field-scalar-field-200)** > **[CAD Face, Scalar, Integer, Integer, Integer, Scalar Field, Scalar Field](#cad-face-scalar-integer-integer-integer-scalar-field-scalar-field)** *** ## CAD Face, Integer, Integer, Integer, Scalar Field, Scalar Field, 2.0.0 Create structural ribbing from a Voronoi Lattice along the surface of a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | Point count | [Integer](../../../../block-documentation/types/integer) | Number of points to drive the Voronoi cells. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute points along the surface. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Rib height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the ribs along the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the ribs. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## CAD Face, Scalar, Integer, Integer, Integer, Scalar Field, Scalar Field Create structural ribbing from a Voronoi Lattice along the surface of a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to generate conformal ribs from. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | CAD face to apply a Surface lattice. | | Point count | [Integer](../../../../block-documentation/types/integer) | Number of points to drive the Voronoi cells. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute points along the surface. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Rib height | [Scalar Field](../../../../block-documentation/types/scalar-field) | Height of the ribs along the surface. | | Rib thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the ribs. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/utilities > **[Remove Any Beams](../../../block-documentation/blocks/architected-materials/utilities/remove-any-beams)** > **[Remove Floating Beams](../../../block-documentation/blocks/architected-materials/utilities/remove-floating-beams)** > **[Remove Open Beams](../../../block-documentation/blocks/architected-materials/utilities/remove-open-beams)** > **[Simple Remesh Body](../../../block-documentation/blocks/architected-materials/utilities/simple-remesh-body)** > **[Remesh CAD Face](../../../block-documentation/blocks/architected-materials/utilities/remesh-cad-face)** > **[Weight Savings](../../../block-documentation/blocks/lightweighting/utilities/weight-savings)** > **[Extrude Lattice](../../../block-documentation/blocks/lattices/utilities/extrude-lattice)** > **[Mix](../../../block-documentation/blocks/math/utilities/mix)** # Weight Savings Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/utilities/weight-savings Compare the weight savings in terms of a volume percentage between two objects. For best results, the lightweight body should be derived from the original body. ### Inputs | Name | Type | Description | | - | - | - | | Lightweight body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The lightweighted body to calculate the mass properties of. | | Original body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The original body to measure the volume against. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Volumetric Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/lightweighting/volumetric > **[Infill Delaunay Lattice](../../../block-documentation/blocks/architected-materials/latticing/infill-delaunay-lattice)** > **[Infill Gyroid](../../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid)** > **[Infill Lattice between Faces](../../../block-documentation/blocks/architected-materials/latticing/infill-lattice-between-faces)** > **[Infill Volume Lattice](../../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice)** > **[Infill Tet Lattice](../../../block-documentation/blocks/architected-materials/latticing/infill-tet-lattice)** > **[Infill Voronoi Lattice](../../../block-documentation/blocks/architected-materials/latticing/infill-voronoi-lattice)** # Manufacturing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing ## Slicing > **[Slice Body](../../block-documentation/blocks/manufacturing/slicing/slice-body)** > **[Slice Body by Marching Squares](../../block-documentation/blocks/manufacturing/slicing/slice-body-by-marching-squares)** > **[Slice Graph](../../block-documentation/blocks/manufacturing/slicing/slice-graph)** > **[Slice Mesh](../../block-documentation/blocks/manufacturing/slicing/slice-mesh)** > **[Offset Slice Stack](../../block-documentation/blocks/manufacturing/slicing/offset-slice-stack)** > **[Trim Slice Stack](../../block-documentation/blocks/manufacturing/slicing/trim-slice-stack)** > **[Simplify Slice Stack](../../block-documentation/blocks/manufacturing/slicing/simplify-slice-stack)** > **[Hatch](../../block-documentation/blocks/manufacturing/slicing/hatch)** > **[Hatch with Stripes](../../block-documentation/blocks/manufacturing/slicing/hatch-with-stripes)** > **[Hatch with Islands](../../block-documentation/blocks/manufacturing/slicing/hatch-with-islands)** > **[Merge Slice Stacks](../../block-documentation/blocks/manufacturing/slicing/merge-slice-stacks)** > **[Split Slice Stack](../../block-documentation/blocks/manufacturing/slicing/split-slice-stack)** > **[Slice Stack Boolean Union](../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-union)** > **[Slice Stack Boolean Subtract](../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-subtract)** > **[Slice Stack Boolean Intersect](../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-intersect)** ## Exchange > **[Export Slices to Point Data](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-point-data)** > **[Export Slices to CLF](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-clf)** > **[Export Slices to CLI](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cli)** > **[Export Slices to SSL](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-ssl)** > **[Export Slices to Renishaw](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-renishaw)** > **[Export Slices to EOS](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-eos)** > **[Export Slices to Arcam ABF](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-arcam-abf)** > **[Export CLI Points](../../block-documentation/blocks/manufacturing/exchange/export-cli-points)** > **[Import Slice Stack](../../block-documentation/blocks/manufacturing/exchange/import-slice-stack)** > **[Slice Body to B\&W Image Stack](../../block-documentation/blocks/manufacturing/exchange/slice-body-to-bw-image-stack)** > **[Export Slices to SLC](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-slc)** > **[Export Slices to CLS](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cls)** ## Utilities > **[Manufacturing Support Volume](../../block-documentation/blocks/manufacturing/utilities/manufacturing-support-volume)** > **[Bounding Box 2D Nesting](../../block-documentation/blocks/manufacturing/utilities/bounding-box-2d-nesting)** > **[Minimum Support Orientations](../../block-documentation/blocks/manufacturing/utilities/minimum-support-orientations)** # Exchange Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange > **[Export Slices to Point Data](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-point-data)** > **[Export Slices to CLF](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-clf)** > **[Export Slices to CLI](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cli)** > **[Export Slices to SSL](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-ssl)** > **[Export Slices to Renishaw](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-renishaw)** > **[Export Slices to EOS](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-eos)** > **[Export Slices to Arcam ABF](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-arcam-abf)** > **[Export CLI Points](../../../block-documentation/blocks/manufacturing/exchange/export-cli-points)** > **[Import Slice Stack](../../../block-documentation/blocks/manufacturing/exchange/import-slice-stack)** > **[Slice Body to B\&W Image Stack](../../../block-documentation/blocks/manufacturing/exchange/slice-body-to-bw-image-stack)** > **[Export Slices to SLC](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-slc)** > **[Export Slices to CLS](../../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cls)** # Export CLI Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-cli-points Export points to cli. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the CLI file to. | | Point stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack with hatches to generate point data on. | ### Outputs | Type | | - | | [CLI slice data](../../../../block-documentation/types/cli-slice-data) | # Export Slices to Arcam ABF Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-arcam-abf ## About this Block The Export Slices to Arcam ABF block exports CLF Arcam slice data as an ABF (Arcam Build File). This file can then be used in EBM control software. An optional slice stack can be included to add as the wafer support. ## Example File Download Example: [Export Slices to Arcam ABF](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoArcamABF.ntop) *This file exports a slice stack as an ABF.* ![Export Slices to Arcam ABF](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoArcamABF.png) *** Export slice stacks as an Arcam ABF for opening in EBM Control software. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the ABF file to. | | Part slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to add as the part. | | Wafer slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Optional slice stack to add as the wafer support. | ### Outputs | Type | | - | | [CLF Arcam slice data](../../../../block-documentation/types/clf-arcam-slice-data) | # Export Slices to CLF Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-clf ## About this Block The Export Slices to CLF block exports slice data as a CLF (Common Layer File). ## Example File Download Example: [Export Slices to CLF](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoCLF.ntop) *This file exports a slice stack as a CLF.* ![Export Slices to CLF](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoCLF.png) *** Export slice stack data to a CLF file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the CLF file to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to generate the CLF file from. | ### Outputs | Type | | - | | [CLF slice data](../../../../block-documentation/types/clf-slice-data) | # Export Slices to CLI Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-cli ## About this Block The Export Slices to CLI block exports slice data as a CLI (Common Layer Interface) file. The CLI file can be exported as ASCII or Binary format. ## Example File Download Example: [Export Slices to CLI](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoCLI.ntop) *This file exports a slice stack as a CLI.* ![Export Slices to CLI](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoCLI.png) *** Export slice stack data to an ASCII or binary CLI file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the CLI file to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to generate the CLI file from. | | Export format | Ascii or Binary Enum | Ascii or binary export format. | ### Outputs | Type | | - | | [CLI slice data](../../../../block-documentation/types/cli-slice-data) | # Export Slices to CLS Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-cls Export slice stack data to a CLSv4 file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export CLS file to. | | Build volume | [Bounding Box](../../../../block-documentation/types/bounding-box) | Build volume of the printer. | | Part slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack corresponding to the part, to be written to the CLS file. | | Support slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack corresponding to the supports, to be written to the CLS file. | ### Outputs | Type | | - | | [CLS slice data](../../../../block-documentation/types/cls-slice-data) | # Export Slices to EOS Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-eos ## About this Block The Export Slices to EOS block exports slice data as a CLI (Common Layer Interface) file. This file can then be used in EOSPRINT 2 software. If the Supports input is checked, the block will generate the CLI as supports. The CLI file can be exported as ASCII or Binary format. ## Example File Download Example: [Export Slices to EOS](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoEOS.ntop) *This file exports a slice stack as a CLI.* ![Export Slices to EOS](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExportSlicestoEOS.png) *** Export slice stack data to a CLI file for importing into EOSPRINT 2. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the CLI file to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to generate the CLI file from. | | Supports | [Bool](../../../../block-documentation/types/bool) | If checked, generate the CLI file as supports. | | Format | Ascii or Binary Enum | Format to export the CLI file as. | ### Outputs | Type | | - | | [CLI slice data](../../../../block-documentation/types/cli-slice-data) | # Export Slices to Point Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-point-data Export slice data, as well as laser power and exposure time, to a CSV point file. Points are uniformly distributed along contour and hatch lines. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the CSV file to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack with hatches to generate point data on. | | Hatch pt spacing | [Scalar](../../../../block-documentation/types/scalar) | Spacing between exposure points along hatch lines. | | Contour pt spacing | [Scalar](../../../../block-documentation/types/scalar) | Spacing between exposure points along contour lines. | | Laser power | [Integer](../../../../block-documentation/types/integer) | Laser power in watts, constant for entire file. | | Exposure time | [Integer](../../../../block-documentation/types/integer) | Laser exposure time in microseconds, constant for entire file. | ### Outputs | Type | | - | | [Slice point data](../../../../block-documentation/types/slice-point-data) | # Export Slices to Renishaw Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-renishaw Export slice stack data to a CLI file for importing into QuantAM. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the CLI file to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to generate the CLI file from. | | Format | Ascii or Binary Enum | Format to export the CLI file as. | ### Outputs | Type | | - | | [CLI slice data](../../../../block-documentation/types/cli-slice-data) | # Export Slices to SLC Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-slc Export slice stack data to a SLC file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export SLC file to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to generate SLC file from. | ### Outputs | Type | | - | | [SLC slice data](../../../../block-documentation/types/slc-slice-data) | # Export Slices to SSL Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/export-slices-to-ssl > **[Path, Slice Stack](#path-slice-stack)** > **[Path, Slice Stack, 1.1.0](#path-slice-stack-110)** *** ## Path, Slice Stack Export slice stack data to a Stratasys SSL file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export SSL files to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to generate SSL files from. | ### Outputs | Type | | - | | [SSL slice data](../../../../block-documentation/types/ssl-slice-data) | *** ## Path, Slice Stack, 1.1.0 Export slice stack data to a Stratasys SSL file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export SSL files to. | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to generate SSL files from. | ### Outputs | Type | | - | | [SSL slice data](../../../../block-documentation/types/ssl-slice-data) | # Import Slice Stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/import-slice-stack Import Slice Stack file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Slice Stack file. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Body to B&W Image Stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/exchange/slice-body-to-bw-image-stack > **[Path, Bool, Implicit Body, Scalar, Frame, Bounding Box, Integer, Integer, Grayscale Bits Enum, 2.0.0](#path-bool-implicit-body-scalar-frame-bounding-box-integer-integer-grayscale-bits-enum-200)** > **[Path, Bool, Implicit Body, Scalar, Frame, Bounding Box, Integer, Integer, Grayscale Bits Enum, Scalar](#path-bool-implicit-body-scalar-frame-bounding-box-integer-integer-grayscale-bits-enum-scalar)** *** ## Path, Bool, Implicit Body, Scalar, Frame, Bounding Box, Integer, Integer, Grayscale Bits Enum, 2.0.0 Slices an implicit body and generate images for each slice in the stack. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to zip file for exporting the image stack | | Fill suffix | [Bool](../../../../block-documentation/types/bool) | Enabling will fill the suffix with zeros based on the number of slices | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to slice. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Frame | [Frame](../../../../block-documentation/types/frame) | Manufacturing coordinate system that is placed on the build plate. | | Print volume | [Bounding Box](../../../../block-documentation/types/bounding-box) | Volume that encompasses the entire printable volume of the machine | | Image x resolution | [Integer](../../../../block-documentation/types/integer) | Number of pixels in the X direction | | Image y resolution | [Integer](../../../../block-documentation/types/integer) | Number of pixels in the Y direction | | Grayscale bits | Grayscale Bits Enum | Number of bits per pixel of the output png | ### Outputs | Type | | - | | [Slice Image Data](../../../../block-documentation/types/slice-image-data) | *** ## Path, Bool, Implicit Body, Scalar, Frame, Bounding Box, Integer, Integer, Grayscale Bits Enum, Scalar Slices an implicit body and generate images for each slice in the stack. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to zip file for exporting the image stack | | Fill suffix | [Bool](../../../../block-documentation/types/bool) | Enabling will fill the suffix with zeros based on the number of slices | | Implicit | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to slice. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Frame | [Frame](../../../../block-documentation/types/frame) | Manufacturing coordinate system that is placed on the build plate. | | Print volume | [Bounding Box](../../../../block-documentation/types/bounding-box) | Volume that encompasses the entire printable volume of the machine | | Image x resolution | [Integer](../../../../block-documentation/types/integer) | Number of pixels in the X direction | | Image y resolution | [Integer](../../../../block-documentation/types/integer) | Number of pixels in the Y direction | | Grayscale bits | Grayscale Bits Enum | Number of bits per pixel of the output png | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture details. Leaving this empty will sample at the pixel resolution specified above. | ### Outputs | Type | | - | | [Slice Image Data](../../../../block-documentation/types/slice-image-data) | # Slicing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing > **[Slice Body](../../../block-documentation/blocks/manufacturing/slicing/slice-body)** > **[Slice Body by Marching Squares](../../../block-documentation/blocks/manufacturing/slicing/slice-body-by-marching-squares)** > **[Slice Graph](../../../block-documentation/blocks/manufacturing/slicing/slice-graph)** > **[Slice Mesh](../../../block-documentation/blocks/manufacturing/slicing/slice-mesh)** > **[Offset Slice Stack](../../../block-documentation/blocks/manufacturing/slicing/offset-slice-stack)** > **[Trim Slice Stack](../../../block-documentation/blocks/manufacturing/slicing/trim-slice-stack)** > **[Simplify Slice Stack](../../../block-documentation/blocks/manufacturing/slicing/simplify-slice-stack)** > **[Hatch](../../../block-documentation/blocks/manufacturing/slicing/hatch)** > **[Hatch with Stripes](../../../block-documentation/blocks/manufacturing/slicing/hatch-with-stripes)** > **[Hatch with Islands](../../../block-documentation/blocks/manufacturing/slicing/hatch-with-islands)** > **[Merge Slice Stacks](../../../block-documentation/blocks/manufacturing/slicing/merge-slice-stacks)** > **[Split Slice Stack](../../../block-documentation/blocks/manufacturing/slicing/split-slice-stack)** > **[Slice Stack Boolean Union](../../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-union)** > **[Slice Stack Boolean Subtract](../../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-subtract)** > **[Slice Stack Boolean Intersect](../../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-intersect)** # Hatch Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/hatch Create hatch lines on each layer of a slice stack. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to hatch. | | Spacing | [Scalar](../../../../block-documentation/types/scalar) | Spacing between hatch lines. | | Step angle | [Scalar](../../../../block-documentation/types/scalar) | Increment of angle to apply to every slice. | | Start angle | [Scalar](../../../../block-documentation/types/scalar) | Initial angle of the hatch lines offset from the slice stack's frame's x direction. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Hatch with Islands Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/hatch-with-islands Create hatch lines with an 'island' pattern on each layer of a slice stack. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to hatch. | | Spacing | [Scalar](../../../../block-documentation/types/scalar) | Spacing between hatch lines. | | Island width | [Scalar](../../../../block-documentation/types/scalar) | Width of hatch islands. | | Island gap | [Scalar](../../../../block-documentation/types/scalar) | Size of gap between hatch Islands. | | Step angle | [Scalar](../../../../block-documentation/types/scalar) | Increment of angle to apply to every slice. | | Start angle | [Scalar](../../../../block-documentation/types/scalar) | Initial angle of the hatch lines offset from the slice stack's frame's x direction. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Hatch with Stripes Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/hatch-with-stripes Create hatch lines with a 'stripe' pattern on each layer of a slice stack. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to hatch. | | Spacing | [Scalar](../../../../block-documentation/types/scalar) | Spacing between hatch lines. | | Stripe width | [Scalar](../../../../block-documentation/types/scalar) | Width of hatch stripes. | | Stripe gap | [Scalar](../../../../block-documentation/types/scalar) | Size of gap between hatch stripes. | | Step angle | [Scalar](../../../../block-documentation/types/scalar) | Increment of angle to apply to every slice. | | Start angle | [Scalar](../../../../block-documentation/types/scalar) | Initial angle of the hatch lines offset from the slice stack's frame's x direction. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Merge Slice Stacks Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/merge-slice-stacks Merge multiple slice stack objects into a single stack. Layers will concatenate if they are at the same height, otherwise they will be inserted in order of height. ### Inputs | Name | Type | Description | | - | - | - | | Slice stacks | [Slice Stack List](../../../../block-documentation/types/slice-stack) | List of slice stacks to merge. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Offset Slice Stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/offset-slice-stack Offset layers of a slice stack along its plane by a distance. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to offset. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Distance to offset from original slices in slice stack. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Simplify Slice Stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/simplify-slice-stack Reduces the number of points in open and closed polylines within a vector slice stack. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack on which to perform point reduction. | | Threshold | [Scalar](../../../../block-documentation/types/scalar) | Deviation threshold or tolerance value for point reduction. Deviation greater than this threshold value will not occur during point reduction. Deviation up to this value may occur. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/slice-body > **[Implicit Body, Scalar, Scalar, Bool, Frame, Implicit Body, 3.0.0](#implicit-body-scalar-scalar-bool-frame-implicit-body-300)** > **[Implicit Body, Scalar, Scalar, Bool, Frame, Implicit Body, 3.1.0](#implicit-body-scalar-scalar-bool-frame-implicit-body-310)** *** ## Implicit Body, Scalar, Scalar, Bool, Frame, Implicit Body, 3.0.0 Create a stack of cross-sectional slices with even spacing between layers, oriented by a frame. The frame will act as the origin of the slice data. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to slice. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture details. | | Include negative z | [Bool](../../../../block-documentation/types/bool) | Option to include layers with negative Z values with respect to the frame, if any. By default, this block will slice only in the positive Z direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame to orient the slicing and act as the origin of the slice data. If no frame is provided, the slices are generated from the origin and parallel to the XY plane in the positive Z direction. | | Boundary | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional implicit body to specify where to extract slices from. This can be used to create open contours if the input body continues past this boundary. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | *** ## Implicit Body, Scalar, Scalar, Bool, Frame, Implicit Body, 3.1.0 Create a stack of cross-sectional slices with even spacing between layers, oriented by a frame. The frame will act as the origin of the slice data. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to slice. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture details. | | Include negative z | [Bool](../../../../block-documentation/types/bool) | Option to include layers with negative Z values with respect to the frame, if any. By default, this block will slice only in the positive Z direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame to orient the slicing and act as the origin of the slice data. If no frame is provided, the slices are generated from the origin and parallel to the XY plane in the positive Z direction. | | Boundary | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional implicit body to specify where to extract slices from. This can be used to create open contours if the input body continues past this boundary. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Body by Marching Squares Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/slice-body-by-marching-squares Create a stack of cross-sectional slices with even spacing between layers, oriented by a frame. The frame will act as the origin of the slice data. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to slice. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture details. | | Include negative z | [Bool](../../../../block-documentation/types/bool) | Option to include layers with negative Z values with respect to the frame, if any. By default, this block will slice only in the positive Z direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame to orient the slicing and act as the origin of the slice data. If no frame is provided, the slices are generated from the origin and parallel to the XY plane in the positive Z direction. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/slice-graph ## About this Block The Slice Lattice block turns an unthickened graph lattice into a slice stack of points. The resolution of these points is determined by the Layer Height. If part of the body falls below the Origin or specified Frame, check Include Negative Z to slice the entire lattice. If no Frame is determined, the body will be sliced from the origin. ## Example File Download Example: [Slice Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SliceLattice.ntop) *This file slices an unthickened graph lattice.* ![Slice Lattice](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SliceLattice.png) *** Slice a graph lattice into layers of points. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph lattice to slice. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Include negative z | [Bool](../../../../block-documentation/types/bool) | Option to include layers with negative Z values with respect to the frame, if any. By default, this block will slice only in the positive Z direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame to orient the slicing and act as the origin of the slice data. If no frame is provided, the slices are generated from the origin and parallel to the XY plane in the positive Z direction. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/slice-mesh Create a stack of cross-sectional slices from a mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The mesh to slice. | | Layer height | [Scalar](../../../../block-documentation/types/scalar) | Spacing between slice layers. | | Include negative z | [Bool](../../../../block-documentation/types/bool) | Option to include layers with negative Z values with respect to the frame, if any. By default, this block will slice only in the positive Z direction. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame to orient the slicing and act as the origin of the slice data. If no frame is provided, the slices are generated from the origin and parallel to the XY plane in the positive Z direction. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Stack Boolean Intersect Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-intersect ## About this Block The Slice Stack Boolean Intersect generates a closed intersection of slices from a list of slice stacks. Slice stacks must have a uniform layer height to boolean. ## Example File Download Example: [Slice Stack Boolean Intersect](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/slice_stack_boolean_intersect.ntop) *This file creates a slice stack of the intersecting slices of two slice stacks.* ![Slice Stack Boolean Intersect](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/slice_stack_boolean_intersect.png) *** Boolean intersect the slice stacks ### Inputs | Name | Type | Description | | - | - | - | | Slice stacks | [Slice Stack List](../../../../block-documentation/types/slice-stack) | List of slice stacks to intersect | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Stack Boolean Subtract Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-subtract ## About this Block The Slice Stack Boolean Subtract uses a list of slice stacks to remove from a primary slice stack. Slice stacks must have a uniform layer height to boolean. ## Example File Download Example: [Slice Stack Boolean Subtract](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/slice_stack_boolean_subtract.ntop) *This file creates a slice stack of a sliced sphere stack subtracted from a sliced cube stack.* ![Slice Stack Boolean Subtract](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/slice_stack_boolean_subtract.png) *** Boolean subtract the slice stacks ### Inputs | Name | Type | Description | | - | - | - | | Primary slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to subtract from | | Subtraction slice stacks | [Slice Stack List](../../../../block-documentation/types/slice-stack) | List of slice stacks to subtract | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Slice Stack Boolean Union Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-union ## About this Block The Slice Stack Boolean Union block joins a list of slice stacks into a single stack. Slice stacks must have a uniform layer height to boolean. ## Example File Download Example: [Slice Stack Boolean Union](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/slice_stack_boolean_union.ntop) *This file creates a slice stack of the joined slices of two slice stacks.* ![Slice Stack Boolean Union](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/slice_stack_boolean_union.png) *** Combine multiple slice stacks into a single slice stack ### Inputs | Name | Type | Description | | - | - | - | | Slice stacks | [Slice Stack List](../../../../block-documentation/types/slice-stack) | List of slice stacks to union | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Split Slice Stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/split-slice-stack Split slices into 3 slice stacks: closed contours, open contours, and points. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack to split. | ### Outputs | Type | | - | | [Slice Stack List](../../../../block-documentation/types/slice-stack) | # Trim Slice Stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/slicing/trim-slice-stack ## About this Block The Trim Slice Stack Block trims a slice stack with an implicit body. The stack to remain can either be the inside, which are the slices that overlap with the body or the outside, which are the slices that do not overlap with the body. The feature tolerance is the minimum feature size of the trimmed boundary. This might result in open contours. ## Example File Download Example: [Trim Slice Stack](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/trim_slice_stack.ntop) *This file trims a sliced cube stack with an implicit sphere to only keep the slices within the sphere.* ![Trim Slice Stack](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/trim_slice_stack.png) *** Trims a slice stack to exist only within the bounds of the body. Doing so may result in open contours. ### Inputs | Name | Type | Description | | - | - | - | | Slice stack | [Slice Stack](../../../../block-documentation/types/slice-stack) | Slice stack on which the trimming will be performed. | | Trimming body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to use to perform trimming of the slice stack. | | Slices to remain | Inside or Outside Enum | Option to keep the slices that are inside or outside the boundary. | | Feature tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size of boundary to accurately capture. | ### Outputs | Type | | - | | [Slice Stack](../../../../block-documentation/types/slice-stack) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/utilities > **[Manufacturing Support Volume](../../../block-documentation/blocks/manufacturing/utilities/manufacturing-support-volume)** > **[Bounding Box 2D Nesting](../../../block-documentation/blocks/manufacturing/utilities/bounding-box-2d-nesting)** > **[Minimum Support Orientations](../../../block-documentation/blocks/manufacturing/utilities/minimum-support-orientations)** # Bounding Box 2D Nesting Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/utilities/bounding-box-2d-nesting Performs a 2D bin packing of bounding boxes. Boxes that fit will be placed in order of size and remaining boxes will be placed outside and next to the build volume. ### Inputs | Name | Type | Description | | - | - | - | | Bounding boxes | [Bounding Box List](../../../../block-documentation/types/bounding-box) | Bounding Boxes to be nested. | | Build volume | [Bounding Box](../../../../block-documentation/types/bounding-box) | Volume in which boxes are nested. | | Part to part offset | [Scalar](../../../../block-documentation/types/scalar) | Amount of tolerance between boxes during the nest process. | | Platform offset | [Scalar](../../../../block-documentation/types/scalar) | Offset distance between boxes and build platform in Z. | | Perimeter offset | [Scalar](../../../../block-documentation/types/scalar) | Offset distance between parts the perimeter in XY of the build volume. | ### Outputs | Type | | - | | [Transformation List](../../../../block-documentation/types/transformation) | # Manufacturing Support Volume Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/utilities/manufacturing-support-volume > **[Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum](#implicit-body-plane-scalar-scalar-scalar-manufacturing-support-region-type-enum)** > **[Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, 1.1.0](#implicit-body-plane-scalar-scalar-scalar-manufacturing-support-region-type-enum-110)** > **[Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, 1.2.0](#implicit-body-plane-scalar-scalar-scalar-manufacturing-support-region-type-enum-120)** *** ## Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum Find the volume needed to support a body for an additive manufacturing process based on overhang angle. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to support. | | Build plane | [Plane](../../../../block-documentation/types/plane) | The build plane. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size used to discretize the body. This input will affect the resolution of the support volume and the speed of the algorithm. | | Overhang angle | [Scalar](../../../../block-documentation/types/scalar) | The overhang angle that will define where supports are required. Regions on the body that form a shallower angle than the overhang angle with respect to the build plane will define the support volume. | | Min overhang angle | [Scalar](../../../../block-documentation/types/scalar) | An option to define the support volume only to this minimum overhang angle. | | Support region | Manufacturing Support Region Type Enum | An option to define whether to build supports for internal, external, or both regions of the body. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | *** ## Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, 1.1.0 Find the volume needed to support a body for an additive manufacturing process based on overhang angle. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to support. | | Build plane | [Plane](../../../../block-documentation/types/plane) | The build plane. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size used to discretize the body. This input will affect the resolution of the support volume and the speed of the algorithm. | | Overhang angle | [Scalar](../../../../block-documentation/types/scalar) | The overhang angle that will define where supports are required. Regions on the body that form a shallower angle than the overhang angle with respect to the build plane will define the support volume. | | Min overhang angle | [Scalar](../../../../block-documentation/types/scalar) | An option to define the support volume only to this minimum overhang angle. | | Support region | Manufacturing Support Region Type Enum | An option to define whether to build supports for internal, external, or both regions of the body. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | *** ## Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, 1.2.0 Find the volume needed to support a body for an additive manufacturing process based on overhang angle. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to support. | | Build plane | [Plane](../../../../block-documentation/types/plane) | The build plane. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size used to discretize the body. This input will affect the resolution of the support volume and the speed of the algorithm. | | Overhang angle | [Scalar](../../../../block-documentation/types/scalar) | The overhang angle that will define where supports are required. Regions on the body that form a shallower angle than the overhang angle with respect to the build plane will define the support volume. | | Min overhang angle | [Scalar](../../../../block-documentation/types/scalar) | An option to define the support volume only to this minimum overhang angle. | | Support region | Manufacturing Support Region Type Enum | An option to define whether to build supports for internal, external, or both regions of the body. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | # Minimum Support Orientations Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/manufacturing/utilities/minimum-support-orientations > **[Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, Integer, Scalar](#implicit-body-plane-scalar-scalar-scalar-manufacturing-support-region-type-enum-integer-scalar)** > **[Mesh, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, Integer](#mesh-plane-scalar-scalar-scalar-manufacturing-support-region-type-enum-integer)** *** ## Implicit Body, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, Integer, Scalar Find a number of orientations that attempt to minimize the volume of the support regions needed for the body. The implicit block version is more robust and likely to provide more optimal results, while the mesh block version will converge on results much faster but these may be less optimal. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to orient. | | Build plane | [Plane](../../../../block-documentation/types/plane) | The build plane. | | Offset | [Scalar](../../../../block-documentation/types/scalar) | The desired offset distance from the build plane to the part as the function evaluates candidate orientations. | | Overhang angle | [Scalar](../../../../block-documentation/types/scalar) | The overhang angle used by the function to determine where support regions may need to exist with respect to the build plane. Overhang angles below this value will likely require support regions. | | Min overhang angle | [Scalar](../../../../block-documentation/types/scalar) | An option to define the support volume only to this minimum overhang angle. | | Support region | Manufacturing Support Region Type Enum | An option to define whether to build supports for internal, external, or both regions of the body. | | Candidates | [Integer](../../../../block-documentation/types/integer) | The number of candidate orientations the algorithm will consider before converging on an optimum. More candidates requires more iterations, resulting in a higher likelihood the global optimum is found but requiring longer time to run. | | Feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size used to discretize the body. This input will affect the resolution of the support volume calculation as the function evaluates candidate orientations. | ### Outputs | Type | | - | | [Transformation List](../../../../block-documentation/types/transformation) | *** ## Mesh, Plane, Scalar, Scalar, Scalar, Manufacturing Support Region Type Enum, Integer Find a number of orientations that attempt to minimize the volume of the support regions needed for the mesh. The implicit block version is more robust and likely to provide more optimal results, while the mesh block version will converge on results much faster but these may be less optimal. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Mesh](../../../../block-documentation/types/mesh) | The body to orient. | | Build plane | [Plane](../../../../block-documentation/types/plane) | The build plane. | | Offset | [Scalar](../../../../block-documentation/types/scalar) | The desired offset distance from the build plane to the part as the function evaluates candidate orientations. | | Overhang angle | [Scalar](../../../../block-documentation/types/scalar) | The overhang angle used by the function to determine where support regions may need to exist with respect to the build plane. Overhang angles below this value will likely require support regions. | | Min overhang angle | [Scalar](../../../../block-documentation/types/scalar) | An option to define the support volume only to this minimum overhang angle. | | Support region | Manufacturing Support Region Type Enum | An option to define whether to build supports for internal, external, or both regions of the body. | | Candidates | [Integer](../../../../block-documentation/types/integer) | The number of candidate orientations the algorithm will consider before converging on an optimum. More candidates requires more iterations, resulting in a higher likelihood the global optimum is found but requiring longer time to run. | ### Outputs | Type | | - | | [Transformation List](../../../../block-documentation/types/transformation) | # Math Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math ## Operations > **[Add](../../block-documentation/blocks/math/operations/add)** > **[Subtract](../../block-documentation/blocks/math/operations/subtract)** > **[Multiply](../../block-documentation/blocks/math/operations/multiply)** > **[Divide](../../block-documentation/blocks/math/operations/divide)** > **[Pow](../../block-documentation/blocks/math/operations/pow)** > **[Square](../../block-documentation/blocks/math/operations/square)** > **[Third Power](../../block-documentation/blocks/math/operations/third-power)** > **[Fourth Power](../../block-documentation/blocks/math/operations/fourth-power)** > **[Exp](../../block-documentation/blocks/math/operations/exp)** > **[Sqrt](../../block-documentation/blocks/math/operations/sqrt)** > **[Third Root](../../block-documentation/blocks/math/operations/third-root)** > **[Fourth Root](../../block-documentation/blocks/math/operations/fourth-root)** > **[Nth Root](../../block-documentation/blocks/math/operations/nth-root)** > **[Log](../../block-documentation/blocks/math/operations/log)** > **[Mod](../../block-documentation/blocks/math/operations/mod)** > **[Min](../../block-documentation/blocks/math/operations/min)** > **[Max](../../block-documentation/blocks/math/operations/max)** > **[Average](../../block-documentation/blocks/math/operations/average)** > **[Abs](../../block-documentation/blocks/math/operations/abs)** ## Trigonometry > **[Sin](../../block-documentation/blocks/math/trigonometry/sin)** > **[Cos](../../block-documentation/blocks/math/trigonometry/cos)** > **[Tan](../../block-documentation/blocks/math/trigonometry/tan)** > **[Asin](../../block-documentation/blocks/math/trigonometry/asin)** > **[Acos](../../block-documentation/blocks/math/trigonometry/acos)** > **[Atan](../../block-documentation/blocks/math/trigonometry/atan)** > **[Atan2](../../block-documentation/blocks/math/trigonometry/atan2)** ## Vectors > **[Angle between Vectors](../../block-documentation/blocks/math/vectors/angle-between-vectors)** > **[Perpendicular Vector](../../block-documentation/blocks/math/vectors/perpendicular-vector)** > **[Vector Field from Components](../../block-documentation/blocks/math/vectors/vector-field-from-components)** > **[2D Vector Field](../../block-documentation/blocks/math/vectors/2d-vector-field)** > **[Vector Field from Gradient](../../block-documentation/blocks/math/vectors/vector-field-from-gradient)** > **[Dot Product](../../block-documentation/blocks/math/vectors/dot-product)** > **[Cross Product](../../block-documentation/blocks/math/vectors/cross-product)** > **[Angle with Respect to Plane](../../block-documentation/blocks/math/vectors/angle-with-respect-to-plane)** ## Constants > **[e](../../block-documentation/blocks/math/constants/e)** > **[Gravity](../../block-documentation/blocks/math/constants/gravity)** > **[Phi](../../block-documentation/blocks/math/constants/phi)** > **[Pi](../../block-documentation/blocks/math/constants/pi)** ## Logic > **[And](../../block-documentation/blocks/math/logic/and)** > **[Or](../../block-documentation/blocks/math/logic/or)** > **[Xor](../../block-documentation/blocks/math/logic/xor)** > **[Not](../../block-documentation/blocks/math/logic/not)** > **[Less Than](../../block-documentation/blocks/math/logic/less-than)** > **[Greater Than](../../block-documentation/blocks/math/logic/greater-than)** > **[Less Than or Equal to](../../block-documentation/blocks/math/logic/less-than-or-equal-to)** > **[Greater Than or Equal to](../../block-documentation/blocks/math/logic/greater-than-or-equal-to)** > **[Not Equal](../../block-documentation/blocks/math/logic/not-equal)** > **[Equals](../../block-documentation/blocks/math/logic/equals)** ## Utilities > **[Evaluate Expression](../../block-documentation/blocks/math/utilities/evaluate-expression)** > **[Linear Map](../../block-documentation/blocks/math/utilities/linear-map)** > **[Clamp](../../block-documentation/blocks/math/utilities/clamp)** > **[Nan Fill](../../block-documentation/blocks/math/utilities/nan-fill)** > **[Compare](../../block-documentation/blocks/math/utilities/compare)** > **[Ramp](../../block-documentation/blocks/math/utilities/ramp)** > **[Mix](../../block-documentation/blocks/math/utilities/mix)** > **[Transfer Function](../../block-documentation/blocks/math/utilities/transfer-function)** > **[Sequence from Bounds](../../block-documentation/blocks/math/utilities/sequence-from-bounds)** > **[Sequence](../../block-documentation/blocks/math/utilities/sequence)** > **[Random Sequence](../../block-documentation/blocks/math/utilities/random-sequence)** > **[Ceiling](../../block-documentation/blocks/math/utilities/ceiling)** > **[Floor](../../block-documentation/blocks/math/utilities/floor)** > **[Round](../../block-documentation/blocks/math/utilities/round)** # Constants Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/constants > **[e](../../../block-documentation/blocks/math/constants/e)** > **[Gravity](../../../block-documentation/blocks/math/constants/gravity)** > **[Phi](../../../block-documentation/blocks/math/constants/phi)** > **[Pi](../../../block-documentation/blocks/math/constants/pi)** # e Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/constants/e Return the mathematical constant e, or Euler's number. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Gravity Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/constants/gravity Return the standard acceleration from gravity near the surface of Earth. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Phi Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/constants/phi Return the mathematical constant phi, or golden ratio. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Pi Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/constants/pi Return the mathematical constant pi. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Logic Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic > **[And](../../../block-documentation/blocks/math/logic/and)** > **[Or](../../../block-documentation/blocks/math/logic/or)** > **[Xor](../../../block-documentation/blocks/math/logic/xor)** > **[Not](../../../block-documentation/blocks/math/logic/not)** > **[Less Than](../../../block-documentation/blocks/math/logic/less-than)** > **[Greater Than](../../../block-documentation/blocks/math/logic/greater-than)** > **[Less Than or Equal to](../../../block-documentation/blocks/math/logic/less-than-or-equal-to)** > **[Greater Than or Equal to](../../../block-documentation/blocks/math/logic/greater-than-or-equal-to)** > **[Not Equal](../../../block-documentation/blocks/math/logic/not-equal)** > **[Equals](../../../block-documentation/blocks/math/logic/equals)** # And Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/and > **[Bool, Bool](#bool-bool)** > **[Values](#values)** > **[Values](#values)** *** ## Bool, Bool Return a Bool of the logical AND operation on two Bools. ### Inputs | Name | Type | Description | | - | - | - | | Value a | [Bool](../../../../block-documentation/types/bool) | First boolean value to AND. | | Value b | [Bool](../../../../block-documentation/types/bool) | Second boolean value to AND. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Values Return a Bool of the logical AND operation on a list of Bools. ### Inputs | Name | Type | Description | | - | - | - | | Values | [Bool List](../../../../block-documentation/types/bool) | The boolean values to AND together. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Values Return a Bool of the logical AND operation on a list of Bool Fields. ### Inputs | Name | Type | Description | | - | - | - | | Values | [Bool Field List](../../../../block-documentation/types/bool-field) | The boolean values to AND together. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Equals Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/equals > **[Color, Color](#color-color)** > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** > **[Text, Text](#text-text)** *** ## Color, Color Return a true Bool value if the first Color is equal to the second Color, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Color](../../../../block-documentation/types/color) | The first value. | | Operand b | [Color](../../../../block-documentation/types/color) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Scalar, Scalar Return a true Bool value if the first Scalar number equals the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | The first value. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Scalar Field, Scalar Field Return a Bool Field of values that are true where the first Scalar Field equals the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | The first value. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | The second value. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | *** ## Text, Text Returns True if the first String equals the second, False otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Text](../../../../block-documentation/types/text) | The first value. | | Operand b | [Text](../../../../block-documentation/types/text) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | # Greater Than Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/greater-than > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Return a true Bool value if the first Scalar number is greater than the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | The first value. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Scalar Field, Scalar Field Return a Bool Field of values that are true where the first Scalar Field is greater than the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | The first value. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | The second value. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Greater Than or Equal to Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/greater-than-or-equal-to > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Return a true Bool value if the first Scalar number is greater than or equal to the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | The first value. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Scalar Field, Scalar Field Return a Bool Field of values that are true where the first Scalar Field is greater than or equal to the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | The first value. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | The second value. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Less Than Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/less-than > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Return a true Bool value if the first Scalar number is less than the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | The first value. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Scalar Field, Scalar Field Return a Bool Field of values that are true where the first Scalar Field is less than the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | The first value. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | The second value. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Less Than or Equal to Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/less-than-or-equal-to > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Return a true Bool value if the first Scalar number is less than or equal to the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | The first value. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Scalar Field, Scalar Field Return a Bool Field of values that are true where the first Scalar Field is less than or equal to the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | The first value. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | The second value. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Not Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/not > **[Bool](#bool)** > **[Bool Field](#bool-field)** *** ## Bool Return a Bool of the logical NOT operation on a Bool value. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Bool](../../../../block-documentation/types/bool) | The boolean value to negate. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Bool Field Return a Bool Field of the logical NOT operation on a Bool Field. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Bool Field](../../../../block-documentation/types/bool-field) | The boolean value to negate. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Not Equal Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/not-equal > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** > **[Text, Text](#text-text)** *** ## Scalar, Scalar Return a true Bool value if the first Scalar number does not equal the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | The first value. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Scalar Field, Scalar Field Return a Bool Field of values that are true where the first Scalar Field does not equal the second, false if otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | The first value. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | The second value. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | *** ## Text, Text Returns True if the first String does not equal the second, False otherwise. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Text](../../../../block-documentation/types/text) | The first value. | | Operand b | [Text](../../../../block-documentation/types/text) | The second value. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | # Or Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/or > **[Bool, Bool](#bool-bool)** > **[Values](#values)** > **[Values](#values)** *** ## Bool, Bool Return a Bool of the logical OR operation on two Bools. ### Inputs | Name | Type | Description | | - | - | - | | Value a | [Bool](../../../../block-documentation/types/bool) | First boolean value to OR. | | Value b | [Bool](../../../../block-documentation/types/bool) | Second boolean value to OR. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Values Return a Bool of the logical OR operation on a list of Bools. ### Inputs | Name | Type | Description | | - | - | - | | Values | [Bool List](../../../../block-documentation/types/bool) | The boolean values to OR together. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Values Return a Bool of the logical OR operation on a list of Bool Fields. ### Inputs | Name | Type | Description | | - | - | - | | Values | [Bool Field List](../../../../block-documentation/types/bool-field) | The boolean values to OR together. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Xor Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/logic/xor > **[Bool, Bool](#bool-bool)** > **[Values](#values)** > **[Values](#values)** *** ## Bool, Bool Return a Bool of the logical XOR operation on two Bools. ### Inputs | Name | Type | Description | | - | - | - | | Value a | [Bool](../../../../block-documentation/types/bool) | First boolean value to XOR. | | Value b | [Bool](../../../../block-documentation/types/bool) | Second boolean value to XOR. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Values Return a Bool of the logical XOR operation on a list of Bools. ### Inputs | Name | Type | Description | | - | - | - | | Values | [Bool List](../../../../block-documentation/types/bool) | The boolean values to XOR together. | ### Outputs | Type | | - | | [Bool](../../../../block-documentation/types/bool) | *** ## Values Return a Bool Field of the logical XOR operation on a list of Bool Fields. ### Inputs | Name | Type | Description | | - | - | - | | Values | [Bool Field List](../../../../block-documentation/types/bool-field) | The boolean values to XOR together. | ### Outputs | Type | | - | | [Bool Field](../../../../block-documentation/types/bool-field) | # Operations Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations > **[Add](../../../block-documentation/blocks/math/operations/add)** > **[Subtract](../../../block-documentation/blocks/math/operations/subtract)** > **[Multiply](../../../block-documentation/blocks/math/operations/multiply)** > **[Divide](../../../block-documentation/blocks/math/operations/divide)** > **[Pow](../../../block-documentation/blocks/math/operations/pow)** > **[Square](../../../block-documentation/blocks/math/operations/square)** > **[Third Power](../../../block-documentation/blocks/math/operations/third-power)** > **[Fourth Power](../../../block-documentation/blocks/math/operations/fourth-power)** > **[Exp](../../../block-documentation/blocks/math/operations/exp)** > **[Sqrt](../../../block-documentation/blocks/math/operations/sqrt)** > **[Third Root](../../../block-documentation/blocks/math/operations/third-root)** > **[Fourth Root](../../../block-documentation/blocks/math/operations/fourth-root)** > **[Nth Root](../../../block-documentation/blocks/math/operations/nth-root)** > **[Log](../../../block-documentation/blocks/math/operations/log)** > **[Mod](../../../block-documentation/blocks/math/operations/mod)** > **[Min](../../../block-documentation/blocks/math/operations/min)** > **[Max](../../../block-documentation/blocks/math/operations/max)** > **[Average](../../../block-documentation/blocks/math/operations/average)** > **[Abs](../../../block-documentation/blocks/math/operations/abs)** # Abs Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/abs > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the absolute value of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the absolute value of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Add Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/add > **[Integer, Integer](#integer-integer)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands, 5.31.0](#operands-5310)** > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** > **[Temperature, Scalar](#temperature-scalar)** > **[Temperature Field, Scalar Field](#temperature-field-scalar-field)** > **[Vector, Vector](#vector-vector)** > **[Vector Field, Vector Field](#vector-field-vector-field)** > **[2D Vector Field, 2D Vector Field, 5.31.0](#2d-vector-field-2d-vector-field-5310)** *** ## About this Block **What it does:** The **Add** block returns the result of adding two inputs. **Common uses:** * Mathematical Equations * Custom lattices **Tips:** * Tips for creating equations: ([https://support.ntopology.com/hc/articles/360063535353](https://support.ntopology.com/hc/articles/360063535353)) * To create TPMS from an equation: ([https://support.ntopology.com/hc/articles/4403371438611](https://support.ntopology.com/hc/articles/4403371438611)) *** ## Integer, Integer Return the addition of two Integers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Integer](../../../../block-documentation/types/integer) | First operand. | | Operand b | [Integer](../../../../block-documentation/types/integer) | Second operand. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Operands Return the addition of a list of Integers. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Integer List](../../../../block-documentation/types/integer) | List of operands. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Operands Return the addition of a list of Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar List](../../../../block-documentation/types/scalar) | List of operands. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Operands Return the addition of a list of Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar Field List](../../../../block-documentation/types/scalar-field) | list of operands. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Operands Return the addition of a list of Vectors. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Vector List](../../../../block-documentation/types/vector) | List of operands. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Operands Return the addition of a list of Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Vector Field List](../../../../block-documentation/types/vector-field) | list of operands. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## Operands, 5.31.0 Return the addition of a list of Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [2D Vector Field List](../../../../block-documentation/types/2d-vector-field) | list of operands. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | *** ## Scalar, Scalar Return the addition of two Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return the addition of two Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Temperature, Scalar Return the addition of a Temperature and a Scalar. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Temperature](../../../../block-documentation/types/temperature) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Temperature](../../../../block-documentation/types/temperature) | *** ## Temperature Field, Scalar Field Return the addition of a Temperature Field and a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Temperature Field](../../../../block-documentation/types/temperature-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Temperature Field](../../../../block-documentation/types/temperature-field) | *** ## Vector, Vector Return the addition of two Vectors. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector](../../../../block-documentation/types/vector) | First operand. | | Operand b | [Vector](../../../../block-documentation/types/vector) | Second operand. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Vector Field, Vector Field Return the addition of two Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector Field](../../../../block-documentation/types/vector-field) | First operand. | | Operand b | [Vector Field](../../../../block-documentation/types/vector-field) | Second operand. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## 2D Vector Field, 2D Vector Field, 5.31.0 Return the addition of two Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | First operand. | | Operand b | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Second operand. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Average Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/average > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands, 5.31.0](#operands-5310)** *** ## Operands Return an average of a list of Points. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Point List](../../../../block-documentation/types/point) | List of operands. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | *** ## Operands Return an average of a list of Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar List](../../../../block-documentation/types/scalar) | List of operands. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Operands Return an average of a list of Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar Field List](../../../../block-documentation/types/scalar-field) | list of operands. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Operands Return an average of a list of Vectors. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Vector List](../../../../block-documentation/types/vector) | List of operands. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Operands Return an average of a list of Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Vector Field List](../../../../block-documentation/types/vector-field) | list of operands. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## Operands, 5.31.0 Return an average of a list of Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [2D Vector Field List](../../../../block-documentation/types/2d-vector-field) | list of operands. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Divide Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/divide > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** > **[Vector, Scalar](#vector-scalar)** > **[Vector Field, Scalar Field](#vector-field-scalar-field)** > **[2D Vector Field, Scalar Field, 5.31.0](#2d-vector-field-scalar-field-5310)** *** ## About this Block **What it does:** The **Divide** block calculates the quotient of two inputs. It divides the **Numerator** by the **Denominator**. You can switch between different input types using the dropdown menu next to the block's title to switch overloads. **Common uses:** * Performing mathematical operations within a workflow. * Scaling the magnitude of vectors or vector fields. **Tips:** * **Input Types:** This block supports several combinations: * **Scalar / Scalar:** Returns a single numerical value. * **Scalar Field / Scalar Field:** Returns a new scalar field based on the quotient of two input fields. * **Vector / Scalar:** Adjusts the magnitude of a vector by dividing its components by a scalar. * **Vector Field / Scalar Field:** Changes the magnitude of a vector field spatially using a scalar field. *** ## Scalar, Scalar Divide a Scalar number by another Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Divide a Scalar Field by another Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Vector, Scalar Divide a Vector by a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector](../../../../block-documentation/types/vector) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Vector Field, Scalar Field Divide a Vector Field by a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector Field](../../../../block-documentation/types/vector-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## 2D Vector Field, Scalar Field, 5.31.0 Divide a Vector Field by a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Exp Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/exp > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Evaluate the mathematical constant "e" raised to the input Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return a field of the mathematical constant "e" raised to the values in the input Scalar field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Fourth Power Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/fourth-power > **[Integer](#integer)** > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Integer Return the fourth power of an Integer. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Integer](../../../../block-documentation/types/integer) | Value to operate on. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Scalar Return the fourth power of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the fourth power of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Fourth Root Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/fourth-root > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the fourth root of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the fourth root of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Log Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/log > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the natural logarithm of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the natural logarithm of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Max Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/max > **[Integer, Integer](#integer-integer)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Integer, Integer Return the largest value between two Integers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Integer](../../../../block-documentation/types/integer) | First operand. | | Operand b | [Integer](../../../../block-documentation/types/integer) | Second operand. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Operands Return the largest value in a list of Integers. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Integer List](../../../../block-documentation/types/integer) | List of operands. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Operands Return the largest value in a list of Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar List](../../../../block-documentation/types/scalar) | List of operands. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Operands Return a Scalar Field of the largest values from a list of Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar Field List](../../../../block-documentation/types/scalar-field) | list of operands. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar, Scalar Return the largest value between two Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return a Scalar Field of the largest values between two Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Min Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/min > **[Integer, Integer](#integer-integer)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Operands](#operands)** > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Integer, Integer Return the smallest value between two Integers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Integer](../../../../block-documentation/types/integer) | First operand. | | Operand b | [Integer](../../../../block-documentation/types/integer) | Second operand. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Operands Return the smallest value in a list of Integers. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Integer List](../../../../block-documentation/types/integer) | List of operands. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Operands Return the smallest value in a list of Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar List](../../../../block-documentation/types/scalar) | List of operands. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Operands Return a Scalar Field of the smallest values from a list of Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar Field List](../../../../block-documentation/types/scalar-field) | list of operands. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar, Scalar Return the smallest value between two Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return a Scalar Field of the smallest values between two Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Mod Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/mod > **[Integer, Integer](#integer-integer)** > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Integer, Integer Return the remainder from the division of one Integer from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Integer](../../../../block-documentation/types/integer) | First operand. | | Operand b | [Integer](../../../../block-documentation/types/integer) | Second operand. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Scalar, Scalar Return the remainder from the division of one Scalar number from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return a Scalar Field of the remainders from the division of one Scalar Field from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Multiply Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/multiply > **[Integer, Integer](#integer-integer)** > **[Operands](#operands)** > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar, Vector](#scalar-vector)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** > **[Scalar Field, Vector Field](#scalar-field-vector-field)** > **[Scalar Field, 2D Vector Field, 5.31.0](#scalar-field-2d-vector-field-5310)** > **[Vector, Scalar](#vector-scalar)** > **[Vector Field, Scalar Field](#vector-field-scalar-field)** > **[2D Vector Field, Scalar Field, 5.31.0](#2d-vector-field-scalar-field-5310)** *** ## About this Block **What it does:** The **Multiply** block returns the result of multiplying two inputs. **Common uses:** * Assigning units * Custom lattices * Mathematical equations **Tips:** * Tips for creating equations: ([https://support.ntopology.com/hc/articles/360063535353](https://support.ntopology.com/hc/articles/360063535353)) * To create TPMS from an equation: ([https://support.ntopology.com/hc/articles/4403371438611](https://support.ntopology.com/hc/articles/4403371438611)) * To generate surface roughness: ([https://support.ntopology.com/hc/articles/360060946514](https://support.ntopology.com/hc/articles/360060946514)) *** ## Integer, Integer Return the multiplication of two Integers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Integer](../../../../block-documentation/types/integer) | First operand. | | Operand b | [Integer](../../../../block-documentation/types/integer) | Second operand. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Operands Multiply a list of Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operands | [Scalar Field List](../../../../block-documentation/types/scalar-field) | list of operands. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar, Scalar Return the multiplication of two Scalar numbers. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar, Vector Return the multiplication of a Scalar number to a Vector. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Vector](../../../../block-documentation/types/vector) | Second operand. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Scalar Field, Scalar Field Return the multiplication of two Scalar Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar Field, Vector Field Return the multiplication of a Scalar Field to a Vector Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Vector Field](../../../../block-documentation/types/vector-field) | Second operand. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## Scalar Field, 2D Vector Field, 5.31.0 Return the multiplication of a Scalar Field to a Vector Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Second operand. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | *** ## Vector, Scalar Return the multiplication of a Vector to a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector](../../../../block-documentation/types/vector) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Vector Field, Scalar Field Return the multiplication of a Vector field to a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector Field](../../../../block-documentation/types/vector-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## 2D Vector Field, Scalar Field, 5.31.0 Return the multiplication of a Vector field to a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Nth Root Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/nth-root > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Return the Nth root of a Scalar number, where Input A represents the number to root and Input B represents N. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return the Nth root of a Scalar Field, where Input A represents the field to root and Input B represents N. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Pow Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/pow > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Return a Scalar number raised to a power, where Input A represents the number to raise and Input B represents the exponent. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return a Scalar Field raised to a power, where Input A represents the field to raise and Input B represents the exponent. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Sqrt Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/sqrt > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the square root of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the square root of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Square Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/square > **[Integer](#integer)** > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Integer Return the square of an Integer. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Integer](../../../../block-documentation/types/integer) | Value to operate on. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Scalar Return the square of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the square of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Subtract Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/subtract > **[Integer, Integer](#integer-integer)** > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** > **[Temperature, Scalar](#temperature-scalar)** > **[Temperature, Temperature](#temperature-temperature)** > **[Temperature Field, Scalar Field](#temperature-field-scalar-field)** > **[Temperature Field, Temperature Field](#temperature-field-temperature-field)** > **[Vector, Vector](#vector-vector)** > **[Vector Field, Vector Field](#vector-field-vector-field)** > **[2D Vector Field, 2D Vector Field, 5.31.0](#2d-vector-field-2d-vector-field-5310)** *** ## About this Block **What it does:** The **Subtract** block returns the result of the first input minus the second input ($A - B$). **Common uses:** * Defining custom equations for implicit geometry or field-driven design. * Reducing a property by a specific constant or variable. * Calculating the relative distance or displacement between two points or vectors. **Tips:** * Unlike the Add block, the order of inputs in the Subtract block matters. Ensure your Minuend (the value being decreased) is the first input and your Subtrahend (the value to subtract) is the second. * When used with scalar fields, this block subtracts the value of the second scalar field from the first at every point in space. * To create TPMS from an equation, refer to this [guide](https://support.ntop.com/hc/articles/4403371438611). * For more information on building mathematical workflows, see our [tips for creating equations](https://support.ntop.com/hc/articles/360063535353). *** ## Integer, Integer Return the subtraction of one Integer from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Integer](../../../../block-documentation/types/integer) | First operand. | | Operand b | [Integer](../../../../block-documentation/types/integer) | Second operand. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Scalar, Scalar Return the subtraction of one Scalar number from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return the subtraction of one Scalar Field from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Temperature, Scalar Return the subtraction of a Scalar from a Temperature. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Temperature](../../../../block-documentation/types/temperature) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Temperature](../../../../block-documentation/types/temperature) | *** ## Temperature, Temperature Return the subtraction of one Scalar Field from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Temperature](../../../../block-documentation/types/temperature) | First operand. | | Operand b | [Temperature](../../../../block-documentation/types/temperature) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Temperature Field, Scalar Field Return the subtraction of a Scalar Field from a Temperature Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Temperature Field](../../../../block-documentation/types/temperature-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Temperature Field](../../../../block-documentation/types/temperature-field) | *** ## Temperature Field, Temperature Field Return the subtraction of one Temperature Field from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Temperature Field](../../../../block-documentation/types/temperature-field) | First operand. | | Operand b | [Temperature Field](../../../../block-documentation/types/temperature-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Vector, Vector Return the subtraction of one Vector from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector](../../../../block-documentation/types/vector) | First operand. | | Operand b | [Vector](../../../../block-documentation/types/vector) | Second operand. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Vector Field, Vector Field Return the subtraction of one Vector Field from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector Field](../../../../block-documentation/types/vector-field) | First operand. | | Operand b | [Vector Field](../../../../block-documentation/types/vector-field) | Second operand. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## 2D Vector Field, 2D Vector Field, 5.31.0 Return the subtraction of one Vector Field from another. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | First operand. | | Operand b | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Second operand. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Third Power Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/third-power > **[Integer](#integer)** > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Integer Return the third power of an Integer. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Integer](../../../../block-documentation/types/integer) | Value to operate on. | ### Outputs | Type | | - | | [Integer](../../../../block-documentation/types/integer) | *** ## Scalar Return the third power of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the third power of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Third Root Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/operations/third-root > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the third root of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the third root of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Trigonometry Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry > **[Sin](../../../block-documentation/blocks/math/trigonometry/sin)** > **[Cos](../../../block-documentation/blocks/math/trigonometry/cos)** > **[Tan](../../../block-documentation/blocks/math/trigonometry/tan)** > **[Asin](../../../block-documentation/blocks/math/trigonometry/asin)** > **[Acos](../../../block-documentation/blocks/math/trigonometry/acos)** > **[Atan](../../../block-documentation/blocks/math/trigonometry/atan)** > **[Atan2](../../../block-documentation/blocks/math/trigonometry/atan2)** # Acos Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry/acos > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the inverse cosine of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the inverse cosine of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Asin Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry/asin > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the inverse sine of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the inverse sine of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Atan Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry/atan > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the inverse tangent of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the inverse tangent of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Atan2 Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry/atan2 > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Return the four-quadrant inverse tangent of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar](../../../../block-documentation/types/scalar) | First operand. | | Operand b | [Scalar](../../../../block-documentation/types/scalar) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Return the four-quadrant inverse tangent of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Cos Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry/cos > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the cosine of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the cosine of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Sin Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry/sin > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the sine of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the sine of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Tan Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/trigonometry/tan > **[Scalar](#scalar)** > **[Scalar Field](#scalar-field)** *** ## Scalar Return the tangent of a Scalar number. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar](../../../../block-documentation/types/scalar) | Value to operate on. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field Return the tangent of a Scalar field. ### Inputs | Name | Type | Description | | - | - | - | | Operand | [Scalar Field](../../../../block-documentation/types/scalar-field) | Value to operate on. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities > **[Evaluate Expression](../../../block-documentation/blocks/math/utilities/evaluate-expression)** > **[Linear Map](../../../block-documentation/blocks/math/utilities/linear-map)** > **[Clamp](../../../block-documentation/blocks/math/utilities/clamp)** > **[Nan Fill](../../../block-documentation/blocks/math/utilities/nan-fill)** > **[Compare](../../../block-documentation/blocks/math/utilities/compare)** > **[Ramp](../../../block-documentation/blocks/math/utilities/ramp)** > **[Mix](../../../block-documentation/blocks/math/utilities/mix)** > **[Transfer Function](../../../block-documentation/blocks/math/utilities/transfer-function)** > **[Sequence from Bounds](../../../block-documentation/blocks/math/utilities/sequence-from-bounds)** > **[Sequence](../../../block-documentation/blocks/math/utilities/sequence)** > **[Random Sequence](../../../block-documentation/blocks/math/utilities/random-sequence)** > **[Ceiling](../../../block-documentation/blocks/math/utilities/ceiling)** > **[Floor](../../../block-documentation/blocks/math/utilities/floor)** > **[Round](../../../block-documentation/blocks/math/utilities/round)** # Ceiling Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/ceiling > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Map a value to the least increment of an interval that is greater than or equal to the value. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | The value to convert by way of the Ceiling function. | | Interval | [Scalar](../../../../block-documentation/types/scalar) | The increment of the Ceiling function. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Map a value to the least increment of an interval that is greater than or equal to the value. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar Field](../../../../block-documentation/types/scalar-field) | The value to convert by way of the Ceiling function. | | Interval | [Scalar Field](../../../../block-documentation/types/scalar-field) | The increment of the Ceiling function. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Clamp Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/clamp > **[Scalar, Scalar, Scalar](#scalar-scalar-scalar)** > **[Scalar Field, Scalar Field, Scalar Field](#scalar-field-scalar-field-scalar-field)** *** ## Scalar, Scalar, Scalar Clamp a scalar value between min and max. Values lower than min will clamp to min, and values greater than max will clamp to max. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | Value to Clamp. | | Min | [Scalar](../../../../block-documentation/types/scalar) | Min value to clamp with. | | Max | [Scalar](../../../../block-documentation/types/scalar) | Max value to clamp with. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field, Scalar Field Clamp values of a scalar field between min and max. Values lower than min will clamp to min, and values greater than max will clamp to max. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field of values to clamp. | | Min | [Scalar Field](../../../../block-documentation/types/scalar-field) | Min value to clamp with. | | Max | [Scalar Field](../../../../block-documentation/types/scalar-field) | Max value to clamp with. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Compare Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/compare Create a field that compares the values of one field to another. If the first field value is lower, -1 will be returned. If the two field values are equal, 0 will be returned. If the first field value is higher, 1 will be returned. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Evaluate Expression Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/evaluate-expression > **[Text, Scalar, Dictionary, 5.30.0](#text-scalar-dictionary-5300)** > **[Text, Scalar, Scalar Field, 5.30.0](#text-scalar-scalar-field-5300)** *** ## Text, Scalar, Dictionary, 5.30.0 Evaluate an expression with local variables. ### Inputs | Name | Type | Description | | - | - | - | | Expression | [Text](../../../../block-documentation/types/text) | Expression to evaluate. | | Dimensionality | [Scalar](../../../../block-documentation/types/scalar) | A scalar variable representing the expected dimensionality to which the expression should evaluate. | | Variables | [Dictionary](../../../../block-documentation/types/dictionary) | Dictionary defining the name and corresponding scalar field value of each variabe in the Expression. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Text, Scalar, Scalar Field, 5.30.0 Evaluate an expression with local variables. ### Inputs | Name | Type | Description | | - | - | - | | Expression | [Text](../../../../block-documentation/types/text) | Expression to evaluate. | | Dimensionality | [Scalar](../../../../block-documentation/types/scalar) | A scalar variable representing the expected dimensionality to which the expression should evaluate. | | Variables | [Scalar Field](../../../../block-documentation/types/scalar-field) | A variable to use inside the expression. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Floor Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/floor > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Map a value to the greatest increment of an interval less than or equal to the value. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | The value to convert by way of the Floor function. | | Interval | [Scalar](../../../../block-documentation/types/scalar) | The increment of the Floor function. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Map a value to the greatest increment of an interval less than or equal to the value. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar Field](../../../../block-documentation/types/scalar-field) | The value to convert by way of the Floor function. | | Interval | [Scalar Field](../../../../block-documentation/types/scalar-field) | The increment of the Floor function. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Linear Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/linear-map > **[Scalar, Scalar, Scalar, Scalar, Scalar](#scalar-scalar-scalar-scalar-scalar)** > **[Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field](#scalar-field-scalar-field-scalar-field-scalar-field-scalar-field)** *** ## Scalar, Scalar, Scalar, Scalar, Scalar Map a Scalar number in one range to its relative position in another range. This will map the value in a linear fashion, and will not clamp values outside the bounds. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | Value to map. | | Input min | [Scalar](../../../../block-documentation/types/scalar) | Input range min value. | | Input max | [Scalar](../../../../block-documentation/types/scalar) | Input range max value. | | Output min | [Scalar](../../../../block-documentation/types/scalar) | Output range min value. | | Output max | [Scalar](../../../../block-documentation/types/scalar) | Output range max value. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field Map Scalar Field values in one range to their relative position in another range. This will map the value in a linear fashion, and will not clamp values outside the bounds. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to map. | | In min | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input range min value. | | In max | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input range max value. | | Out min | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output range min value. | | Out max | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output range max value. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Mix Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/mix > **[Scalar, Scalar, Scalar](#scalar-scalar-scalar)** > **[Scalar Field, Scalar Field, Scalar Field](#scalar-field-scalar-field-scalar-field)** > **[Vector Field, Vector Field, Scalar Field, 5.31.0](#vector-field-vector-field-scalar-field-5310)** > **[2D Vector Field, 2D Vector Field, Scalar Field, 5.31.0](#2d-vector-field-2d-vector-field-scalar-field-5310)** *** ## Scalar, Scalar, Scalar Mix one scalar value with another scalar value, based on a mixing factor. ### Inputs | Name | Type | Description | | - | - | - | | Value a | [Scalar](../../../../block-documentation/types/scalar) | First value to mix. | | Value b | [Scalar](../../../../block-documentation/types/scalar) | Second value to mix. | | Factor | [Scalar](../../../../block-documentation/types/scalar) | factor to mix values by. Factors from 0 to 1 will act as a blending percentage between the two values. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field, Scalar Field Mix values of one scalar field with the values of another scalar field, based on a factor. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First scalar field to mix. | | Scalar field b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second scalar field to mix. | | Factor | [Scalar Field](../../../../block-documentation/types/scalar-field) | Factor to mix fields by. Factors from 0 to 1 will act as a blending percentage between the two fields. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Vector Field, Vector Field, Scalar Field, 5.31.0 Mix values of one vector field with the values of another vector field, based on a factor. ### Inputs | Name | Type | Description | | - | - | - | | Vector field a | [Vector Field](../../../../block-documentation/types/vector-field) | First vector field to mix. | | Vector field b | [Vector Field](../../../../block-documentation/types/vector-field) | Second vector field to mix. | | Factor | [Scalar Field](../../../../block-documentation/types/scalar-field) | Factor to mix fields by. Factors from 0 to 1 will act as a blending percentage between the two fields. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## 2D Vector Field, 2D Vector Field, Scalar Field, 5.31.0 Mix values of one 2D vector field with the values of another 2D vector field, based on a factor. ### Inputs | Name | Type | Description | | - | - | - | | 2d vector field a | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | First 2D vector field to mix. | | 2d vector field b | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Second 2D vector field to mix. | | Factor | [Scalar Field](../../../../block-documentation/types/scalar-field) | Factor to mix fields by. Factors from 0 to 1 will act as a blending percentage between the two fields. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Nan Fill Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/nan-fill Return a Scalar Field with all "Not a Number" values in Input A replaced by values in Input B. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Scalar Field](../../../../block-documentation/types/scalar-field) | First operand. | | Operand b | [Scalar Field](../../../../block-documentation/types/scalar-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Ramp Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/ramp > **[Scalar, Scalar, Scalar, Scalar, Scalar, Continuity Enum](#scalar-scalar-scalar-scalar-scalar-continuity-enum)** > **[Scalar, Scalar, Scalar, Scalar, Scalar, Easing Enum, Easing Direction Enum, Scalar, 6.2.0](#scalar-scalar-scalar-scalar-scalar-easing-enum-easing-direction-enum-scalar-620)** > **[Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Continuity Enum](#scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-continuity-enum)** > **[Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Easing Enum, Easing Direction Enum, Scalar, 6.2.0](#scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-easing-enum-easing-direction-enum-scalar-620)** *** ## About this Block The Ramp block allows you to scale values from one range, within the input min and max, to its relative value within an output range. For example, an input value of 5 ramped from an input range of 0 to 10 results in 50 when the output range is 0 to 100. The input value and the ramp output are both halfway between their respective min and max bounds. ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_01.png) ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_02.png) When the input value falls below the Input min or above the Input max, the output value is set to the Output min, or Output max, respectively. This is referred to as a clamped bound. ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_03.png) ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_04.png) The ramp process can be performed on singular scalar values, or entire scalar fields. To change the block’s type, click on the chevron next to the ‘Ramp’ block title, and select from the drop-down menu. When ramping with scalar fields, we’re able to take the qualitative shape of an input field and give it new quantitative values. In the example below, we’ve effectively scaled the distance field from a plane up by a factor of 2. ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_05.png) ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_06.png) Ramping can be used in conjunction with any block that accepts a scalar field input in order to make the effect of that block spatially varying. In the example below, we thicken a cylinder by an amount that changes based on the distance from a plane. ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_07.png) The units of the input value, input min, and input max, must all match. The output min and max must also match each other, but they can have a different set of units from the inputs. This allows you to convert, for example, a stress field in Pa into a field defining a lattice thickness in mm. ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_10.png) The Continuity input dictates how values are interpolated between the min and max ranges. The images below show the difference between the three options. ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp_09.png) ## Example File *This file demonstrates several uses of the Ramp block.* Download Example: [Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Ramp.ntop) *** ## Scalar, Scalar, Scalar, Scalar, Scalar, Continuity Enum Ramp scalar value in one range to its relative position in another range, with clamped bounds. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | Value to ramp. | | Input min | [Scalar](../../../../block-documentation/types/scalar) | Input range min value. | | Input max | [Scalar](../../../../block-documentation/types/scalar) | Input range max value. | | Output min | [Scalar](../../../../block-documentation/types/scalar) | Output range min clamp value. | | Output max | [Scalar](../../../../block-documentation/types/scalar) | Output range max clamp value. | | Continuity | Continuity Enum | Smoothness of the ramp by continuity order.The higher the order, the smoother the transition. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar, Scalar, Scalar, Scalar, Scalar, Easing Enum, Easing Direction Enum, Scalar, 6.2.0 Ramp a scalar value in one range to its relative position in another range, with clamped bounds and a choice of easing function applied to the start of the transition, its end, or both. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | Value to ramp. | | In min | [Scalar](../../../../block-documentation/types/scalar) | Input range min value. | | In max | [Scalar](../../../../block-documentation/types/scalar) | Input range max value. | | Out min | [Scalar](../../../../block-documentation/types/scalar) | Output range min clamp value. | | Out max | [Scalar](../../../../block-documentation/types/scalar) | Output range max clamp value. | | Easing function | Easing Enum | Function used to shape the transition. Geometric (G0) leaves it linear. Tangent (G1) and Curvature (G2) meet the clamped region with matching tangent and matching curvature, reproducing the Continuity option of the other Ramp overloads when Easing Direction is Ease In and Out. Power flattens the eased end more the larger Function Parameter is, where 2 is quadratic and 3 is cubic. Sinusoidal is a quarter cosine and falls between G1 and G2. Circular follows a quarter circle and arrives vertically at the opposite end. Exponential is the only option that does not leave the eased end perfectly flat, and its Function Parameter sets how sharply it accelerates. | | Easing direction | Easing Direction Enum | Which end of the transition the easing function shapes. Ease In smooths the start and leaves the end sharp, Ease Out does the reverse, and Ease In and Out smooths both. | | Function parameter | [Scalar](../../../../block-documentation/types/scalar) | Shapes the selected Easing Function: the exponent for Power and the rate for Exponential. Required by those four functions, ignored by the others, and must be greater than zero. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Continuity Enum Ramp values of a field in one range to its relative positions in another range, with clamped bounds. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to ramp. | | In min | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input range min value. | | In max | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input range max value. | | Out min | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output range min clamp value. | | Out max | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output range max clamp value. | | Continuity | Continuity Enum | Smoothness of the ramp by continuity order.The higher the order, the smoother the transition. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Easing Enum, Easing Direction Enum, Scalar, 6.2.0 Ramp values of a field in one range to its relative positions in another range, with clamped bounds and a choice of easing function applied to the start of the transition, its end, or both. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to ramp. | | In min | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input range min value. | | In max | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input range max value. | | Out min | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output range min clamp value. | | Out max | [Scalar Field](../../../../block-documentation/types/scalar-field) | Output range max clamp value. | | Easing function | Easing Enum | Function used to shape the transition. Geometric (G0) leaves it linear. Tangent (G1) and Curvature (G2) meet the clamped region with matching tangent and matching curvature, reproducing the Continuity option of the other Ramp overloads when Easing Direction is Ease In and Out. Power flattens the eased end more the larger Function Parameter is, where 2 is quadratic and 3 is cubic. Sinusoidal is a quarter cosine and falls between G1 and G2. Circular follows a quarter circle and arrives vertically at the opposite end. Exponential is the only option that does not leave the eased end perfectly flat, and its Function Parameter sets how sharply it accelerates. | | Easing direction | Easing Direction Enum | Which end of the transition the easing function shapes. Ease In smooths the start and leaves the end sharp, Ease Out does the reverse, and Ease In and Out smooths both. | | Function parameter | [Scalar](../../../../block-documentation/types/scalar) | Shapes the selected Easing Function: the exponent for Power and the rate for Exponential. Required by those four functions, ignored by the others, and must be greater than zero. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Random Sequence Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/random-sequence Creates a sequence of random scalar numbers from 0 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Count | [Integer](../../../../block-documentation/types/integer) | The number of random scalars to create. | | Seed | [Integer](../../../../block-documentation/types/integer) | A value that uniquely identifies this infinite sequence of scalar numbers. | ### Outputs | Type | | - | | [Scalar List](../../../../block-documentation/types/scalar) | # Round Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/round > **[Scalar, Scalar](#scalar-scalar)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## Scalar, Scalar Map a value by either rounding up to the smallest increment of an interval that is not less than the value or by rounding down to the largest increment of an interval that is not greater than the value. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | The value to convert by way of the Round function. | | Interval | [Scalar](../../../../block-documentation/types/scalar) | The increment of the Round function. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Scalar Field Map a value by either rounding up to the smallest increment of an interval that is not less than the value or by rounding down to the largest increment of an interval that is not greater than the value. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar Field](../../../../block-documentation/types/scalar-field) | The value to convert by way of the Round function. | | Interval | [Scalar Field](../../../../block-documentation/types/scalar-field) | The increment of the Round function. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Sequence Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/sequence Create an equally spaced sequence of values. ### Inputs | Name | Type | Description | | - | - | - | | Start | [Scalar](../../../../block-documentation/types/scalar) | The value of the first item in the sequence. | | Increment | [Scalar](../../../../block-documentation/types/scalar) | The distance between consecutive items. | | Count | [Integer](../../../../block-documentation/types/integer) | The total number of items in the sequence. | ### Outputs | Type | | - | | [Scalar List](../../../../block-documentation/types/scalar) | # Sequence from Bounds Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/sequence-from-bounds Create an equally spaced sequence between two values. ### Inputs | Name | Type | Description | | - | - | - | | Start | [Scalar](../../../../block-documentation/types/scalar) | The value of the first item in the sequence. | | End | [Scalar](../../../../block-documentation/types/scalar) | The value of the last item in the sequence. | | Count | [Integer](../../../../block-documentation/types/integer) | The total number of items in the sequence. | ### Outputs | Type | | - | | [Scalar List](../../../../block-documentation/types/scalar) | # Transfer Function Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/utilities/transfer-function > **[Scalar, Input, Output, Interpolation Enum, Extrapolation Enum](#scalar-input-output-interpolation-enum-extrapolation-enum)** > **[Scalar Field, Input, Output, Interpolation Enum, Extrapolation Enum](#scalar-field-input-output-interpolation-enum-extrapolation-enum)** *** ## Scalar, Input, Output, Interpolation Enum, Extrapolation Enum Use piece-wise interpolation to compute the output value of a function approximated by a set of field data points. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | The value to look up in from the input domain. | | Input | [Scalar List](../../../../block-documentation/types/scalar) | The input data for the function (must be monotonic). | | Output | [Scalar List](../../../../block-documentation/types/scalar) | The output field data for the function (must be the same length as the input data). | | Interpolation | Interpolation Enum | Interpolation type. | | Extrapolation | Extrapolation Enum | How to extend data outside of the input domain. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Scalar Field, Input, Output, Interpolation Enum, Extrapolation Enum Use piece-wise interpolation to compute the output field value of a function approximated by a set of field data points. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar Field](../../../../block-documentation/types/scalar-field) | The value as a field to look up from the input domain. | | Input | [Scalar List](../../../../block-documentation/types/scalar) | The input data for the function (must be monotonic). | | Output | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The output field data for the function (must be the same length as the input data). | | Interpolation | Interpolation Enum | Interpolation type. | | Extrapolation | Extrapolation Enum | How to extend data outside of the input domain. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Vectors Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors > **[Angle between Vectors](../../../block-documentation/blocks/math/vectors/angle-between-vectors)** > **[Perpendicular Vector](../../../block-documentation/blocks/math/vectors/perpendicular-vector)** > **[Vector Field from Components](../../../block-documentation/blocks/math/vectors/vector-field-from-components)** > **[2D Vector Field](../../../block-documentation/blocks/math/vectors/2d-vector-field)** > **[Vector Field from Gradient](../../../block-documentation/blocks/math/vectors/vector-field-from-gradient)** > **[Dot Product](../../../block-documentation/blocks/math/vectors/dot-product)** > **[Cross Product](../../../block-documentation/blocks/math/vectors/cross-product)** > **[Angle with Respect to Plane](../../../block-documentation/blocks/math/vectors/angle-with-respect-to-plane)** # 2D Vector Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/2d-vector-field Create a 2D vector field from scalar field components. ### Inputs | Name | Type | Description | | - | - | - | | X | [Scalar Field](../../../../block-documentation/types/scalar-field) | The X component of the vector field as a scalar field. | | Y | [Scalar Field](../../../../block-documentation/types/scalar-field) | The Y component of the vector field as a scalar field. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Angle between Vectors Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/angle-between-vectors > **[Vector, Vector](#vector-vector)** > **[Vector, Vector, 1.1.0](#vector-vector-110)** > **[Vector Field, Vector Field](#vector-field-vector-field)** > **[Vector Field, Vector Field, 1.1.0](#vector-field-vector-field-110)** > **[2D Vector Field, 2D Vector Field, 5.31.0](#2d-vector-field-2d-vector-field-5310)** *** ## Vector, Vector Return an interior angle between two Vector directions. ### Inputs | Name | Type | Description | | - | - | - | | Vector a | [Vector](../../../../block-documentation/types/vector) | First vector to get angles from. | | Vector b | [Vector](../../../../block-documentation/types/vector) | Second vector to get angles from. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Vector, Vector, 1.1.0 Return an interior angle between two Vector directions. ### Inputs | Name | Type | Description | | - | - | - | | Vector a | [Vector](../../../../block-documentation/types/vector) | First vector to get angles from. | | Vector b | [Vector](../../../../block-documentation/types/vector) | Second vector to get angles from. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Vector Field, Vector Field Return a Scalar Field of the interior angles between two Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Field a | [Vector Field](../../../../block-documentation/types/vector-field) | First vector field to get angles from. | | Field b | [Vector Field](../../../../block-documentation/types/vector-field) | Second vector field to get angles from. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Vector Field, Vector Field, 1.1.0 Return a Scalar Field of the interior angles between two Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Field a | [Vector Field](../../../../block-documentation/types/vector-field) | First vector field to get angles from. | | Field b | [Vector Field](../../../../block-documentation/types/vector-field) | Second vector field to get angles from. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## 2D Vector Field, 2D Vector Field, 5.31.0 Return a Scalar Field of the signed angle between two 2D Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Field a | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | First 2D vector field to get angles from. | | Field b | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Second 2D vector field to get angles from. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Angle with Respect to Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/angle-with-respect-to-plane Derives the angle of a vector relative to a plane. Returns the absolute value of the smallest angle in degrees. ### Inputs | Name | Type | Description | | - | - | - | | Vector | [Vector](../../../../block-documentation/types/vector) | Vector(s) to derive the angles relative to a plane. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane used to determine the angle of the vectors. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Cross Product Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/cross-product > **[Vector, Vector](#vector-vector)** > **[Vector Field, Vector Field](#vector-field-vector-field)** *** ## Vector, Vector Return the cross product of two Vectors. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector](../../../../block-documentation/types/vector) | First operand. | | Operand b | [Vector](../../../../block-documentation/types/vector) | Second operand. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Vector Field, Vector Field Return the cross product of two Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector Field](../../../../block-documentation/types/vector-field) | First operand. | | Operand b | [Vector Field](../../../../block-documentation/types/vector-field) | Second operand. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | # Dot Product Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/dot-product > **[Vector, Vector](#vector-vector)** > **[Vector Field, Vector Field](#vector-field-vector-field)** > **[2D Vector Field, 2D Vector Field, 5.31.0](#2d-vector-field-2d-vector-field-5310)** *** ## Vector, Vector Return the dot product of two Vectors. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector](../../../../block-documentation/types/vector) | First operand. | | Operand b | [Vector](../../../../block-documentation/types/vector) | Second operand. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Vector Field, Vector Field Return the dot product of two Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [Vector Field](../../../../block-documentation/types/vector-field) | First operand. | | Operand b | [Vector Field](../../../../block-documentation/types/vector-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## 2D Vector Field, 2D Vector Field, 5.31.0 Return the dot product of two Vector Fields. ### Inputs | Name | Type | Description | | - | - | - | | Operand a | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | First operand. | | Operand b | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | Second operand. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Perpendicular Vector Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/perpendicular-vector > **[Vector](#vector)** > **[Vector, 1.1.0](#vector-110)** > **[Vector Field](#vector-field)** > **[2D Vector Field, 5.31.0](#2d-vector-field-5310)** *** ## Vector Get an arbitrary perpendicular vector from the input vector. ### Inputs | Name | Type | Description | | - | - | - | | Vector | [Vector](../../../../block-documentation/types/vector) | Input vector to get perpendicular vector from. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Vector, 1.1.0 Get an arbitrary perpendicular vector from the input vector. ### Inputs | Name | Type | Description | | - | - | - | | Vector | [Vector](../../../../block-documentation/types/vector) | Input vector to get perpendicular vector from. | ### Outputs | Type | | - | | [Vector](../../../../block-documentation/types/vector) | *** ## Vector Field Create a vector field of arbitrary perpendicular vectors from another vector field. A continuous input does not guarantee a continuous output. ### Inputs | Name | Type | Description | | - | - | - | | Vector field | [Vector Field](../../../../block-documentation/types/vector-field) | Vector field to create arbitrary perpendicular field from. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## 2D Vector Field, 5.31.0 Create a 2d vector field of arbitrary perpendicular vectors from another 2d vector field. ### Inputs | Name | Type | Description | | - | - | - | | 2d vector field | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | 2D vector field to create perpendicular field from. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Vector Field from Components Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/vector-field-from-components Create a vector field from scalar field components. ### Inputs | Name | Type | Description | | - | - | - | | X | [Scalar Field](../../../../block-documentation/types/scalar-field) | The X component of the vector field as a scalar field. | | Y | [Scalar Field](../../../../block-documentation/types/scalar-field) | The Y component of the vector field as a scalar field. | | Z | [Scalar Field](../../../../block-documentation/types/scalar-field) | The Z component of the vector field as a scalar field. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | # Vector Field from Gradient Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/math/vectors/vector-field-from-gradient ## About this Block **What it does:** The **Vector Field from Gradient** block creates a vector field from the gradient of a scalar field. **Tips:** * Use the field viewer (F) to view the vector field. *** Create a vector field from the gradient directions of a field. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to get gradient from for vector field generation. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | # Modeling Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling ## Operations > **[Extrude Profile](../../block-documentation/blocks/modeling/operations/extrude-profile)** > **[Extruded Cut](../../block-documentation/blocks/modeling/operations/extruded-cut)** > **[Offset Body](../../block-documentation/blocks/modeling/operations/offset-body)** > **[Thicken Body](../../block-documentation/blocks/modeling/operations/thicken-body)** > **[Shell](../../block-documentation/blocks/modeling/operations/shell)** > **[Shear](../../block-documentation/blocks/modeling/operations/shear)** > **[Revolve Profile](../../block-documentation/blocks/modeling/operations/revolve-profile)** > **[Sweep along One Rail](../../block-documentation/blocks/modeling/operations/sweep-along-one-rail)** > **[Sweep along Two Rails](../../block-documentation/blocks/modeling/operations/sweep-along-two-rails)** > **[Sweep Profile](../../block-documentation/blocks/modeling/operations/sweep-profile)** > **[Twist](../../block-documentation/blocks/modeling/operations/twist)** > **[Array Body](../../block-documentation/blocks/modeling/operations/array-body)** > **[Polar Array Body](../../block-documentation/blocks/modeling/operations/polar-array-body)** > **[Mirror Body](../../block-documentation/blocks/modeling/operations/mirror-body)** > **[Conic Section Sweep](../../block-documentation/blocks/modeling/operations/conic-section-sweep)** > **[Conic Section Sweep by Tangent](../../block-documentation/blocks/modeling/operations/conic-section-sweep-by-tangent)** > **[Cubic Bezier Section Sweep](../../block-documentation/blocks/modeling/operations/cubic-bezier-section-sweep)** ## Booleans > **[Boolean Union](../../block-documentation/blocks/modeling/booleans/boolean-union)** > **[Boolean Subtract](../../block-documentation/blocks/modeling/booleans/boolean-subtract)** > **[Boolean Intersect](../../block-documentation/blocks/modeling/booleans/boolean-intersect)** > **[Clearance](../../block-documentation/blocks/modeling/booleans/clearance)** > **[Pipe Intersection](../../block-documentation/blocks/modeling/booleans/pipe-intersection)** ## Remap > **[Remap Cylindrical Body](../../block-documentation/blocks/modeling/remap/remap-cylindrical-body)** > **[Remap Spherical Body](../../block-documentation/blocks/modeling/remap/remap-spherical-body)** > **[Remap Scale Body](../../block-documentation/blocks/modeling/remap/remap-scale-body)** ## Evaluation > **[Mass Properties](../../block-documentation/blocks/modeling/evaluation/mass-properties)** > **[Surface Area](../../block-documentation/blocks/modeling/evaluation/surface-area)** > **[Volume Integral](../../block-documentation/blocks/modeling/evaluation/volume-integral)** > **[Surface Integral](../../block-documentation/blocks/modeling/evaluation/surface-integral)** > **[Curve Integral](../../block-documentation/blocks/modeling/evaluation/curve-integral)** > **[Distance to Curve from Axis](../../block-documentation/blocks/modeling/evaluation/distance-to-curve-from-axis)** > **[Distance Along Direction](../../block-documentation/blocks/modeling/evaluation/distance-along-direction)** > **[Perpendicular Distance](../../block-documentation/blocks/modeling/evaluation/perpendicular-distance)** > **[Curvature](../../block-documentation/blocks/modeling/evaluation/curvature)** > **[Gaussian Curvature](../../block-documentation/blocks/modeling/evaluation/gaussian-curvature)** ## Utilities > **[Reparameterize CAD Face](../../block-documentation/blocks/modeling/utilities/reparameterize-cad-face)** > **[Stitch CAD Surface Bodies](../../block-documentation/blocks/modeling/utilities/stitch-cad-surface-bodies)** > **[Stitch Adjacent CAD Faces](../../block-documentation/blocks/modeling/utilities/stitch-adjacent-cad-faces)** > **[Merge CAD Bodies](../../block-documentation/blocks/modeling/utilities/merge-cad-bodies)** > **[Section Body](../../block-documentation/blocks/modeling/utilities/section-body)** > **[Set Bounding Box](../../block-documentation/blocks/modeling/utilities/set-bounding-box)** > **[Refine Bounding Box](../../block-documentation/blocks/modeling/utilities/refine-bounding-box)** > **[Smoothen Body](../../block-documentation/blocks/modeling/utilities/smoothen-body)** > **[Flip Mesh Normals](../../block-documentation/blocks/modeling/utilities/flip-mesh-normals)** > **[Collapse Vertices](../../block-documentation/blocks/modeling/utilities/collapse-vertices)** > **[Merge Graphs](../../block-documentation/blocks/modeling/utilities/merge-graphs)** > **[Split Mesh](../../block-documentation/blocks/modeling/utilities/split-mesh)** > **[Filter Mesh List](../../block-documentation/blocks/modeling/utilities/filter-mesh-list)** > **[Remove Mesh Faces by Body](../../block-documentation/blocks/modeling/utilities/remove-mesh-faces-by-body)** > **[Filter Mesh by Flood Fill](../../block-documentation/blocks/modeling/utilities/filter-mesh-by-flood-fill)** > **[Simplify Mesh by Amount](../../block-documentation/blocks/modeling/utilities/simplify-mesh-by-amount)** > **[Simplify Mesh by Threshold](../../block-documentation/blocks/modeling/utilities/simplify-mesh-by-threshold)** > **[Triangulate Mesh](../../block-documentation/blocks/modeling/utilities/triangulate-mesh)** > **[Quadrangulate Mesh](../../block-documentation/blocks/modeling/utilities/quadrangulate-mesh)** > **[Refine Mesh](../../block-documentation/blocks/modeling/utilities/refine-mesh)** > **[Mesh Face from Points](../../block-documentation/blocks/modeling/utilities/mesh-face-from-points)** > **[Project Points to Plane](../../block-documentation/blocks/modeling/utilities/project-points-to-plane)** > **[Project Curve to Plane](../../block-documentation/blocks/modeling/utilities/project-curve-to-plane)** > **[Closest Point](../../block-documentation/blocks/modeling/utilities/closest-point)** > **[Random Points on Mesh](../../block-documentation/blocks/modeling/utilities/random-points-on-mesh)** > **[Random Points in Body (Old)](../../block-documentation/blocks/modeling/utilities/random-points-in-body-old)** > **[Random Points in Volume Mesh](../../block-documentation/blocks/modeling/utilities/random-points-in-volume-mesh)** > **[Offset Voxel Grid](../../block-documentation/blocks/modeling/utilities/offset-voxel-grid)** > **[Smoothen Voxel Grid](../../block-documentation/blocks/modeling/utilities/smoothen-voxel-grid)** > **[Ray Cast](../../block-documentation/blocks/modeling/utilities/ray-cast)** > **[Equidistant Points on Curve](../../block-documentation/blocks/modeling/utilities/equidistant-points-on-curve)** > **[Get CAD Bodies](../../block-documentation/blocks/modeling/utilities/get-cad-bodies)** > **[Get CAD Bodies by Color](../../block-documentation/blocks/modeling/utilities/get-cad-bodies-by-color)** > **[Get CAD Bodies by Name](../../block-documentation/blocks/modeling/utilities/get-cad-bodies-by-name)** > **[Get CAD Faces](../../block-documentation/blocks/modeling/utilities/get-cad-faces)** > **[Get CAD Faces by Color](../../block-documentation/blocks/modeling/utilities/get-cad-faces-by-color)** > **[Get CAD Faces by Name](../../block-documentation/blocks/modeling/utilities/get-cad-faces-by-name)** > **[Evaluate Surface](../../block-documentation/blocks/modeling/utilities/evaluate-surface)** > **[Bounding Box Union](../../block-documentation/blocks/modeling/utilities/bounding-box-union)** # Booleans Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/booleans > **[Boolean Union](../../../block-documentation/blocks/modeling/booleans/boolean-union)** > **[Boolean Subtract](../../../block-documentation/blocks/modeling/booleans/boolean-subtract)** > **[Boolean Intersect](../../../block-documentation/blocks/modeling/booleans/boolean-intersect)** > **[Clearance](../../../block-documentation/blocks/modeling/booleans/clearance)** > **[Pipe Intersection](../../../block-documentation/blocks/modeling/booleans/pipe-intersection)** # Boolean Intersect Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/booleans/boolean-intersect > **[Blend Enum, Scalar Field, Bodies](#blend-enum-scalar-field-bodies)** > **[Blend Enum, Scalar Field, Bodies, 5.44.0](#blend-enum-scalar-field-bodies-5440)** *** ## About this Block **What it does:** The **Boolean Intersect** block generates the intersecting shape of a list of Bodies. A blend is applied at the intersection of each body to control the transition between each volume, and can be sharp, rounded, continuous, or chamfered. **Tips:** * Apply a fillet by using the 'Rounded' Blend Type. * Apply a chamfer by using the 'Chamfered' Blend Type. * To retain the shape features, use the 'Sharp' Blend Type. * To achieve a smoothed appearance between edges, use the 'Continuous' Blend Type. * To intersect more than 2 bodies, click the + button in the upper right-hand corner of the Implicit Body List block. * The angle of the Chamfered and Rounded blend types is dependent on the input geometries. ## Example File Download Example: [File Name](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Boolean_Intersect.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/boolean_intersect.jpg) *** ## Blend Enum, Scalar Field, Bodies Create an Implicit Body where the input bodies spatially overlap. ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | Implicit bodies to intersect. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Blend Enum, Scalar Field, Bodies, 5.44.0 Create an Implicit Body where the input bodies spatially overlap. ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | Implicit bodies to intersect. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Boolean Subtract Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/booleans/boolean-subtract > **[Blend Enum, Scalar Field, Implicit Body, Subtraction bodies](#blend-enum-scalar-field-implicit-body-subtraction-bodies)** > **[Blend Enum, Scalar Field, Implicit Body, Subtraction bodies, 1.1.0](#blend-enum-scalar-field-implicit-body-subtraction-bodies-110)** > **[Blend Enum, Scalar Field, Implicit Body, Subtraction bodies, 5.44.0](#blend-enum-scalar-field-implicit-body-subtraction-bodies-5440)** *** ## About this Block **What it does:** The **Boolean Subtract** block uses a list of Implicit Bodies to remove volume from another Body. A blend is applied at the intersection of each body to control the transition between each volume, and can be sharp, rounded, continuous, or chamfered. **Tips:** * Apply a fillet by using the 'Rounded' Blend Type. * Apply a chamfer by using the 'Chamfered' Blend Type. * To retain the shape features, use the 'Sharp' Blend Type. * To achieve a smoothed appearance between edges, use the 'Continuous' Blend Type. * To subtract more than 2 bodies by clicking on the + button in the upper right-hand corner of the Implicit Body List block. * The angle of the Chamfered and Rounded blend types cannot be changed. * We suggest keeping a small overlap between Implicit bodies and avoid face-on-face or line-on-line subtractions. ## Example File Download Example: [File Name](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Boolean_Subtract.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/boolean_subtract.jpg) *** ## Blend Enum, Scalar Field, Implicit Body, Subtraction bodies Boolean subtract the Implicit bodies with a blend ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the Implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Primary body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to subtract from. | | Subtraction bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | Implicit bodies to subtract with. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Blend Enum, Scalar Field, Implicit Body, Subtraction bodies, 1.1.0 Boolean subtract the Implicit bodies with a blend ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the Implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Primary body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to subtract from. | | Subtraction bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | Implicit bodies to subtract with. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Blend Enum, Scalar Field, Implicit Body, Subtraction bodies, 5.44.0 Boolean subtract the Implicit bodies with a blend ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the Implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Primary body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to subtract from. | | Subtraction bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | Implicit bodies to subtract with. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Boolean Union Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/booleans/boolean-union > **[Blend Enum, Scalar Field, Bodies](#blend-enum-scalar-field-bodies)** > **[Blend Enum, Scalar Field, Bodies, 1.1.0](#blend-enum-scalar-field-bodies-110)** > **[Blend Enum, Scalar Field, Bodies, 5.44.0](#blend-enum-scalar-field-bodies-5440)** *** ## About this Block **What it does:** The **Boolean Union** block joins a list of Implicit Bodies into a single Implicit Body. A blend is applied at the intersection of each body to control the transition between each volume. The Blend type can be sharp, rounded, continuous, or chamfered. **Tips:** * Apply a fillet by using the 'Rounded' Blend Type. * Apply a chamfer by using the 'Chamfered' Blend Type. * To retain the shape features, use the 'Sharp' Blend Type. * To achieve a smoothed appearance between edges, use the 'Continuous' Blend Type. * Join more than 2 bodies by clicking on the + button in the upper right-hand corner of the Implicit Body List block. * The angle input on the Chamfered or Rounded blend type can't be changed. ## Example File Download Example: [File Name](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/boolean_union.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/boolean_union.jpg) *** ## Blend Enum, Scalar Field, Bodies Combine multiple Implicit Bodies into a single Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | List of implicit bodies to union. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Blend Enum, Scalar Field, Bodies, 1.1.0 Combine multiple Implicit Bodies into a single Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | List of implicit bodies to union. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Blend Enum, Scalar Field, Bodies, 5.44.0 Combine multiple Implicit Bodies into a single Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Blend type | Blend Enum | Type of blend between the implicit bodies. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if "sharp" is selected. | | Bodies | [Implicit Body List](../../../../block-documentation/types/implicit-body) | List of implicit bodies to union. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Clearance Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/booleans/clearance ## About this Block **What it does:** The **Clearance** block subtracts an implicit body from a primary implicit body with an added clearance. **Common uses:** * Creating clearance for hardware threads ## Example File ![Clearance](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Clearance.jpg) *** Subtract an Implicit Body from another with additional clearance between them. This can be used for ensuring there is a minimum distance between two bodies. ### Inputs | Name | Type | Description | | - | - | - | | Primary body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to subtract from. | | Subtraction body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to subtract with extra clearance. | | Clearance distance | [Scalar](../../../../block-documentation/types/scalar) | The extra clearance distance to subtract. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Pipe Intersection Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/booleans/pipe-intersection ## About this Block **What it does:** The **Pipe Intersection** block creates a pipe body at the intersection of two implicit bodies. The radius input controls the size of the pipe. **Common uses:** * Blending converging pipes ## Example File Download Example: [Pipe Intersection Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pipe_intersection.ntop) ![Pipe Intersection](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pipeintersection.jpg) *** Add a pipe at the intersection of two implicit bodies. ### Inputs | Name | Type | Description | | - | - | - | | Radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of pipe. | | Body 1 | [Implicit Body](../../../../block-documentation/types/implicit-body) | First implicit body to intersect. | | Body 2 | [Implicit Body](../../../../block-documentation/types/implicit-body) | Second implicit body to intersect. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Evaluation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation > **[Mass Properties](../../../block-documentation/blocks/modeling/evaluation/mass-properties)** > **[Surface Area](../../../block-documentation/blocks/modeling/evaluation/surface-area)** > **[Volume Integral](../../../block-documentation/blocks/modeling/evaluation/volume-integral)** > **[Surface Integral](../../../block-documentation/blocks/modeling/evaluation/surface-integral)** > **[Curve Integral](../../../block-documentation/blocks/modeling/evaluation/curve-integral)** > **[Distance to Curve from Axis](../../../block-documentation/blocks/modeling/evaluation/distance-to-curve-from-axis)** > **[Distance Along Direction](../../../block-documentation/blocks/modeling/evaluation/distance-along-direction)** > **[Perpendicular Distance](../../../block-documentation/blocks/modeling/evaluation/perpendicular-distance)** > **[Curvature](../../../block-documentation/blocks/modeling/evaluation/curvature)** > **[Gaussian Curvature](../../../block-documentation/blocks/modeling/evaluation/gaussian-curvature)** # Curvature Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/curvature > **[Implicit Body, Curvature Enum](#implicit-body-curvature-enum)** > **[Mesh, Curvature Enum, 1.1.0](#mesh-curvature-enum-110)** *** ## About this Block **What it does:** The **Curvature** block creates a scalar field of the curvature values of an input implicit body or mesh. Curvature measures how quickly a curve is changing direction at a certain point. **Tips:** * The maximum and minimum curvatures are the principal curvatures, and they occur in orthogonal directions. * Their average is the mean curvature and their product is the Gaussian curvature. ## Example File ![Curvature](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/curvature.jpg) *** ## Implicit Body, Curvature Enum Create a Scalar Field of the curvature values of an Implicit Body or a surface Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Implicit Body](../../../../block-documentation/types/implicit-body) | Object to extract curvature values from. | | Curvature type | Curvature Enum | Type of curvature to extract from object. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Mesh, Curvature Enum, 1.1.0 Create a Scalar Field of the curvature values of an Implicit Body or a surface Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Mesh](../../../../block-documentation/types/mesh) | Object to extract curvature values from. | | Curvature type | Curvature Enum | Type of curvature to extract from object. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Curve Integral Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/curve-integral > **[Curve (old), Scalar Field, Scalar](#curve-old-scalar-field-scalar)** > **[Curve, Scalar Field, Scalar, 5.20.0](#curve-scalar-field-scalar-5200)** *** ## About this Block **What it does:** The **Curve Integral** block integrates the values of a Scalar Field along a curve. **Common uses:** * Calculate length ## Example File ![Curve Integral](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/curveintegral.jpg) *** ## Curve (old), Scalar Field, Scalar Integrate a Scalar Field along a curve. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve (old)](../../../../block-documentation/types/curve-old) | The curve to integrate along. | | Integrand | [Scalar Field](../../../../block-documentation/types/scalar-field) | The function that will be integrated. | | Relative error | [Scalar](../../../../block-documentation/types/scalar) | The relative error used to determine algorithm convergence. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Curve, Scalar Field, Scalar, 5.20.0 Integrate a Scalar Field along a curve. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | The curve to integrate along. | | Integrand | [Scalar Field](../../../../block-documentation/types/scalar-field) | The function that will be integrated. | | Relative error | [Scalar](../../../../block-documentation/types/scalar) | The relative error used to determine algorithm convergence. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Distance Along Direction Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/distance-along-direction ## About this Block **What it does:** The **Distance Along Direction** block computes the distance to the closest point to the given mesh along a specified direction. **Common uses:** * Determining the distance from a mesh feature to a build plate for support structures ## Example File ![Distance Along Direction](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/distancealongdireciton.jpg) *** Return a Scalar Field of the distance along the input direction to a target surface Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to get directional distance from. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction towards the target object. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Distance to Curve from Axis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/distance-to-curve-from-axis > **[Curve, Axis, Vector, 5.24.0](#curve-axis-vector-5240)** > **[Curve, Axis, Vector, 5.30.0](#curve-axis-vector-5300)** *** ## Curve, Axis, Vector, 5.24.0 Computes the signed distance from a planar curve to an axis. The curve must behave like a function relative to the axis, meaning it has exactly one output distance for each input along the axis. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | The input 3D curve (must be planar with the axis). | | Axis | [Axis](../../../../block-documentation/types/axis) | The axis to measure from. | | Direction | [Vector](../../../../block-documentation/types/vector) | The direction along which to measure the distance. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Curve, Axis, Vector, 5.30.0 Computes the signed distance from a planar curve to an axis. The curve must behave like a function relative to the axis, meaning it has exactly one output distance for each input along the axis. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | The input 3D curve (must be planar with the axis). | | Axis | [Axis](../../../../block-documentation/types/axis) | The axis to measure from. | | Direction | [Vector](../../../../block-documentation/types/vector) | The direction along which to measure the distance. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Gaussian Curvature Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/gaussian-curvature > **[Implicit Body](#implicit-body)** > **[Mesh, 1.1.0](#mesh-110)** *** ## About this Block **What it does:** The **Gaussian Curvature** block creates a scalar field consisting of the Gaussian curvature values of an input implicit body. The Gaussian curvature is the product of the maximum and minimum curvature fields. **Tips:** * Positive Gaussian curvature means that the curves through the point of extremal normal curvature "curve the same way". * A value of 0 for Gaussian curvature means that one of the curves through the point of extremal curvature has zero normal curvature. * Negative Gaussian curvature means that the curves through the point of extremal curvature "curve in opposite ways". ## Example File ![Gaussian Curvature](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/gaussian_curvature.jpg) *** ## Implicit Body Create an implicit body containing the Gaussian curvature values of an object. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Implicit Body](../../../../block-documentation/types/implicit-body) | Object to extract Gaussian curvature values from. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Mesh, 1.1.0 Create an implicit body containing the Gaussian curvature values of an object. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Mesh](../../../../block-documentation/types/mesh) | Object to extract Gaussian curvature values from. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Mass Properties Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/mass-properties > **[Implicit Body, Scalar Field, Scalar, 1.1.0](#implicit-body-scalar-field-scalar-110)** > **[Mesh, Scalar, 2.1.0](#mesh-scalar-210)** *** ## About this Block **What it does:** The **Mass Properties** block calculates the following properties of a surface mesh or an implicit body: Center of Gravity, Mass, Principal Moments, and Volume. The results can be found in the Properties tab of the Information Panel. The block performs a series of volume integrations to obtain its results. **Tips:** * The density input must be a constant for this block. * If only the center of gravity or volume results are needed, any density input above zero can be used, and those calculations will still be accurate. ## Example File Download Example: [Mass Properties from Mesh](/ExtendedBlockDocs/MassPropertiesfromMesh.ntop) ![Mass Properties from Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MassPropertiesFromMesh.jpg) *** ## Implicit Body, Scalar Field, Scalar, 1.1.0 Calculate the mass properties of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to calculate the properties of. | | Density | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material density of the body. | | Relative error | [Scalar](../../../../block-documentation/types/scalar) | Relative error used to determine algorithm convergence. | ### Outputs | Type | | - | | [Mass properties](../../../../block-documentation/types/mass-properties) | ## About this Block **What it does:** The **Mass Properties** block calculates the following properties of a surface mesh or an implicit body: Center of Gravity, Mass, Principal Moments, and Volume. The results can be found in the Properties tab of the Information Panel. The block performs a series of volume integrations to obtain its results. **Tips:** * The density input must be a constant for this block. * If only the center of gravity or volume results are needed, any density input above zero can be used, and those calculations will still be accurate. ## Example File Download Example: [Mass Properties from Mesh](/ExtendedBlockDocs/MassPropertiesfromMesh.ntop) ![Mass Properties from Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MassPropertiesFromMesh.jpg) *** ## Mesh, Scalar, 2.1.0 Calculate Mass Properties from a Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The mesh. | | Density | [Scalar](../../../../block-documentation/types/scalar) | The density of the component. | ### Outputs | Type | | - | | [Mass properties](../../../../block-documentation/types/mass-properties) | # Perpendicular Distance Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/perpendicular-distance ## About this Block **What it does:** The **Perpendicular Distance** block generates a scalar field of the distance to an input surface mesh perpendicular to a specified direction. **Common uses:** * Measure perpendicular distance **Tips:** * Use the **Evaluate Field** block to calculate the scalar perpendicular distance from an input point. ## Example File ![Perpendicular Distance](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/perpendicuar_distance.jpg) *** Returns a scalar field of the perpendicular distance to a target mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to get perpendicular distance from. | | Direction | [Vector](../../../../block-documentation/types/vector) | Distance values to the target object will be queried perpendicular to this direction. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Surface Area Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/surface-area > **[Implicit Body, Scalar, 1.2.0](#implicit-body-scalar-120)** > **[Profile (old), 1.2.0](#profile-old-120)** > **[Mesh](#mesh)** > **[Profile, 5.20.0](#profile-5200)** *** ## About this Block **What it does:** The **Surface Area** block calculates the surface area from an implicit body by evaluating the surface integral or a mesh by calculating the sum of the surface areas of all mesh facets in case of mesh. **Tips:** * Use a Mesh input for calculating surface area of thin surfaces instead of an Implicit Body * Accepts any mesh type as an input (Surface, Volume, Multiple meshes, etc) * Decreasing the relative error input will increase the accuracy of the calculations and the calculation time. *** ## Implicit Body, Scalar, 1.2.0 Calculates the surface area of an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Object to Evaluate. | | Relative error | [Scalar](../../../../block-documentation/types/scalar) | The relative error used to determine convergence. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | ## About this Block **What it does:** The **Surface Area** block calculates the surface area from an implicit body by evaluating the surface integral or a mesh by calculating the sum of the surface areas of all mesh facets in case of mesh. **Tips:** * Use a Mesh input for calculating surface area of thin surfaces instead of an Implicit Body * Accepts any mesh type as an input (Surface, Volume, Multiple meshes, etc) * Decreasing the relative error input will increase the accuracy of the calculations and the calculation time. *** ## Profile (old), 1.2.0 Calculates the surface area of a Profile. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile (old)](../../../../block-documentation/types/profile-old) | Object to Evaluate. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Mesh Calculate Surface Area from a Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The mesh. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Profile, 5.20.0 Calculates the surface area of a Profile. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | Object to Evaluate. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Surface Integral Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/surface-integral > **[Implicit Body, Scalar Field, Scalar](#implicit-body-scalar-field-scalar)** > **[Implicit Body, Vector Field, Scalar](#implicit-body-vector-field-scalar)** *** ## About this Block **What it does:** The **Surface Integral** block integrates the values of a scalar field over the domain of the surface of an implicit body. Decreasing the relative error input will increase the calculation’s accuracy, but will increase the calculation time. **Common uses:** * Computing the area of a surface *** ## Implicit Body, Scalar Field, Scalar Integrate a function over the surface of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body defining the surface to integrate over. | | Integrand | [Scalar Field](../../../../block-documentation/types/scalar-field) | The function to integrate. Note that both scalar and vector fields are supported. | | Relative error | [Scalar](../../../../block-documentation/types/scalar) | The relative error used to determine algorithm convergence. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Implicit Body, Vector Field, Scalar Integrate a function over the surface of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body defining the surface to integrate over. | | Integrand | [Vector Field](../../../../block-documentation/types/vector-field) | The function to integrate. Note that both scalar and vector fields are supported. | | Relative error | [Scalar](../../../../block-documentation/types/scalar) | The relative error used to determine algorithm convergence. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Volume Integral Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/evaluation/volume-integral ## About this Block **What it does:** The Volume Integral block integrates a function through the volume of an Implicit Body. **Common uses:** * Computing the volume of a body **Tips:** * The integrand input is the function to integrate through the body. * Volume is the volume integral of the constant 1 through a body. * If a body has a scalar density, it is recommended to use the Mass Properties from Body block. ## Example File ![Volume Integral](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/VolumeIntegral.jpg) *** Integrate a function through the volume of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to integrate through. | | Integrand | [Scalar Field](../../../../block-documentation/types/scalar-field) | The function to integrate. | | Relative error | [Scalar](../../../../block-documentation/types/scalar) | The relative error used to determine algorithm convergence. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Operations Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations > **[Extrude Profile](../../../block-documentation/blocks/modeling/operations/extrude-profile)** > **[Extruded Cut](../../../block-documentation/blocks/modeling/operations/extruded-cut)** > **[Offset Body](../../../block-documentation/blocks/modeling/operations/offset-body)** > **[Thicken Body](../../../block-documentation/blocks/modeling/operations/thicken-body)** > **[Shell](../../../block-documentation/blocks/modeling/operations/shell)** > **[Shear](../../../block-documentation/blocks/modeling/operations/shear)** > **[Revolve Profile](../../../block-documentation/blocks/modeling/operations/revolve-profile)** > **[Sweep along One Rail](../../../block-documentation/blocks/modeling/operations/sweep-along-one-rail)** > **[Sweep along Two Rails](../../../block-documentation/blocks/modeling/operations/sweep-along-two-rails)** > **[Sweep Profile](../../../block-documentation/blocks/modeling/operations/sweep-profile)** > **[Twist](../../../block-documentation/blocks/modeling/operations/twist)** > **[Array Body](../../../block-documentation/blocks/modeling/operations/array-body)** > **[Polar Array Body](../../../block-documentation/blocks/modeling/operations/polar-array-body)** > **[Mirror Body](../../../block-documentation/blocks/modeling/operations/mirror-body)** > **[Conic Section Sweep](../../../block-documentation/blocks/modeling/operations/conic-section-sweep)** > **[Conic Section Sweep by Tangent](../../../block-documentation/blocks/modeling/operations/conic-section-sweep-by-tangent)** > **[Cubic Bezier Section Sweep](../../../block-documentation/blocks/modeling/operations/cubic-bezier-section-sweep)** # Array Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/array-body > **[Implicit Body, Vector, Vector](#implicit-body-vector-vector)** > **[Implicit Body, Vector, Vector, 1.1.0](#implicit-body-vector-vector-110)** *** ## About this Block **What it does:** The **Array Body** block creates a three-dimensional pattern of repeating bodies. To create the array, specify the number of objects to repeat in each direction and the spacing in each direction. **Common uses:** * Patterning/Texturing with bodies **Tips:** * The output from this block is a single Implicit Body. ## Example File ![ArrayBody](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ArrayBody.jpg) *** ## Implicit Body, Vector, Vector Array an implicit body Linearly in the X, Y, and Z directions. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to array. | | Count | [Vector](../../../../block-documentation/types/vector) | Amount of times to array the implicit body in each direction. | | Spacing | [Vector](../../../../block-documentation/types/vector) | How far each arrayed object is placed from the starting point incrementally. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Vector, Vector, 1.1.0 Array an implicit body Linearly in the X, Y, and Z directions. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to array. | | Count | [Vector](../../../../block-documentation/types/vector) | Amount of times to array the implicit body in each direction. | | Spacing | [Vector](../../../../block-documentation/types/vector) | How far each arrayed object is placed from the starting point incrementally. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Conic Section Sweep Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/conic-section-sweep ## About this Block **What it does:** The **Conic Section Sweep** block creates a swept conic section between two rail curves (Rail 1 and Rail 2), using the Spine curve as the origin. The resulting geometry extends beyond the rail curves along the tangents of the spine. ![Conic Section Sweep](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/conic_sweep.png) ![Conic](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/conic.png) **Common uses:** * Designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Modeling smooth transitions in components like ducts, inlets, and nozzles to manage fluid flow. * Creating architectural features like arches and curved facades. **Tips:** * It is recommended that you use **Boolean Intersect** block to create closed surfaces. * It is recommended to avoid steep angles between the rail curves and the spine to avoid unexpected shelling and offset results downstream. A threshold of 45-60 degrees is a good rule of thumb. ![Steep Angle](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/sweep_angle.png) * For advanced applications, you can change the Rho value to define the curve's shape via a Ramp block to vary the shape spatially.
**Rho Value** **Resulting Curve Type** **Example**
Rho\<0.5 Ellipse ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ellipse.png)
Rho=0.5 Parabola ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parabola.png)
Rho>0.5 Hyperbola ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/hyperbola.png)
* If you encounter errors while using this block, please check the following conditions: * Rails Perpendicular to the Spine: Rails cannot be perpendicular to the spine at any point. An error stating "Rays from the axis along the specified direction must intersect the curves only once" indicates this condition. * Closed Rail Curves: Rail 1 and Rail 2 cannot be closed curves. If you receive an error regarding closed rails, please replace them with open curves. * Curve Intersections: An error regarding "improperly configured inputs" often indicates that the geometry is self-intersecting relative to the axis. Please ensure that rays projected from the axis along the specified direction intersect the curve only once. ## Example File Download Example: [Lofting by Section Sweep](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/lofting_section_sweep.ntop) *** Creates an implicit body by sweeping a conic section along a spine curve between two rail curves, where the conic shape is controlled by a spatially-varying Rho field. The Rho parameter defines the conic shape factor at each point along the sweep (0.5 for parabolic, \<0.5 for elliptical, >0.5 for hyperbolic sections), allowing smooth transitions between different conic types. ### Inputs | Name | Type | Description | | - | - | - | | Rail 1 | [Curve](../../../../block-documentation/types/curve) | The first boundary curve that guides and constrains one side of the swept conic section as it travels along the spine. | | Rail 2 | [Curve](../../../../block-documentation/types/curve) | The second boundary curve that guides and constrains the opposite side of the swept conic section as it travels along the spine. | | Spine | [Line](../../../../block-documentation/types/line) | A line that defines the sweep path and orientation for the conic section as it moves between the two rail curves. | | Rho | [Scalar Field](../../../../block-documentation/types/scalar-field) | A scalar field (0 to 1) that controls the conic shape factor at each point, where 0.5 produces a parabola, values less than 0.5 create elliptical sections, and values greater than 0.5 create hyperbolic sections. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Conic Section Sweep by Tangent Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/conic-section-sweep-by-tangent ## About this Block **What it does:** The **Conic Section Sweep by Tangent** block creates an implicit body by sweeping a conic section along a spine curve between two rail curves (Rail 1 and Rail 2). Unlike the standard conic sweep, this block allows you to control the surface shape using tangent vector fields at each rail, in addition to a spatially varying Rho field. ![Conic](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/conic.png) **Common uses:** * Designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Modeling smooth transitions in components like ducts, inlets, and nozzles to manage fluid flow. * Creating architectural features like arches and curved facades. * Use this block when you need precise control over the surface tangency to match adjacent geometry or strictly define the "take-off" angle of the surface from the rails. **Tips:** * This block offers more advanced control than the standard **Conic Section Sweep** block by allowing you to define the angle at which the surface leaves the rails using Vector Fields. * It is recommended to avoid steep angles between the rail curves and the spine to avoid unexpected shelling and offset results downstream. A threshold of 45-60 degrees is a good rule of thumb. ![Steep Angle](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/sweep_angle.png) * We recommend using the **Boolean Intersect** block to create closed surfaces from the output of this sweep. * You can change the Rho value via a Ramp block to vary the conic shape spatially along the sweep.
**Rho Value** **Resulting Curve Type** **Example**
Rho\<0.5 Ellipse ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ellipse.png)
Rho=0.5 Parabola ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parabola.png)
Rho>0.5 Hyperbola ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/hyperbola.png)
* If you encounter errors while using this block, please check the following conditions: * Closed Rail Curves: Rail 1 and Rail 2 cannot be closed curves. If you receive an error regarding closed rails, please replace them with open curves. * Curve Intersections: An error regarding "improperly configured inputs" often indicates that the geometry is self-intersecting relative to the axis. Please ensure that rays projected from the axis along the specified direction intersect the curve only once. ## Example File Download Example: [Lofting by Section Sweep](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/lofting_section_sweep.ntop) *** Creates an implicit body by sweeping a conic section along a spine curve between two rail curves, where the conic shape is controlled by spatially-varying Rho fields and tangent vector fields. The Rho parameter defines the conic shape factor at each point along the sweep (0.5 for parabolic, \<0.5 for elliptical, >0.5 for hyperbolic sections), allowing smooth transitions between different conic types. ### Inputs | Name | Type | Description | | - | - | - | | Rail 1 | [Curve](../../../../block-documentation/types/curve) | The first boundary curve that guides and constrains one side of the swept conic section as it travels along the spine. | | Rail 2 | [Curve](../../../../block-documentation/types/curve) | The second boundary curve that guides and constrains the opposite side of the swept conic section as it travels along the spine. | | Spine | [Line](../../../../block-documentation/types/line) | A line that defines the sweep path and orientation for the conic section as it moves between the two rail curves. | | Tangent 1 | [Vector Field](../../../../block-documentation/types/vector-field) | A vector field that specifies the direction of the Conic tangent handle at rail 1 for each point along the spine. | | Tangent 2 | [Vector Field](../../../../block-documentation/types/vector-field) | A vector field that specifies the direction of the Conic tangent handle at rail 2 for each point along the spine. | | Rho | [Scalar Field](../../../../block-documentation/types/scalar-field) | A scalar field (0 to 1) that controls the conic shape factor at each point, where 0.5 produces a parabola, values less than 0.5 create elliptical sections, and values greater than 0.5 create hyperbolic sections. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Cubic Bezier Section Sweep Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/cubic-bezier-section-sweep ## About this Block **What it does:** The **Cubic Bezier Section Sweep** block creates an implicit body by sweeping a cubic Bezier section along a spine curve between two rail curves. This block gives you precise control over the curvature and smoothness of the swept surface by using spatially varying tangent vector fields and magnitude fields at each rail. ![Cubic Bezier](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cubic_bezier.png) The resulting geometry extends beyond the rail curves along the tangents of the spine. **Common uses:** * Complex Surfacing: Use this block when you need high-fidelity control over surface continuity between two boundaries. * Designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Modeling smooth transitions in components like ducts, inlets, and nozzles to manage fluid flow. * Creating architectural features like arches and curved facades. **Tips:** * The inputs for Tangent Magnitude are relative to the in-plane distance between the rails. A value of 1.0 means the handle length equals the distance between the rails at that specific point. * We recommend using the **Boolean Intersect** block to create closed surfaces from the output of this sweep. ## Example File Download Example: [Lofting by Section Sweep](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/lofting_section_sweep.ntop) *** Creates an implicit body by sweeping a cubic Bézier section along a spine between two rail curves, where the curve shape is controlled by spatially-varying tangent vector fields and their magnitudes at each rail. The tangent vector fields define the direction of the Bézier control handles at each point along the sweep, while the magnitude fields control their lengths, enabling precise control over the curvature and smoothness of the swept surface. ### Inputs | Name | Type | Description | | - | - | - | | Rail 1 | [Curve](../../../../block-documentation/types/curve) | The first boundary curve that guides and constrains one end of the swept cubic Bézier curve as it travels along the spine. | | Rail 2 | [Curve](../../../../block-documentation/types/curve) | The second boundary curve that guides and constrains the opposite end of the swept cubic Bézier curve as it travels along the spine. | | Spine | [Line](../../../../block-documentation/types/line) | A line that defines the sweep path and orientation for the cubic Bézier curve as it moves between the two rail curves. | | Tangent 1 | [Vector Field](../../../../block-documentation/types/vector-field) | A vector field that specifies the direction of the Bézier tangent handle at rail 1 for each point along the spine. | | Tangent 2 | [Vector Field](../../../../block-documentation/types/vector-field) | A vector field that specifies the direction of the Bézier tangent handle at rail 2 for each point along the spine. | | Tangent magnitude 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | A scalar field that controls the length of the tangent handle at rail 1, affecting the curve's pull toward that tangent direction. The tangent magnitude is relative to in-plane distance between the rails. | | Tangent magnitude 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | A scalar field that controls the length of the tangent handle at rail 2, affecting the curve's pull toward that tangent direction. The tangent magnitude is relative to in-plane distance between the rails. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Extrude Profile Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/extrude-profile > **[Profile (old), Scalar, Vector](#profile-old-scalar-vector)** > **[Profile, Scalar, Scalar, Bool, Scalar Field, Shell Enum, Bool, Vector, 5.24.0](#profile-scalar-scalar-bool-scalar-field-shell-enum-bool-vector-5240)** > **[Profile, Scalar, Scalar, Bool, Vector, 5.20.0](#profile-scalar-scalar-bool-vector-5200)** *** ## About this Block **What it does:** The **Extrude Profile** block extrudes a profile based on the profile input, distance, and direction. The profile is created using the **Section Body** block, where a Plane cuts through an Implicit Body. **Common uses:** * Custom shapes from 2D profiles ## Example Image ![Extrude Profile](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Extrude_Profile.png) *** ## Profile (old), Scalar, Vector Create an extrusion from a profile, distance, and direction. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile (old)](../../../../block-documentation/types/profile-old) | Profile to extrude. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Distance to extrude along direction. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction of extrusion. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Scalar, Scalar, Bool, Scalar Field, Shell Enum, Bool, Vector, 5.24.0 Create a thin (shelled) extrusion from a profile, distance, thickness, and direction. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | The profile to extrude. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Extent of the extrusion. If Symmetric is enabled, the Profile will be extruded by half the Distance in both directions. | | Draft angle | [Scalar](../../../../block-documentation/types/scalar) | Draft angle applied to the extrusion. | | Symmetric | [Bool](../../../../block-documentation/types/bool) | If checked, extrude the Profile by half of Distance along the positive and negative directions. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness of the shelled extrusion. | | Shell direction | Shell Enum | Direction to shell the extrusion. | | Trim ends | [Bool](../../../../block-documentation/types/bool) | If the Profile is open and this option is checked, only extrude along the Profile's finite-length curves. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction of extrusion. Uses the normal of the Profile's Plane by default. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Scalar, Scalar, Bool, Vector, 5.20.0 Create an extrusion from a profile, distance, and direction. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | The profile to extrude. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Extent of the extrusion. If Symmetric is enabled, the Profile will be extruded by half the Distance in both directions. | | Draft angle | [Scalar](../../../../block-documentation/types/scalar) | Draft angle applied to the extrusion. | | Symmetric | [Bool](../../../../block-documentation/types/bool) | If checked, extrude the Profile by half of Distance along the positive and negative directions. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction of extrusion. Uses the normal of the Profile's Plane by default. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Extruded Cut Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/extruded-cut > **[Profile, Implicit Body, Blend Enum, Scalar Field, Scalar, Vector, 5.20.0](#profile-implicit-body-blend-enum-scalar-field-scalar-vector-5200)** > **[Profile, Implicit Body, Blend Enum, Scalar Field, Scalar, Vector, 5.44.0](#profile-implicit-body-blend-enum-scalar-field-scalar-vector-5440)** *** ## Profile, Implicit Body, Blend Enum, Scalar Field, Scalar, Vector, 5.20.0 Extrude and Boolean Subtract a Profile from a solid. The profile will be cut through the entirety of the Target body. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | The profile to extrude and cut into the Target Body. | | Target | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to cut. | | Blend type | Blend Enum | Type of the blend where the Profiles are cut from the Target body. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if the "Sharp" Blend Type is selected. | | Draft angle | [Scalar](../../../../block-documentation/types/scalar) | Draft angle applied to the extrusion. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction of extrusion. Uses the normals of the Profiles' planes by default. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Implicit Body, Blend Enum, Scalar Field, Scalar, Vector, 5.44.0 Extrude and Boolean Subtract a Profile from a solid. The profile will be cut through the entirety of the Target body. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | The profile to extrude and cut into the Target Body. | | Target | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body to cut. | | Blend type | Blend Enum | Type of the blend where the Profiles are cut from the Target body. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Radius of the blend. This value will be ignored if the "Sharp" Blend Type is selected. | | Draft angle | [Scalar](../../../../block-documentation/types/scalar) | Draft angle applied to the extrusion. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction of extrusion. Uses the normals of the Profiles' planes by default. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Mirror Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/mirror-body ## About this Block **What it does:** The **Mirror Body** block mirrors an Implicit Body across a plane. **Common uses:** * Mirroring features or bodies ## Example File ![Mirror Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/mirrorbody.jpg) *** Mirrors an Implicit Body about a plane. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to mirror. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane about which to mirror the Implicit Body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Offset Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/offset-body ## About this Block **What it does:** The **Offset Body** block adjusts the surface boundary of a part outward or inward. A positive distance offsets the surface in the outward direction, while a negative value offsets inward. Distance is defined by a constant value or a scalar field. It accepts both implicit and lattice types for the body input and outputs an implicit body. **Common uses:** * Offsetting volumes **Tips:** * **Thicken Body** uses the boundary as a midpoint, it is recommended to use **Offset Body** when you are starting with a part that already has volume. ## Example File ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/OffsetBody.jpg) *** Offset the surface of an Implicit Body inward or outward. Positive values will offset outward, and negative values will offset inward. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to offset. | | Distance | [Scalar Field](../../../../block-documentation/types/scalar-field) | Negative or positive distance to offset the surface of the implicit body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Polar Array Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/polar-array-body ## About this Block **What it does:** The **Polar Array Body** block arranges copies of an Implicit Body counterclockwise around an axis. The Body defines the object to be arrayed. The Angular spacing is the angle between each Body. The Count is the number of bodies in the final array. The Axis determines the center point of the array. **Common uses:** * Patterning **Tips:** * How to generate random patterns on the surface of a part: ([https://support.ntopology.com/hc/articles/1500003975321](https://support.ntopology.com/hc/articles/1500003975321)) ## Example File ![Polar Array Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/PolarArrayBody.jpg) *** Array an Implicit Body around an Axis. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to array. | | Angular spacing | [Scalar](../../../../block-documentation/types/scalar) | Angle between each arrayed object. | | Count | [Integer](../../../../block-documentation/types/integer) | Amount of times to array the implicit body. | | Axis | [Axis](../../../../block-documentation/types/axis) | Axis to array the implicit body around. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Revolve Profile Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/revolve-profile > **[Profile (old), Axis, Scalar](#profile-old-axis-scalar)** > **[Profile, Axis, Scalar, 5.20.0](#profile-axis-scalar-5200)** *** ## About this Block **What it does:** The **Revolve Profile** block revolves a profile around a specified axis by a revolution angle in degrees. This creates a 3D implicit body from the original orientation to the revolved profile. ## Example File ![Revolve Profile](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/revolveprofile.gif) *** ## Profile (old), Axis, Scalar Revolve a profile around an axis. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile (old)](../../../../block-documentation/types/profile-old) | Profile to revolve. | | Axis | [Axis](../../../../block-documentation/types/axis) | Axis to revolve profile around. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Revolution angle. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Axis, Scalar, 5.20.0 Revolve a profile around an axis. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | Profile to revolve. | | Axis | [Axis](../../../../block-documentation/types/axis) | Axis to revolve profile around. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Revolution angle. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Shear Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/shear ## About this Block **What it does:** The **Shear** block shears (movement in which parallel internal surfaces slide past one another) an implicit body based on a Plane, Direction, and Factor of Magnitude for Shear. **Tips:** * The Shear direction can’t be perpendicular to the Shear Plane. ## Example File ![Shear](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/shear.jpg) *** Shear an implicit body in a direction. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to shear. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to originate the shear operation. | | Direction | [Vector](../../../../block-documentation/types/vector) | Vector to define the direction of the shear operation. | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Magnitude of shear per world unit. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Shell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/shell > **[Implicit Body, Scalar, Shell Enum](#implicit-body-scalar-shell-enum)** > **[Implicit Body, Scalar Field, Shell Enum, 5.24.0](#implicit-body-scalar-field-shell-enum-5240)** *** ## About this Block **What it does:** The **Shell** block hollows out an Implicit Body with a thickened outer wall. **Common uses:** * Lightweighting solid parts **Tips:** * The wall is thickened Inward, Outward, or equally in both directions with the Center input. * It is ideal for lightweighting, and works well when combined with the **Volume Lattice** block to fill the hollow space with lattice. * You can vary shell thickness using a Ramp block: ([https://support.ntopology.com/hc/articles/4411539633683](https://support.ntopology.com/hc/articles/4411539633683)) * What happens if you shell a boolean union inward: ([https://support.ntopology.com/hc/articles/4403375026451](https://support.ntopology.com/hc/articles/4403375026451)) ## Example File ![Shell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Shell.jpg) *** ## Implicit Body, Scalar, Shell Enum Hollow an object by offsetting inward or outward the outer surface of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body to shell. | | Thickness | [Scalar](../../../../block-documentation/types/scalar) | The wall thickness. | | Direction | Shell Enum | The direction to thicken the body to produce the wall thickness | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar Field, Shell Enum, 5.24.0 Hollow an object by offsetting inward, center, or outward from the Surface. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to Shell | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Wall thickness to offset by. Negative values will shell in the reverse direction. | | Direction | Shell Enum | Direction to Shell the body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Sweep along One Rail Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/sweep-along-one-rail > **[Implicit Body, Plane, Curve, Vector Field, Bool, Curve, Scalar Field, 6.2.0](#implicit-body-plane-curve-vector-field-bool-curve-scalar-field-620)** > **[Profile, Curve, Vector Field, Bool, Curve, Scalar Field, 6.2.0](#profile-curve-vector-field-bool-curve-scalar-field-620)** *** ## Implicit Body, Plane, Curve, Vector Field, Bool, Curve, Scalar Field, 6.2.0 Sweep a section of an implicit body along a rail curve while a vector field drives its orientation. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to sweep. The cross section of the body within the Start Plane will be swept along the rail. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane used to define the cross-section of the body at the start of the sweep. | | Rail | [Curve](../../../../block-documentation/types/curve) | Rail curve to sweep along. | | Alignment | [Vector Field](../../../../block-documentation/types/vector-field) | Vector Field driving the orientation of the section along the rail. The section's local X direction follows it as closely as the Plane perpendicular to the rail allows. | | Caps | [Bool](../../../../block-documentation/types/bool) | If checked, closes the swept body with planar caps at the start and end of the sweep. | | Spine | [Curve](../../../../block-documentation/types/curve) | Optional spine Curve to define section Plane orientation. | | Scale | [Scalar Field](../../../../block-documentation/types/scalar-field) | Optional Scalar Field that uniformly scales the section within the moving plane. If not provided, the section is not scaled. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Curve, Vector Field, Bool, Curve, Scalar Field, 6.2.0 Sweep a Profile along a rail curve while a vector field drives its orientation. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | Profile to sweep along the rail. | | Rail | [Curve](../../../../block-documentation/types/curve) | Rail curve to sweep along. | | Alignment | [Vector Field](../../../../block-documentation/types/vector-field) | Vector Field driving the orientation of the section along the rail. The section's local X direction follows it as closely as the Plane perpendicular to the rail allows. | | Caps | [Bool](../../../../block-documentation/types/bool) | If checked, closes the swept body with planar caps at the start and end of the sweep. | | Spine | [Curve](../../../../block-documentation/types/curve) | Optional spine Curve to define section Plane orientation. | | Scale | [Scalar Field](../../../../block-documentation/types/scalar-field) | Optional Scalar Field that uniformly scales the section within the moving plane. If not provided, the section is not scaled. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Sweep along Two Rails Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/sweep-along-two-rails > **[Implicit Body, Plane, Curve, Curve, Curve, Bool, 6.0.0](#implicit-body-plane-curve-curve-curve-bool-600)** > **[Profile, Curve, Curve, Curve, Bool, 6.0.0](#profile-curve-curve-curve-bool-600)** *** ## Implicit Body, Plane, Curve, Curve, Curve, Bool, 6.0.0 Sweep a section of an implicit body along a spine curve while two rail curves drive its width and orientation. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to sweep. The cross section of the body within the Start Plane will be swept along the rails. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane used to define the cross-section of the body at the start of the sweep. | | Spine | [Curve](../../../../block-documentation/types/curve) | Spine curve to define section plane orientation. | | Rail 1 | [Curve](../../../../block-documentation/types/curve) | First rail curve to sweep along. | | Rail 2 | [Curve](../../../../block-documentation/types/curve) | Second rail curve to sweep along. | | Caps | [Bool](../../../../block-documentation/types/bool) | If checked, closes the swept body with planar caps at the start and end of the spine. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Curve, Curve, Curve, Bool, 6.0.0 Sweep a Profile along a spine curve while two rail curves drive its width and orientation. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | Profile to sweep along the rails. | | Spine | [Curve](../../../../block-documentation/types/curve) | Spine curve to define section plane orientation. | | Rail 1 | [Curve](../../../../block-documentation/types/curve) | First rail curve to sweep along. | | Rail 2 | [Curve](../../../../block-documentation/types/curve) | Second rail curve to sweep along. | | Caps | [Bool](../../../../block-documentation/types/bool) | If checked, closes the swept body with planar caps at the start and end of the spine. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Sweep Profile Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/sweep-profile > **[Profile (old), Curve (old), Point, 1.2.0](#profile-old-curve-old-point-120)** > **[Profile, Curve, Point, Scalar, Scalar, 5.21.0](#profile-curve-point-scalar-scalar-5210)** > **[Profile, Spline, Point, Scalar, Scalar, 5.20.0](#profile-spline-point-scalar-scalar-5200)** *** ## Profile (old), Curve (old), Point, 1.2.0 Sweep a profile along a curve. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile (old)](../../../../block-documentation/types/profile-old) | Profile to sweep. A large profile paired with a high-curvature Curve may create unwanted instersections in the result. | | Curve | [Curve (old)](../../../../block-documentation/types/curve-old) | Guide curve to sweep along. A high curvature Curve paired with a large profile may create unwanted intersections in the result. | | Bind point | [Point](../../../../block-documentation/types/point) | Point to translate to the starting point of the Curve. The Profile is translated by the same amount, then rotated to be perpendicular to the tangent of the Curve. For best results, use a Bind Points that is on or near the Profile. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Curve, Point, Scalar, Scalar, 5.21.0 Sweep a profile along a curve. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | Profile to sweep. A large profile paired with a high-curvature Curve may create unwanted intersections in the result. | | Curve | [Curve](../../../../block-documentation/types/curve) | Guide curve to sweep along. A high-curvature Curve paired with a large Profile may create unwanted intersections in the result. | | Bind point | [Point](../../../../block-documentation/types/point) | Point to translate to the starting point of the Curve. The Profile is translated by the same amount, then rotated around the starting point to be perpendicular to the tangent of the Curve. For best results, use a Bind Point that is on or near the Profile. | | Starting rotation | [Scalar](../../../../block-documentation/types/scalar) | Starting rotation of the Profile. The Profile is rotated by this angle around the Bind Point and the tangent to the Curve's starting point. | | Ending rotation | [Scalar](../../../../block-documentation/types/scalar) | Ending rotation of the Profile. The Profile is rotated around the axis created by the Bind Point and the vector tangent to the Curve's end point. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Profile, Spline, Point, Scalar, Scalar, 5.20.0 Sweep a profile along a curve. ### Inputs | Name | Type | Description | | - | - | - | | Profile | [Profile](../../../../block-documentation/types/profile) | Profile to sweep. A large profile paired with a high-curvature Curve may create unwanted intersections in the result. | | Curve | [Spline](../../../../block-documentation/types/spline) | Guide curve to sweep along. A high-curvature Curve paired with a large Profile may create unwanted intersections in the result. | | Bind point | [Point](../../../../block-documentation/types/point) | Point to translate to the starting point of the Curve. The Profile is translated by the same amount, then rotated around the starting point to be perpendicular to the tangent of the Curve. For best results, use a Bind Point that is on or near the Profile. | | Starting rotation | [Scalar](../../../../block-documentation/types/scalar) | Starting rotation of the Profile. The Profile is rotated by this angle around the Bind Point and the tangent to the Curve's starting point. | | Ending rotation | [Scalar](../../../../block-documentation/types/scalar) | Ending rotation of the Profile. The Profile is rotated around the axis created by the Bind Point and the vector tangent to the Curve's end point. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Thicken Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/thicken-body ## About this Block **What it does:** The **Thicken Body** block thickens a part using the boundary of the body as the centerline of the thickness. It accepts both implicit and lattice types for the body input and outputs an implicit body. The thickness is either a positive constant value or a scalar field. **Common uses:** * Thickening 1D or 2D parts. **Tips:** * **Thicken Body** is best used for 1D or 2D parts, such as CAD surfaces or graph lattices. When thickening a lattice, the thickness value can be thought of as a diameter value. ## Example File ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thicken_body.jpg) *** Create a thickened hollow Implicit body using an input implicit body boundary as a mid-surface, effectively offsetting the body's surface in both the positive and negative directions. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to thicken using the boundary as a mid-surface. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field with wall thickness values at the mid-surface. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Twist Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/operations/twist ## About this Block **What it does:** The **Twist** block twists an implicit body based on a Plane that defines the origin, the angle of the twist, and the rate at which the twist occurs. **Common uses:** * Warped latticing ## Example File ![Twist](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Twist.jpg) *** Twist an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to twist. | | Plane of twist | [Plane](../../../../block-documentation/types/plane) | Plane for defining the origin and orientation of twist. | | Twist rate | [Scalar Field](../../../../block-documentation/types/scalar-field) | Angle of twist per unit length. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Remap Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/remap > **[Remap Cylindrical Body](../../../block-documentation/blocks/modeling/remap/remap-cylindrical-body)** > **[Remap Spherical Body](../../../block-documentation/blocks/modeling/remap/remap-spherical-body)** > **[Remap Scale Body](../../../block-documentation/blocks/modeling/remap/remap-scale-body)** # Remap Cylindrical Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/remap/remap-cylindrical-body ## About this Block **What it does:** The Remap Cylindrical Body block uses a Remap function to transform an Implicit Body from cartesian coordinates into cylindrical coordinates. This block preserves a true distance field so that the underlying Scalar field is not distorted during the transformation. Use the Y mapping length input to specify the length of the input field to be wrapped about the Cylinder 's circumference. **Tips:** * All Remap-based functions are centered on the world origin. ## Example File Download Example: [Remap Fields and Bodies Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_bodies_fields.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_cyl_field_label.jpg) *** Remap an implicit body into a cylindrical space. The only values that will be mapped are values along the positive X-axis, and the Y-axis between -length/2 and +length/2. This block will also attempt to scale the field values to compensate for distortion. If the compensation is not preferred, use the Remap Cylindrical Field block. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to remap. | | Y mapping length | [Scalar](../../../../block-documentation/types/scalar) | The length of the body along the Y-axis to wrap around the circumference of the cylindrical space. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Remap Scale Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/remap/remap-scale-body ## About this Block **What it does:** Uses a Remap function to change the size of an Implicit Body according to X, Y, or Z scales. This block preserves a true distance field so that the underlying Scalar Field is not distorted during the Scale transformation. **Common uses:** To non-uniformly scale an implicit. **Tips:** * All Remap-based functions are centered on the world origin. * This block is a custom block, which means it has a workflow of blocks running within it. To see what processes it is running, export the block by right-clicking on it and selecting "Export Block". Open the block to see the workflow beneath. ## Example File Download Example: [Remap Scale Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_scale_body.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_scale_body.jpg) *** Remap an implicit body to scale it in the X, Y, and Z directions. This block will attempt to scale the field values to compensate for distortion. If the compensation is not preferred, use the Remap Scale Field block. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | implicit body to remap. | | X scale | [Scalar](../../../../block-documentation/types/scalar) | Scale factor in the X direction. | | Y scale | [Scalar](../../../../block-documentation/types/scalar) | Scale factor in the Y direction. | | Z scale | [Scalar](../../../../block-documentation/types/scalar) | Scale factor in the Z direction. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Remap Spherical Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/remap/remap-spherical-body ## About this Block **What it does:** The Remap Spherical Body block uses a Remap function to transform an Implicit Body from cartesian coordinates into spherical coordinates. This block preserves a true distance field so that the underlying Scalar field is not distorted during the transformation. Use the X and Y mapping length inputs to specify the length of the input field to be wrapped about the Sphere's circumference. **Tips:** * All Remap-based functions are centered on the world origin. ## Example File Download Example: [Remap Fields and Bodies Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_bodies_fields.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remap_cyl_field_label.jpg) *** Remap an implicit body into a spherical space. The only values that will be mapped are values along the positive X-axis, the Y-axis between -length/2 and +length/2, and the positive Z-axis. This block will also attempt to scale the field values to compensate for distortion. If the compensation is not preferred, use the Remap Spherical Field block. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to remap. | | Y mapping length | [Scalar](../../../../block-documentation/types/scalar) | The length of the body along the Y-axis to wrap around the longitudinal circumference of the spherical space. | | Z mapping length | [Scalar](../../../../block-documentation/types/scalar) | The length of the body along the Z-axis to wrap around the latitudinal circumference of the spherical space. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities > **[Reparameterize CAD Face](../../../block-documentation/blocks/modeling/utilities/reparameterize-cad-face)** > **[Stitch CAD Surface Bodies](../../../block-documentation/blocks/modeling/utilities/stitch-cad-surface-bodies)** > **[Stitch Adjacent CAD Faces](../../../block-documentation/blocks/modeling/utilities/stitch-adjacent-cad-faces)** > **[Merge CAD Bodies](../../../block-documentation/blocks/modeling/utilities/merge-cad-bodies)** > **[Section Body](../../../block-documentation/blocks/modeling/utilities/section-body)** > **[Set Bounding Box](../../../block-documentation/blocks/modeling/utilities/set-bounding-box)** > **[Refine Bounding Box](../../../block-documentation/blocks/modeling/utilities/refine-bounding-box)** > **[Smoothen Body](../../../block-documentation/blocks/modeling/utilities/smoothen-body)** > **[Flip Mesh Normals](../../../block-documentation/blocks/modeling/utilities/flip-mesh-normals)** > **[Collapse Vertices](../../../block-documentation/blocks/modeling/utilities/collapse-vertices)** > **[Merge Graphs](../../../block-documentation/blocks/modeling/utilities/merge-graphs)** > **[Split Mesh](../../../block-documentation/blocks/modeling/utilities/split-mesh)** > **[Filter Mesh List](../../../block-documentation/blocks/modeling/utilities/filter-mesh-list)** > **[Remove Mesh Faces by Body](../../../block-documentation/blocks/modeling/utilities/remove-mesh-faces-by-body)** > **[Filter Mesh by Flood Fill](../../../block-documentation/blocks/modeling/utilities/filter-mesh-by-flood-fill)** > **[Simplify Mesh by Amount](../../../block-documentation/blocks/modeling/utilities/simplify-mesh-by-amount)** > **[Simplify Mesh by Threshold](../../../block-documentation/blocks/modeling/utilities/simplify-mesh-by-threshold)** > **[Triangulate Mesh](../../../block-documentation/blocks/modeling/utilities/triangulate-mesh)** > **[Quadrangulate Mesh](../../../block-documentation/blocks/modeling/utilities/quadrangulate-mesh)** > **[Refine Mesh](../../../block-documentation/blocks/modeling/utilities/refine-mesh)** > **[Mesh Face from Points](../../../block-documentation/blocks/modeling/utilities/mesh-face-from-points)** > **[Project Points to Plane](../../../block-documentation/blocks/modeling/utilities/project-points-to-plane)** > **[Project Curve to Plane](../../../block-documentation/blocks/modeling/utilities/project-curve-to-plane)** > **[Closest Point](../../../block-documentation/blocks/modeling/utilities/closest-point)** > **[Random Points on Mesh](../../../block-documentation/blocks/modeling/utilities/random-points-on-mesh)** > **[Random Points in Body (Old)](../../../block-documentation/blocks/modeling/utilities/random-points-in-body-old)** > **[Random Points in Volume Mesh](../../../block-documentation/blocks/modeling/utilities/random-points-in-volume-mesh)** > **[Offset Voxel Grid](../../../block-documentation/blocks/modeling/utilities/offset-voxel-grid)** > **[Smoothen Voxel Grid](../../../block-documentation/blocks/modeling/utilities/smoothen-voxel-grid)** > **[Ray Cast](../../../block-documentation/blocks/modeling/utilities/ray-cast)** > **[Equidistant Points on Curve](../../../block-documentation/blocks/modeling/utilities/equidistant-points-on-curve)** > **[Get CAD Bodies](../../../block-documentation/blocks/modeling/utilities/get-cad-bodies)** > **[Get CAD Bodies by Color](../../../block-documentation/blocks/modeling/utilities/get-cad-bodies-by-color)** > **[Get CAD Bodies by Name](../../../block-documentation/blocks/modeling/utilities/get-cad-bodies-by-name)** > **[Get CAD Faces](../../../block-documentation/blocks/modeling/utilities/get-cad-faces)** > **[Get CAD Faces by Color](../../../block-documentation/blocks/modeling/utilities/get-cad-faces-by-color)** > **[Get CAD Faces by Name](../../../block-documentation/blocks/modeling/utilities/get-cad-faces-by-name)** > **[Evaluate Surface](../../../block-documentation/blocks/modeling/utilities/evaluate-surface)** > **[Bounding Box Union](../../../block-documentation/blocks/modeling/utilities/bounding-box-union)** # Bounding Box Union Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/bounding-box-union Combine multiple bounding boxes into a single bounding box. ### Inputs | Name | Type | Description | | - | - | - | | Bounding boxes | [Bounding Box List](../../../../block-documentation/types/bounding-box) | List of Bounding Boxes to union. The largest Bounding Box containing all other Bounding Boxes will be returned. | | Offset | [Vector](../../../../block-documentation/types/vector) | Offset to add to the resulting Bounding Box. | ### Outputs | Type | | - | | [Bounding Box](../../../../block-documentation/types/bounding-box) | # Closest Point Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/closest-point > **[Curve, Point, 5.52.0](#curve-point-5520)** > **[Implicit Body, Points, Scalar, 1.2.0](#implicit-body-points-scalar-120)** > **[Implicit Body, Point, Scalar, 1.2.0](#implicit-body-point-scalar-120)** *** ## About this Block **What it does:** Finds the point on the surface of an Implicit Body closest to the input point; returns a Closest Point Properties object, including the output point, the output point's normal vector, and the distance to the original point. If multiple points on the Body are closest to the input Point, only one will be found. Switch the block overload to input a list of points and receive a list of Closest Point Properties. **Common uses:** * Creating reference geometry based on implicits. * Verifying that geometry meets the specified tolerance to other geometry. **Tips:** * The 'normal' property is the unit vector from the output point to the input point. * There is no warning or error if multiple points on the Body are closest to the input Point. In this case, the output point is arbitrarily selected from the possible solutions. It will not change for the same inputs, block version, and overload. For more control over the chosen point, translate the input Point closer to where the output is desired. * Closest Point to Body uses a gradient descent algorithm with the absolute value of the Body's field until the function value is less than the Tolerance specified. * Errors and warnings can occur if there are issues with the input Body, such as zero or non-finite gradients or if the surface of the Body does not evaluate to zero. If you encounter this issue you can try the following: * Inspect the Body's field with the Field Viewer and the Evaluate Field Gradient block. * Select the 'Probe values' option in the Field Viewer to help verify if the Body's surface evaluates to zero in the expected output region. * Translate the input Point to avoid problematic regions. ## Example File Download Example: [Closest Point](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/closest-point-example.ntop) ![Closest Point Screen Shot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/closest-point.jpg) *** ## Curve, Point, 5.52.0 Finds the point on a Curve closest to the input point; returns a Closest Point Properties object, including the output point, the output point's normal vector, and the distance to the original point. If multiple points on the Curve are closest to the input Point, only one will be found. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve on which to find the closest point. | | Point | [Point](../../../../block-documentation/types/point) | Point to project onto the Curve. | ### Outputs | Type | | - | | [Closest point properties](../../../../block-documentation/types/closest-point-properties) | *** ## Implicit Body, Points, Scalar, 1.2.0 Finds the points on the surface of an Implicit Body closest to the input points and returns a list of Closest Point Properties objects. Each object contains the output point, the output point's normal vector, and the distance to the original point. Switch the block overload to input a single point and receive one Closest Point Properties object. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body on which to find the closest points. | | Points | [Point List](../../../../block-documentation/types/point) | Points to project onto the Body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Maximum distance of closest points to the Body. | ### Outputs | Type | | - | | [Closest point properties List](../../../../block-documentation/types/closest-point-properties) | *** ## Implicit Body, Point, Scalar, 1.2.0 Finds the point on the surface of an Implicit Body closest to the input point; returns a Closest Point Properties object, including the output point, the output point's normal vector, and the distance to the original point. If multiple points on the Body are closest to the input Point, only one will be found. Switch the block overload to input a list of points and receive a list of Closest Point Properties. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body on which to find the closest point. | | Point | [Point](../../../../block-documentation/types/point) | Point to project onto the Body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Maximum distance of closest point to the Body. | ### Outputs | Type | | - | | [Closest point properties](../../../../block-documentation/types/closest-point-properties) | # Collapse Vertices Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/collapse-vertices > **[Graph, Scalar](#graph-scalar)** > **[Graph, Scalar, 1.1.0](#graph-scalar-110)** > **[Lattice, Scalar](#lattice-scalar)** > **[Lattice, Scalar, 1.1.0](#lattice-scalar-110)** > **[Mesh, Scalar, 1.1.0](#mesh-scalar-110)** *** ## About this Block **What it does:** The **Collapse Vertices** block simplifies a surface mesh, lattice, or graph by joining and consolidating vertices with a certain distance to each other. When vertices are at a distance lower than the threshold input, a new vertex is placed at the average location of the vertices and joined back into the structure. **Common uses:** * Used to lower the element count * Clean up a structure after merging multiple together **Tips:** * Drag and drop the vertices from the property panel to visualize them better. ## Example File ![Collapse Mesh Vertices](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/collapse_vertices.png) *** ## Graph, Scalar Collapses and merges the vertices of a Graph that are within a given distance of each other. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph to collapse the vertices of. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Vertices within this distance threshold will be collapsed into a single vertex. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Graph, Scalar, 1.1.0 Collapses and merges the vertices of a Graph that are within a given distance of each other. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph to collapse the vertices of. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Vertices within this distance threshold will be collapsed into a single vertex. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Lattice, Scalar Collapses and merges the vertices of a Lattice that are within a given distance of each other. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to collapse the vertices of. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Vertices within this distance threshold will be collapsed into a single vertex. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Lattice, Scalar, 1.1.0 Collapses and merges the vertices of a Lattice that are within a given distance of each other. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to collapse the vertices of. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Vertices within this distance threshold will be collapsed into a single vertex. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Mesh, Scalar, 1.1.0 Collapses and merges the vertices of a surface Mesh that are within a given distance of each other. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to collapse the vertices of. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Vertices within this distance threshold will be collapsed into a single vertex. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | ## About this Block **What it does:** The **Collapse Vertices** block simplifies a surface mesh, lattice, or graph by joining and consolidating vertices with a certain distance to each other. When vertices are at a distance lower than the threshold input, a new vertex is placed at the average location of the vertices and joined back into the structure. **Common uses:** * Used to lower the element count * Clean up a structure after merging multiple together **Tips:** * Drag and drop the vertices from the property panel to visualize them better. ## Example File ![Collapse Mesh Vertices](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/collapse_vertices.png) # Equidistant Points on Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/equidistant-points-on-curve > **[Curve (old), Scalar](#curve-old-scalar)** > **[Curve, Scalar, 5.20.0](#curve-scalar-5200)** *** ## Curve (old), Scalar Sample a curve using a specified length increment. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve (old)](../../../../block-documentation/types/curve-old) | Curve to sample. | | Increment | [Scalar](../../../../block-documentation/types/scalar) | Increment to use when sampling the curve. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | *** ## Curve, Scalar, 5.20.0 Sample a curve using a specified length increment. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to sample. | | Increment | [Scalar](../../../../block-documentation/types/scalar) | Increment to use when sampling the curve. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Evaluate Surface Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/evaluate-surface Create a Point on a surface at specified U and V parameters. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [CAD Face](../../../../block-documentation/types/cad-face) | Surface to evaluate. | | U | [Scalar](../../../../block-documentation/types/scalar) | U parameter to evaluate. This value will be clamped to the range \[0,1]. | | V | [Scalar](../../../../block-documentation/types/scalar) | V parameter to evaluate. This value will be clamped to the range \[0,1]. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | # Filter Mesh by Flood Fill Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/filter-mesh-by-flood-fill ## About this Block **What it does:** The **Filter Mesh by Flood Fill** block selects surface faces on a Mesh. When a Direction is provided, the block shoots a ray from the Origin in the provided Direction . The first intersecting entity becomes the basis for the flood fill. **Common uses:** * Create a continuous mesh for lattice **Tips:** * How to extract and join mesh faces from mesh ([https://support.ntopology.com/hc/en-us/articles/1500003846082](https://support.ntopology.com/hc/en-us/articles/1500003846082)) * **No Directional Input:** * **Angle:** Default * **Direction:** Undefined (Optional input) * Depending on the location of the origin point, the flood fill operation chooses the closest entity to the origin as the seed entity (*entity0*) on the surface when no direction is defined. ![FE Boundary by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/floodfill_no_direction.png) * **With Directional Input:** * **Angle:** Default * **Direction:** Defined * When you define the direction with a vector, the flood fill operation shoots a ray from the origin in that direction to choose the seed entity (*entity0*). * For example, if you choose the vector as (0,0,1), then the closest intersecting surface mesh entity in the positive Z-direction is chosen. * If the origin point doesn't intersect with an entity in that direction, you will receive an error that says, "No mesh entities were found." ![FE Boundary by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/floodfill_direction.png) * **Angle:** * The angle defines how many entities to select by comparing the normal of seed entity (*entity0*) with all neighboring entities. It chooses entities if they are below the tolerance angle. This is beneficial for selecting entities on curved surfaces. * When the angle is x degrees, the flood fill chooses all entities with an angle up to but not including x degrees between them and the normal of *entity0*. ![FE Boundary by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/floodfill_angle.png) ## Example File ![Filter Mesh by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FMbFF.jpg) *** Select faces of a surface mesh using a flood fill operation. The block chooses the closest mesh face to the specified origin (in a specific direction, if provided), and uses a flood fill operation to select all faces that can be reached from that face without crossing edges at which the angle between face normals exceeds the specified angle. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The surface mesh to filter. | | Origin | [Point](../../../../block-documentation/types/point) | The origin of the direction for initial face selection. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | The feature angle for the flood fill operation. | | Direction | [Vector](../../../../block-documentation/types/vector) | The direction to intersect the mesh. If not provided, then the origin point will be projected to the nearest face. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Filter Mesh List Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/filter-mesh-list ## About this Block **What it does:** The **Filter Mesh List** block takes in a list of meshes, and filters out any mesh below a specified volume threshold. **Common uses:** * Removing unwanted smaller bodies **Tips:** * This block is helpful to remove noise shells from a non manifold mesh. * The order of resulting meshes is the same as the input list, but with the unwanted meshes removed. ## Example File ![Filter Mesh List](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/filtermeshlist.jpg) *** Filter a mesh list using a volume threshold. ### Inputs | Name | Type | Description | | - | - | - | | Mesh list | [Mesh List](../../../../block-documentation/types/mesh) | Mesh list to filter | | Volume threshold | [Scalar](../../../../block-documentation/types/scalar) | Absolute value of volume above which meshes will be kept. | ### Outputs | Type | | - | | [Mesh List](../../../../block-documentation/types/mesh) | # Flip Mesh Normals Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/flip-mesh-normals Flips the normal of each face of the input Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh from which to flip faces. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Get CAD Bodies Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/get-cad-bodies > **[Component](#component)** > **[Part](#part)** *** ## Component Extracts all CAD Bodies from a Component. ### Inputs | Name | Type | Description | | - | - | - | | Component | [Component](../../../../block-documentation/types/component) | Component from which to get bodies. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | *** ## Part Extracts all CAD Bodies from a Part. ### Inputs | Name | Type | Description | | - | - | - | | Part | [Part](../../../../block-documentation/types/part) | Part from which to get bodies. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | # Get CAD Bodies by Color Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/get-cad-bodies-by-color > **[Component, Color](#component-color)** > **[Part, Color](#part-color)** *** ## Component, Color Extracts CAD Bodies from a Component based on color. ### Inputs | Name | Type | Description | | - | - | - | | Component | [Component](../../../../block-documentation/types/component) | Component from which to get bodies | | Body color | [Color](../../../../block-documentation/types/color) | Color of bodies to get | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | *** ## Part, Color Extracts CAD Bodies from a Part based on color. ### Inputs | Name | Type | Description | | - | - | - | | Part | [Part](../../../../block-documentation/types/part) | Part from which to get bodies. | | Body color | [Color](../../../../block-documentation/types/color) | Color of bodies to get. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | # Get CAD Bodies by Name Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/get-cad-bodies-by-name > **[Component, Text](#component-text)** > **[Part, Text](#part-text)** *** ## Component, Text Extracts CAD Bodies from a Component based on name. ### Inputs | Name | Type | Description | | - | - | - | | Component | [Component](../../../../block-documentation/types/component) | Component from which to get Bodies | | Body name | [Text](../../../../block-documentation/types/text) | Name of the CAD Bodies to get | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | *** ## Part, Text Extracts CAD Bodies from a Part based on name. ### Inputs | Name | Type | Description | | - | - | - | | Part | [Part](../../../../block-documentation/types/part) | Part from which to get Bodies. | | Body name | [Text](../../../../block-documentation/types/text) | Name of the CAD Bodies to get. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | # Get CAD Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/get-cad-faces > **[CAD Body](#cad-body)** > **[Component](#component)** > **[Part](#part)** *** ## CAD Body Extract all CAD Faces from a CAD Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [CAD Body](../../../../block-documentation/types/cad-body) | Body from which to get Faces | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | *** ## Component Extract all CAD Faces from a Part. ### Inputs | Name | Type | Description | | - | - | - | | Component | [Component](../../../../block-documentation/types/component) | Compoonent from which to get Faces | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | *** ## Part Extract all CAD Faces from a Part. ### Inputs | Name | Type | Description | | - | - | - | | Part | [Part](../../../../block-documentation/types/part) | Part from which to get Faces. | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | # Get CAD Faces by Color Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/get-cad-faces-by-color > **[CAD Body, Color](#cad-body-color)** > **[Component, Color](#component-color)** > **[Part, Color](#part-color)** *** ## CAD Body, Color Extracts CAD Faces from a CAD Body based on color. ### Inputs | Name | Type | Description | | - | - | - | | Body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD Body from which to get Faces | | Color | [Color](../../../../block-documentation/types/color) | Color of faces to get | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | *** ## Component, Color Extracts CAD Faces from a Component based on color. ### Inputs | Name | Type | Description | | - | - | - | | Component | [Component](../../../../block-documentation/types/component) | Component from which to get Faces | | Color | [Color](../../../../block-documentation/types/color) | Color of faces to get | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | *** ## Part, Color Extracts CAD Faces from a Part based on color. ### Inputs | Name | Type | Description | | - | - | - | | Part | [Part](../../../../block-documentation/types/part) | Part from which to get Faces. | | Face color | [Color](../../../../block-documentation/types/color) | Color of faces to get. | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | # Get CAD Faces by Name Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/get-cad-faces-by-name > **[CAD Body, Text, 5.20.0](#cad-body-text-5200)** > **[Component, Text, 5.20.0](#component-text-5200)** > **[Part, Text, 5.20.0](#part-text-5200)** *** ## CAD Body, Text, 5.20.0 Extracts CAD Faces from a CAD Body based on name. ### Inputs | Name | Type | Description | | - | - | - | | Body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD Body from which to get Faces | | Name | [Text](../../../../block-documentation/types/text) | Name of faces to get | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | *** ## Component, Text, 5.20.0 Extracts CAD Faces from a Component based on name. ### Inputs | Name | Type | Description | | - | - | - | | Component | [Component](../../../../block-documentation/types/component) | Component from which to get Faces | | Name | [Text](../../../../block-documentation/types/text) | Name of faces to get | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | *** ## Part, Text, 5.20.0 Extracts CAD Faces from a Part based on name. ### Inputs | Name | Type | Description | | - | - | - | | Part | [Part](../../../../block-documentation/types/part) | Part from which to get Faces. | | Face name | [Text](../../../../block-documentation/types/text) | Name of faces to get. | ### Outputs | Type | | - | | [CAD Face List](../../../../block-documentation/types/cad-face) | # Merge CAD Bodies Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/merge-cad-bodies ## About this Block **What it does:** The **Merge CAD Bodies** block merges multiple CAD bodies into a single CAD body. **Common uses:** * Merge Shell and Infilled bodies **Tips:** * To fix *Merged body creates disjoint solids. This is currently not allowed.*, We currently don’t merge two disjoint parts. The workaround is to export it as individual CAD bodies by using the **Split Mesh** block and then merge in your CAD software. * To fix *Input bodies are intersecting.*, ensure that the inputs are not intersecting. * Use the **Refine Mesh** block, if using CAD Body from Quad Mesh to get better results. ## Example File ![Merge CAD Bodies](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/mcb.jpg) *** Combine a solid body with multiple inner voids to create a body with inner shells. ### Inputs | Name | Type | Description | | - | - | - | | Solid bodies | [CAD Body List](../../../../block-documentation/types/cad-body) | List of CAD bodies to merge. | ### Outputs | Type | | - | | [CAD Body](../../../../block-documentation/types/cad-body) | # Merge Graphs Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/merge-graphs > **[Graphs, 1.1.0](#graphs-110)** > **[Graphs, 1.2.0](#graphs-120)** > **[Graphs, 1.3.0](#graphs-130)** > **[Lattices, Scalar Field, 1.1.0](#lattices-scalar-field-110)** > **[Lattices, Scalar Field, 1.2.0](#lattices-scalar-field-120)** > **[Lattices, Scalar Field, 1.3.0](#lattices-scalar-field-130)** > **[Meshes](#meshes)** *** ## About this Block **What it does:** The **Merge Meshes** block merges multiple meshes into a single mesh. **Common uses:** * Combining multiple meshes into a single mesh. **Tips:** * Adjacent nodes from the meshes will not be shifted or combined, and connectivity will not be assigned between nodes from separate meshes. * Adjacent nodes can be merged using **Collapse Mesh Vertices**, and the **Remesh Surface** block can redefine the connectivity of a mesh for downstream use. * Different methods for refining meshes: ([https://support.ntopology.com/hc/articles/360061372374](https://support.ntopology.com/hc/articles/360061372374)) * How to export multiple mesh objects as a single STL: ([https://support.ntopology.com/hc/articles/1500002149622](https://support.ntopology.com/hc/articles/1500002149622)) ## Example File ![MergeMeshes](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MergeMeshes.jpg) *** ## Graphs, 1.1.0 Merges multiple Graph together into a single Graph. Duplicate vertices, beams, and faces will be removed. ### Inputs | Name | Type | Description | | - | - | - | | Graphs | [Graph List](../../../../block-documentation/types/graph) | Graphs to merge together. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Graphs, 1.2.0 Merges multiple Graph together into a single Graph. Duplicate vertices, beams, and faces will be removed. ### Inputs | Name | Type | Description | | - | - | - | | Graphs | [Graph List](../../../../block-documentation/types/graph) | Graphs to merge together. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Graphs, 1.3.0 Merges multiple Graphs together into a single Graph. ### Inputs | Name | Type | Description | | - | - | - | | Graphs | [Graph List](../../../../block-documentation/types/graph) | Graphs to merge together. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Lattices, Scalar Field, 1.1.0 Merge multiple Lattices together into a single Lattice. Duplicate vertices, beams, and faces will be removed. ### Inputs | Name | Type | Description | | - | - | - | | Lattices | [Lattice List](../../../../block-documentation/types/lattice) | Lattices to merge together. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness for the merged Lattice. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Lattices, Scalar Field, 1.2.0 Merge multiple Lattices together into a single Lattice. Duplicate vertices, beams, and faces will be removed. ### Inputs | Name | Type | Description | | - | - | - | | Lattices | [Lattice List](../../../../block-documentation/types/lattice) | Lattices to merge together. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness for the merged Lattice. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Lattices, Scalar Field, 1.3.0 Merge multiple Lattices together into a single Lattice. ### Inputs | Name | Type | Description | | - | - | - | | Lattices | [Lattice List](../../../../block-documentation/types/lattice) | Lattices to merge together. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thickness for the merged Lattice. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | *** ## Meshes Merge multiple Meshes into a single Mesh. Duplicate vertices will not be removed. ### Inputs | Name | Type | Description | | - | - | - | | Meshes | [Mesh List](../../../../block-documentation/types/mesh) | Meshes to merge. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | ## About this Block **What it does:** The **Merge Meshes** block merges multiple meshes into a single mesh. **Common uses:** * Combining multiple meshes into a single mesh. **Tips:** * Adjacent nodes from the meshes will not be shifted or combined, and connectivity will not be assigned between nodes from separate meshes. * Adjacent nodes can be merged using **Collapse Mesh Vertices**, and the **Remesh Surface** block can redefine the connectivity of a mesh for downstream use. * Different methods for refining meshes: ([https://support.ntopology.com/hc/articles/360061372374](https://support.ntopology.com/hc/articles/360061372374)) * How to export multiple mesh objects as a single STL: ([https://support.ntopology.com/hc/articles/1500002149622](https://support.ntopology.com/hc/articles/1500002149622)) ## Example File ![MergeMeshes](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MergeMeshes.jpg) # Mesh Face from Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/mesh-face-from-points ## About this Block **What it does:** The **Mesh Face from Points** block creates a mesh face from a list of points. **Common uses:** * Creating support structures * Creating Graphs from Mesh Faces **Tips:** * The list of points can only contain 3 or 4 points. * When dragging a point list into the Points field, the auto-populated point list must be deleted first. ## Example File ![Create Single Face Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/createsinglefacemesh.jpg) *** Creates a Mesh comprised of a single face from 3 or 4 vertex points. Input the face's vertices in counter-clockwise order. If out of order, the face will be self-intersecting. ### Inputs | Name | Type | Description | | - | - | - | | Vertex 1 | [Point](../../../../block-documentation/types/point) | The first vertex of the mesh face. | | Vertex 2 | [Point](../../../../block-documentation/types/point) | The second vertex of the mesh face, counter-clockwise from the first. If out of order, the face will self-intersect. | | Vertex 3 | [Point](../../../../block-documentation/types/point) | The third vertex of the mesh face, counter-clockwise from the second. If out of order, the face will self-intersect. | | Vertex 4 | [Point](../../../../block-documentation/types/point) | Optional fourth face vertex, counter-clockwise from the third. If out of order, the face will self-intersect. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Offset Voxel Grid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/offset-voxel-grid > **[Voxel Grid, Scalar](#voxel-grid-scalar)** > **[Voxel Grid, Scalar, 1.1.0](#voxel-grid-scalar-110)** *** ## About this Block **What it does:** The **Offset Voxel Grid** offsets an existing voxel grid. It can be offset either outwards or inwards, giving you more control over your voxel grid. Distance is defined by a constant value. **Common uses:** * Offsetting voxel grids. *** ## Voxel Grid, Scalar Apply an offset to the narrow band of a voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | The voxel grid to offset. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | The amount to offset the voxel grid in world space. A positive value will offset outward while a negative value will offset inward. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | *** ## Voxel Grid, Scalar, 1.1.0 Apply an offset to the narrow band of a voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | The voxel grid to offset. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | The amount to offset the voxel grid in world space. A positive value will offset inward while a negative value will offset outward. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | # Project Curve to Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/project-curve-to-plane Project a Curve to a Plane. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to project. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to project to. | ### Outputs | Type | | - | | [Curve](../../../../block-documentation/types/curve) | # Project Points to Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/project-points-to-plane ## About this Block **What it does:** The **Pull Points to Plane** block finds the orthogonal projection of a point onto a plane, given a point list to pull, and a plane to pull onto. The input point(s) makes a perpendicular line to the input plane (which is a line parallel to the plane normal). Mathematically, the output point(s) are the closest points on the input plane to the input point(s). **Common uses:** * Patterning **Tips:** * When dragging a point list into the Points field, the auto-populated point list must be deleted first. ## Example File Download Example: [Pull Points to Plane](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pull_points_to_plane.ntop) ![Pull Points to Plane](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/pull_points_to_plane.jpg) *** Project multiple points to a plane. ### Inputs | Name | Type | Description | | - | - | - | | Points | [Point List](../../../../block-documentation/types/point) | Point list to project. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to project to. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Quadrangulate Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/quadrangulate-mesh > **[Mesh, Integer, Scalar, Bool, Scalar, Frame](#mesh-integer-scalar-bool-scalar-frame)** > **[Mesh, Integer, Scalar, Bool, Scalar, Frame, 1.1.0](#mesh-integer-scalar-bool-scalar-frame-110)** *** ## About this Block **What it does:** The **Quadrangulate Mesh** block remeshes a triangular or quad mesh and outputs a quad mesh. **Common uses:** * Used as the input to the **CAD Body from Quad Mesh** block when converting a low-complexity model to a CAD part. * Used to generate the input quad mesh for the **Cell Map from Quad Mesh** block. * Used to create a quad mesh for export. * Used to remesh an existing quad mesh. **Tips:** * If the output mesh is self-intersecting, try increasing the Target count value or disable the Sharp features input. * To generate a b-rep from a medium complexity model such as a lattice or texture design, use the **CAD Body from Implicit Body (Beta)** block instead of **Quadrangulate Mesh**: ([https://support.ntopology.com/hc/en-us/articles/360048784874](https://support.ntopology.com/hc/en-us/articles/360048784874)) * To convert a triangular mesh to a quad mesh, use the triangular mesh's face count as the block's Target count input. This may be fastest and return cleaner meshes. ## Example File ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/QuadrangulateMesh.jpg) *** ## Mesh, Integer, Scalar, Bool, Scalar, Frame Quadrangulate a triangular or quad mesh by remeshing. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to quadrangulate. | | Target count | [Integer](../../../../block-documentation/types/integer) | Target number of quads. | | Adaptivity | [Scalar](../../../../block-documentation/types/scalar) | Adapts the target quads count in favor of better capturing the curvature of the input mesh, range \[0, 1]. | | Sharp features | [Bool](../../../../block-documentation/types/bool) | Auto-detect and preserve sharp features in the input mesh. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to detect and preserve sharp feature edges in the input Mesh. When the input value is provided, and the angle between two faces of the Mesh is greater than the provided angle, the edge between those faces will be tagged as a sharp feature edge. If the input value is not provided, an internal algorithm will be used to detect sharp edges. This input will be used only if the Sharp Features input is checked, and ignored otherwise. | | Symmetry | [Frame](../../../../block-documentation/types/frame) | Frame defining a symmetry plane of the model | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Integer, Scalar, Bool, Scalar, Frame, 1.1.0 Quadrangulate a triangular or quad mesh by remeshing. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to quadrangulate. | | Target count | [Integer](../../../../block-documentation/types/integer) | Target number of quads. | | Adaptivity | [Scalar](../../../../block-documentation/types/scalar) | Adapts the target quads count in favor of better capturing the curvature of the input mesh, range \[0, 1]. | | Sharp features | [Bool](../../../../block-documentation/types/bool) | Auto-detect and preserve sharp features in the input mesh. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to detect and preserve sharp feature edges in the input Mesh. When the input value is provided, and the angle between two faces of the Mesh is greater than the provided angle, the edge between those faces will be tagged as a sharp feature edge. If the input value is not provided, an internal algorithm will be used to detect sharp edges. This input will be used only if the Sharp Features input is checked, and ignored otherwise. | | Symmetry | [Frame](../../../../block-documentation/types/frame) | Frame defining a symmetry plane of the model | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Random Points in Body (Old) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/random-points-in-body-old > **[Implicit Body, Scalar Field, Integer, 1.1.0](#implicit-body-scalar-field-integer-110)** > **[Implicit Body, Scalar Field, Integer, 1.2.0](#implicit-body-scalar-field-integer-120)** *** ## Implicit Body, Scalar Field, Integer, 1.1.0 Generate a randomized list of points within an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to generate random points within. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | Average spacing between generated points. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | *** ## Implicit Body, Scalar Field, Integer, 1.2.0 Generate a randomized list of points within an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to generate random points within. | | Point spacing | [Scalar Field](../../../../block-documentation/types/scalar-field) | Average spacing between generated points. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Random Points in Volume Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/random-points-in-volume-mesh ## About this Block **What it does:** The **Random Points in Volume Mesh** block generates a randomly generated point list within the volume of the volume mesh. The number of points specified by the point count are placed throughout the volume mesh. **Common uses:** * Creating points to use for lattice generation **Tips:** * These points will be more evenly spread with a higher relaxation iteration value. The placement of points can be changed by changing the random seed. * Spatial weighting can be driven, often by a Ramp block, to control the spacing of the points. ## Example File ![Random Points in Volume Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RandomPointsinVolumeMesh.jpg) *** Generate a randomized list of points inside a volume mesh. ### Inputs | Name | Type | Description | | - | - | - | | Volume mesh | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | Volume mesh to distribute random points inside of. | | Point count | [Integer](../../../../block-documentation/types/integer) | Number of points to distribute inside the volume mesh. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the points on the mesh. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Spatial weighting | [Scalar Field](../../../../block-documentation/types/scalar-field) | An optional input to control the spacing of the generated points. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Random Points on Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/random-points-on-mesh > **[Mesh, Integer, Integer, Integer, Scalar Field, 1.1.0](#mesh-integer-integer-integer-scalar-field-110)** > **[Mesh, Integer, Integer, Integer, Scalar Field, 1.2.0](#mesh-integer-integer-integer-scalar-field-120)** > **[Mesh, Integer, Integer, Integer, Scalar Field, 1.3.0](#mesh-integer-integer-integer-scalar-field-130)** *** ## About this Block **What it does:** The **Random Points on Mesh** block generates a random list of points on the surface of a Mesh. **Common uses:** * Generating points for lattice creation. **Tips:** * The points will be more evenly spread with a higher relaxation iteration value. The placement of points can be changed by changing the random seed. * Spatial weighting can be driven, often by a Ramp block, to control the spacing of the points. * The point count specifies the number of points on the mesh. * This block can be used to create Voronoi surface textures: ([https://support.ntopology.com/hc/articles/360042365673](https://support.ntopology.com/hc/articles/360042365673)) * This block can be used to add texture to a surface: ([https://support.ntopology.com/hc/articles/360060794753](https://support.ntopology.com/hc/articles/360060794753)) * This block can be used to create perforations on any part: ([https://support.ntopology.com/hc/articles/1500012943262](https://support.ntopology.com/hc/articles/1500012943262)) ## Example File ![RandomPointsonMesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RandomPointsonMesh.jpg) *** ## Mesh, Integer, Integer, Integer, Scalar Field, 1.1.0 Generate a randomized list of points on the surface of a mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to distribute random points on. | | Point count | [Integer](../../../../block-documentation/types/integer) | Number of points to distribute on the mesh. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the points on the mesh. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Spatial weighting | [Scalar Field](../../../../block-documentation/types/scalar-field) | An optional input to control the spacing of the generated points. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | *** ## Mesh, Integer, Integer, Integer, Scalar Field, 1.2.0 Generate a randomized list of points on the surface of a mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to distribute random points on. | | Point count | [Integer](../../../../block-documentation/types/integer) | Number of points to distribute on the mesh. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the points on the mesh. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Spatial weighting | [Scalar Field](../../../../block-documentation/types/scalar-field) | An optional input to control the spacing of the generated points. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | *** ## Mesh, Integer, Integer, Integer, Scalar Field, 1.3.0 Generate a randomized list of points on the surface of a mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to distribute random points on. | | Point count | [Integer](../../../../block-documentation/types/integer) | Number of points to distribute on the mesh. | | Relaxation iterations | [Integer](../../../../block-documentation/types/integer) | Number of iterations to evenly distribute the points on the mesh. | | Random seed | [Integer](../../../../block-documentation/types/integer) | Seed value to generate randomness. | | Spatial weighting | [Scalar Field](../../../../block-documentation/types/scalar-field) | An optional input to control the spacing of the generated points. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Ray Cast Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/ray-cast > **[Implicit Body, Point, Vector, Scalar, Scalar, Integer, 5.30.0](#implicit-body-point-vector-scalar-scalar-integer-5300)** > **[Voxel Grid, Point, Vector](#voxel-grid-point-vector)** *** ## About this Block **What it does:** The **Ray Cast** block creates a vector from a defined point, and outputs the point where the vector intersects the inputted voxel grid. **Common uses:** * Project points on to a Voxel Grid ## Example File Download Example: [Ray Cast](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ray_cast.ntop) ![Ray Cast](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ray_cast.jpg) *** ## Implicit Body, Point, Vector, Scalar, Scalar, Integer, 5.30.0 Computes the intersection between the zero-surface of an implicit and a ray via sphere tracing. ### Inputs | Name | Type | Description | | - | - | - | | Implicit body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to measure | | Point | [Point](../../../../block-documentation/types/point) | Point to shoot the ray from | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction in which to shoot the ray | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Convergence threshold, needs to be smaller than the thickness you want to measure | | Lipschitz | [Scalar](../../../../block-documentation/types/scalar) | Lipschitz constant of the implicit | | Max. iterations | [Integer](../../../../block-documentation/types/integer) | Maximum number of sphere tracing iterations to perform. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | *** ## Voxel Grid, Point, Vector Cast a ray to a voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | The voxel grid to ray cast. | | Point | [Point](../../../../block-documentation/types/point) | The origin of the ray to intersect with the voxel grid. | | Direction | [Vector](../../../../block-documentation/types/vector) | The directions of the rays to intersect with the voxel grid. | ### Outputs | Type | | - | | [Point](../../../../block-documentation/types/point) | # Refine Bounding Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/refine-bounding-box > **[Implicit Body, Scalar](#implicit-body-scalar)** > **[Implicit Body, Scalar, 1.1.0](#implicit-body-scalar-110)** > **[Implicit Body, Scalar, 2.0.0](#implicit-body-scalar-200)** *** ## About this Block **What it does:** The **Refine Bounding Box** block refines the bounding box of an implicit body based on a given tolerance. This step ensures that the bounding box fits the body properly, often after performing boolean operations. **Common uses:** * Calculate a tight bounding box. ## Example File Download Example: [Refine Bounding Box](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/refine_bounding_box.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/refine_bounding_box.jpg) *** ## Implicit Body, Scalar Refine the bounding box of an implicit body given a tolerance. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to refine. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Sampling tolerance to refine the bounding box. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, 1.1.0 Refine the bounding box of an implicit body given a tolerance. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to refine. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Sampling tolerance to refine the bounding box. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Implicit Body, Scalar, 2.0.0 Refines the Bounding Box of an Implicit Body given a Grid Size. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Refines the bounding box of this Body. | | Grid size | [Scalar](../../../../block-documentation/types/scalar) | Size of the sample grid spacing. As this value gets smaller, the resulting Bounding Box will be tighter, but will take longer to compute. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Refine Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/refine-mesh > **[Mesh, Integer, Scalar, Scalar](#mesh-integer-scalar-scalar)** > **[Mesh, Integer, Scalar, Scalar, 1.1.0](#mesh-integer-scalar-scalar-110)** *** ## About this Block **What it does:** The **Refine Mesh** block refines a mesh using subdivision. Subdivision is the process of dividing up the polygons that make up the mesh into smaller polygons. The smaller polygons can better capture details and surface curvature of the body. **Common uses:** * Refining quad meshes before converting to CAD parts or cell maps. * Refining a mesh before creating a volume mesh **Tips:** * The refinement steps input defines the number of iterations for refinement between 1 and 5. * The Feature angle input retains sharp edges during refinement. The angle value is a lower bound and any edge angle above that value will be preserved. * The Sharpness value input indicates the degree of sharpness to be applied to an edge during refinement. This value can be between 0 and 1, where 1 represents an infinitely sharp edge. If a feature angle is provided, the default sharpness value is 1. * **Refine Mesh** increases the triangle count. * Creates subdivided meshes that can be converted into lattices with the **Lattice Body from Surface Mesh** block. * Different methods for refining meshes: ([https://support.ntopology.com/hc/articles/360061372374](https://support.ntopology.com/hc/articles/360061372374)) * How to export an STL: ([https://support.ntopology.com/hc/articles/360040510953](https://support.ntopology.com/hc/articles/360040510953)) ## Example File ![Refine Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RefineMesh.jpg) *** ## Mesh, Integer, Scalar, Scalar Refine a mesh with subdivision. Catmull-Clark subdivision is applied for quad dominant meshes. Loop subdivision is used for triangle meshes. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The mesh to refine. | | Refinement steps | [Integer](../../../../block-documentation/types/integer) | The number of refinement iterations to apply \[1, 5]. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The minimum angle that defines a sharp edge, \[0, Pi]. This is an optional value that identifies edges to preserve as sharp edges during global refinement. The value represents a lower bound, when the dihedral angle between two faces is greater than the criteria, the edge will be tagged as sharp. | | Sharpness value | [Scalar](../../../../block-documentation/types/scalar) | The degree of sharpness \[0, 1] applied to an edge during global refinement. A value of 1 indicates an infinitely sharp edge. When a feature angle is given the default sharpness value is 1. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Integer, Scalar, Scalar, 1.1.0 Refine a mesh with subdivision. Catmull-Clark subdivision is applied for quad dominant meshes. Loop subdivision is used for triangle meshes. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The mesh to refine. | | Refinement steps | [Integer](../../../../block-documentation/types/integer) | The number of refinement iterations to apply \[1, 5]. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The minimum angle that defines a sharp edge, \[0, Pi]. This is an optional value that identifies edges to preserve as sharp edges during global refinement. The value represents a lower bound, when the dihedral angle between two faces is greater than the criteria, the edge will be tagged as sharp. | | Sharpness value | [Scalar](../../../../block-documentation/types/scalar) | The degree of sharpness \[0, 1] applied to an edge during global refinement. A value of 1 indicates an infinitely sharp edge. When a feature angle is given the default sharpness value is 1. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Remove Mesh Faces by Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/remove-mesh-faces-by-body ## About this Block **What it does:** The **Remove Mesh Faces by Body** block removes individual faces of a mesh using an Implicit Body. Faces with at least one vertex within the implicit will remain. **Common uses:** * Removing mesh imperfections **Tips:** * If Reverse is checked, faces with at least one vertex outside the implicit will remain. ## Example File ![Remove Mesh Faces by Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RemoveMeshFacesByBody.gif) *** Removes faces of a mesh using an Implicit Body. Faces with at least one vertex within the implicit will remain. If Reverse is checked, faces with at least one vertex outside of the implicit will remain. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The surface mesh from which to remove faces. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The implicit body selection tool. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Option to select faces outside the implicit body instead of inside. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Reparameterize CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/reparameterize-cad-face Reparameterize the UV space of a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | Cad face | [CAD Face](../../../../block-documentation/types/cad-face) | CAD face to reparameterize. | | Origin position | UV Position Enum | Corner parameter to set as origin for UV space. | | Flip uv | [Bool](../../../../block-documentation/types/bool) | Swap the direction of U and V. | ### Outputs | Type | | - | | [Face Parameterization](../../../../block-documentation/types/face-parameterization) | # Section Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/section-body > **[Implicit Body, Plane](#implicit-body-plane)** > **[Implicit Body, Plane, Scalar, 1.1.0](#implicit-body-plane-scalar-110)** > **[Implicit Body, Plane, Scalar, 5.20.0](#implicit-body-plane-scalar-5200)** *** ## About this Block **What it does:** The **Section Body** block sections an Implicit Body with a Plane to create an Implicit Body of the profile. **Common uses:** * Calculate Surface Area of a cross-section. * The Profile can be used as an input in **Extrude Profile**, **Revolve Profile**, **Twisted Sweep Profile**, and **Sweep Profile** blocks. **Tips:** * How to calculate the surface area of a cross-section ([https://support.ntopology.com/hc/en-us/articles/360059905913](https://support.ntopology.com/hc/en-us/articles/360059905913)) ## Example File ![Section Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/sectionbody.jpg) *** ## Implicit Body, Plane Extract a profile from a section of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to extract section profile from. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to intersect with the implicit body. | ### Outputs | Type | | - | | [Profile (old)](../../../../block-documentation/types/profile-old) | *** ## Implicit Body, Plane, Scalar, 1.1.0 Extract a profile from a section of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to extract section profile from. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to intersect with the implicit body. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that will be captured. If not specified, 1% of the span length of the profile is taken as the smallest feature size. | ### Outputs | Type | | - | | [Profile (old)](../../../../block-documentation/types/profile-old) | *** ## Implicit Body, Plane, Scalar, 5.20.0 Extract a profile from a section of an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to extract section profile from. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to intersect with the implicit body. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that will be captured. If not specified, 1% of the span length of the profile is taken as the smallest feature size. | ### Outputs | Type | | - | | [Profile](../../../../block-documentation/types/profile) | # Set Bounding Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/set-bounding-box > **[Implicit Body, Bounding Box](#implicit-body-bounding-box)** > **[Scalar Field, Bounding Box, 1.1.0](#scalar-field-bounding-box-110)** *** ## About this Block **What it does:** The **Set Body Bounding Box** block sets a custom Bounding Box of an Implicit Body. **Common uses:** * Constraining an infinite field **Tips:** * How to use this block to shell a TPMS and connect it to a solid mesh: ([https://support.ntopology.com/hc/articles/4410312531603](https://support.ntopology.com/hc/articles/4410312531603)) * How to use this block to map a bitmap onto a curved surface: ([https://support.ntopology.com/hc/articles/5384098529555](https://support.ntopology.com/hc/articles/5384098529555)) *** ## Implicit Body, Bounding Box Set the Bounding Box of an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to apply Bounding Box to. | | Bounding box | [Bounding Box](../../../../block-documentation/types/bounding-box) | Bounding Box to apply. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | ## About this Block **What it does:** The **Set Body Bounding Box** block sets a custom Bounding Box of an Implicit Body. **Common uses:** * Constraining an infinite field **Tips:** * How to use this block to shell a TPMS and connect it to a solid mesh: ([https://support.ntopology.com/hc/articles/4410312531603](https://support.ntopology.com/hc/articles/4410312531603)) * How to use this block to map a bitmap onto a curved surface: ([https://support.ntopology.com/hc/articles/5384098529555](https://support.ntopology.com/hc/articles/5384098529555)) *** ## Scalar Field, Bounding Box, 1.1.0 Set the Bounding Box of a Scalar Field. ### Inputs | Name | Type | Description | | - | - | - | | Scalar field | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to apply Bounding Box to. | | Bounding box | [Bounding Box](../../../../block-documentation/types/bounding-box) | Bounding Box to apply. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Simplify Mesh by Amount Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/simplify-mesh-by-amount > **[Mesh, Scalar](#mesh-scalar)** > **[Mesh, Scalar, 1.1.0](#mesh-scalar-110)** > **[Mesh, Scalar, 1.2.0](#mesh-scalar-120)** > **[Mesh, Scalar, 1.3.0](#mesh-scalar-130)** *** ## About this Block **What it does:** The **Simplify Mesh by Amount** block simplifies an input mesh by removing elements of the mesh, until a specified percentage of triangles have been removed. The Amount input must be a number greater than 0 and less than 1. An input of 0.3 reduces the face count of the mesh by 30%. **Common uses:** * Reducing the face count and file size for export **Tips:** * The decimation algorithm does not take into account a surface tolerance (the distance between any original input mesh surface and the simplified new surface). * To simplify a mesh while maintaining a specified surface tolerance, use the Simplify Mesh by Threshold block. ## Example File ![Simplify Mesh by Amount](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SMbA.jpg) *** ## Mesh, Scalar Simplifies a Mesh by a specified target percentage, represented as a value from 0 to 1. An input of 0.1 will remove approximately 10 percent of the faces. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Amount | [Scalar](../../../../block-documentation/types/scalar) | Target percentage for simplification represented as a value between 0 and 1. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar, 1.1.0 Simplifies a Mesh by a specified target percentage, represented as a value from 0 to 1. An input of 0.1 will remove approximately 10 percent of the faces. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Amount | [Scalar](../../../../block-documentation/types/scalar) | Target percentage for simplification represented as a value between 0 and 1. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar, 1.2.0 Simplifies a Mesh by a specified target percentage, represented as a value from 0 to 1. An input of 0.1 will remove approximately 10 percent of the faces. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Amount | [Scalar](../../../../block-documentation/types/scalar) | Target percentage for simplification represented as a value between 0 and 1. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar, 1.3.0 Simplifies a Mesh by a specified target percentage, represented as a value from 0 to 1. An input of 0.1 will remove approximately 10 percent of the faces. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Amount | [Scalar](../../../../block-documentation/types/scalar) | Target percentage for simplification represented as a value between 0 and 1. A value of 1 will attempt to remove as many faces as possible, while still trying to preserve the general shape of the Mesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Simplify Mesh by Threshold Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/simplify-mesh-by-threshold > **[Mesh, Scalar](#mesh-scalar)** > **[Mesh, Scalar, 1.1.0](#mesh-scalar-110)** > **[Mesh, Scalar, 1.2.0](#mesh-scalar-120)** > **[Mesh, Scalar, 1.3.0](#mesh-scalar-130)** *** ## About this Block **What it does:** The **Simplify Mesh by Threshold** block simplifies a mesh by removing as many elements as possible while keeping the distance between the surface of the input Mesh and the simplified result below a distance threshold amount. **Common uses:** * Reducing the face count and file size for export **Tips:** * This block works best on meshes created from an Implicit Body. If your input Mesh is from an external source, the block may not preserve sharp features such as edges and corners. * If you need to simplify an imported Mesh, use the **Remesh Surface** block to create uniform element edge lengths, then simplify. ## Example File ![Simplify Mesh by Threshold](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SMbT.jpg) *** ## Mesh, Scalar Reduces the number of faces in a mesh as much as possible while keeping the distance between the surfaces of the input and output meshes below the specified Threshold. If the deviation from the output Mesh to input Mesh is larger than expected, try remeshing the input Mesh with the Remesh Surface block before using Simplify Mesh by Threshold. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Threshold | [Scalar](../../../../block-documentation/types/scalar) | The distance threshold | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar, 1.1.0 Reduces the number of faces in a mesh as much as possible while keeping the distance between the surfaces of the input and output meshes below the specified Threshold. If the deviation from the output Mesh to input Mesh is larger than expected, try remeshing the input Mesh with the Remesh Surface block before using Simplify Mesh by Threshold. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Threshold | [Scalar](../../../../block-documentation/types/scalar) | The distance threshold | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar, 1.2.0 Reduces the number of faces in a mesh as much as possible while keeping the distance between the surfaces of the input and output meshes below the specified Threshold. If the deviation from the output Mesh to input Mesh is larger than expected, try remeshing the input Mesh with the Remesh Surface block before using Simplify Mesh by Threshold. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Threshold | [Scalar](../../../../block-documentation/types/scalar) | The distance threshold | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar, 1.3.0 Reduces the number of faces in a mesh as much as possible while keeping the distance between the surfaces of the input and output meshes below the specified Threshold. If the deviation from the output Mesh to input Mesh is larger than expected, try remeshing the input Mesh with the Remesh Surface block before using Simplify Mesh by Threshold. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to simplify. | | Threshold | [Scalar](../../../../block-documentation/types/scalar) | The distance threshold | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Smoothen Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/smoothen-body ## About this Block **What it does:** Inputs any Implicit Body and uses a Gaussian Blur function to smooth values in the field. **Common uses:** * Smoothening bodies from topology optimization results * Rounding out hard edges on bodies **Tips:** * Requires a field discretization, which uses the Grid Size input as a modifier. Grid Size represents the spacing between each sample point. Smaller Grid Size values return a Scalar Field that captures finer detail but takes longer to compute. * The number of iterations contributes to both the overall smoothness and computation time. * The iterations control how many times it applies the Gaussian smoothing algorithm to the input Scalar Field ## Example File Download Example: [Smoothen Field](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/smoothen_body.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/smoothen_body.jpg) *** Smoothen an implicit Body with a Gaussian image kernel. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit Body to smooth. | | Grid size | [Scalar](../../../../block-documentation/types/scalar) | Size of the sampled grid spacing. | | Smooth iterations | [Integer](../../../../block-documentation/types/integer) | Number of smoothing iterations. | | Interpolation type | Interpolation Enum | Interpolation type. | | Domain | [Bounding Box](../../../../block-documentation/types/bounding-box) | Optional bounding box to specify the region of the implicit body to smoothen. If no domain is specified, it will attempt to smoothen with the input body's bounding box. Note that if the body's bounding box is too large, the algorithm may take a long time to run. | | Extrapolation | Blending Side Enum | Specifies the smoothing region when a Domain is provided. Select inside to fully constrain the smoothing to within the Domain, and select Outside to extend the smoothing outside of the Domain input. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Smoothen Voxel Grid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/smoothen-voxel-grid ## About this Block **What it does:** The **Smoothen Voxel Grid** block uses a variety of smoothing algorithms, specified in the Filter input, to smooth out sharp features in a Voxel Grid. **Common uses:** * Smoothen out sharp features in a Voxel Grid. **Tips:** * The iterations input contributes to the overall smoothness and computation time, and controls the number of times that the smoothing algorithm is applied to the input Voxel Grid. * The Width input refers to the range neighboring Voxels that contribute to the smoothing. * A larger Width will result in a smoother output geometry, but will also remove small features that are smaller than the filter Width. * The different smoothing algorithms are: * MeanCurvature: Moves the surface in a normal direction by an amount equal to the mean curvature * Laplacian: Applies Laplacian flow, This applies a weighted average of the voxel and its neighbors. * Dilate: Moves the surface outward by the amount specified. * Gaussian: Applies a gaussian flow, a weighted average of the voxel and its neighbors where a Gaussian determines the weights. * Median/Mean: Median/Mean flow. This is an averaging procedure where voxel values are replaced by the median/mean of a neighborhood. * Eikonal: Re-distances the voxel grid so that the result is an SDF. *** Apply a filtering function to smoothen a voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | The voxel grid to smoothen. | | Filter | Voxel Grid Filter Enum | The smoothening method to use. | | Iterations | [Integer](../../../../block-documentation/types/integer) | The number of filter iterations to apply. | | Width | [Integer](../../../../block-documentation/types/integer) | The width of the filter kernel in voxel units. This value is only used for the Gaussian, Median, and Mean techniques. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | # Split Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/split-mesh > **[Mesh](#mesh)** > **[Mesh, 1.1.0](#mesh-110)** *** ## About this Block **What it does:** The **Split Mesh** block separates a single surface Mesh into a Mesh List of its disjointed pieces. **Common uses:** * Removing floating pieces in a geometry that may arise from lattice infilling or boolean operations. **Tips:** * Extract a mesh from the Mesh List with a List Element block or by accessing individual items in the Mesh List's properties. * If the result of this block is a mesh list with only one item, the input mesh has no disjointed components. * How to use this block to clean a mesh: ([https://support.ntopology.com/hc/articles/1500001444921](https://support.ntopology.com/hc/articles/1500001444921)) * Different methods for refining meshes: ([https://support.ntopology.com/hc/articles/360061372374](https://support.ntopology.com/hc/articles/360061372374)) ## Example File ![SplitMesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SplitMesh.jpg) *** ## Mesh Split a mesh into a list of connected components. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to split. | ### Outputs | Type | | - | | [Mesh List](../../../../block-documentation/types/mesh) | *** ## Mesh, 1.1.0 Split a mesh into a list of connected components. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to split. | ### Outputs | Type | | - | | [Mesh List](../../../../block-documentation/types/mesh) | # Stitch Adjacent CAD Faces Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/stitch-adjacent-cad-faces ## About this Block **What it does:** The **Stitch CAD Surface Bodies** block attempts to merge multiple CAD surface bodies or CAD faces together within a tolerance. **Common uses:** * Joining CAD Faces to create one body instead of multiple **Tips:** * The output of this block is always a list ## Example File Download Example: [StitchCADSurfaceBodies](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/StitchCADSurfaceBodies.ntop) ![StitchCADSurfaceBodies](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/StitchCADSurfaceBodies.jpg) *** Stitches together adjacent CAD faces into a single CAD body. During this operation CAD faces are not merged into a single face or surface. When this operation results in multiple CAD bodies an error will occur, instead use Stitch CAD Bodies which can return multiple bodies. For those looking to generate a Lattice across multiple CAD faces, it is recommended to generate a quad mesh from this block and then use the Cell Map from Quad Mesh + Periodic Lattice Blocks. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | List of CAD faces to attempt to join into a single CAD body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Maximum gap width to attempt to sew adjacent CAD faces. | ### Outputs | Type | | - | | [CAD Body](../../../../block-documentation/types/cad-body) | # Stitch CAD Surface Bodies Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/stitch-cad-surface-bodies Attempts to merge multiple CAD surface bodies or CAD faces together within a tolerance, always outputs the results as a list. For those looking to join together multiple CAD solid bodies it is recommended to use the Boolean Union operation, which requires implicit bodies. ### Inputs | Name | Type | Description | | - | - | - | | Cad bodies | [CAD Body List](../../../../block-documentation/types/cad-body) | List of CAD surface bodies to attempt to join. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Maximum gap width to attempt to sew adjacent CAD surfaces. | ### Outputs | Type | | - | | [CAD Body List](../../../../block-documentation/types/cad-body) | # Triangulate Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/modeling/utilities/triangulate-mesh Triangulates a mesh by splitting each quad to a pair of triangular faces. Triangular faces will be left unchanged. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to triangulate. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization ## Optimization > **[Topology Optimization](../../block-documentation/blocks/optimization/optimization/topology-optimization)** > **[Single Body Topology Optimization](../../block-documentation/blocks/optimization/optimization/single-body-topology-optimization)** ## Field Optimization > **[Field Optimization](../../block-documentation/blocks/optimization/field-optimization/field-optimization)** > **[Parametric Voronoi Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-voronoi-domain)** > **[Parametric Lattice Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-lattice-domain)** > **[Parametric Shell Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-shell-domain)** > **[Parametric Shell-Infill Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-shell-infill-domain)** > **[Parametric FE Model](../../block-documentation/blocks/optimization/field-optimization/parametric-fe-model)** > **[Implicit Body from Field Optimization](../../block-documentation/blocks/optimization/field-optimization/implicit-body-from-field-optimization)** ## Responses > **[Design Objective](../../block-documentation/blocks/optimization/responses/design-objective)** > **[Structural Compliance Response](../../block-documentation/blocks/optimization/responses/structural-compliance-response)** > **[Volume Fraction Response](../../block-documentation/blocks/optimization/responses/volume-fraction-response)** > **[Stress Response](../../block-documentation/blocks/optimization/responses/stress-response)** > **[Displacement Response](../../block-documentation/blocks/optimization/responses/displacement-response)** > **[Natural Frequency Response](../../block-documentation/blocks/optimization/responses/natural-frequency-response)** > **[Mass Response](../../block-documentation/blocks/optimization/responses/mass-response)** > **[Center of Mass Response](../../block-documentation/blocks/optimization/responses/center-of-mass-response)** > **[Moment of Inertia Response](../../block-documentation/blocks/optimization/responses/moment-of-inertia-response)** > **[Reaction Force Response](../../block-documentation/blocks/optimization/responses/reaction-force-response)** > **[Combine Design Responses](../../block-documentation/blocks/optimization/responses/combine-design-responses)** ## Constraints > **[Design Response Constraint](../../block-documentation/blocks/optimization/constraints/design-response-constraint)** > **[Passive Region Constraint](../../block-documentation/blocks/optimization/constraints/passive-region-constraint)** > **[Planar Symmetry Constraint](../../block-documentation/blocks/optimization/constraints/planar-symmetry-constraint)** > **[Overhang Constraint](../../block-documentation/blocks/optimization/constraints/overhang-constraint)** > **[Extrusion Constraint](../../block-documentation/blocks/optimization/constraints/extrusion-constraint)** > **[Volume Fraction Constraint](../../block-documentation/blocks/optimization/constraints/volume-fraction-constraint)** > **[Stress Constraint](../../block-documentation/blocks/optimization/constraints/stress-constraint)** > **[Displacement Constraint](../../block-documentation/blocks/optimization/constraints/displacement-constraint)** > **[Natural Frequency Constraint](../../block-documentation/blocks/optimization/constraints/natural-frequency-constraint)** > **[Min Feature Size Constraint](../../block-documentation/blocks/optimization/constraints/min-feature-size-constraint)** > **[Max Feature Size Constraint](../../block-documentation/blocks/optimization/constraints/max-feature-size-constraint)** > **[Demold Constraint](../../block-documentation/blocks/optimization/constraints/demold-constraint)** > **[Remap Constraint](../../block-documentation/blocks/optimization/constraints/remap-constraint)** > **[Pattern Repetition Constraint](../../block-documentation/blocks/optimization/constraints/pattern-repetition-constraint)** > **[3-Axis Milling Constraint](../../block-documentation/blocks/optimization/constraints/3-axis-milling-constraint)** > **[5-Axis Milling Constraint](../../block-documentation/blocks/optimization/constraints/5-axis-milling-constraint)** ## Post-Processing > **[Implicit Body from Topology Optimization](../../block-documentation/blocks/optimization/post-processing/implicit-body-from-topology-optimization)** > **[Construct Optimized Body](../../block-documentation/blocks/optimization/post-processing/construct-optimized-body)** > **[Optimized Density Thickness Modifier](../../block-documentation/blocks/optimization/post-processing/optimized-density-thickness-modifier)** ## Exchange > **[Import Topology Optimization Result](../../block-documentation/blocks/optimization/exchange/import-topology-optimization-result)** > **[Export Topology Optimization History](../../block-documentation/blocks/optimization/exchange/export-topology-optimization-history)** > **[Topology Optimization Density Point Map](../../block-documentation/blocks/optimization/exchange/topology-optimization-density-point-map)** # Constraints Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints > **[Design Response Constraint](../../../block-documentation/blocks/optimization/constraints/design-response-constraint)** > **[Passive Region Constraint](../../../block-documentation/blocks/optimization/constraints/passive-region-constraint)** > **[Planar Symmetry Constraint](../../../block-documentation/blocks/optimization/constraints/planar-symmetry-constraint)** > **[Overhang Constraint](../../../block-documentation/blocks/optimization/constraints/overhang-constraint)** > **[Extrusion Constraint](../../../block-documentation/blocks/optimization/constraints/extrusion-constraint)** > **[Volume Fraction Constraint](../../../block-documentation/blocks/optimization/constraints/volume-fraction-constraint)** > **[Stress Constraint](../../../block-documentation/blocks/optimization/constraints/stress-constraint)** > **[Displacement Constraint](../../../block-documentation/blocks/optimization/constraints/displacement-constraint)** > **[Natural Frequency Constraint](../../../block-documentation/blocks/optimization/constraints/natural-frequency-constraint)** > **[Min Feature Size Constraint](../../../block-documentation/blocks/optimization/constraints/min-feature-size-constraint)** > **[Max Feature Size Constraint](../../../block-documentation/blocks/optimization/constraints/max-feature-size-constraint)** > **[Demold Constraint](../../../block-documentation/blocks/optimization/constraints/demold-constraint)** > **[Remap Constraint](../../../block-documentation/blocks/optimization/constraints/remap-constraint)** > **[Pattern Repetition Constraint](../../../block-documentation/blocks/optimization/constraints/pattern-repetition-constraint)** > **[3-Axis Milling Constraint](../../../block-documentation/blocks/optimization/constraints/3-axis-milling-constraint)** > **[5-Axis Milling Constraint](../../../block-documentation/blocks/optimization/constraints/5-axis-milling-constraint)** # 3-Axis Milling Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/3-axis-milling-constraint ## About this Block **What it does:** The **3-Axis Milling Constraint** block enables 3-axis milling constraints on Topology Optimizations. The constraint ensures the Topology Optimization result can be manufactured without contact between the tool head and the design domain. It ensures no features are generated smaller than the smallest cutting tool would allow. ![Milling Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/milling_constraints.png) If you would like to visualize these inputs in your nTop notebook, download this [CB - Tool Aid Block](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/CB_Tool_Aid.ntop) and import it into your notebook. The block has the following inputs: 1. *Head Radius*: The radius of a half sphere used to represent a simplified drill chuck. This will ensure the cutting tool can access specific regions without interference. The head radius should be larger than the min tool radius. 2. *Tool Length*: The cutting tool length is measured from the tip to the drill chuck. 3. *Min Tool Radius*: The radius of the cutting tool. This input controls the radii that can occur in the results. 4. *Approach Directions*: These are the possible milling directions. If left blank, the default directions are +X, -X, +Y, -Y, +Z, and -Z. You can select multiple approach directions for one milling configuration to allow for multi-sided machining. **Common uses:** * Topology Optimization setup when manufactured by 3-Axis CNC Mills **Tips:** * To fix the *Smallest dimension of tool is larger than domain's largest side* error, decrease the Tool dimensions (Length or Diameter). * To fix the *Tool length is so small that both head and tip starts at the same distance* error, increase the Tool Length input. ## Example File Download Example: [3-Axis Milling Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Milling_Constraint.ntop) ![3-Axis Milling Constraint](https://storage.googleapis.com/files-learn/static/ReleaseImages/4.25/3_axis.png) *** Imposes a 3-axis milling constraint on a topology optimization. ### Inputs | Name | Type | Description | | - | - | - | | Head radius | [Scalar](../../../../block-documentation/types/scalar) | The radius of a half sphere used to represent a simplified drill chuck. This will be used to ensure the cutting tool can access specific regions without interference. The head radius should be larger than the min tool radius. | | Tool length | [Scalar](../../../../block-documentation/types/scalar) | The length of the cutting tool. This is measured from the tip of the cutting tool to the drill chuck. | | Min tool radius | [Scalar](../../../../block-documentation/types/scalar) | The radius of the cutting tool. This input will control the radii that can occur in the results. | | Approach directions | [Vector List](../../../../block-documentation/types/vector) | The possible milling directions. If left blank, the default directions are +x, -x, +y, -y, +z, -z. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # 5-Axis Milling Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/5-axis-milling-constraint ## About this Block **What it does:** The **5-Axis Milling Constraint** block enables 5-axis milling constraints on Topology Optimization. The constraint ensures the Topology Optimization result can be manufactured without contact between the tool head and the design domain. It ensures no features are generated smaller than the smallest cutting tool would allow. ![Milling Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/milling_constraints.png) If you would like to visualize these inputs in your nTop notebook, download this [CB - Tool Aid Block](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/CB_Tool_Aid.ntop) and import it into your notebook. The block has the following inputs: 1. *Head Radius*: The radius of a half sphere used to represent a simplified drill chuck. This will ensure the cutting tool can access specific regions without interference. The head radius should be larger than the min tool radius. 2. *Tool Length*: The cutting tool length is measured from the tip to the drill chuck. 3. *Min Tool Radius*: The radius of the cutting tool. This input controls the radii that can occur in the results. **Tips:** * To fix the *Smallest dimension of tool is larger than domain's largest side* error, decrease the Tool dimensions (Length or Diameter). * To fix the *Tool length is so small that both head and tip starts at the same distance* error, increase the Tool Length input. ## Example File Download Example: [5-Axis Milling Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Milling_Constraint.ntop) ![5-Axis Milling Constraint](https://storage.googleapis.com/files-learn/static/ReleaseImages/4.25/5_axis.png) *** Imposes a 5-axis milling constraint on a topology optimization. ### Inputs | Name | Type | Description | | - | - | - | | Head radius | [Scalar](../../../../block-documentation/types/scalar) | The radius of a half sphere used to represent a simplified drill chuck. This will be used to ensure the cutting tool can access specific regions without interference. The head radius should be larger than the min tool radius. | | Tool length | [Scalar](../../../../block-documentation/types/scalar) | The length of the cutting tool. This is measured from the tip of the cutting tool to the drill chuck. | | Min tool radius | [Scalar](../../../../block-documentation/types/scalar) | The radius of the cutting tool. This input will control the radii that can occur in the results. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Demold Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/demold-constraint ## About this Block **What it does:** The **Demold Constraint** block ensures the manufacturability of the final results for castings or plastic injection molding parts. The block prevents overhangs or undercuts based on a defined Demold Direction. You can use this block for a single draw, a split draw with a variable surface, or a split draw with a known surface. **Common uses:** * Topology Optimization for casting **Tips:** * You cannot use this with the **Field Optimization** block; it is only for **Topology Optimization** ## Example File As stated above, you can use this block in three possible manufacturing scenarios. Below are examples of each, with information on which inputs to use based on your situation. The example file at the bottom contains all three setup examples. Single Draw: * Define the Demold Direction * Uncheck the Auto Split Surface * Do not define a region ![Single Draw](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Single_Draw_Example.jpg) Split Draw with a Variable Surface: * Define the Demold Direction * Check the Auto Split Surface * If you don't want the constraint to be applied to the entire design space, specify a region ![Split Draw Variable Surface](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Split_Draw_Variable_Surface_Example.jpg) Split Draw with a Known Surface: * Use 2 **Demold Constraint** blocks, 1 for each half of the body * Uncheck the Auto Split Surface * Separate the design space using a parting surface (**FE Region By Body** or similar) ![Split Draw Known Surface](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Split_Draw_Known_Surface_Example.jpg) Download Example: [Demold Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Demold_Constraint_Example.ntop) *** Define a demold constraint for a topology optimization process. The constraint ensures no undercuts in the optimized result, enabling release of the mold in the specified demold direction. ### Inputs | Name | Type | Description | | - | - | - | | Demold direction | [Vector](../../../../block-documentation/types/vector) | The mold pull direction. | | Auto split surface | [Bool](../../../../block-documentation/types/bool) | Optimize the parting surface. If selected, the optimization will result in a part intended for a split mold manufacturing process, where the mold splitting surface will be optimized during the topology optimization. If unselected, the resulting part will assume a single draw mold. | | Region | [Region](../../../../block-documentation/types/region) | Region where the demold constraint is applied. If left blank, the constraint will be applied to the entire model. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Design Response Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/design-response-constraint > **[Design Response, Optimization Constraint Enum, Scalar](#design-response-optimization-constraint-enum-scalar)** > **[Design Response, Optimization Constraint Enum, Scalar, 1.1.0](#design-response-optimization-constraint-enum-scalar-110)** *** ## Design Response, Optimization Constraint Enum, Scalar Formulate an optimization constraint based on a Design Response. ### Inputs | Name | Type | Description | | - | - | - | | Response | [Design Response](../../../../block-documentation/types/design-response) | Design response to be constrained. | | Type | Optimization Constraint Enum | Constraint type. | | Value | [Scalar](../../../../block-documentation/types/scalar) | Constraint value. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | *** ## Design Response, Optimization Constraint Enum, Scalar, 1.1.0 Formulate an optimization constraint based on a Design Response. ### Inputs | Name | Type | Description | | - | - | - | | Response | [Design Response](../../../../block-documentation/types/design-response) | Design response to be constrained. | | Type | Optimization Constraint Enum | Constraint type. | | Value | [Scalar](../../../../block-documentation/types/scalar) | Constraint value. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Displacement Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/displacement-constraint > **[Scalar, Direction Component Enum, Boundary, Load case](#scalar-direction-component-enum-boundary-load-case)** > **[Scalar, Direction Component Enum, Boundary, Load case, 1.1.0](#scalar-direction-component-enum-boundary-load-case-110)** *** ## Scalar, Direction Component Enum, Boundary, Load case Define a displacement constraint for a topology optimization process. ### Inputs | Name | Type | Description | | - | - | - | | Displacement | [Scalar](../../../../block-documentation/types/scalar) | The displacement limit. The magnitude of the displacement will be less than or equal to this value. | | Direction | Direction Component Enum | The direction which the constraint applies to. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The FE Boundary that defines the nodes where the displacement response should be measured. Any node in this boundary should displace less than or equal to the specified value. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The load case for the displacement constraint. A load case is defined as a list of boundary conditions. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | *** ## Scalar, Direction Component Enum, Boundary, Load case, 1.1.0 Define a displacement constraint for a topology optimization process. ### Inputs | Name | Type | Description | | - | - | - | | Displacement | [Scalar](../../../../block-documentation/types/scalar) | The displacement limit. The magnitude of the displacement will be less than or equal to this value. | | Direction | Direction Component Enum | The direction which the constraint applies to. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The FE Boundary that defines the nodes where the displacement response should be measured. Any node in this boundary should displace less than or equal to the specified value. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The load case for the displacement constraint. A load case is defined as a list of boundary conditions. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Extrusion Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/extrusion-constraint > **[Curve (old)](#curve-old)** > **[Curve (old), 1.1.0](#curve-old-110)** > **[Curve, 5.20.0](#curve-5200)** *** ## About this Block The Extrusion Constraint block serves as a Topology Optimization constraint, which causes the TopOpt result to have a consistent profile along the direction of a specified curve. The curve input should start and end outside of the domain of the volume mesh used in the TopOpt. The curve input can be curved or straight, but the Line Segment block can not be used as input. Instead, use a Curve through Control Points block, and place the start and end points of the Line Segment into the curve’s point list. When using an extrusion constraint, it is suggested to set the boundary penalty to 0 in the topology optimization block. ## Example File Download Example: [Extrusion Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExtrusionConstraint.ntop) *In the example file, a Topology Optimization using an extrusion constraint is performed. The extrusion follows a straight line.* ![Extrusion Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ExtrusionConstraint.jpg) *** ## Curve (old) Define a geometric extrusion constraint to be enforced in the optimization result. The result will be a 2.5D design of the face along the provided curve. The boundary conditions are not restricted to the 2D domain. Note that for best results using extrusion constraint, it is suggested that the Boundary penalty be set to 0. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve (old)](../../../../block-documentation/types/curve-old) | Guide curve. The curve should follow the full design and must remain perpendicular to the design. Please provide a curve that starts at or before the beginning of the design, and ends at or after the end of the design. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | *** ## Curve (old), 1.1.0 Define a geometric extrusion constraint to be enforced in the optimization result. The result will be a 2.5D design of the face along the provided curve. The boundary conditions are not restricted to the 2D domain. Note that for best results using extrusion constraint, it is suggested that the Boundary penalty be set to 0. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve (old)](../../../../block-documentation/types/curve-old) | Guide curve. The curve should follow the full design and must remain perpendicular to the design. Please provide a curve that starts at or before the beginning of the design, and ends at or after the end of the design. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | *** ## Curve, 5.20.0 Define a geometric extrusion constraint to be enforced in the optimization result. The result will be a 2.5D design of the face along the provided curve. The boundary conditions are not restricted to the 2D domain. Note that for best results using extrusion constraint, it is suggested that the Boundary penalty be set to 0. ### Inputs | Name | Type | Description | | - | - | - | | Curve | [Curve](../../../../block-documentation/types/curve) | Guide curve. The curve should follow the full design and must remain perpendicular to the design. Please provide a curve that starts at or before the beginning of the design, and ends at or after the end of the design. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Max Feature Size Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/max-feature-size-constraint ## About this Block The **Max Feature Size Constraint** block can be used as a constraint in the **Topology Optimization** block to maintain the feature sizes of the optimized design space below a user-defined value. This block can be used with the **Min Feature Size Constraint** to enforce an upper and lower limit to the feature sizes generated from **Topology Optimization**. ![Max Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MaxFS3.png) ![Max Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MaxFS.png) This block can be added to an Optimization Constraint List to enforce the desired feature size specification on the design space. Here is a summary of the recommendations described in detail in the **Min Feature Size Constraint** section of the documentation that applies to the **Max Feature Size Constraint**: * Use the **Remap Constraint** to enforce symmetry in the **Topology Optimization** * Use an element edge length that is at least 1/3rd the desired feature size * When using the **Passive Region Constraint**, limit the thickness of the passive region to ½ the feature size specification **Max Feature Size Convergence** | | | | - | - | | ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MaxFS2.png) | ![](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MaxFS1.png) | The progress of the **Max Feature Size Constraint** can be tracked from the Display panel in the **Topology Optimization** block (similar to the **Min Feature Size Constraint**). The Min/Max Projection Beta (image on the left) tracks our main constraint filter parameter, which is updated through the course of the optimization to not over-constrain the optimization right from the start. It is recommended to set the *Max Iterations* to a value that ensures the blue line meets the yellow dotted line. This is typically achieved at iterations that are greater than the default of 200 iterations in the block. It is recommended to set this parameter to at least 250 iterations when using the Feature Size Constraints. The image on the right shows another convergence plot for the **Max Feature Size Constraint** that can be used to track constraint satisfaction. Since the **Max Feature Size Constraint** is an inequality-based constraint that tracks the features sizes at each point in the design space, the value indicated in the chart should always be below 1 (the yellow dotted line) to obey the feature size input. ## Example Files Download Examples: [Simple Bracket Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SimpleBracket.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SimpleBracket.png) [Swing Arm Extrusion](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SwingArmExtrusion.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SwingArm.png) *** Define a constraint on the maximum feature size. ### Inputs | Name | Type | Description | | - | - | - | | Feature size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The desired maximum length of any feature in the final design. This means that a sphere with a diameter specified by this input should not fit inside any part of the final design. | | Region | [Region](../../../../block-documentation/types/region) | Region where the maximum feature size will be enforced. If not provided, then the response will be enforced for the entire model. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Min Feature Size Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/min-feature-size-constraint ## About this Block The **Min Feature Size Constraint** block can be used as a constraint in the **Topology Optimization** block to maintain the feature sizes of the optimized design space above a user-defined value. This block is typically used to correct feature disconnections in the optimization result and to enforce a minimum feature size limit to the design space based on requirements from a manufacturing process. ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS.png) Like any Topology Optimization constraint, this block can be added to an Optimization Constraint List to enforce the desired feature size specification on the design space. While using the **Min Feature Size Constraint** block, there are a few factors to consider to ensure success while using this constraint that have been described in the following sections. ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_2.png) **Symmetry** The **Min Feature Size Constraint** block can be used combined with a symmetry constraint to ensure a symmetric result about a plane (or a list of orthogonal planes) in the **Topology Optimization** block. It is recommended that the **Remap Constraint** block is used to apply the symmetry restriction instead of the **Planar Symmetry Constraint** block for the following reasons : * The **Remap Constraint** is mesh-independent so that users can apply this constraint to non-symmetric meshes * The optimization algorithm incorporates geometric constraints such as remap, symmetry, and extrusion as design filters. Unlike most filters, the **Remap Constraint** is applied as the final step in the filtering sequence. This prevents the amplification of any discrepancies through these projection filters used for the **Min Feature Size Constraint**, resulting in more accurate results ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_3.png) In the above image, the **Remap Constraint** inputs enforce symmetry about the XZ-plane. For more information, please refer to the [support article](https://support.ntop.com/hc/en-us/articles/14262495285651) on the topic. This recommendation applies to the **Max Feature Size Constraint** as well. **Element Size Recommendation** ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_4.png) While using the **Min Feature Size Constraint** or the **Max Feature Size Constraint**, it is recommended that the mesh edge length is at least 1/3rd the size of the desired feature size specification. In case this condition is not met, users are notified through a warning message in the log panel as indicated in the above image. **Iterations for constraint convergence** ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_5.png) Setting the *Max Iterations* to a value that ensures the blue line meets the yellow dotted line is recommended. This is typically achieved at iterations greater than the default of 200 iterations in the block. It is recommended to set this parameter to at least 250 iterations when using the Feature Size Constraints. Like all other optimization objectives and constraints, the progress of the **Min Feature Size Constraint** can be tracked from the Display tab in the Right Panel in the Topology Optimization block. The Min/Max Projection Beta tracks our main constraint filter parameter, updated throughout the optimization to not overconstrain the optimization right from the start. **Extrusion with the Remap Constraint** ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_6.png) A popular application of the Remap Constraint is to generate extrudable shapes in a user-defined direction (or multiple directions). This technique is described in detail in this [support article](https://support.ntop.com/hc/en-us/articles/14262495285651) in the *Remap Constraint for Extrusion and Remap Constraint for Localized Ribbing* section. When using the generalized form of the extrusion constraint (as indicated in the above image) with the **Min Feature Size Constraint**, it is recommended to embed the extrusion surface at least one element (element edge length) deep inside the design space (pictured below). The **Min Feature Size Constraint** tends to smoothen or "round" the design space at the boundaries. Suppose the surface used as reference is on the boundary, the final shape may present large transition areas between void and solid material or be incorrectly formed (with disconnections or thin connections). This recommendation also applies to scenarios where the Boundary Penalty input in Topology Optimization is set to any value besides 0.0. ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_7.png) **Passive Regions** ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_8.png) When defining a **Passive Region Constraint** in a **Topology Optimization** with the **Min Feature Size Constraint**, limiting the passive region thickness to ½ the feature size specification is recommended. Our solution already expands passive regions to achieve the defined minimum feature size. Because of that, when defining thick passive regions, the final solutions might present unexpected oversized regions. When this undesired situation happens with the **Max Feature Size Constraint** (using similar feature size inputs), it might lead to convergence problems since the bulged passive region may not respect the chosen feature size. **Domain Size** ![Min Feature Size](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/MinFS_9.png) If the feature size input in the **Min Feature Size Constraint** exceeds the domain size, the **Topology Optimization** may not yield satisfactory results. For instance, when optimizing the domain described in the above image, the feature size input should be less than the thickness of the domain (shown by the pink arrows). ## Example Files Download Examples: [Simple Bracket Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SimpleBracket.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SimpleBracket.png) [Swing Arm Extrusion](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SwingArmExtrusion.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/SwingArm.png) *** Define a constraint on the minimum feature size. ### Inputs | Name | Type | Description | | - | - | - | | Feature size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The desired minimum length of any feature in the final design. This means that a sphere with a diameter specified by this input should fit inside any part of the final design. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Natural Frequency Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/natural-frequency-constraint Define a natural frequency constraint for optimization to generate shapes with natural frequencies that lie inside or outside the specified range. ### Inputs | Name | Type | Description | | - | - | - | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Number of modes that will be searched for and included in the constraint computation. | | Band type | Inside or Outside Enum | This defines whether the natural frequency of the optimized shape lies inside or outside the range defined by the Min Frequency and Max Frequency inputs. | | Min frequency | [Scalar](../../../../block-documentation/types/scalar) | The lower bound of the natural frequency range. | | Max frequency | [Scalar](../../../../block-documentation/types/scalar) | The upper bound of the natural frequency range. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | Load case for the constraint. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Overhang Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/overhang-constraint > **[Vector, Scalar, Support boundaries, Bool, Bool](#vector-scalar-support-boundaries-bool-bool)** > **[Vector, Scalar, Support boundaries, Bool, Bool, 1.1.0](#vector-scalar-support-boundaries-bool-bool-110)** *** ## Vector, Scalar, Support boundaries, Bool, Bool Defines a maximum overhang constraint for the topology optimization process. The constraint precludes designs with an inclination angle below a specified amount with respect to the build plate. ### Inputs | Name | Type | Description | | - | - | - | | Build direction | [Vector](../../../../block-documentation/types/vector) | Build direction and normal to the build plate. | | Max angle | [Scalar](../../../../block-documentation/types/scalar) | Max overhang (inclination) angle of material with respect to the build plate. | | Support boundaries | [Boundary List](../../../../block-documentation/types/boundary) | Support boundaries material can be placed onto. | | Auto-detect support | [Bool](../../../../block-documentation/types/bool) | Option to automatically detect boundary faces of the design space that can provide support for a given print direction and overhang angle. | | Include passive | [Bool](../../../../block-documentation/types/bool) | Option to include passive regions in the overhang constraint calculation. If selected, the optimizer will try to add the necessary support to the passive regions as dictated by the Max angle input. If not selected, the optimizer will ignore the passive regions in the overhang constraint. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | *** ## Vector, Scalar, Support boundaries, Bool, Bool, 1.1.0 Defines a maximum overhang constraint for the topology optimization process. The constraint precludes designs with an inclination angle below a specified amount with respect to the build plate. ### Inputs | Name | Type | Description | | - | - | - | | Build direction | [Vector](../../../../block-documentation/types/vector) | Build direction and normal to the build plate. | | Max angle | [Scalar](../../../../block-documentation/types/scalar) | Max overhang (inclination) angle of material with respect to the build plate. | | Support boundaries | [Boundary List](../../../../block-documentation/types/boundary) | Support boundaries material can be placed onto. | | Auto-detect support | [Bool](../../../../block-documentation/types/bool) | Option to automatically detect boundary faces of the design space that can provide support for a given print direction and overhang angle. | | Include passive | [Bool](../../../../block-documentation/types/bool) | Option to include passive regions in the overhang constraint calculation. If selected, the optimizer will try to add the necessary support to the passive regions as dictated by the Max angle input. If not selected, the optimizer will ignore the passive regions in the overhang constraint. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Passive Region Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/passive-region-constraint Define an FE Region to maintain unaltered during the optimization process. ### Inputs | Name | Type | Description | | - | - | - | | Region | [Region](../../../../block-documentation/types/region) | Region to be frozen. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Pattern Repetition Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/pattern-repetition-constraint Constrain the topology optimization process to maintain a repeated pattern defined by a Cell Map. ### Inputs | Name | Type | Description | | - | - | - | | Cell map | [Cell Map](../../../../block-documentation/types/cell-map) | A cell map that defines the repeated pattern. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Planar Symmetry Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/planar-symmetry-constraint ## About this Block Input a Plane to create a symmetry constraint. The symmetry works by connecting half of the design to have the same density values as the other half. Each dependent element has an independent element on the other side. This reduces the optimization domain to only half of the design. However, if the design is not 100% symmetric you may have some issues. An element from the dependent side may try to find a corresponding element on the independent side, unsuccessfully. In the example, there’s a simple cube with the left side having fewer elements than the right side. If the left side is independent, that means that some elements of the right side will not find matching elements on the left side. But, if we reverse the normal of the plane, the dependent/independent sides switch. So, all elements of the left side have a matching element on the right side, so the symmetry will work. ## Example File Download Example: [Planar Symmetry Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/PlanarSymmetryConstraint.ntop) *The file uses a Planar Symmetry constraint to run a TopOpt. It showcases how flipping the Normal of the Plane may cause an error if the part isn't perfectly symmetrical.* ![Planar Symmetry Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/PlanarSymmetryConstraint.jpg) ![Planar Symmetry Constraint 2](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/PlanarSymmetryConstraint2.png) *** Specify planar symmetry for a topology optimization process. ### Inputs | Name | Type | Description | | - | - | - | | Planes | [Plane List](../../../../block-documentation/types/plane) | Symmetry planes. The provided planes should be orthogonal and placed at the centroid of the finite element model. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Remap Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/remap-constraint ## About this Block The **Remap Constraint** block can be used to generate novel geometry with **Topology Optimization** in nTop. It enforces geometry-based constraints on the design space by leveraging nTop's unique ability to manipulate scalar and vector fields. The block is named after the [Remap Field](/block-documentation/blocks/fields/remap/remap-field.html) block that follows a similar technique to perform geometric operations on implicit bodies like shape transformation, mirroring, sectioning, patterning, surface extrudes and many more applications. This block constrains the density field of the design volume in an optimization problem using geometric projections defined as remap inputs. Users can impose geometry-based constraints such as extrusion, pattern repetition and symmetry, combine these constraints or invent a novel constraint that results in an optimized geometry that is unique to nTop! To learn more about this block, check out this [support article](https://support.ntopology.com/hc/en-us/articles/14262495285651) published in our knowledge base. **Tips:** * Error message : "Remap should be contained within the design space." : When you encounter this error, it indicates that the remap component inputs do not intersect the design space of the optimization problem. For example, let us consider this box with a hole. If the remap constraint block is used to enforce an extrusion constraint (like Example 2 or 3) in the z direction (normal to the xy-plane), we'd typically set the z-component of the remap input to a scalar value that intersects the part (-5\ **[Scalar, Load case](#scalar-load-case)** > **[Scalar, Load case, 1.1.0](#scalar-load-case-110)** *** ## Scalar, Load case Define a stress constraint for a topology optimization process. ### Inputs | Name | Type | Description | | - | - | - | | Stress limit | [Scalar](../../../../block-documentation/types/scalar) | The stress limit. The Von Mises stress will be less than or equal to this value. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The load case for the stress constraint. A load case is defined as a list of boundary conditions. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | *** ## Scalar, Load case, 1.1.0 Define a stress constraint for a topology optimization process. ### Inputs | Name | Type | Description | | - | - | - | | Stress limit | [Scalar](../../../../block-documentation/types/scalar) | The stress limit. The Von Mises stress will be less than or equal to this value. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The load case for the stress constraint. A load case is defined as a list of boundary conditions. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Volume Fraction Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/constraints/volume-fraction-constraint > **[Scalar](#scalar)** > **[Scalar, 1.1.0](#scalar-110)** *** ## Scalar Define a volume fraction constraint for topology optimization. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | The required volume fraction between 0 and 1. The resulting volume fraction should be less than or equal to this value. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | *** ## Scalar, 1.1.0 Define a volume fraction constraint for topology optimization. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | The required volume fraction between 0 and 1. The resulting volume fraction should be less than or equal to this value. | ### Outputs | Type | | - | | [Design Constraint](../../../../block-documentation/types/design-constraint) | # Exchange Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/exchange > **[Import Topology Optimization Result](../../../block-documentation/blocks/optimization/exchange/import-topology-optimization-result)** > **[Export Topology Optimization History](../../../block-documentation/blocks/optimization/exchange/export-topology-optimization-history)** > **[Topology Optimization Density Point Map](../../../block-documentation/blocks/optimization/exchange/topology-optimization-density-point-map)** # Export Topology Optimization History Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/exchange/export-topology-optimization-history > **[Path, Topology Optimization Result](#path-topology-optimization-result)** > **[Path, Topology Optimization Result, 1.1.0](#path-topology-optimization-result-110)** *** ## Path, Topology Optimization Result Export the convergence history of a Topology Optimization result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Result | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | Result to extract convergence history from. | ### Outputs | Type | | - | | [Text File](../../../../block-documentation/types/text-file) | *** ## Path, Topology Optimization Result, 1.1.0 Export the convergence history of a Topology Optimization result. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Result | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | Result to extract convergence history from. | ### Outputs | Type | | - | | [Text File](../../../../block-documentation/types/text-file) | # Import Topology Optimization Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/exchange/import-topology-optimization-result Import Topology Optimization Result file from a supported format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Topology Optimization Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | # Topology Optimization Density Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/exchange/topology-optimization-density-point-map ## About this Block **What it does:** The **Topology Optimization Density Point Map** block creates a Scalar Point Map from a Topology Optimization that represents the TopOpt's density result. **Common uses:** * Can visualize density results from Topology Optimization. **Tips:** * The point map consists of all the nodal points from the Topology Optimization, and the density values associated with each of those points. These points and values are accessible in the properties of the Point Map. * The HUD can be used to change the Lower bound, Upper bound color palette and units as required. * The point map can be exported with the **Export Point Map** block. ## Example File Download Example: [Topology Optimization Density Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOpt_Density_Point_Map.ntop) ![Topology Optimization Density Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOpt_Density_Point_Map.png) *** Create a Scalar Point Map from the element densities resulting from a Topology Optimization.The centroid of each element defines the location of each point. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | The topology optimization result to extract the element densities from. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | # Field Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization > **[Field Optimization](../../../block-documentation/blocks/optimization/field-optimization/field-optimization)** > **[Parametric Voronoi Domain](../../../block-documentation/blocks/optimization/field-optimization/parametric-voronoi-domain)** > **[Parametric Lattice Domain](../../../block-documentation/blocks/optimization/field-optimization/parametric-lattice-domain)** > **[Parametric Shell Domain](../../../block-documentation/blocks/optimization/field-optimization/parametric-shell-domain)** > **[Parametric Shell-Infill Domain](../../../block-documentation/blocks/optimization/field-optimization/parametric-shell-infill-domain)** > **[Parametric FE Model](../../../block-documentation/blocks/optimization/field-optimization/parametric-fe-model)** > **[Implicit Body from Field Optimization](../../../block-documentation/blocks/optimization/field-optimization/implicit-body-from-field-optimization)** # Field Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization/field-optimization > **[Parametric FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Integer, Scalar](#parametric-fe-model-design-objective-constraints-integer-scalar-scalar-integer-scalar)** > **[Parametric FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Integer, Scalar, 1.1.0](#parametric-fe-model-design-objective-constraints-integer-scalar-scalar-integer-scalar-110)** > **[Parametric FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Integer, Scalar, 5.23.0](#parametric-fe-model-design-objective-constraints-integer-scalar-scalar-integer-scalar-5230)** *** ## About this Block The **Field Optimization** block performs a numerical design operation that optimizes design parameters within the bounds of a design space based on a set of objectives and constraints. The block allows you to optimize values of field based design parameters that best achieve the desired objective(s) while considering complex and multivariate loading conditions and design constraints. nTop's field optimization algorithm uses Custom Parameterized Material Models. Field optimization setup involves choosing objectives and constraints for your optimization. The objective is a list of one or more Design Responses you will minimize or maximize in the optimization. A few examples of design responses you could have are: * The volume fraction of the original design space the part takes up (Volume Fraction) * Stiffness under given loading conditions (Compliance) * Stress or Displacement You should pair the **Optimization Objective** with **Optimization Constraints** that give rules to the optimization. Without constraints, the optimization will probably result in parameter values at their maximum/minimum bounds. Constraints can include upper or lower limits on other Design Responses and others. An outline of the logic of a field optimization process is below. ![Field Optimization Logic](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/foflow.png) The **Field Optimization** block takes in a **Parametric FE Model**, an objective, a constraints list, and a series of values that control the field optimization algorithm. The **Parametric FE Model** *must* contain one or more Parametric FE Domains and can include FE Domains as well (FE Domains will remain solid). Each Parametric FE Domain will contain the design space, design parameters, and bounds of the optimization that the underlying material model is bounded by. An explanation of the algorithmic controls for field optimization is below. * *Max iterations* - field optimization is an iterative process that updates the topology until it reaches the objective and satisfies the constraints. If the process takes a long time, you can set a maximum limit to the number of iterations attempted. This input allows you to limit the max computation time expended on the field optimization process. * *Min objective change* - The objective function quantifies how well the topology achieves its objective(s). When the relative change between iterations of the objective function value falls below this number, the field optimization will be considered complete (as long as the constraints are satisfied). Decreasing this number will result in a more accurate field optimization but a longer computation time. * *Min variable change* - This input is a convergence threshold, as described above, but for the relative change of the design variable values from one iteration to the next. Decreasing this number will result in a more optimized result but a longer computation time. * *Save increment* - This input controls the amount of intermediate data stored, and is accessible after the field optimization completes. You can increase the number to lower the file size of a completed field optimization file and increase computational efficiency. The default value of 5 will save results every fifth increment, whereas a result of 0 will save only the first and last increment. For any value N greater than 1, it will save results for every Nth increment. The last iteration will always be saved. * *Move limit* - a value between 0 and 1 defining how much a design parameter's value may change between iterations as a percentage of the design variable's range. During the field optimization process, a HUD appears in the Viewport with several options for visualizing the results. **Tip:** If you cannot see anything in the Viewport, check if the **Field Optimization** block is a variable. Right-click the variable and select *Remove Variable Contents* to check the Views below. * Implicit View - allows you to view the resulting geometry. Under the 'Render as needed' drop-down, each iteration will render when you move the slider bar. Use the 'Render all' option in the drop-down to render more than 1 iteration at a time to view the progression of the field optimization results easily. You can also use Section Cut to view inside your Implicit body. ![Implicit View from Field Optimization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/foimp.jpg) * Property Fields - allows you to view the mechanical properties of the resulting structure across the design space. You can display the results across the original mesh and render them in real time for any saved iteration. * State Fields - allows you to view values of the design parameters across the design space. You can display the results across the original mesh and render them in real time for any saved iteration. Under the Display tab in the Right Panel, there are convergence plots showing how numerical measurements of the design's objective and constraint(s) changed over the iterations of the process.You can click on the Top Right corner of the plot to view the plot in the Bottom Panel. ![Convergence Plots from Field Optimization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fo1.jpg) You can access the result of the Field Optimization as Implicit Body using the **Implicit Body from Field Optimization** block. ![Implicit Body from Field Optimization Results](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fo2.jpg) **Common uses:** * Periodic Lattice Optimization * Voronoi Lattice Optimization * Variable Shell Optimization * Variable Shell-Infill Optimization ## Example File Download Example: [Field Optimization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Variable_Shell.ntop) ![Field Optimization Result](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/variable_shell.jpg) *** ## Parametric FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Integer, Scalar Perform a field optimization on a Parametric FE Model. ### Inputs | Name | Type | Description | | - | - | - | | Model | [Parametric FE Model](../../../../block-documentation/types/parametric-fe-model) | The parametric finite element model that defines the design space. | | Objective | [Design Objective](../../../../block-documentation/types/design-objective) | The objective function for the optimization process. | | Constraints | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The constraints to satisfy during the optimization process. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed during the optimization process. | | Min objective change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the objective function between consecutive iterations to consider the optimization process converged. Constraints must be satisfied in addition to this criteria. | | Min variable change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the variable fields between consecutive iterations to consider the optimization process converged. The process will terminate when the largest relative variable change is below this threshold and all the constraints are satisfied. | | Save increment | [Integer](../../../../block-documentation/types/integer) | Controls the amount of data that is accessible after the optimization is complete. A value of 0 will only save the first and last iteration, a value of 1 will save every iteration, and values N greater than 1 will save every N iterations. Note that this input has significant impact on the file size and runtime of the optimization process. | | Move limit | [Scalar](../../../../block-documentation/types/scalar) | A scalar value between 0 and 1, which sets the maximum update to the design variables per iteration as a percentage of the design variable range: Max variable update = Move limit \* (Variable upper bound - Variable lower bound). A smaller value may increase stability at the cost of a reduced convergence rate. If left unspecified, an internal heuristic is used to determine an appropriate value for the given problem setup. | ### Outputs | Type | | - | | [Field Optimization Result](../../../../block-documentation/types/field-optimization-result) | *** ## Parametric FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Integer, Scalar, 1.1.0 Perform a field optimization on a Parametric FE Model. ### Inputs | Name | Type | Description | | - | - | - | | Model | [Parametric FE Model](../../../../block-documentation/types/parametric-fe-model) | The parametric finite element model that defines the design space. | | Objective | [Design Objective](../../../../block-documentation/types/design-objective) | The objective function for the optimization process. | | Constraints | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The constraints to satisfy during the optimization process. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed during the optimization process. | | Min objective change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the objective function between consecutive iterations to consider the optimization process converged. Constraints must be satisfied in addition to this criteria. | | Min variable change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the variable fields between consecutive iterations to consider the optimization process converged. The process will terminate when the largest relative variable change is below this threshold and all the constraints are satisfied. | | Save increment | [Integer](../../../../block-documentation/types/integer) | Controls the amount of data that is accessible after the optimization is complete. A value of 0 will only save the first and last iteration, a value of 1 will save every iteration, and values N greater than 1 will save every N iterations. Note that this input has significant impact on the file size and runtime of the optimization process. | | Move limit | [Scalar](../../../../block-documentation/types/scalar) | A scalar value between 0 and 1, which sets the maximum update to the design variables per iteration as a percentage of the design variable range: Max variable update = Move limit \* (Variable upper bound - Variable lower bound). A smaller value may increase stability at the cost of a reduced convergence rate. If left unspecified, an internal heuristic is used to determine an appropriate value for the given problem setup. | ### Outputs | Type | | - | | [Field Optimization Result](../../../../block-documentation/types/field-optimization-result) | *** ## Parametric FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Integer, Scalar, 5.23.0 Perform a field optimization on a Parametric FE Model. ### Inputs | Name | Type | Description | | - | - | - | | Model | [Parametric FE Model](../../../../block-documentation/types/parametric-fe-model) | The parametric finite element model that defines the design space. | | Objective | [Design Objective](../../../../block-documentation/types/design-objective) | The objective function for the optimization process. | | Constraints | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The constraints to satisfy during the optimization process. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed during the optimization process. | | Min objective change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the objective function between consecutive iterations to consider the optimization process converged. Constraints must be satisfied in addition to this criteria. | | Min variable change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the variable fields between consecutive iterations to consider the optimization process converged. The process will terminate when the largest relative variable change is below this threshold and all the constraints are satisfied. | | Save increment | [Integer](../../../../block-documentation/types/integer) | Controls the amount of data that is accessible after the optimization is complete. A value of 0 will only save the first and last iteration, a value of 1 will save every iteration, and values N greater than 1 will save every N iterations. Note that this input has significant impact on the file size and runtime of the optimization process. | | Move limit | [Scalar](../../../../block-documentation/types/scalar) | A scalar value between 0 and 1, which sets the maximum update to the design variables per iteration as a percentage of the design variable range: Max variable update = Move limit \* (Variable upper bound - Variable lower bound). A smaller value may increase stability at the cost of a reduced convergence rate. If left unspecified, an internal heuristic is used to determine an appropriate value for the given problem setup. | ### Outputs | Type | | - | | [Field Optimization Result](../../../../block-documentation/types/field-optimization-result) | # Implicit Body from Field Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization/implicit-body-from-field-optimization ## About this Block The **Implicit Body from Field Optimization** block is used in field optimization to extract the Implicit Body from Field Optimization Result. *** Extract an Implicit Body from a Field Optimization result. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Field Optimization Result](../../../../block-documentation/types/field-optimization-result) | Result to extract surface from. | | Iteration | [Integer](../../../../block-documentation/types/integer) | Iteration number which the Implicit Body will be extracted from. If not provided, the last iteration will be used. | | Domain index | [Integer](../../../../block-documentation/types/integer) | Domain index which the Implicit Body will be extracted from. If not provided, the first Domain will be used. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Parametric FE Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization/parametric-fe-model ## About this Block The **Parametric FE Model** block is used in field optimization to optimize one or more Parametric FE Components. The **Parametric FE Model** works similar to the [Simulation Model](/block-documentation/blocks/structures/model/simulation-model.html) block; however, it requires one or more FE domains to be a Parametric FE Domain. **Common uses:** * This block is used as an input to **Field Optimization** block **Tips:** * If you want a solid domain that is not optimized during the field optimization process, then a Solid Domain can be placed in the Parametric FE Domains list. * **Note:** The Solid Domain will not be "optimized" but will act as a solid passive region. * Each Parametric FE Domain has one FE Mesh and at least one FE Attribute. * A Parametric FE Model does not need a connector if only one FE Domain exists. * A **Parametric FE Domain** block can auto convert (called autocast) to a **Parametric FE Model** when it is used as an input that requires a **Parametric FE Model**. This is useful for single domain setups. *** Combine a list of Parametric FE Domains and corresponding Connectors into a Parametric FE Model. The block performs checks to determine whether all objects are restrained properly. ### Inputs | Name | Type | Description | | - | - | - | | Domains | [Parametric FE Domain List](../../../../block-documentation/types/parametric-fe-domain) | The Parametric FE Domains in the model. | | Connectors | [Connector List](../../../../block-documentation/types/connector) | The connectors and interactions in the model. | ### Outputs | Type | | - | | [Parametric FE Model](../../../../block-documentation/types/parametric-fe-model) | # Parametric Lattice Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization/parametric-lattice-domain > **[FE Mesh, Isotropic Material, Choice, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar, Scalar Field](#fe-mesh-isotropic-material-choice-choice-scalar-scalar-field-scalar-field-scalar-field-scalar-scalar-field)** > **[FE Mesh, Isotropic Material, Choice, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar, Scalar Field, 1.1.0](#fe-mesh-isotropic-material-choice-choice-scalar-scalar-field-scalar-field-scalar-field-scalar-scalar-field-110)** > **[FE Mesh, Isotropic Material, Choice, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar, Scalar Field, 1.2.0](#fe-mesh-isotropic-material-choice-choice-scalar-scalar-field-scalar-field-scalar-field-scalar-scalar-field-120)** *** ## About this Block The **Parametric Lattice Domain** block creates a Parametric FE Domain parameterized with design parameters for a variably thickened lattice. The block uses a FE Volume Mesh as an input mesh to define the design space. This block allows you to select any currently available lattice types with constant cell size. This block is an input to the **Parametric FE Model** block. After field optimization, the optimized values for the lattice thickness is applied to the design space. The **Parametric Lattice Domain** uses homogenization data from a discretized beam thickness/cell size ratio set. There are two available options for Boundary. The Conformal one will warp the outer cells to fill the design space, whereas the Trimmed option would trim the lattice to the design space. ![Boundary](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/lattice_boundary.jpg) **Common uses:** This block is an input to the **Parametric FE Model** block. Once the **Parametric Lattice Domain** is generated, a HUD appears in the Viewport with several options for visualizing the results. * Implicit View - allows you to view the resulting geometry. * Property Fields - allows a user to view the mechanical properties of the structure across the design space before performing field optimization. * State Fields - allows a user to view values of the design parameters across the design space before performing the field optimization. **Tips:** * Adjust the *Initial thickness* to view the geometry generated for the Upper/Lower bounds to ensure printability before running a field optimization. * Adjust the *Density threshold* to alter the lattice thickness and design space during optimization. The threshold value will remove less significant design space volume. A value of 0 will remove no design space and behave solely as a thickness optimization. A value of 0.3 will remove areas with less than a 30% volume fraction. * The maximum allowable lattice thickness is 1.5 times the cell size. This is limited due to the data collected, as most lattices reach solid volume before this threshold. ## Example File Download Example: [Parametric Lattice Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Variable_Lattice.ntop) ![Parametric Lattice Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Parametric_Lattice_Component.png) *** ## FE Mesh, Isotropic Material, Choice, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar, Scalar Field Create a Parametric FE Domain for a periodic lattice with the following design parameters: lattice thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the periodic lattice is comprised of. | | Unit cell | [Choice](../../../../block-documentation/types/choice) | The unit cell used to create the periodic lattice. | | Boundary behavior | [Choice](../../../../block-documentation/types/choice) | Determines how the periodic lattice will fill the design space. Conformal option will warp the outer cells to fill the design space. Trimmed option will trim the lattice to the design space. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The cell size for the periodic lattice. | | Min thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable lattice thickness. | | Max thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable lattice thickness. | | Initial thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial lattice thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Density threshold | [Scalar](../../../../block-documentation/types/scalar) | The threshold signifies a lower bound limit on lattice porosity (=relative density) under which the lattice will be eliminated from the design space. Maintaining a 0 threshold will fill the entire domain with a lattice in the optimization process. A threshold between zero and one will remove design boundary in parallel to the lattice optimization, removing less important material. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | *** ## FE Mesh, Isotropic Material, Choice, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar, Scalar Field, 1.1.0 Create a Parametric FE Domain for a periodic lattice with the following design parameters: lattice thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the periodic lattice is comprised of. | | Unit cell | [Choice](../../../../block-documentation/types/choice) | The unit cell used to create the periodic lattice. | | Boundary behavior | [Choice](../../../../block-documentation/types/choice) | Determines how the periodic lattice will fill the design space. Conformal option will warp the outer cells to fill the design space. Trimmed option will trim the lattice to the design space. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The cell size for the periodic lattice. | | Min thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable lattice thickness. | | Max thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable lattice thickness. | | Initial thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial lattice thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Density threshold | [Scalar](../../../../block-documentation/types/scalar) | The threshold signifies a lower bound limit on lattice porosity (=relative density) under which the lattice will be eliminated from the design space. Maintaining a 0 threshold will fill the entire domain with a lattice in the optimization process. A threshold between zero and one will remove design boundary in parallel to the lattice optimization, removing less important material. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | *** ## FE Mesh, Isotropic Material, Choice, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar, Scalar Field, 1.2.0 Create a Parametric FE Domain for a periodic lattice with the following design parameters: lattice thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the periodic lattice is comprised of. | | Unit cell | [Choice](../../../../block-documentation/types/choice) | The unit cell used to create the periodic lattice. | | Boundary behavior | [Choice](../../../../block-documentation/types/choice) | Determines how the periodic lattice will fill the design space. Conformal option will warp the outer cells to fill the design space. Trimmed option will trim the lattice to the design space. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The cell size for the periodic lattice. | | Min thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable lattice thickness. | | Max thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable lattice thickness. | | Initial thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial lattice thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Density threshold | [Scalar](../../../../block-documentation/types/scalar) | The threshold signifies a lower bound limit on lattice porosity (=relative density) under which the lattice will be eliminated from the design space. Maintaining a 0 threshold will fill the entire domain with a lattice in the optimization process. A threshold between zero and one will remove design boundary in parallel to the lattice optimization, removing less important material. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | # Parametric Shell Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization/parametric-shell-domain ## About this Block The **Parametric Shell Domain** block creates a Parametric FE Domain, which has been parameterized for variable shell thickness. The block uses a FE Volume Mesh as an input Mesh to define the design space. After field optimization, the optimized values for the shell thickness will apply to the design space. **Common uses:** This block is an input to the **Parametric FE Model** block. Once the **Parametric Lattice Domain** is generated, a HUD appears in the Viewport with several options for visualizing the results. * Implicit View - allows you to view the resulting geometry. * Property Fields - allows a user to view the mechanical properties of the structure across the design space before performing field optimization. * State Fields - allows a user to view values of the design parameters across the design space before performing the field optimization. **Tips:** * Determining the proper mesh size can be difficult for the FE mesh provided to the Parametric Shell Domain. * The input mesh must be very fine from the surface through the maximum shell thickness. * However, to increase the speed/efficiency of the optimization algorithm, elements outside of the "shell boundary" should be much larger. * The goal is for the total possible design region to contain as many elements as possible (giving up time for accuracy) and for all other areas to contain fewer elements. * As such, you should use a **Ramp** block in the Edge Length input to generate the FE Mesh. An example of meshing for shell optimization is below: * Taking advantage of the SDF of an implicit, we can ramp our mesh edge length using our ramp function. Some hints for appropriate inputs are below: * Scalar Field: Implicit body which we are meshing. The implicit body will allow us to use the signed distance field of the implicit in driving our mesh size. * In Min: Maximum shell thickness multiplied by -1. This input will create a divider between the maximum design space of the shell optimization and the void on the inside. * In Max: Maximum shell thickness multiplied by -1. Having the same input as "In Min," we can set up the field as a step function. * Out Min: Mesh size of shell design space (should be smaller than "Out Max"). The edge size should capture all the detail of the object and be suitable for running simulation. * Out Max: Mesh size of the inner void (should be more significant than "Out Min"). ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ramp_tip.jpg) * Adjust the *Initial Shell Thickness* to view the geometry generated for the upper/lower bounds to ensure printability before running a field optimization. ## Example File Download Example: [Parametric Shell Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Variable_Shell.ntop) ![Field Optimization Result](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/variable_shell.jpg) *** Create a Parametric FE Domain for a variable shell structure with the following design parameters: shell thickness (inward direction). ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | The material definition of the shell domain. | | Min shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable thickness for the shell. | | Max shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable thickness for the shell. | | Initial shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial shell thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | # Parametric Shell-Infill Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization/parametric-shell-infill-domain > **[FE Mesh, Isotropic Material, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field](#fe-mesh-isotropic-material-choice-scalar-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field)** > **[FE Mesh, Isotropic Material, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, 1.1.0](#fe-mesh-isotropic-material-choice-scalar-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-110)** > **[FE Mesh, Isotropic Material, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, 1.2.0](#fe-mesh-isotropic-material-choice-scalar-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-120)** *** ## About this Block The **Parametric Shell-Infill Domain** This block creates a parametric FE Domain, which has been parameterized with design parameters for a variable shell and infill. The block uses a FE Volume Mesh as an input mesh to define the design space. You can select any current lattices as the infill for this block. The block utilizes the same data set used in the **Parametric Lattice Domain** to determine the homogenized properties of the lattice infill. It also uses the same approach for shell optimization as the **Parametric Shell Domain** block. After field optimization, it will apply the optimized values for the shell and lattice thickness to the design space. **Common uses:** * This block is an input to the **Parametric FE Model** block. Once you generate the **Parametric Shell-Infill Domain**, a HUD appears in the Viewport with several options for visualizing the results. * Implicit View - allows you to view the resulting geometry. * Property Fields - allows a user to view the mechanical properties of the structure across the design space before performing field optimization. * State Fields - allows a user to view values of the design parameters across the design space before performing the field optimization. **Tips:** * Determining the proper mesh size can be difficult for the FE mesh provided to the Parametric Shell Domain. * The input mesh must be very fine from the surface through the maximum shell thickness. * However, to increase the speed/efficiency of the optimization algorithm, elements outside of the "shell boundary" should be much larger. * The goal is for the total possible design region to contain as many elements as possible (giving up time for accuracy) and for all other areas to contain fewer elements. * As such, you should use a **Ramp** block in the Edge Length input to generate the FE Mesh. An example of meshing for shell optimization is below: * Taking advantage of the SDF of an implicit, we can ramp our mesh edge length using our ramp function. Some hints for appropriate inputs are below: * Scalar field: Implicit body which we are meshing. The implicit body will allow us to use the signed distance field of the implicit in driving our mesh size. * In Min: Maximum shell thickness multiplied by -1. This input will create a divider between the maximum design space of the shell optimization and the void on the inside. * In Max: Maximum shell thickness multiplied by -1. Having the same input as "In Min," we can set up the field as a step function. * Out Min: Mesh size of shell design space (should be smaller than "Out Max"). The edge size should capture all the detail of the object and be suitable for running simulation. * Out Max: Mesh size of the inner void (should be more significant than "Out Min"). ![Ramp](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ramp_tip.jpg) * Adjust the *Initial Shell Thickness* and the *Initial Infill Thickness* to view the geometry generated for the upper/lower bounds to ensure printability before running a field optimization. ## Example File Download Example: [Parametric Shell-Infill Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Variable_Shell_Infill.ntop) ![Parametric Shell-Infill Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Parametric_Shell_Infill_Component.gif) *** ## FE Mesh, Isotropic Material, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field Create a Parametric FE Domain for a variable shell structure with a periodic lattice infill with the following design parameters: shell thickness (inward direction), lattice thickness. The infill material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the shell and lattice infill is comprised of. | | Unit cell | [Choice](../../../../block-documentation/types/choice) | The unit cell used to create the lattice infill. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The cell size for the lattice infill. | | Min infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable lattice infill thickness. | | Max infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable lattice infill thickness. | | Initial infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial lattice infill thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Min shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable thickness for the shell. | | Max shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable thickness for the shell. | | Initial shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial shell thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | *** ## FE Mesh, Isotropic Material, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, 1.1.0 Create a Parametric FE Domain for a variable shell structure with a periodic lattice infill with the following design parameters: shell thickness (inward direction), lattice thickness. The infill material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the shell and lattice infill is comprised of. | | Unit cell | [Choice](../../../../block-documentation/types/choice) | The unit cell used to create the lattice infill. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The cell size for the lattice infill. | | Min infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable lattice infill thickness. | | Max infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable lattice infill thickness. | | Initial infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial lattice infill thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Min shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable thickness for the shell. | | Max shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable thickness for the shell. | | Initial shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial shell thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | *** ## FE Mesh, Isotropic Material, Choice, Scalar, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, 1.2.0 Create a Parametric FE Domain for a variable shell structure with a periodic lattice infill with the following design parameters: shell thickness (inward direction), lattice thickness. The infill material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the shell and lattice infill is comprised of. | | Unit cell | [Choice](../../../../block-documentation/types/choice) | The unit cell used to create the lattice infill. | | Cell size | [Scalar](../../../../block-documentation/types/scalar) | The cell size for the lattice infill. | | Min infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable lattice infill thickness. | | Max infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable lattice infill thickness. | | Initial infill thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial lattice infill thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Min shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable thickness for the shell. | | Max shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable thickness for the shell. | | Initial shell thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial shell thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | # Parametric Voronoi Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/field-optimization/parametric-voronoi-domain > **[FE Mesh, Isotropic Material, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field](#fe-mesh-isotropic-material-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field)** > **[FE Mesh, Isotropic Material, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, 1.1.0](#fe-mesh-isotropic-material-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-scalar-field-110)** *** ## About this Block The **Parametric Voronoi Domain** block creates an FE Domain, parameterized with design parameters for a Voronoi lattice with variable cell size and lattice thickness. The block uses an FE Solid Mesh as an input Mesh. After field optimization, it will apply optimized values for the lattice thickness and cell size to the design space. The Parametric Voronoi lattices use a theoretical relationship between the relative density of an open-celled foam and the resulting mechanical properties. **Common uses**: * This block is an input to the **Parametric FE Model** block. Once the **Parametric Voronoi Domain** is generated, a HUD appears in the Viewport with several options for visualizing the results. * Implicit View - allows you to view the resulting geometry. * Property Fields - allows a user to view the mechanical properties of the structure across the design space before performing field optimization. * State Fields - allows a user to view values of the design parameters across the design space before performing the field optimization. **Tips:** * The cell size is the average spacing between the center points of the Voronoi lattice. * You can use the initial value inputs to the domain blocks in 2 ways: * Adjust the *Initial Beam Thickness* and the *Initial Cell Size* to view the geometry generated for the upper/lower bounds to ensure printability before running a field optimization. * The starting point from which the optimization continues. ## Example File Download Example: [Parametric Voronoi Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Variable_Voronoi.ntop) ![Parametric Voronoi](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Parametric_Voronoi_Component.png) *** ## FE Mesh, Isotropic Material, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field Create a Parametric FE Domain for a Voronoi Lattice with the following design parameters: cell size and beam thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the Voronoi Lattice is comprised of. | | Min cell size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable cell size for the Voronoi Lattice. | | Max cell size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable cell size for the Voronoi Lattice. | | Initial cell size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial cell size for the Voronoi Lattice. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Min thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable beam thickness for the Voronoi Lattice. | | Max thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable beam thickness for the Voronoi Lattice. | | Initial thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial beam thickness for the Voronoi Lattice. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | *** ## FE Mesh, Isotropic Material, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, Scalar Field, 1.1.0 Create a Parametric FE Domain for a Voronoi Lattice with the following design parameters: cell size and beam thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh that defines the design space. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | Material that the Voronoi Lattice is comprised of. | | Min cell size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable cell size for the Voronoi Lattice. | | Max cell size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable cell size for the Voronoi Lattice. | | Initial cell size | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial cell size for the Voronoi Lattice. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Min thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The minimum allowable beam thickness for the Voronoi Lattice. | | Max thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable beam thickness for the Voronoi Lattice. | | Initial thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The initial beam thickness for the Voronoi Lattice. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. | ### Outputs | Type | | - | | [Parametric FE Domain](../../../../block-documentation/types/parametric-fe-domain) | # Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/optimization > **[Topology Optimization](../../../block-documentation/blocks/optimization/optimization/topology-optimization)** > **[Single Body Topology Optimization](../../../block-documentation/blocks/optimization/optimization/single-body-topology-optimization)** # Single Body Topology Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/optimization/single-body-topology-optimization > **[FE Mesh, Material, Responses, Constraints, Integer, Scalar Field](#fe-mesh-material-responses-constraints-integer-scalar-field)** > **[FE Mesh, Material, Responses, Constraints, Integer, Scalar Field, 1.1.0](#fe-mesh-material-responses-constraints-integer-scalar-field-110)** *** ## FE Mesh, Material, Responses, Constraints, Integer, Scalar Field Perform topology optimization on a single solid body. An FE Mesh and isotropic material is all that is needed to define the model. Any of the available responses and constraints can be applied. ### Inputs | Name | Type | Description | | - | - | - | | Design space | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input design space as an FE Mesh. The mesh should only consist of solid elements. | | Material | [Material](../../../../block-documentation/types/material) | The isotropic material for the design space. | | Responses | [Design Response List](../../../../block-documentation/types/design-response) | The list of design responses to minimize. If more than one response is supplied, the sum of the responses will be used as the objective function value. | | Constraints | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The list of constraints for the topology optimization to satisfy. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed for the optimization algorithm. | | Filter boundary | [Scalar Field](../../../../block-documentation/types/scalar-field) | This option controls how the density filter behaves near the boundary of the design space. If 0, no penalization is enforced on the boundary. If 1, material will be completely restricted to the boundary where no loads or constraints have been applied. | ### Outputs | Type | | - | | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | *** ## FE Mesh, Material, Responses, Constraints, Integer, Scalar Field, 1.1.0 Perform topology optimization on a single solid body. An FE Mesh and isotropic material is all that is needed to define the model. Any of the available responses and constraints can be applied. ### Inputs | Name | Type | Description | | - | - | - | | Design space | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input design space as an FE Mesh. The mesh should only consist of solid elements. | | Material | [Material](../../../../block-documentation/types/material) | The isotropic material for the design space. | | Responses | [Design Response List](../../../../block-documentation/types/design-response) | The list of design responses to minimize. If more than one response is supplied, the sum of the responses will be used as the objective function value. | | Constraints | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The list of constraints for the topology optimization to satisfy. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed for the optimization algorithm. | | Filter boundary | [Scalar Field](../../../../block-documentation/types/scalar-field) | This option controls how the density filter behaves near the boundary of the design space. If 0, no penalization is enforced on the boundary. If 1, material will be completely restricted to the boundary where no loads or constraints have been applied. | ### Outputs | Type | | - | | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | # Topology Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/optimization/topology-optimization > **[FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Scalar Field, Integer, Scalar, Scalar Field, Scalar Field](#fe-model-design-objective-constraints-integer-scalar-scalar-scalar-field-integer-scalar-scalar-field-scalar-field)** > **[FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Scalar Field, Integer, Scalar, Scalar Field, Scalar Field, 1.1.0](#fe-model-design-objective-constraints-integer-scalar-scalar-scalar-field-integer-scalar-scalar-field-scalar-field-110)** *** ## About this Block The Topology Optimization (TopOpt) block performs a numerical design operation that determines the optimal shape of a part within the bounds of a Design Space, based on a set of objectives and constraints. The block allows the user to design geometries that best achieve the desired objective(s) while considering complex and multivariate loading conditions and design constraints. nTop’s TopOpt algorithm uses the Solid Isotropic Material with Penalization (SIMP) method. Topology optimization setup involves choosing Objectives and Constraints for your optimization. The objective is a list of one or more Design Responses that you will be minimizing or maximizing in the optimization. Design Responses are just a way of describing the resulting object. These may include what fraction of the original design space the part takes up (Volume Fraction), or under given loading conditions, how stiff it is (compliance), or how much Stress or Displacement it exhibits. The optimization Objective must be paired with Constraints that give rules to the Optimization. Without Constraints, the optimization will probably result in a part that completely fills in the design space, or a completely empty part. Constraints can include upper or lower limits on other Design Responses, or Geometric Constraints, such as Symmetry, Overhang Angle, and others. The logic of a TopOpt process is outlined below. ![Top Opt Diagram](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOptDiagram.png) The TopOpt process works by assigning a value between 0 and 1 to all of the elements of a mesh, where higher values are assigned to elements that most effectively contribute to the objective of the optimization. These values are referred to as the TopOpt density. For example, an element in the bottom corner of a design space, far away from any applied load, is usually given a density value close to 0, because placing material there does not contribute to the objective of the optimization. On the other hand, elements close to the loaded faces are given a density value close to 1, because having material there is likely necessary to support the load. As a rule, loaded elements are always given a TopOpt density of 1. The Topology Optimization block takes in an FE Model, an Objective, a Constraints list, and a series of values that control the TopOpt algorithm. The FE Model contains a mesh and material properties that define the Design Space, or which is the volume where the final part can occupy after the optimization. The algorithmic controls for TopOpt are explained below. * Max iteration - TopOpt is an iterative process that updates the topology until the objective is reached and the constraints are satisfied. If the process is taking a long time, the user can set a maximum limit to the number of iterations attempted. This input allows you to limit the max computation time expended on the TopOpt process. * Min objective Change - The objective function is a quantified measure of how well the topology is achieving its objective(s). When the relative change between iterations of the objective function falls below this number, the TopOpt will be considered complete (as long as the constraints are satisfied). Decreasing this number will result in a more accurate TopOpt, but longer computation time. * Min density change - This input is a convergence threshold, like described above, but for the relative change of the elements TopOpt density from one iteration to the next. Decreasing this number will result in a more accurate TopOpt, but longer computation time. * Boundary penalty - This input controls how the TopOpt deals with setting density values at the edges of the design space. The 1 option sets the TopOpt density to 0 along the edges of the design space. The material will be completely restricted on the boundary where no loads or constraints have been applied. This option works well if you set up your design space to have a buffer zone of nodes on the outside of the space where you know that no material will be filled in. In some cases, you may anticipate that your part will end up including elements on the outer edge of the design space. This is likely true if you are doing TopOpt on a coarse mesh. The 0 option defines TopOpt densities at the design space edges such that the gradient (the spatial derivatives in x,y,z) will be zero. This allows you to have non-zero TopOpt densities at edges. No penalization is enforced on the boundary in this case. The overall recommendation is to use a small enough mesh size so that the 1 option can be used and density can be 0 at the edges, but if needed, option 0 provides an alternative. The image below shows how results can change between different Filter Boundary options. ![Boundary Penalty](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOptBoundaryPenalty.png) * Save increment - This input controls the amount of data stored and accessible after the topology optimization completes. The number can be increased to lower the file size of a completed TopOpt file. The default value of 1 will save results for all increments, whereas a result of 0 will save only the first and last increment. For any value, N, greater than 1, it will save results for every N increments. Note: The last iteration will always be saved. * Filter size - This optional input specifies a minimum feature size that will be present in your TopOpt result. Note that it can accept a field input, meaning you can choose a spatially-variant scalar field as your minimum feature size. If this optional input is left blank, we assume a default value of 2 times the average element size. * Initial density - This optional input can take in a scalar field of TopOpt density values (from 0 to 1), which will provide the initial guess at the TopOpt result before the process begins. When left blank, the TopOpt densities are set to 0.5 at all elements. After completion of TopOpt processing, a window pops up in the Viewport with several options for visualizing the results. The Thresholded Elements option in the TopOpt viewing window allows the user to see what density values have been assigned to all elements in the design space. Use the Threshold slider to only view elements with a value higher than the specified threshold. ![Thresholded Elements](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOptThresholdElements.gif) The Iso-contour view shows a single surface interpolated from all elements with TopOpt density values close to the specified threshold. ![Iso-contour View](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOptIsoContours.gif) The Iteration slider allows you to see the evolution of the TopOpt throughout the optimization iterations. ![Iteration Slider](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOptIterations.gif) Within the TopOpt block’s information panel, there are two properties available: the number of iterations before completion of the TopOpt process, and a scalar field representing the TopOpt density results. Under the Display tab, there are plots showing how numerical measurements of the design’s Objective and Constraint(s) changed over the iterations of the process. ![Plots](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopOptPlots.png) The TopOpt block can be converted into an Implicit Body using the **Implicit Body from Topology Optimization** block. ## Example File Download Example: [Topology Optimization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopologyOptimization.ntop) *This file set ups a Topology Optimization block for a rectangular block fixed on its side and loaded on top.* ![Topology Optimization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/TopologyOptimization.jpg) *** ## FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Scalar Field, Integer, Scalar, Scalar Field, Scalar Field Perform a density-based topology optimization of an FE Model using the Solid Isotropic Material with Penalization (SIMP) method. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model that defines the design space. | | Objective | [Design Objective](../../../../block-documentation/types/design-objective) | The objective function for the optimization process. | | Constraints | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The constraints to satisfy during the optimization process. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed during the optimization process. | | Min objective change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the objective function between consecutive iterations to consider the optimization process converged. Constraints must be satisfied in addition to this criteria. | | Min density change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in element density between consecutive iterations to consider the optimization process converged. The process will terminate when the largest relative change is below this threshold and all constraints are satisfied. | | Boundary penalty | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to penalize material formation near the boundary of the design space. If 0, no penalization is enforced on the boundary. If 1, material will be completely restricted on the boundary where no loads or constraints have been applied. | | Save increment | [Integer](../../../../block-documentation/types/integer) | Controls the amount of data that is accessible after the optimization is complete. A value of 0 will only save the first and last iteration, a value of 1 will save every iteration, and values N greater than 1 will save every N iterations. Note that this input has significant impact on the file size and runtime of the optimization process. | | Move limit | [Scalar](../../../../block-documentation/types/scalar) | A scalar value between 0 and 1, which sets the maximum update to the design variables per iteration as a percentage of the design variable range: Max variable update = Move limit \* (Variable upper bound - Variable lower bound). A smaller value may increase stability at the cost of a reduced convergence rate. If left unspecified, an internal heuristic is used to determine an appropriate value for the given problem setup. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A constant or spatially-varying length measure that is used to ensure mesh-independency, remove checkerboard artifacts, and to indirectly control the minimum feature size. If not specified a default will be estimated based on the model size. | | Initial density | [Scalar Field](../../../../block-documentation/types/scalar-field) | Option to specify initial density field. If not specified, it will be set to satisfy the desired volume constraint if it exists, otherwise it is set to 0.5. | ### Outputs | Type | | - | | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | *** ## FE Model, Design Objective, Constraints, Integer, Scalar, Scalar, Scalar Field, Integer, Scalar, Scalar Field, Scalar Field, 1.1.0 Perform a density-based topology optimization of an FE Model using the Solid Isotropic Material with Penalization (SIMP) method. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model that defines the design space. | | Objective | [Design Objective](../../../../block-documentation/types/design-objective) | The objective function for the optimization process. | | Constraints | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The constraints to satisfy during the optimization process. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed during the optimization process. | | Min objective change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in the objective function between consecutive iterations to consider the optimization process converged. Constraints must be satisfied in addition to this criteria. | | Min density change | [Scalar](../../../../block-documentation/types/scalar) | The minimum relative change in element density between consecutive iterations to consider the optimization process converged. The process will terminate when the largest relative change is below this threshold and all constraints are satisfied. | | Boundary penalty | [Scalar Field](../../../../block-documentation/types/scalar-field) | Field to penalize material formation near the boundary of the design space. If 0, no penalization is enforced on the boundary. If 1, material will be completely restricted on the boundary where no loads or constraints have been applied. | | Save increment | [Integer](../../../../block-documentation/types/integer) | Controls the amount of data that is accessible after the optimization is complete. A value of 0 will only save the first and last iteration, a value of 1 will save every iteration, and values N greater than 1 will save every N iterations. Note that this input has significant impact on the file size and runtime of the optimization process. | | Move limit | [Scalar](../../../../block-documentation/types/scalar) | A scalar value between 0 and 1, which sets the maximum update to the design variables per iteration as a percentage of the design variable range: Max variable update = Move limit \* (Variable upper bound - Variable lower bound). A smaller value may increase stability at the cost of a reduced convergence rate. If left unspecified, an internal heuristic is used to determine an appropriate value for the given problem setup. | | Filter size | [Scalar Field](../../../../block-documentation/types/scalar-field) | A constant or spatially-varying length measure that is used to ensure mesh-independency, remove checkerboard artifacts, and to indirectly control the minimum feature size. If not specified a default will be estimated based on the model size. | | Initial density | [Scalar Field](../../../../block-documentation/types/scalar-field) | Option to specify initial density field. If not specified, it will be set to satisfy the desired volume constraint if it exists, otherwise it is set to 0.5. | ### Outputs | Type | | - | | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | # Post-Processing Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/post-processing > **[Implicit Body from Topology Optimization](../../../block-documentation/blocks/optimization/post-processing/implicit-body-from-topology-optimization)** > **[Construct Optimized Body](../../../block-documentation/blocks/optimization/post-processing/construct-optimized-body)** > **[Optimized Density Thickness Modifier](../../../block-documentation/blocks/optimization/post-processing/optimized-density-thickness-modifier)** # Construct Optimized Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/post-processing/construct-optimized-body Automatically construct an implicit body from the results of a topology optimization. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | The topology optimization result to construct the implicit body from. | | Threshold | [Scalar](../../../../block-documentation/types/scalar) | The density threshold to extract from the topology optimization. This will essentially define the isosuface value to extract from the density field. | | Grid size | [Scalar](../../../../block-documentation/types/scalar) | The grid size when smoothening the implicit body. Generally a grid size similar to the average mesh size of the topology optimization design space provides the best results. | | Smooth iterations | [Integer](../../../../block-documentation/types/integer) | The number of iterations of smoothening to perform. The more iterations the more smooth the result will be, but it will also consume more material and potentially erase small features. | | Interpolation | Interpolation Enum | The type of interpolation to use when constructing the smooth result. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Implicit Body from Topology Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/post-processing/implicit-body-from-topology-optimization Extract an Implicit Body from a Topology Optimization result. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | Result to extract surface from. | | Threshold | [Scalar](../../../../block-documentation/types/scalar) | Density threshold above which all material will be kept. | | Iteration | [Integer](../../../../block-documentation/types/integer) | Iteration number which the Implicit Body will be extracted from. If not provided, the last iteration will be used. | | Domain index | [Integer](../../../../block-documentation/types/integer) | Domain index which the Implicit Body will be extracted from. If not provided, the first domain will be used. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Optimized Density Thickness Modifier Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/post-processing/optimized-density-thickness-modifier Create a real field that will output a thickness value based on the element density values resulting from a topology optimization. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | The topology optimization to extract the element densities from. | | Min thickness | [Scalar](../../../../block-documentation/types/scalar) | The minimum thickness value that will be correlated to the minimum stress value. | | Max thickness | [Scalar](../../../../block-documentation/types/scalar) | The maximum thickness value that will be correlated to the maximum stress value. | | Interpolation | Point Cloud Interpolation Enum (old) | The field interpolation method. | | Extrapolation | Point Cloud Extrapolation Enum | The field extrapolation method. | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Responses Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses > **[Design Objective](../../../block-documentation/blocks/optimization/responses/design-objective)** > **[Structural Compliance Response](../../../block-documentation/blocks/optimization/responses/structural-compliance-response)** > **[Volume Fraction Response](../../../block-documentation/blocks/optimization/responses/volume-fraction-response)** > **[Stress Response](../../../block-documentation/blocks/optimization/responses/stress-response)** > **[Displacement Response](../../../block-documentation/blocks/optimization/responses/displacement-response)** > **[Natural Frequency Response](../../../block-documentation/blocks/optimization/responses/natural-frequency-response)** > **[Mass Response](../../../block-documentation/blocks/optimization/responses/mass-response)** > **[Center of Mass Response](../../../block-documentation/blocks/optimization/responses/center-of-mass-response)** > **[Moment of Inertia Response](../../../block-documentation/blocks/optimization/responses/moment-of-inertia-response)** > **[Reaction Force Response](../../../block-documentation/blocks/optimization/responses/reaction-force-response)** > **[Combine Design Responses](../../../block-documentation/blocks/optimization/responses/combine-design-responses)** # Center of Mass Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/center-of-mass-response Create a Design Response that measures a component of the Center of Mass vector in some region. For each vector component, the response is computed by integrating one of the following functions: v\_x = rho \* x / M, v\_y = rho \* y / M, v\_z = rho \* z / M over the region, where x, y, z are the coordinates of the material point in the given reference frame, rho is the density field and M is the total mass in the region. ### Inputs | Name | Type | Description | | - | - | - | | Direction | Vector Component Enum | Component of the Center of Mass vector that will be used as a design response. | | Region | [Region](../../../../block-documentation/types/region) | Region that the Design Response will be integrated over. If a region is not provided, the response will be integrated over the entire design space. | | Frame | [Frame](../../../../block-documentation/types/frame) | Reference frame that the center of mass vector is defined in. If a frame is not provided, the global frame will be used. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Combine Design Responses Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/combine-design-responses Combines a list of design responses into a single response. The responses are combined according to the operation provided by the Aggregation input. The aggregate can be used in an optimization objective or design response constraint. ### Inputs | Name | Type | Description | | - | - | - | | Responses | [Design Response List](../../../../block-documentation/types/design-response) | List of design responses to be combined. All elements of the list must have the same units. | | Aggregation | Aggregate Enum | The method of aggregation. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Design Objective Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/design-objective Defines a Design Objective that minimizes/maximizes a Design Response. ### Inputs | Name | Type | Description | | - | - | - | | Goal | Optimization Objective Enum | Optimization goal. | | Responses | [Design Response List](../../../../block-documentation/types/design-response) | Design Responses that form the objective function. | | Weights | [Scalar List](../../../../block-documentation/types/scalar) | Factors used to weight the influence of each design response when calculating the objective function. | ### Outputs | Type | | - | | [Design Objective](../../../../block-documentation/types/design-objective) | # Displacement Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/displacement-response Create a Design Response that measures the maximum displacement of some boundary region for a set of boundary conditions. The response is derived from the solution of a linear static structural finite element analysis. The best performance is achieved if: 1) the selected region is local and contains few nodes, and 2) the selected region is loaded or assigned to be passive. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | Boundary that the design response will be computed on. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | Load case for the design response. | | Direction | Direction Component Enum | Operation that will be applied to all nodal displacement components of the Boundary input before being aggregated with the max operator. \|X\| will compute the magnitude of the displacement vector projected onto the X-axis, \|XY\| will compute the magnitude of the displacement vector projected onto the plane spanned by the X-axis and Y-axis, and \|XYZ\| will compute the magnitude of the non-projected displacement vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | Reference frame that the displacement vector will be computed in. If a Frame is not specified, the global coordinate system will be used. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Mass Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/mass-response Create a Design Response that measures the total mass in some region. The response is computed by integrating the density field over the region. ### Inputs | Name | Type | Description | | - | - | - | | Region | [Region](../../../../block-documentation/types/region) | Region that the Design Response will be integrated over. If a region is not provided, the response will be integrated over the entire design space. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Moment of Inertia Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/moment-of-inertia-response Create a Design Response that measures a component of the mass moment of inertia tensor in some region. For each tensor component, the response is computed by integrating one of the following functions: I\_xx = rho \* (y^2 + z^2), l\_yy = rho \* (x^2 + z^2), I\_zz = rho \* (x^2 + y^2), I\_xy = l\_yx = - rho \* x \* y, l\_xz = I\_zx = - rho \* x \* z, l\_yz = I\_zy = - rho \* y \* z over the region, where x, y, z are the coordinates of the material point in the given reference frame, and rho is the density field. ### Inputs | Name | Type | Description | | - | - | - | | Moment of inertia | Tensor Component Enum | Component of the inertial tensor. | | Region | [Region](../../../../block-documentation/types/region) | Region that the Design Response will be integrated over. If a region is not provided, the response will be integrated over the entire design space. | | Frame | [Frame](../../../../block-documentation/types/frame) | Reference frame that the inertia tensor is defined in. If a frame is not specified, the global coordinate system will be used. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Natural Frequency Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/natural-frequency-response Create a Design Response that measures the smallest natural frequency of the FE model for a set of boundary conditions. The response is computed by f = min\_(|f\_i - f\_0|), where f\_i represents the N smallest natural frequencies obtained by solving a linear modal finite element analysis, and f\_0 is an offset value. ### Inputs | Name | Type | Description | | - | - | - | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | Load case for the design response. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Number of modes that will be searched for and included in the response computation. | | Frequency offset | [Scalar](../../../../block-documentation/types/scalar) | Frequency offset used in the design response computation. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Reaction Force Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/reaction-force-response Create a design response that measures the sum of reaction force vectors across a boundary. The response is derived from the solution of a linear static structural finite element analysis. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | Boundary that the design response will be computed on. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | Load case for the design response. | | Direction | Direction Component Enum | Operation that will be applied after summing all reaction force vectors over the Boundary input. \|X\| will compute the magnitude of the reaction force vector projected onto the X-axis, \|XY\| will compute the magnitude of the reaction force vector projected onto the plane spanned by the X-axis and Y-axis, and \|XYZ\| will compute the magnitude of the non-projected reaction force vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | Reference frame that the reaction force will be computed in. If a frame is not specified, the global coordinate system will be used. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Stress Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/stress-response Create a Design Response that measures the maximum centroidal von Mises stress in some region for a set of boundary conditions. The response is derived from the solution of a linear static structural finite element analysis. The best performance is achieved if all loaded regions are assigned to be passive regions. ### Inputs | Name | Type | Description | | - | - | - | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | Load case for the design response. | | Exclude passive | [Bool](../../../../block-documentation/types/bool) | Option to exclude passive regions. | | Region | [Region](../../../../block-documentation/types/region) | Region that the design response will be computed in. If not provided, then the response will be calculated for the entire model. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Structural Compliance Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/structural-compliance-response Create a Design Response that measures the structural compliance (strain energy) of some region for a set of boundary conditions. The response is computed by solving a linear static structural finite element analysis and integrating the derived strain energy density field over the region. ### Inputs | Name | Type | Description | | - | - | - | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | Load case for the design response. | | Region | [Region](../../../../block-documentation/types/region) | Region that the design response will be computed in. If not provided, then the response will be calculated for the entire model. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Volume Fraction Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/optimization/responses/volume-fraction-response Create a Design Response that measures the fraction of material usage in some region. The response is computed by integrating the relative density field over the region. Values can range from 0 to 1. ### Inputs | Name | Type | Description | | - | - | - | | Region | [Region](../../../../block-documentation/types/region) | Region that the design response will be computed in. If not provided, then the response will be calculated for the entire model. | ### Outputs | Type | | - | | [Design Response](../../../../block-documentation/types/design-response) | # Parameter Optimization [Beta] Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta ## Optimization > **[Parameter Optimization](../../block-documentation/blocks/parameter-optimization-beta/optimization/parameter-optimization)** ## Composition > **[Parameter Objective](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-objective)** > **[Parameter Constraint](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint)** > **[Parameter Constraint Group](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint-group)** > **[Constant Parameter](../../block-documentation/blocks/parameter-optimization-beta/composition/constant-parameter)** > **[Independent Parameter](../../block-documentation/blocks/parameter-optimization-beta/composition/independent-parameter)** > **[Dependent Parameter](../../block-documentation/blocks/parameter-optimization-beta/composition/dependent-parameter)** > **[Parameter Group](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-group)** ## Surrogates > **[Import Neural Network](../../block-documentation/blocks/parameter-optimization-beta/surrogates/import-neural-network)** ## Utilities > **[Design Parameters from Optimization](../../block-documentation/blocks/parameter-optimization-beta/utilities/design-parameters-from-optimization)** > **[Evaluate Parameter](../../block-documentation/blocks/parameter-optimization-beta/utilities/evaluate-parameter)** > **[Extract Optimization History](../../block-documentation/blocks/parameter-optimization-beta/utilities/extract-optimization-history)** > **[Tracked Parameters from Optimization](../../block-documentation/blocks/parameter-optimization-beta/utilities/tracked-parameters-from-optimization)** # Composition Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition > **[Parameter Objective](../../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-objective)** > **[Parameter Constraint](../../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint)** > **[Parameter Constraint Group](../../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint-group)** > **[Constant Parameter](../../../block-documentation/blocks/parameter-optimization-beta/composition/constant-parameter)** > **[Independent Parameter](../../../block-documentation/blocks/parameter-optimization-beta/composition/independent-parameter)** > **[Dependent Parameter](../../../block-documentation/blocks/parameter-optimization-beta/composition/dependent-parameter)** > **[Parameter Group](../../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-group)** # Constant Parameter Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition/constant-parameter > **[Text, Implicit Body, 5.34.0](#text-implicit-body-5340)** > **[Text, Integer, 5.34.0](#text-integer-5340)** > **[Text, Scalar, 5.34.0](#text-scalar-5340)** > **[Text, Temperature, 5.34.0](#text-temperature-5340)** *** ## About this Block **What it does:** The **Constant Parameter** block creates a parameter with a fixed value. It is used to define a constant design variable that does not change during optimization. Other available parameters include the **Independent Parameter** and **Dependent Parameter**. **Common uses:** * Inverse Design Optimization using Parameter Optimization * Defining fixed design variables in an optimization problem. * Specifying unchanging material properties, boundary conditions, or dimensional constraints. **Tips:** * Use meaningful label names to easily identify constants in optimization results. *** ## Text, Implicit Body, 5.34.0 Creates a Constant Parameter with a fixed value that does not change. The value can be referenced by other Parameters or evaluators. ### Inputs | Name | Type | Description | | - | - | - | | Label | [Text](../../../../block-documentation/types/text) | Unique identifier for the Parameter. | | Value | [Implicit Body](../../../../block-documentation/types/implicit-body) | Default value for the Parameter. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | *** ## Text, Integer, 5.34.0 Creates a Constant Parameter with a fixed value that does not change. The value can be referenced by other Parameters or evaluators. ### Inputs | Name | Type | Description | | - | - | - | | Label | [Text](../../../../block-documentation/types/text) | Unique identifier for the Parameter. | | Value | [Integer](../../../../block-documentation/types/integer) | Default value for the Parameter. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | *** ## Text, Scalar, 5.34.0 Creates a Constant Parameter with a fixed value that does not change. The value can be referenced by other Parameters or evaluators. ### Inputs | Name | Type | Description | | - | - | - | | Label | [Text](../../../../block-documentation/types/text) | Unique identifier for the Parameter. | | Value | [Scalar](../../../../block-documentation/types/scalar) | Default value for the Parameter. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | *** ## Text, Temperature, 5.34.0 Creates a Constant Parameter with a fixed value that does not change. The value can be referenced by other Parameters or evaluators. ### Inputs | Name | Type | Description | | - | - | - | | Label | [Text](../../../../block-documentation/types/text) | Unique identifier for the Parameter. | | Value | [Temperature](../../../../block-documentation/types/temperature) | Default value for the Parameter. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | # Dependent Parameter Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition/dependent-parameter > **[Surrogate, Text, 5.43.0](#surrogate-text-5430)** > **[Text, Function Object, Parameter Group, 5.34.0](#text-function-object-parameter-group-5340)** *** ## About this Block **What it does:** A **Dependent Parameter** defines a relationship between variables by calculating its value from other parameters (commonly Independent and/or Constant Parameters, but can also form chains with additional Dependent Parameters) using a custom function. In a parameter optimization study, a dependent parameter is typically used to define the optimization objective and constraints. Other available parameters include the **Independent Parameter**, and **Constant Parameter** **Common uses:** * Inverse Design Optimization using Parameter Optimization * Defining a design variable that is a complex mathematical expression of other variables. * Linking multiple input parameters together through a single parameter to maintain a specific relationship between them. **Tips:** * The easiest way to create a **Dependent Parameter** is by right clicking on a block that defines the function you want to use as part of your optimization, and then selecting Optimize > Create Dependent Parameter. ![Right Click Option](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/dependent_parameter_1.png) * You can connect dependent parameters to create a Chained Dependent Parameter by linking multiple dependent parameters. | Dependent Parameter 1 | Chained Parameter | | - | - | | ![Right Click Option](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/dependent_parameter.png) | ![Right Click Option](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/chained_dependent_parameter.png) | ## Example File Download Example: [Parameter Optimization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parameter_optimization.ntop) ![Parameter Optimization Setup](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parameter_optimization.png) *** ## Surrogate, Text, 5.43.0 Creates a Dependent Parameter whose value is computed from other Parameters using a specified Surrogate. The value updates automatically whenever its input Parameters are changed by an evaluator. ### Inputs | Name | Type | Description | | - | - | - | | Surrogate | Surrogate(real,samples(real)) | Surrogate model to evaluate. | | Label | [Text](../../../../block-documentation/types/text) | Optional unique identifier for the output Parameter. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | *** ## Text, Function Object, Parameter Group, 5.34.0 Creates a Dependent Parameter whose value is computed from other Parameters using a specified Function. The value updates automatically whenever its input Parameters are changed by an evaluator. ### Inputs | Name | Type | Description | | - | - | - | | Label | [Text](../../../../block-documentation/types/text) | Unique identifier for the output Parameter. | | Function object | [Function Object](../../../../block-documentation/types/function-object) | The Function Object evaluated to produce the output Parameter's value. | | Input parameters | [Parameter Group](../../../../block-documentation/types/parameter-group) | Parameters defining Function Object inputs. The group elements correspond to the Function Object inputs by index. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | # Independent Parameter Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition/independent-parameter > **[Text, Scalar, Scalar, Scalar, 5.34.0](#text-scalar-scalar-scalar-5340)** > **[Text, Temperature, Temperature, Temperature, 5.34.0](#text-temperature-temperature-temperature-5340)** *** ## About this Block **What it does:** The **Independent Parameter** block creates an independent optimization parameter that can vary within specified bounds during optimization. Other available parameters include the **Constant Parameter** and **Dependent Parameter**. **Common uses:** * Inverse Design Optimization using Parameter Optimization **Tips:** * Ensure the default value is within the specified bounds. * Use meaningful parameter names for clarity in optimization results. * Set realistic bounds based on physical or practical constraints. * Consider parameter scaling if values span multiple orders of magnitude. *** ## Text, Scalar, Scalar, Scalar, 5.34.0 Creates an Independent Parameter whose value can be adjusted within optional minimum and maximum bounds. Its value can be used by evaluators, which may modify it during computations such as Parameter Optimization. ### Inputs | Name | Type | Description | | - | - | - | | Label | [Text](../../../../block-documentation/types/text) | Unique identifier for the Parameter. | | Default value | [Scalar](../../../../block-documentation/types/scalar) | Default value for the Parameter. | | Lower bound | [Scalar](../../../../block-documentation/types/scalar) | Minimum allowed value for the Parameter. | | Upper bound | [Scalar](../../../../block-documentation/types/scalar) | Maximum allowed value for the Parameter. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | *** ## Text, Temperature, Temperature, Temperature, 5.34.0 Creates an Independent Parameter whose value can be adjusted within optional minimum and maximum bounds. Its value can be used by evaluators, which may modify it during computations such as Parameter Optimization. ### Inputs | Name | Type | Description | | - | - | - | | Label | [Text](../../../../block-documentation/types/text) | Unique identifier for the Parameter. | | Default value | [Temperature](../../../../block-documentation/types/temperature) | Default value for the Parameter. | | Lower bound | [Temperature](../../../../block-documentation/types/temperature) | Minimum allowed value for the Parameter. | | Upper bound | [Temperature](../../../../block-documentation/types/temperature) | Maximum allowed value for the Parameter. | ### Outputs | Type | | - | | [Parameter](../../../../block-documentation/types/parameter) | # Parameter Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint ## About this Block **What it does:** The **Parameter Constraint** block defines a constraint for a parameter optimization run. It takes an input Parameter, compares it to a specified Value using a chosen Constraint Operator (like 'Less than' or 'Greater than'), and enforces that limit on the parameter's value during optimization. **Common uses:** * Finding the lightest possible design that meets all structural requirements. * Maximizing a component's stiffness while keeping its mass below a certain limit. * Optimizing a part's geometry to improve its performance under various conditions. **Tips:** * The *Type* input determines the logical operator, such as 'Greater than' or 'Less than.' * The *Value* input is a single scalar number that sets the boundary for the constraint. * It is always a good measure to review optimization results before using the optimization values as the **Parameter Constraint** block imposes soft constraints. *** Defines a condition that a Parameter must satisfy. Constraints can be used to enforce limits on Independent Parameters or Dependant Parameter values and define valid solution spaces in workflows such as Parameter Optimization. ### Inputs | Name | Type | Description | | - | - | - | | Parameter | [Parameter](../../../../block-documentation/types/parameter) | Parameter to be constrained. | | Constraint type | Optimization Constraint Enum | Constraint operator. | | Value | [Parameterizable](../../../../block-documentation/types/parameterizable) | Minimum or maximum value for constraint. | ### Outputs | Type | | - | | [Parameter Constraint](../../../../block-documentation/types/parameter-constraint) | # Parameter Constraint Group Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint-group Creates a Parameter Constraint Group from a collection of Parameter Constraints. ### Inputs | Name | Type | Description | | - | - | - | | Elements | [Parameter Constraint](../../../../block-documentation/types/parameter-constraint) | Constraints to make up Group. | ### Outputs | Type | | - | | [Parameter Constraint Group](../../../../block-documentation/types/parameter-constraint-group) | # Parameter Group Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition/parameter-group Creates a Parameter Group from a collection of Parameters. ### Inputs | Name | Type | Description | | - | - | - | | Elements | [Parameter](../../../../block-documentation/types/parameter) | Parameters to make up Group. | ### Outputs | Type | | - | | [Parameter Group](../../../../block-documentation/types/parameter-group) | # Parameter Objective Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/composition/parameter-objective ## About this Block **What it does:** The **Parameter Objective** block defines the goal of an optimization run. It takes a Goal (either Minimize or Maximize) and a Parameter to set the objective function. The optimizer then uses this objective to guide its search for an optimal solution. **Common uses:** * Finding the lightest possible design that meets all structural requirements. * Maximizing a component's stiffness while keeping its mass below a certain limit. * Optimizing a part's geometry to improve its performance under various conditions. **Tips:** * The *Goal* input determines whether the optimizer will try to increase or decrease the value of the parameter. * The *Parameter* input must be a scalar optimization parameter whose value can be calculated for each design iteration. *** Specifies a goal for a Parameter Optimization by indicating a Parameter to minimize or maximize. Guides the optimizer toward the desired outcome. ### Inputs | Name | Type | Description | | - | - | - | | Goal | Optimization Objective Enum | Optimization goal. | | Parameter | [Parameter](../../../../block-documentation/types/parameter) | Parameter used to define the optimization objective. | ### Outputs | Type | | - | | [Parameter Objective](../../../../block-documentation/types/parameter-objective) | # Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/optimization > **[Parameter Optimization](../../../block-documentation/blocks/parameter-optimization-beta/optimization/parameter-optimization)** # Parameter Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/optimization/parameter-optimization ## About this Block **What it does:** The **Parameter Optimization** block performs an optimization algorithm to find the collection of optimal design parameters. It works by iteratively adjusting a set of Design Parameters to either minimize or maximize a defined Objective while satisfying all specified Constraints. ![Parameter Optimization Flow Chart](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parameter_optimization_flow_chart.png) **Common uses:** * Finding the lightest possible design that meets all structural requirements. * Maximizing a component's stiffness while keeping its mass below a certain limit. * Optimizing a part's geometry to improve its performance under various conditions. **Tips:** * The *Constraints* and *Tracked Parameters* inputs are optional. * Use *Constraints* to set limits on your design. * Use *Tracked Parameters* to monitor additional variables during the optimization run for debugging or detailed analysis. * The *Algorithm* input determines the specific method used to find the optimal solution. ## Grid * This method performs uniform grid sampling. It performs an exhaustive search by evaluating every possible combination of parameter values on a predefined grid. You specify the total number of "steps" for each variable, and the optimizer tests them all. * This algorithm is Ideal for understanding the design space before using an additional optimization algorithm. \| | | \| --- | --- | |![Grid Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/grid.png)| **What you see:** A perfect 3D cube of points. The algorithm tests every single point on this predefined grid. The final result (the red star) is simply the point on the grid that had the lowest value in the case of a minimization problem.\ **Takeaway:** This method is simple and exhaustive, but scales terribly. For our 3D problem with 8 values per axis, it ran 8^3 = 512 calculations. For a 10D problem, it would be 8^10 (over 1 billion), making it completely impractical for some real-world problems. It will also miss the true minimum if it falls between the grid points.| ## Global * This method uses a global optimization algorithm. It is a sophisticated method that splits its effort between exploring new, untested regions of the design space (exploration) and performing local optimization on promising regions (exploitation). * This algorithm is suitable for finding a global maximum/minimum among multiple local maximums or minimums. \| | | \| --- | --- | |![Global Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/global.png)| **What you see:** A large "cloud" of points scattered across the entire 3D space, with a mix of colors. This shows the algorithm is actively exploring new, random regions. The final red star is correctly placed at the true global minimum (0,0,0).\ **Takeaway:** This algorithm is designed to solve difficult problems. It intelligently balances exploration (sampling new regions to find the best valley) with exploitation (using local search to find the bottom of that valley). It is highly effective at avoiding local traps and finding the true global minimum.| ## Local * This method uses a local BOBYQA technique. BOBYQA (Bound Optimization BY Quadratic Approximation) builds a smooth, quadratic approximation of your objective function within the local region of your current solution and seeks the minimum of that approximation. * This algorithm is suitable when you are looking for a minimum/maximum of a simple convex/concave optimization problem. \| | | \| --- | --- | |![Local Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/local.png)| **What you see:** A black search path starting from its initial guess. The algorithm intelligently creates a smooth model of the "valley" it's in and follows it downhill to the bottom. The final red star is at a local minimum, but not the true global one at (0,0,0).\ **Takeaway:** This is a powerful and efficient local optimizer that doesn't require gradients and can handle a certain level of noise or non-smoothness in functions. However, it is entirely dependent on its starting point and has no way to escape the first valley it finds.| ## Smooth * This method is a Gradient-Based (LBFGS) optimization. It uses a finite difference approximation to calculate the gradients of your objective function and then follows these gradients to find a minimum. * This algorithm is best used when your dependent parameters are smooth and continuous. \| | | \| --- | --- | |![Smooth Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/smooth.png)| **What you see:** A short, efficient black search path. The algorithm uses the function's slope (gradient) to find the steepest path downhill from its starting point. Like BOBYQA, it quickly finds the bottom of the nearest valley and gets stuck there.\ **Takeaway:** This method performs very well and is the standard for "smooth" problems (common in machine learning). It may scale poorly, however, when dealing with too many parameters due to the finite difference computation for gradients. In addition, its reliance on the local gradient makes it blind to the bigger picture, and it will get trapped in the first local minimum it encounters.| * The *Max Iterations* input sets a limit on the number of attempts the block will make to find a solution, preventing excessively long run times. * We recommend performing a Global or Grid search first to identify parameters that can be used to with the Local algorithm. ## Example File Download Example: [Parameter Optimization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parameter_optimization.ntop) ![Parameter Optimization Setup](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parameter_optimization.png) *** Runs an optimization algorithm to find the collection of Design Parameters that produce an optimal Parameter Objective value while satisfying all Parameter Constraints. ### Inputs | Name | Type | Description | | - | - | - | | Objective | [Parameter Objective](../../../../block-documentation/types/parameter-objective) | The objective function for the optimization process. | | Constraints | [Parameter Constraint Group](../../../../block-documentation/types/parameter-constraint-group) | The constraints to satisfy during the optimization process. | | Design parameters | [Parameter Group](../../../../block-documentation/types/parameter-group) | The collection of Parameters the algorithm will change in its search for the optimal solution. | | Algorithm | Optimization Algorithm Enum | The specific optimization method to be used. This dictates how the block will search for the optimal solution. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations allowed during the optimization process. | | Tracked parameters | [Parameter Group](../../../../block-documentation/types/parameter-group) | Additional Parameters to be tracked and logged during the optimization process. Useful for debugging or detailed analysis. | ### Outputs | Type | | - | | [Parameter Optimization Result](../../../../block-documentation/types/parameter-optimization-result) | # Surrogates Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/surrogates > **[Import Neural Network](../../../block-documentation/blocks/parameter-optimization-beta/surrogates/import-neural-network)** # Import Neural Network Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/surrogates/import-neural-network Imports a Neural Network Model stored in the ONNX file format for direct evaluation within the nTop environment. The resulting block can be used for evaluation or use in optimization workflows. ### Inputs | Name | Type | Description | | - | - | - | | Model | [Path](../../../../block-documentation/types/path) | Path to Neural Network file containing the neural network model definition. Currently only ONNX models are supported. | | Inputs | [Parameter Group](../../../../block-documentation/types/parameter-group) | Parameters defining the inputs to the imported surrogate model. | | Reference unit | [Scalar](../../../../block-documentation/types/scalar) | The reference used to maintain a consistent output. Typically, this is a value of 1 with the units of the value returned by the model. | | Output index | [Integer](../../../../block-documentation/types/integer) | Index number corresponding to the desired ONNX output. If empty, 0 will be used by default. | ### Outputs | Type | | - | | Surrogate(real,samples(real)) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/utilities > **[Design Parameters from Optimization](../../../block-documentation/blocks/parameter-optimization-beta/utilities/design-parameters-from-optimization)** > **[Evaluate Parameter](../../../block-documentation/blocks/parameter-optimization-beta/utilities/evaluate-parameter)** > **[Extract Optimization History](../../../block-documentation/blocks/parameter-optimization-beta/utilities/extract-optimization-history)** > **[Tracked Parameters from Optimization](../../../block-documentation/blocks/parameter-optimization-beta/utilities/tracked-parameters-from-optimization)** # Design Parameters from Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/utilities/design-parameters-from-optimization ## About this Block **What it does:** The **Design Parameters from Optimization** block extracts all the design parameters from a Parameter Optimization Result for a specific iteration. This block is used to retrieve the final optimized values and use them to modify the design with optimized parameters or inspect the evolution of the solution over the optimization run. **Common uses:** * Design from parameters and analyze a specific iteration, such as the best one found so far or an intermediate result with promising characteristics. * Compare the parameter values of the initial design to the final, optimized design to quantify the changes. **Tips:** * The *Iteration* input is optional. If left empty, the block will automatically use the final iteration of the optimization. *** Extracts all design parameters at a specific iteration from a Parameter Optimization Result. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Parameter Optimization Result](../../../../block-documentation/types/parameter-optimization-result) | Result to extract the design parameters from. | | Iteration | [Integer](../../../../block-documentation/types/integer) | Iteration number which the Parameter Group will be extracted from. If not provided, the last iteration will be used. | ### Outputs | Type | | - | | [Parameter Group](../../../../block-documentation/types/parameter-group) | # Evaluate Parameter Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/utilities/evaluate-parameter ## About this Block **What it does:** The **Evaluate Parameter** block computes the value of a **Dependent Parameter** using a specified set of inputs.. This is useful to evaluate a dependant parameter with known input values instead of values returned by an optimization. If no parameter values are provided as inputs to this block, the default values for the parameter will be returned (or the value of the dependant parameter based on default input parameters). **Common uses:** * Debugging a Dependent Parameter to check its output with various inputs. * Performing a quick check to set a constraint value before starting a full optimization. **Tips:** * The Dependent Parameter input is the only required input. * If you do not provide a group of Input Parameters, the block will use the default values to perform the evaluation. * This block provides a way to "Preview" a calculated parameter's value. *** Computes the value of a Dependent Parameter for a specified collection of input Parameters with constant or known values. ### Inputs | Name | Type | Description | | - | - | - | | Dependent parameter | [Parameter](../../../../block-documentation/types/parameter) | Dependent Parameter to be evaluated. | | Input parameters | [Parameter Group](../../../../block-documentation/types/parameter-group) | Inputs used to evaluate the Dependent Parameter. If no inputs are provided, default values assigned during composition will be used. | ### Outputs | Type | | - | | [Parameterizable](../../../../block-documentation/types/parameterizable) | # Extract Optimization History Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/utilities/extract-optimization-history > **[Parameter Optimization Result, Unit System, Integer, 5.34.0](#parameter-optimization-result-unit-system-integer-5340)** > **[Field Optimization Result, Unit System, Integer](#field-optimization-result-unit-system-integer)** > **[Topology Optimization Result, Unit System, Integer](#topology-optimization-result-unit-system-integer)** *** ## About this Block **What it does:** The **Extract Optimization History** block extracts the optimization history from a Parameter Optimization result, returning the values at each iteration. *** ## Parameter Optimization Result, Unit System, Integer, 5.34.0 Extract the convergence history of a Parameter Optimization Result. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Parameter Optimization Result](../../../../block-documentation/types/parameter-optimization-result) | Result to extract convergence history from. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Unit system that the convergence data should be translated to. | | Precision | [Integer](../../../../block-documentation/types/integer) | The number of significant digits for formatting the output value. | ### Outputs | Type | | - | | [Table](../../../../block-documentation/types/table) | *** ## Field Optimization Result, Unit System, Integer Extract the convergence history of a Field Optimization Result. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Field Optimization Result](../../../../block-documentation/types/field-optimization-result) | Result to extract convergence history from. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Unit system that the convergence data should be translated to. | | Precision | [Integer](../../../../block-documentation/types/integer) | The number of significant digits for formatting the output value. | ### Outputs | Type | | - | | [Table](../../../../block-documentation/types/table) | *** ## Topology Optimization Result, Unit System, Integer Extract the convergence history of a Topology Optimization Result. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Topology Optimization Result](../../../../block-documentation/types/topology-optimization-result) | Result to extract convergence history from. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | Unit system that the convergence data should be translated to. | | Precision | [Integer](../../../../block-documentation/types/integer) | The number of significant digits for formatting the output value. | ### Outputs | Type | | - | | [Table](../../../../block-documentation/types/table) | # Tracked Parameters from Optimization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/parameter-optimization-beta/utilities/tracked-parameters-from-optimization **What it does:** The **Tracked Parameters from Optimization** block extracts all the non-design parameters that were logged during the optimization run from a Parameter Optimization Result at a specific iteration. This is done to analyze auxiliary data, for example stresses, temperatures, or volumes, as the optimization progressed, providing a deeper understanding of the solution's performance evolution. **Common uses:** * Plotting the evolution of secondary metrics (e.g., mass, reaction forces) against the primary objective to confirm the design's overall effectiveness. * Examining the values of critical parameters throughout the run to diagnose why the optimization may have stalled or violated a hidden constraint. **Tips:** * The *Iteration* input is optional. If left empty, the block will automatically use the final iteration of the optimization. *** Extracts all tracked parameters at a specific iteration from a Parameter Optimization Result. ### Inputs | Name | Type | Description | | - | - | - | | Result | [Parameter Optimization Result](../../../../block-documentation/types/parameter-optimization-result) | Result to extract the tracked parameters from. | | Iteration | [Integer](../../../../block-documentation/types/integer) | Iteration number which the Parameter Group will be extracted from. If not provided, the last iteration will be used. | ### Outputs | Type | | - | | [Parameter Group](../../../../block-documentation/types/parameter-group) | # Rib Design Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design ## Create > **[2D Unit Cell](../../block-documentation/blocks/rib-design/create/2d-unit-cell)** > **[Graph by Planar Projection](../../block-documentation/blocks/rib-design/create/graph-by-planar-projection)** > **[Graph by Swept Projection](../../block-documentation/blocks/rib-design/create/graph-by-swept-projection)** > **[Graph by Cylindrical Projection](../../block-documentation/blocks/rib-design/create/graph-by-cylindrical-projection)** > **[Graph on CAD Face](../../block-documentation/blocks/rib-design/create/graph-on-cad-face)** > **[Graph on Quad Mesh](../../block-documentation/blocks/rib-design/create/graph-on-quad-mesh)** > **[Voronoi Surface Graph](../../block-documentation/blocks/rib-design/create/voronoi-surface-graph)** > **[Graph from Mesh Faces](../../block-documentation/blocks/lattices/utilities/graph-from-mesh-faces)** > **[Graph from Line Segments](../../block-documentation/blocks/lattices/utilities/graph-from-line-segments)** > **[Ribs from Graph](../../block-documentation/blocks/rib-design/create/ribs-from-graph)** > **[Relax Graph](../../block-documentation/blocks/rib-design/create/relax-graph)** ## Modify > **[Blend Intersections](../../block-documentation/blocks/rib-design/modify/blend-intersections)** > **[Collapse Vertices](../../block-documentation/blocks/modeling/utilities/collapse-vertices)** > **[Collapse Vertices by Angle](../../block-documentation/blocks/lattices/utilities/collapse-vertices-by-angle)** > **[Trim Lattice](../../block-documentation/blocks/lattices/utilities/trim-lattice)** > **[Merge Graphs](../../block-documentation/blocks/modeling/utilities/merge-graphs)** # Create Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create > **[2D Unit Cell](../../../block-documentation/blocks/rib-design/create/2d-unit-cell)** > **[Graph by Planar Projection](../../../block-documentation/blocks/rib-design/create/graph-by-planar-projection)** > **[Graph by Swept Projection](../../../block-documentation/blocks/rib-design/create/graph-by-swept-projection)** > **[Graph by Cylindrical Projection](../../../block-documentation/blocks/rib-design/create/graph-by-cylindrical-projection)** > **[Graph on CAD Face](../../../block-documentation/blocks/rib-design/create/graph-on-cad-face)** > **[Graph on Quad Mesh](../../../block-documentation/blocks/rib-design/create/graph-on-quad-mesh)** > **[Voronoi Surface Graph](../../../block-documentation/blocks/rib-design/create/voronoi-surface-graph)** > **[Graph from Mesh Faces](../../../block-documentation/blocks/lattices/utilities/graph-from-mesh-faces)** > **[Graph from Line Segments](../../../block-documentation/blocks/lattices/utilities/graph-from-line-segments)** > **[Ribs from Graph](../../../block-documentation/blocks/rib-design/create/ribs-from-graph)** > **[Relax Graph](../../../block-documentation/blocks/rib-design/create/relax-graph)** # 2D Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/2d-unit-cell The selected Unit Cell for the graph generation workflow. This block is used as an input to graph projection blocks or "Periodic Lattice" on a CAD face or quad mesh. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell | [Choice](../../../../block-documentation/types/choice) | The selected unit cell for tessellation. | | Orientation | [Choice](../../../../block-documentation/types/choice) | The in-plane orientation of the unit cell. | ### Outputs | Type | | - | | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | # Graph by Cylindrical Projection Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/graph-by-cylindrical-projection Creates a graph on the surface of an implicit body with cylindrical projection. To set the map's orientation and position, use the Frame input. ### Inputs | Name | Type | Description | | - | - | - | | 2d unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Pattern used to create the graph on the body. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body on the surface of which to create the graph. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the orientation of the projection mapping. | | Axial height | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the axial direction. | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of cells in the circumferential direction. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Reverse the direction of projection. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture the boundary. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Graph by Planar Projection Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/graph-by-planar-projection Creates a graph on the surface of an implicit body with planar projection. ### Inputs | Name | Type | Description | | - | - | - | | 2d unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Pattern used to create the graph on the body. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body on the surface of which to create the graph. | | Frame | [Frame](../../../../block-documentation/types/frame) | Frame that defines the orientation of the projection mapping. | | Cell length | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the length (Frame X axis) direction. | | Cell width | [Scalar](../../../../block-documentation/types/scalar) | Cell size in the width (Frame Y axis) direction. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Reverse the direction of projection. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture the boundary. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Graph by Swept Projection Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/graph-by-swept-projection > **[1 Parameter Unit Cell, Implicit Body, Integer, Integer, Curve (old), Bool, Scalar](#1-parameter-unit-cell-implicit-body-integer-integer-curve-old-bool-scalar)** > **[1 Parameter Unit Cell, Implicit Body, Integer, Integer, Spline, Bool, Scalar, 5.20.0](#1-parameter-unit-cell-implicit-body-integer-integer-spline-bool-scalar-5200)** *** ## 1 Parameter Unit Cell, Implicit Body, Integer, Integer, Curve (old), Bool, Scalar Creates a graph on the surface of an implicit body with curved cylindrical projection based on a centerline curve. ### Inputs | Name | Type | Description | | - | - | - | | 2d unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Pattern used to create the graph on the body. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body on the surface of which to create the graph. | | Axial count | [Integer](../../../../block-documentation/types/integer) | Number of cells in the axial direction | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of cells in the circumferential direction. | | Centerline | [Curve (old)](../../../../block-documentation/types/curve-old) | Curve that defines the centerline of the projection mapping. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Reverse the direction of projection. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture the boundary. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## 1 Parameter Unit Cell, Implicit Body, Integer, Integer, Spline, Bool, Scalar, 5.20.0 Creates a graph on the surface of an implicit body with curved cylindrical projection based on a centerline curve. ### Inputs | Name | Type | Description | | - | - | - | | 2d unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Pattern used to create the graph on the body. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body on the surface of which to create the graph. | | Axial count | [Integer](../../../../block-documentation/types/integer) | Number of cells in the axial direction | | Arc count | [Integer](../../../../block-documentation/types/integer) | Number of cells in the circumferential direction. | | Centerline | [Spline](../../../../block-documentation/types/spline) | Curve that defines the centerline of the projection mapping. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Reverse the direction of projection. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately capture the boundary. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Graph on CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/graph-on-cad-face Creates a conformal graph that is conformal to a CAD face. ### Inputs | Name | Type | Description | | - | - | - | | 2d unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Pattern used to create curves on the CAD face. | | Face | [CAD Face](../../../../block-documentation/types/cad-face) | Face on which to conform the graph. | | U count | [Integer](../../../../block-documentation/types/integer) | Number of cells in the U direction. | | V count | [Integer](../../../../block-documentation/types/integer) | Number of cells in the V direction. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Graph on Quad Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/graph-on-quad-mesh Creates a graph that is conformal to a quad mesh. Note that the U and V orientations of individual cells will not be continuous. ### Inputs | Name | Type | Description | | - | - | - | | 2d unit cell | [1 Parameter Unit Cell](../../../../block-documentation/types/1-parameter-unit-cell) | Pattern used to create curves on the quad mesh. | | Quad mesh | [Mesh](../../../../block-documentation/types/mesh) | Quad mesh that the graph will be generated from. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Relax Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/relax-graph Perform a relaxation on the graph. This block will move the vertices with the objective of creating uniform beam lengths. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | The Graph to relax. | | Surface | [Implicit Body](../../../../block-documentation/types/implicit-body) | The surface which to constrain the graph vertices. Vertices starting within the domain Tolerance will be constrained to the surface of this body. | | Max iterations | [Integer](../../../../block-documentation/types/integer) | The maximum number of iterations during the relaxation process. | | Min angle | [Scalar](../../../../block-documentation/types/scalar) | The minimum angle between beams. The relaxation process will attempt to prevent any beam angles below this threshold. The input value should be between 0 and 180.0 degrees. | | Volume | [Implicit Body](../../../../block-documentation/types/implicit-body) | A secondary domain in the volume of which to constrain the graph vertices. This is typically a loop around the trimmed ends of the graph. Vertices will be able to move within this domain, but not away from it. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum deviation outside the Domain. If no value is provided, the block will calculate a tolerance based on the graph. The input value should be always positive. | | Move limit | [Scalar](../../../../block-documentation/types/scalar) | The maximum amount of movement per graph vertex between iterations. A smaller value may increase stability at the cost of a reduced convergence rate. If left unspecified, the block will calculate a move limit based on the graph. | | Passive region | [Implicit Body](../../../../block-documentation/types/implicit-body) | Region in which all vertices are unmodified. All vertices within this region will have a displacement of zero. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Ribs from Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/ribs-from-graph Create extruded ribs from a graph on an implicit body surface and custom extrusion direction. ### Inputs | Name | Type | Description | | - | - | - | | Graph | [Graph](../../../../block-documentation/types/graph) | The graph to extrude into ribs. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The body on which to maintain the centerlines. If no input is used in the "Direction" input, the ribs will be extruded along the surface normal direction of this part. | | Height | [Scalar Field](../../../../block-documentation/types/scalar-field) | The height of the ribs. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The thickness of the ribs. | | Direction | [Vector Field](../../../../block-documentation/types/vector-field) | The direction to extrude the ribs. If no vector field is provided, the gradient of the implicit body will be used. | | Draft angle | [Scalar Field](../../../../block-documentation/types/scalar-field) | Draft angle to apply to the ribs. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Minimum feature size to accurately follow the surface of the body. If not specified, 0.5% of the diagonal length of the bounding box is taken as the minimum feature size. | ### Outputs | Type | | - | | [Lattice](../../../../block-documentation/types/lattice) | # Voronoi Surface Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/create/voronoi-surface-graph Creates a Graph from the Voronoi Diagram of a list of Points restricted to the surface boundary of a body. ### Inputs | Name | Type | Description | | - | - | - | | Seed points | [Point List](../../../../block-documentation/types/point) | List of Points to generate the Voronoi Graph from. | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to generate the Voronoi Graph on. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Modify Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/modify > **[Blend Intersections](../../../block-documentation/blocks/rib-design/modify/blend-intersections)** > **[Collapse Vertices](../../../block-documentation/blocks/modeling/utilities/collapse-vertices)** > **[Collapse Vertices by Angle](../../../block-documentation/blocks/lattices/utilities/collapse-vertices-by-angle)** > **[Trim Lattice](../../../block-documentation/blocks/lattices/utilities/trim-lattice)** > **[Merge Graphs](../../../block-documentation/blocks/modeling/utilities/merge-graphs)** # Blend Intersections Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/rib-design/modify/blend-intersections Add blend radii between lattice beams. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | The lattice to add blend radii to. | | Blend radius | [Scalar Field](../../../../block-documentation/types/scalar-field) | Blend radius to apply to lattice vertices. | | Blend type | Blend Enum | Type of blend between the lattice elements. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Structures Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures ## Analysis > **[Static Analysis](../../block-documentation/blocks/structures/analysis/static-analysis)** > **[Modal Analysis](../../block-documentation/blocks/structures/analysis/modal-analysis)** > **[Buckling Analysis](../../block-documentation/blocks/structures/analysis/buckling-analysis)** > **[Thermal Analysis](../../block-documentation/blocks/structures/analysis/thermal-analysis)** > **[Homogenize Unit Cell](../../block-documentation/blocks/structures/analysis/homogenize-unit-cell)** > **[Nonlinear Thermal Analysis](../../block-documentation/blocks/structures/analysis/nonlinear-thermal-analysis)** > **[Transient Thermal Analysis](../../block-documentation/blocks/structures/analysis/transient-thermal-analysis)** ## Model > **[Simulation Model](../../block-documentation/blocks/structures/model/simulation-model)** > **[Solid Domain](../../block-documentation/blocks/structures/model/solid-domain)** > **[Lattice Domain](../../block-documentation/blocks/structures/model/lattice-domain)** > **[Tie Constraint](../../block-documentation/blocks/structures/model/tie-constraint)** > **[Structural Contact](../../block-documentation/blocks/structures/model/structural-contact)** > **[Thermal Bonded Contact](../../block-documentation/blocks/structures/model/thermal-bonded-contact)** > **[Cyclic Symmetry](../../block-documentation/blocks/structures/model/cyclic-symmetry)** > **[Rigid Connector](../../block-documentation/blocks/structures/model/rigid-connector)** > **[Spring](../../block-documentation/blocks/structures/model/spring)** ## Material Attributes > **[Isotropic Material](../../block-documentation/blocks/structures/material-attributes/isotropic-material)** > **[Isotropic Linear Elastic Property](../../block-documentation/blocks/structures/material-attributes/isotropic-linear-elastic-property)** > **[Isotropic Thermal Property](../../block-documentation/blocks/structures/material-attributes/isotropic-thermal-property)** > **[Isotropic Thermal Expansion Property](../../block-documentation/blocks/structures/material-attributes/isotropic-thermal-expansion-property)** > **[Orthotropic Material](../../block-documentation/blocks/structures/material-attributes/orthotropic-material)** > **[Orthotropic Linear Elastic Property](../../block-documentation/blocks/structures/material-attributes/orthotropic-linear-elastic-property)** > **[Orthotropic Stiffness Tensor](../../block-documentation/blocks/structures/material-attributes/orthotropic-stiffness-tensor)** > **[Orthotropic Thermal Property](../../block-documentation/blocks/structures/material-attributes/orthotropic-thermal-property)** > **[Orthotropic Thermal Expansion Property](../../block-documentation/blocks/structures/material-attributes/orthotropic-thermal-expansion-property)** > **[Anisotropic Material](../../block-documentation/blocks/structures/material-attributes/anisotropic-material)** > **[Anisotropic Stiffness Tensor](../../block-documentation/blocks/structures/material-attributes/anisotropic-stiffness-tensor)** > **[Anisotropic Thermal Property](../../block-documentation/blocks/structures/material-attributes/anisotropic-thermal-property)** > **[Anisotropic Thermal Expansion Property](../../block-documentation/blocks/structures/material-attributes/anisotropic-thermal-expansion-property)** > **[Solid Attribute](../../block-documentation/blocks/structures/material-attributes/solid-attribute)** > **[Beam Attribute](../../block-documentation/blocks/structures/material-attributes/beam-attribute)** > **[Shell Attribute](../../block-documentation/blocks/structures/material-attributes/shell-attribute)** > **[Point Attribute](../../block-documentation/blocks/structures/material-attributes/point-attribute)** ## Mesh > **[FE Volume Mesh](../../block-documentation/blocks/structures/mesh/fe-volume-mesh)** > **[FE Lattice Mesh](../../block-documentation/blocks/structures/mesh/fe-lattice-mesh)** > **[FE Surface Mesh](../../block-documentation/blocks/structures/mesh/fe-surface-mesh)** > **[FE CAD Solid Mesh](../../block-documentation/blocks/structures/mesh/fe-cad-solid-mesh)** > **[FE Shell Mesh from CAD](../../block-documentation/blocks/structures/mesh/fe-shell-mesh-from-cad)** > **[Volume Mesh](../../block-documentation/blocks/structures/mesh/volume-mesh)** > **[Robust Tetrahedral Mesh](../../block-documentation/blocks/structures/mesh/robust-tetrahedral-mesh)** > **[Delaunay Volume Mesh](../../block-documentation/blocks/structures/mesh/delaunay-volume-mesh)** > **[Remesh Surface](../../block-documentation/blocks/structures/mesh/remesh-surface)** > **[Parallel Remesh Surface](../../block-documentation/blocks/structures/mesh/parallel-remesh-surface)** > **[Remesh Surface with Cyclic Symmetry](../../block-documentation/blocks/structures/mesh/remesh-surface-with-cyclic-symmetry)** > **[Mirror FE Mesh](../../block-documentation/blocks/structures/mesh/mirror-fe-mesh)** > **[Merge FE Meshes](../../block-documentation/blocks/structures/mesh/merge-fe-meshes)** > **[Boundary Layer Mesh](../../block-documentation/blocks/structures/mesh/boundary-layer-mesh)** > **[Mesh Quality](../../block-documentation/blocks/structures/mesh/mesh-quality)** > **[Associate FE Mesh](../../block-documentation/blocks/structures/mesh/associate-fe-mesh)** > **[FE Point](../../block-documentation/blocks/structures/mesh/fe-point)** ## Boundary Conditions > **[Force](../../block-documentation/blocks/structures/boundary-conditions/force)** > **[Edge Force](../../block-documentation/blocks/structures/boundary-conditions/edge-force)** > **[Surface Force](../../block-documentation/blocks/structures/boundary-conditions/surface-force)** > **[Acceleration Load](../../block-documentation/blocks/structures/boundary-conditions/acceleration-load)** > **[Point Force](../../block-documentation/blocks/structures/boundary-conditions/point-force)** > **[Point Moment](../../block-documentation/blocks/structures/boundary-conditions/point-moment)** > **[Pressure](../../block-documentation/blocks/structures/boundary-conditions/pressure)** > **[Bearing Force](../../block-documentation/blocks/structures/boundary-conditions/bearing-force)** > **[Cylindrical Restraint](../../block-documentation/blocks/structures/boundary-conditions/cylindrical-restraint)** > **[Displacement Restraint](../../block-documentation/blocks/structures/boundary-conditions/displacement-restraint)** > **[Point Restraint](../../block-documentation/blocks/structures/boundary-conditions/point-restraint)** > **[Surface Heat Flux](../../block-documentation/blocks/structures/boundary-conditions/surface-heat-flux)** > **[Convection Boundary Load](../../block-documentation/blocks/structures/boundary-conditions/convection-boundary-load)** > **[Radiation Boundary Load](../../block-documentation/blocks/structures/boundary-conditions/radiation-boundary-load)** > **[Volumetric Heat Generation](../../block-documentation/blocks/structures/boundary-conditions/volumetric-heat-generation)** > **[Heat Generation](../../block-documentation/blocks/structures/boundary-conditions/heat-generation)** > **[Temperature Restraint](../../block-documentation/blocks/structures/boundary-conditions/temperature-restraint)** > **[Initial Temperature](../../block-documentation/blocks/structures/boundary-conditions/initial-temperature)** > **[Applied Temperature Load](../../block-documentation/blocks/structures/boundary-conditions/applied-temperature-load)** > **[Velocity](../../block-documentation/blocks/structures/boundary-conditions/velocity)** > **[Rotational Force](../../block-documentation/blocks/structures/boundary-conditions/rotational-force)** ## Utilities > **[FE Region by Body](../../block-documentation/blocks/structures/utilities/fe-region-by-body)** > **[FE Boundary by Body](../../block-documentation/blocks/structures/utilities/fe-boundary-by-body)** > **[FE Boundary by Flood Fill](../../block-documentation/blocks/structures/utilities/fe-boundary-by-flood-fill)** > **[Virtual Region by Body](../../block-documentation/blocks/structures/utilities/virtual-region-by-body)** > **[Virtual Boundary by Body](../../block-documentation/blocks/structures/utilities/virtual-boundary-by-body)** > **[Transform Material](../../block-documentation/blocks/structures/utilities/transform-material)** ## Exchange > **[Import FE Mesh](../../block-documentation/blocks/structures/exchange/import-fe-mesh)** > **[Export FE Mesh](../../block-documentation/blocks/structures/exchange/export-fe-mesh)** > **[Export Material](../../block-documentation/blocks/structures/exchange/export-material)** > **[Export FE Model](../../block-documentation/blocks/structures/exchange/export-fe-model)** > **[Export Static Analysis](../../block-documentation/blocks/structures/exchange/export-static-analysis)** > **[Export Modal Analysis](../../block-documentation/blocks/structures/exchange/export-modal-analysis)** > **[Export Buckling Analysis](../../block-documentation/blocks/structures/exchange/export-buckling-analysis)** > **[Export Thermal Analysis](../../block-documentation/blocks/structures/exchange/export-thermal-analysis)** > **[Import Static Structural Result](../../block-documentation/blocks/structures/exchange/import-static-structural-result)** > **[Import Modal Result](../../block-documentation/blocks/structures/exchange/import-modal-result)** > **[Import Buckling Result](../../block-documentation/blocks/structures/exchange/import-buckling-result)** > **[Import Static Thermal Result](../../block-documentation/blocks/structures/exchange/import-static-thermal-result)** > **[Import Time Dependent Structural Result](../../block-documentation/blocks/structures/exchange/import-time-dependent-structural-result)** > **[Import Time Dependent Thermal Result](../../block-documentation/blocks/structures/exchange/import-time-dependent-thermal-result)** > **[Import Superelement](../../block-documentation/blocks/structures/exchange/import-superelement)** > **[Displacement Point Map](../../block-documentation/blocks/structures/exchange/displacement-point-map)** > **[Von Mises Stress Point Map](../../block-documentation/blocks/structures/exchange/von-mises-stress-point-map)** > **[Temperature Point Map](../../block-documentation/blocks/structures/exchange/temperature-point-map)** > **[Heat Flux Point Map](../../block-documentation/blocks/structures/exchange/heat-flux-point-map)** > **[Density Point Map](../../block-documentation/blocks/structures/exchange/density-point-map)** > **[Pressure Point Map](../../block-documentation/blocks/structures/exchange/pressure-point-map)** > **[Velocity Point Map](../../block-documentation/blocks/structures/exchange/velocity-point-map)** > **[Unit System](../../block-documentation/blocks/structures/exchange/unit-system)** # Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis > **[Static Analysis](../../../block-documentation/blocks/structures/analysis/static-analysis)** > **[Modal Analysis](../../../block-documentation/blocks/structures/analysis/modal-analysis)** > **[Buckling Analysis](../../../block-documentation/blocks/structures/analysis/buckling-analysis)** > **[Thermal Analysis](../../../block-documentation/blocks/structures/analysis/thermal-analysis)** > **[Homogenize Unit Cell](../../../block-documentation/blocks/structures/analysis/homogenize-unit-cell)** > **[Nonlinear Thermal Analysis](../../../block-documentation/blocks/structures/analysis/nonlinear-thermal-analysis)** > **[Transient Thermal Analysis](../../../block-documentation/blocks/structures/analysis/transient-thermal-analysis)** # Buckling Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis/buckling-analysis > **[FE Model, Load case, Integer, Scalar, Scalar](#fe-model-load-case-integer-scalar-scalar)** > **[FE Model, Load case, Integer, Scalar, Scalar, 1.1.0](#fe-model-load-case-integer-scalar-scalar-110)** *** ## About this Block **What it does:** Calculates the critical buckling load factors and their corresponding mode shapes, for a given [**Simulation Model**](/block-documentation/blocks/structures/model/simulation-model.html) and set of Boundary Conditions. **Common uses:** * Understanding the buckling modes of your model. **Tips:** * The result of the buckling simulation ('buckling load factor" property in the block's properties) is a list of factors by which the model's load(s) must be multiplied by to reach the critical buckling load for each mode. * The results are ranked by the intensity of each mode, from high to low. * You can bound the minimum and maximum eigenvalues, but it will return an error if there are no eigenvalues in that range. * The loads are assumed to be applied slowly until the model reaches a state of equilibrium (static assumption), and the relationship between loads and displacements is assumed to be linear. * All inertial and damping forces are neglected. * Boundary conditions must contain a displacement restraint for at least one node. Otherwise, the model isn't fixed in space. * When the calculation is complete, a Head's Up Display (HUD) will appear that allows you to visualize the block's results. The block's visibility must be on to see the results window. * This is a linear buckling analysis. * It is recommended to use a Quadratic Geometric order FE Mesh with any analysis to get the most accurate results. ## Example File Download Example: [Buckling Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/modal_buckling_analysis.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/buckling.png) *** ## FE Model, Load case, Integer, Scalar, Scalar Calculate the critical buckling loads and buckling mode shapes of an FE Model subject to prescribed boundary conditions. The resulting eigenvalues are factors by which the load must be multiplied to reach the critical buckling load for that mode. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Maximum number of modes to calculate. | | Min eigenvalue | [Scalar](../../../../block-documentation/types/scalar) | Lower bound of returned eigenvalues. | | Max eigenvalue | [Scalar](../../../../block-documentation/types/scalar) | Upper bound of returned eigenvalues. | ### Outputs | Type | | - | | [Buckling Result](../../../../block-documentation/types/buckling-result) | *** ## FE Model, Load case, Integer, Scalar, Scalar, 1.1.0 Calculate the critical buckling loads and buckling mode shapes of an FE Model subject to prescribed boundary conditions. The resulting eigenvalues are factors by which the load must be multiplied to reach the critical buckling load for that mode. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Maximum number of modes to calculate. | | Min eigenvalue | [Scalar](../../../../block-documentation/types/scalar) | Lower bound of returned eigenvalues. | | Max eigenvalue | [Scalar](../../../../block-documentation/types/scalar) | Upper bound of returned eigenvalues. | ### Outputs | Type | | - | | [Buckling Result](../../../../block-documentation/types/buckling-result) | # Homogenize Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis/homogenize-unit-cell > **[FE Model, Box, Scalar, Bool, Bool](#fe-model-box-scalar-bool-bool)** > **[FE Model, Box, Scalar, Bool, Bool, 1.1.0](#fe-model-box-scalar-bool-bool-110)** *** ## About this Block **What it does:** The **Homogenize Unit Cell** block can be used to calculate the effective mechanical and thermal properties of a unit cell. These properties, when applied to a solid volume, can be used to determine the structural and thermal performance of a lattice structure occupying this volume that is composed of this unit cell. This way, you are able to estimate the macro-level performance of the lattice geometry without meshing its complex structure. This saves time and computational effort to analyze lattice structures with a static or thermal analysis. The block functions by applying unit loads to the unit cell in the following ways : (a) Mechanical: 6 unit strain loads in the tensile (X, Y, Z) and shear (XY, XZ, YZ) directions under periodic boundary conditions to calculate the effective stiffness of the unit cell. The block calculates the 21 components Cij of the anisotropic stiffness matrix. ![Anisotropic Stiffness Matrix](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization1.png) (b) Thermal: 3 unit temperature loads in the X, Y, and Z direction under periodic boundary conditions to calculate the effective conductivity and specific heat of the unit cell. The block calculates the 6 components kij of the anisotropic thermal conductivity matrix. ![Anisotropic Thermal Conductivity Matrix](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization2.png) In addition to the mechanical and thermal properties, the effective density of the unit cell is also calculated. **Common uses:** * Analyzing complex lattice structures. * Exporting material properties. **Tips:** | Pros | Cons | | - | - | | A fast method of analyzing lattices. | More setup steps. | | Works for any type of lattice. | Least accurate option compared to using a solid element or beam element simulations. | | Works on large and high-density lattice structures. | No edge effects. | | | No stress concentrations. | | | Ignores blend lattice-wall radius. | | | Lattice thickness must be uniform. | * The block has the following inputs : * *Unit Cell Model* : This is the [Simulation Model](/block-documentation/blocks/structures/model/simulation-model.html) of the unit cell that has its mesh, attribute (solid) and the material property. * *Design Volume* : This is the Implicit Body that envelops the boundaries of the unit cell exactly. This is typically a box. Unit cells with rounded corners are typically trimmed to fit a box. ![Design Volume](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization3.png) * *Tolerance* : This is the search tolerance to establish a rigid connection between the periodic boundaries of the unit cell. The tolerance value should be large enough to capture the nodes on the periodic boundaries but small enough to avoid over-constraining these boundaries. A recommended value is 10% of the element size of the unit cell mesh. ![Tolerance](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization4.png) * *Mechanical and Thermal checkboxes* : By default, the block has the *Mechanical* option checked to calculate the effective elastic properties. Optionally, checking the *Thermal* option will prompt the block to calculate the effective Thermal properties like the anisotropic conductivity and specific heat capacity of the unit cell. * Periodicity in all directions : While this method offers a convenient way to cut down the computational effort for large lattice structure simulation, it is best applied to situations where this lattice is periodic in all 3 orthogonal directions. ![Periodicity](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization5.png) * Tolerance setting : The tolerance setting defines the maximum distance between the nodes on the periodic boundaries that will be connected. Typically, the default tolerance value of 0.01mm should work for most cases, but a recommended tolerance size is about 10% of the mesh size. A method to check that the tolerance value is appropriate to capture the periodic boundaries is to increase the deformation scale of any Homogenization result. If the tolerance is right, the boundaries would deform uniformly (image on the left). If not, there would be disconnected nodes in the boundary (image on the right). ![Tolerance setting](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization6.png) If the tolerance value is too large, the block will report the following error : "Error in solving the linear system of equations. System is not positive definite." * Exporting Material properties : It is possible to export the anisotropic material properties generated by the Homogenize Unit cell block. This can be achieved through the Export Material block as described in this [support article](https://support.ntopology.com/hc/en-us/articles/4409474211219-Can-I-export-the-material-from-the-Homogenize-Unit-Cell-). ## Example File ### Example 1 - Bend Testing a Lattice Panel ![Bending Test](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization7.png) In this example, a lattice panel is tested in bending to estimate its flexural strength. Two different models of this panel are analyzed - one composed of the lattice structure and the second with a volume representing this lattice. We'll refer to the first model as the **Microstructure** model and the second model as the **Macrostructure** model (image below). ![Macrostructure](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization8.png) Assuming the microstructure model being analyzed is made out of Aluminum, the Homogenize Unit Cell block is used to estimate the effective elastic properties using Aluminum and the unit cell of the microstructure model. This block is then used as the material property input for the analysis of the macrostructure. The static analysis of the panels involves the following boundary conditions: ![Static Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization9.png) Here are the x-direction longitudinal stress results of the 2 models when bent by a force of 500 N in the indicated direction: ![x-direction](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization10.png) Here is a table summarizing the performance and results of the 2 panels: | Model | S11 Stress, MPa | Max Displacement, mm | Mesh Time, s | Solve Time, s | | - | - | - | - | - | | **Macromodel** | 131.37 | 1.47 | 15 | 340 | | **Micromodel** | 130.22 | 1.43 | 46 | 45 | To summarize, we got similar results between the microstructure and macrostructure models. Although the macrostructure took longer to compute owing to the contact calculation between the panel and the macrostructure volume, the meshing speed was much faster than the microstructure model. If this panel had several more unit cells, the time taken to mesh would compensate for the slower solve times, making the macrostructure model more efficient in iteratively evaluating its structural performance. One caveat to the macrostructure analysis is that it does not report the localized stresses on the lattice, which might be required for fatigue evaluations. Download Example: [Bend Testing a Lattice Panel](https://ntopology.box.com/s/shyzipml6m5v5a12sz7mlf4kvg1gektk) ### Example 2 - Thermal Analysis of a Porous Structure ![Unit Cell](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization11.png) In this example, a porous structure composed of the unit cell (image above) is analyzed to estimate its thermal performance from an applied heat flux load. It is assumed that the structure is made of Aluminum. The thermal boundary conditions applied to the porous structure (and the representative macrostructure) is outlined in the following image: ![Macrostructure](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization12.png) The following images illustrate the temperature distribution between the macromodel and the micromodel. Both models show a maximum temperature of around 50 K with the applied heat flux load: ![Temperature Distribution](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/homogenization13.png) Download Example: [Thermal Analysis of a Porous Structure](https://ntopology.box.com/s/q8r9edg0b2m1pc9x209v215d01z0d2qk) *** ## FE Model, Box, Scalar, Bool, Bool Performs a numerical homogenization on an FE Model representing a unit cell of a periodic structure to estimate effective mechanical and thermal properties of an equivalent bounding volume of the unit cell. The homogenized elastic properties are computed from the displacement fields associated with six unit strain loads in the X, Y, Z, XY, XZ, YZ directions while the thermal properties are computed from the temperature fields associated with 3 unit temperature loads in the X, Y, and Z directions under periodic boundary conditions. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell model | [FE Model](../../../../block-documentation/types/fe-model) | The FE Model of unit cell. | | Design volume | [Box](../../../../block-documentation/types/box) | The design volume to be homogenized. This will typically be the bounding geometry of the unit cell. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for setting periodic boundary conditions. | | Mechanical | [Bool](../../../../block-documentation/types/bool) | Select this option to calculate the elastic properties from the unit cell model. | | Thermal | [Bool](../../../../block-documentation/types/bool) | Select this option to calculate the thermal properties from the unit cell model. | ### Outputs | Type | | - | | [Homogenization Result](../../../../block-documentation/types/homogenization-result) | *** ## FE Model, Box, Scalar, Bool, Bool, 1.1.0 Performs a numerical homogenization on an FE Model representing a unit cell of a periodic structure to estimate effective mechanical and thermal properties of an equivalent bounding volume of the unit cell. The homogenized elastic properties are computed from the displacement fields associated with six unit strain loads in the X, Y, Z, XY, XZ, YZ directions while the thermal properties are computed from the temperature fields associated with 3 unit temperature loads in the X, Y, and Z directions under periodic boundary conditions. ### Inputs | Name | Type | Description | | - | - | - | | Unit cell model | [FE Model](../../../../block-documentation/types/fe-model) | The FE Model of unit cell. | | Design volume | [Box](../../../../block-documentation/types/box) | The design volume to be homogenized. This will typically be the bounding geometry of the unit cell. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for setting periodic boundary conditions. | | Mechanical | [Bool](../../../../block-documentation/types/bool) | Select this option to calculate the elastic properties from the unit cell model. | | Thermal | [Bool](../../../../block-documentation/types/bool) | Select this option to calculate the thermal properties from the unit cell model. | ### Outputs | Type | | - | | [Homogenization Result](../../../../block-documentation/types/homogenization-result) | # Modal Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis/modal-analysis > **[FE Model, Restraints, Integer, Scalar, Scalar](#fe-model-restraints-integer-scalar-scalar)** > **[FE Model, Restraints, Integer, Scalar, Scalar, 1.1.0](#fe-model-restraints-integer-scalar-scalar-110)** > **[FE Model, Restraints, Integer, Scalar, Scalar, 1.2.0](#fe-model-restraints-integer-scalar-scalar-120)** > **[FE Model, Restraints, Integer, Scalar, Scalar, 1.3.0](#fe-model-restraints-integer-scalar-scalar-130)** *** ## About this Block **What it does:** Runs an analysis on an [**Simulation Model**](/block-documentation/blocks/structures/model/simulation-model.html) that calculates its natural frequencies (eigenfrequencies) and their corresponding mode shapes. **Common uses:** * Understanding the vibrational characteristics of your model. **Tips:** * Free modes of vibration calculations don't consider forces. Therefore, we don't need to use them in the boundary conditions. * Run free-free modal analysis by not providing any Restraints. * You can bound the minimum and maximum frequencies, but it will return an error if there are no natural frequencies in that range. * When the calculation is complete, a Head's Up Display (HUD) will appear that allows you to visualize the block's results. The block's visibility must be on to see the results window. * You can change the min and max values in the colormap by clicking on their values. * The "Deformation scale" controls the exaggeration of the displacement for visual inspection. * To access the eigenfrequencies, open the Info Panel > Properties. Scroll down and expand the eigenfrequencies. Drag these into the Notebook to use the values. * It is recommended to use a Quadratic Geometric order FE Mesh with any analysis to get the most accurate results. ## Example File Download Example: [Modal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/modal_buckling_analysis.ntop) ![Modal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/modal_analysis.png) *** ## FE Model, Restraints, Integer, Scalar, Scalar Calculate the natural frequencies and mode shapes of an FE Model subject to prescribed boundary conditions. This block calculates a specified number of vibration modes. Providing minimum and maximum frequencies bounds the range of frequencies to be returned. Removing the optional Restraints input leads to a free-free Modal Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Restraints | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The displacement restraints. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Maximum number of modes to calculate. | | Min frequency | [Scalar](../../../../block-documentation/types/scalar) | Lower bound of returned frequencies. | | Max frequency | [Scalar](../../../../block-documentation/types/scalar) | Upper bound of returned frequencies. | ### Outputs | Type | | - | | [Modal Result](../../../../block-documentation/types/modal-result) | *** ## FE Model, Restraints, Integer, Scalar, Scalar, 1.1.0 Calculate the natural frequencies and mode shapes of an FE Model subject to prescribed boundary conditions. This block calculates a specified number of vibration modes. Providing minimum and maximum frequencies bounds the range of frequencies to be returned. Removing the optional Restraints input leads to a free-free Modal Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Restraints | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The displacement restraints. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Maximum number of modes to calculate. | | Min frequency | [Scalar](../../../../block-documentation/types/scalar) | Lower bound of returned frequencies. | | Max frequency | [Scalar](../../../../block-documentation/types/scalar) | Upper bound of returned frequencies. | ### Outputs | Type | | - | | [Modal Result](../../../../block-documentation/types/modal-result) | *** ## FE Model, Restraints, Integer, Scalar, Scalar, 1.2.0 Calculate the natural frequencies and mode shapes of an FE Model subject to prescribed boundary conditions. This block calculates a specified number of vibration modes. Providing minimum and maximum frequencies bounds the range of frequencies to be returned. Removing the optional Restraints input leads to a free-free Modal Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Restraints | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The displacement restraints. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Maximum number of modes to calculate. | | Min frequency | [Scalar](../../../../block-documentation/types/scalar) | Lower bound of returned frequencies. | | Max frequency | [Scalar](../../../../block-documentation/types/scalar) | Upper bound of returned frequencies. | ### Outputs | Type | | - | | [Modal Result](../../../../block-documentation/types/modal-result) | *** ## FE Model, Restraints, Integer, Scalar, Scalar, 1.3.0 Calculate the natural frequencies and mode shapes of an FE Model subject to prescribed boundary conditions. This block calculates a specified number of vibration modes. Providing minimum and maximum frequencies bounds the range of frequencies to be returned. Removing the optional Restraints input leads to a free-free Modal Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Restraints | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The displacement restraints. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | Maximum number of modes to calculate. | | Min frequency | [Scalar](../../../../block-documentation/types/scalar) | Lower bound of returned frequencies. | | Max frequency | [Scalar](../../../../block-documentation/types/scalar) | Upper bound of returned frequencies. | ### Outputs | Type | | - | | [Modal Result](../../../../block-documentation/types/modal-result) | # Nonlinear Thermal Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis/nonlinear-thermal-analysis Perform nonlinear steady state heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. All transient effects of heat transfer are neglected and the temperatures are reported assuming that the system has reached equilibrium. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied thermal loads. | | Maximum iterations | [Integer](../../../../block-documentation/types/integer) | Maximum number of iterations to use for the analysis | | Solution convergence | [Scalar](../../../../block-documentation/types/scalar) | The iterative solution will stop, when the Euclidean norm of the solution update vector is less than this tolerance | | Reaction convergence | [Scalar](../../../../block-documentation/types/scalar) | The iterative solution will stop, when the Euclidean norm of the force imbalance vector is less than this tolerance | | Output step | [Integer](../../../../block-documentation/types/integer) | Outputs the results at every Nth time iteration. | ### Outputs | Type | | - | | [Static Thermal Result](../../../../block-documentation/types/static-thermal-result) | # Static Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis/static-analysis ## About this Block **What it does:** Calculates displacements, strains, stresses, and reaction forces using static finite element analysis, for a given [**Simulation Model**](/block-documentation/blocks/structures/model/simulation-model.html) and set of Boundary Conditions. **Common uses:** * Validating designs. * In Topology Optimization workflows to analyze the design before and after. * Generating fields from the resulting stresses, strains, and displacement results. **Tips:** * The loads are assumed to be applied slowly until the model reaches a state of equilibrium (static assumption), and the relationship between loads and displacements is assumed to be linear. The analysis neglects all inertial and damping forces. * Boundary conditions must contain a displacement restraint for at least one node to fix the model in space and allow it to reach equilibrium. * When the calculation is complete, a Head's Up Display (HUD) will appear that allows you to visualize the block's results. The block's visibility must be on to see the results window. * The following metrics are viewable as 3D colormaps overlaid onto the object through the dropdown menus. You can change the min and max values in the colormap by clicking on their values, and you can change the colormap by clicking on the arrow to the top left of the scale bar. ![Static Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/StaticAnalysis_01.png) * The "Deformation scale" controls the exaggeration of the displacement for visual inspection. The Scale Factor controls the exaggeration of the displacement for visual inspection. * The stress, strain, and displacement results can be extracted from the **Static Analysis** properties by dragging them into the Notebook or into a block input. View the results with the Field Viewer (F). * You can generate point maps from the **Static Analysis** block using the [**Von Mises Stress Point Map**](/block-documentation/blocks/structures/exchange/von-mises-stress-point-map.html) and [**Displacement Point Map**](/block-documentation/blocks/structures/exchange/displacement-point-map.html) block. * If you need other point maps, you can generate your own point maps by using the [**Point Map**](/block-documentation/blocks/fields/utilities/point-map.html) block with the value input being the [**Evaluate Field**](/block-documentation/blocks/fields/utilities/evaluate-field.html) block with a **Point** list. Use the same **Point** list as the Point input. * It is recommended to use a Quadratic Geometric order FE Mesh with any analysis to get the most accurate results. ## Example File Download Example: [Static Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/StaticAnalysis.ntop) ![Static Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/static_analysis.png) *** Calculate displacements, strains, stresses, and reaction forces on an FE Model subject to applied boundary conditions. The loads are assumed to be applied slowly until the model reaches a state of equilibrium, and the relationship between loads and displacements is assumed to be linear. All inertial and damping forces are neglected. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | ### Outputs | Type | | - | | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | # Thermal Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis/thermal-analysis > **[FE Model, Load case](#fe-model-load-case)** > **[FE Model, Load case, 1.1.0](#fe-model-load-case-110)** *** ## About this Block **What it does:** The **Thermal Analysis** block runs a steady-state thermal conduction analysis based on temperature and heat flux boundary conditions. **Tips:** * All transient effects of heat transfer are neglected. * The temperatures are reported assuming that the system has reached equilibrium. * To run a Thermal Analysis, you need an [**Simulation Model**](/block-documentation/blocks/structures/model/simulation-model.html) with a material with thermal properties defined. * Thermal Analysis can run with one or more boundary conditions. * When the calculation is complete, a Head's Up Display (HUD) will appear that allows you to visualize the block's results. The block's visibility must be on to see the results window. * It is recommended to use a Quadratic Geometric Order FE Mesh with any analysis to get the most accurate results. ## Example File Download Example: [Thermal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thermal_analysis.ntop) ![Thermal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thermal_analysis.png) *** ## FE Model, Load case Perform steady state heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. All transient effects of heat transfer are neglected and the temperatures are reported assuming that the system has reached equilibrium. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied thermal loads. | ### Outputs | Type | | - | | [Static Thermal Result](../../../../block-documentation/types/static-thermal-result) | *** ## FE Model, Load case, 1.1.0 Perform steady state heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. All transient effects of heat transfer are neglected and the temperatures are reported assuming that the system has reached equilibrium. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied thermal loads. | ### Outputs | Type | | - | | [Static Thermal Result](../../../../block-documentation/types/static-thermal-result) | # Transient Thermal Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/analysis/transient-thermal-analysis Perform a transient heat conduction analysis on an FE Model subject to temperature and heat flux boundary conditions. ### Inputs | Name | Type | Description | | - | - | - | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The finite element model. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied thermal loads. | | Initial temperature | [Temperature Field](../../../../block-documentation/types/temperature-field) | The initial temperature of the domains in the FE Model. | | Duration | [Scalar](../../../../block-documentation/types/scalar) | Duration of the simulation | | Initial time step | [Scalar](../../../../block-documentation/types/scalar) | Initial time step for the transient analysis. The program will control the step size for subsequent steps. | | Save increment | [Integer](../../../../block-documentation/types/integer) | Controls the amount of data that is stored and accessible after the simulation completes. The default value of 1 will save results for all increments, whereas a value of 0 will save only the first and last increment. For any value, N > 1, the block will save results for every N increments. | | Fixed time step | [Bool](../../../../block-documentation/types/bool) | Option to fix the initial time step for the entire analysis. If this option is unchecked, the solver uses an automatic time-stepping scheme that varies the initial time step based on the stability of the analysis. | ### Outputs | Type | | - | | [Time Dependent Thermal Result](../../../../block-documentation/types/time-dependent-thermal-result) | # Boundary Conditions Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions > **[Force](../../../block-documentation/blocks/structures/boundary-conditions/force)** > **[Edge Force](../../../block-documentation/blocks/structures/boundary-conditions/edge-force)** > **[Surface Force](../../../block-documentation/blocks/structures/boundary-conditions/surface-force)** > **[Acceleration Load](../../../block-documentation/blocks/structures/boundary-conditions/acceleration-load)** > **[Point Force](../../../block-documentation/blocks/structures/boundary-conditions/point-force)** > **[Point Moment](../../../block-documentation/blocks/structures/boundary-conditions/point-moment)** > **[Pressure](../../../block-documentation/blocks/structures/boundary-conditions/pressure)** > **[Bearing Force](../../../block-documentation/blocks/structures/boundary-conditions/bearing-force)** > **[Cylindrical Restraint](../../../block-documentation/blocks/structures/boundary-conditions/cylindrical-restraint)** > **[Displacement Restraint](../../../block-documentation/blocks/structures/boundary-conditions/displacement-restraint)** > **[Point Restraint](../../../block-documentation/blocks/structures/boundary-conditions/point-restraint)** > **[Surface Heat Flux](../../../block-documentation/blocks/structures/boundary-conditions/surface-heat-flux)** > **[Convection Boundary Load](../../../block-documentation/blocks/structures/boundary-conditions/convection-boundary-load)** > **[Radiation Boundary Load](../../../block-documentation/blocks/structures/boundary-conditions/radiation-boundary-load)** > **[Volumetric Heat Generation](../../../block-documentation/blocks/structures/boundary-conditions/volumetric-heat-generation)** > **[Heat Generation](../../../block-documentation/blocks/structures/boundary-conditions/heat-generation)** > **[Temperature Restraint](../../../block-documentation/blocks/structures/boundary-conditions/temperature-restraint)** > **[Initial Temperature](../../../block-documentation/blocks/structures/boundary-conditions/initial-temperature)** > **[Applied Temperature Load](../../../block-documentation/blocks/structures/boundary-conditions/applied-temperature-load)** > **[Velocity](../../../block-documentation/blocks/structures/boundary-conditions/velocity)** > **[Rotational Force](../../../block-documentation/blocks/structures/boundary-conditions/rotational-force)** # Acceleration Load Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/acceleration-load ## About this Block **What it does:** Applies an acceleration load to a selected region. The applied force is calculated by multiplying the acceleration vector by the element masses and distributing it over the nodes. **Common uses:** * Adding gravity to a simulation. **Tips:** * The reference Frame defines the components of the Vector. This input is optional. Leaving it blank automatically applies the global coordinate system. * Acts on a defined FE Region. ## Example File ![Acceleration Load](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/acceleration_load.jpg) *** Applies an acceleration load to a selected region. The applied force is calculated by multiplying the acceleration vector by the element masses and distributing over the nodes. ### Inputs | Name | Type | Description | | - | - | - | | Region | [Region](../../../../block-documentation/types/region) | The region of elements. The load will only be applied to regions with mass. | | Vector | [Vector Field](../../../../block-documentation/types/vector-field) | The acceleration vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Body Force](../../../../block-documentation/types/body-force) | # Applied Temperature Load Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/applied-temperature-load ## About this Block **What it does:** A boundary condition that applies a temperature load to a thermal stress analysis. **Common uses:** * A boundary condition in a thermal stress analysis. **Tips:** * We recommend running a **Thermal Analysis** first, then using the temperature property from that analysis as the input for the **Applied Temperature Load**. * Use it with an **Initial Temperature** boundary condition. * The thermal stress is calculated from the difference between the initial temperature and the applied temperature. ## Example File Download Example: [Thermal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thermal_analysis.ntop) ![Applied Temperature](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/temperature_load.png) *** Defines the applied temperature load to be used in a thermal stress analysis. Thermal stress will be calculated from the difference between the initial temperature and the applied temperature load. ### Inputs | Name | Type | Description | | - | - | - | | Applied temperature | [Temperature Field](../../../../block-documentation/types/temperature-field) | Temperature for a thermal stress analysis from which the thermal stress will be calculated. | ### Outputs | Type | | - | | [Model Load](../../../../block-documentation/types/model-load) | # Bearing Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/bearing-force > **[Boundary, Vector, Frame](#boundary-vector-frame)** > **[Cad faces, Vector, Frame](#cad-faces-vector-frame)** *** ## Boundary, Vector, Frame Applies a bearing load on a cylindrical boundary based on a sinusoidal distribution. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the load. | | Vector | [Vector](../../../../block-documentation/types/vector) | The bearing force vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Boundary Force](../../../../block-documentation/types/boundary-force) | *** ## Cad faces, Vector, Frame Applies a bearing load to cylindrical CAD faces based on a sinusoidal distribution. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces. | | Vector | [Vector](../../../../block-documentation/types/vector) | The bearing force vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Boundary Force](../../../../block-documentation/types/boundary-force) | # Convection Boundary Load Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/convection-boundary-load > **[Boundary, Temperature Field, Scalar Field](#boundary-temperature-field-scalar-field)** > **[Cad faces, Temperature Field, Scalar Field](#cad-faces-temperature-field-scalar-field)** *** ## Boundary, Temperature Field, Scalar Field Applies a convection load to selected boundary face entities ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the load. | | Ambient temp | [Temperature Field](../../../../block-documentation/types/temperature-field) | The temperature of the fluid medium surrounding the boundary. | | Conv coefficient | [Scalar Field](../../../../block-documentation/types/scalar-field) | Heat transfer coefficient that relates heat flux to the temperature difference between the fluid medium and the boundary. | ### Outputs | Type | | - | | [Convection Heat Flux](../../../../block-documentation/types/convection-heat-flux) | *** ## Cad faces, Temperature Field, Scalar Field Applies a convection load to the selected CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces. | | Ambient temp | [Temperature Field](../../../../block-documentation/types/temperature-field) | The temperature of the fluid medium surrounding the boundary. | | Conv coefficient | [Scalar Field](../../../../block-documentation/types/scalar-field) | Heat transfer coefficient that relates heat flux to the temperature difference between the fluid medium and the boundary. | ### Outputs | Type | | - | | [Convection Heat Flux](../../../../block-documentation/types/convection-heat-flux) | # Cylindrical Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/cylindrical-restraint > **[Boundary, Scalar, Scalar, Scalar, Axis](#boundary-scalar-scalar-scalar-axis)** > **[Cad faces, Scalar, Scalar, Scalar, Axis](#cad-faces-scalar-scalar-scalar-axis)** *** ## Boundary, Scalar, Scalar, Scalar, Axis Restrains partial or complete cylindrical faces in the 3 cylindrical degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities containing the nodes to restrain. | | Radial | [Scalar](../../../../block-documentation/types/scalar) | Restraint in the radial direction from the axis. | | Tangential | [Scalar](../../../../block-documentation/types/scalar) | Restraint in the tangential direction about the axis. | | Axial | [Scalar](../../../../block-documentation/types/scalar) | Restraint along the direction of the axis. | | Axis | [Axis](../../../../block-documentation/types/axis) | This is an optional entry for an axis that defines the cylindrical directions for the restraint. | ### Outputs | Type | | - | | [Cylindrical Restraint](../../../../block-documentation/types/cylindrical-restraint) | *** ## Cad faces, Scalar, Scalar, Scalar, Axis Restrains partial or complete cylindrical faces in the 3 cylindrical degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD Faces to restrain. | | Radial | [Scalar](../../../../block-documentation/types/scalar) | Restraint in the radial direction from the axis. | | Tangential | [Scalar](../../../../block-documentation/types/scalar) | Restraint in the tangential direction about the axis. | | Axial | [Scalar](../../../../block-documentation/types/scalar) | Restraint along the direction of the axis. | | Axis | [Axis](../../../../block-documentation/types/axis) | This is an optional entry for an axis that defines the cylindrical directions for the restraint. | ### Outputs | Type | | - | | [Cylindrical Restraint](../../../../block-documentation/types/cylindrical-restraint) | # Displacement Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/displacement-restraint > **[Boundary, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame](#boundary-scalar-scalar-scalar-scalar-scalar-scalar-frame)** > **[Cad faces, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame](#cad-faces-scalar-scalar-scalar-scalar-scalar-scalar-frame)** *** ## About this Block **What it does:** The **Displacement Restraint** can apply a restraint over the selected boundary. **Displacement Restraint** block restrains the selected boundary entities in up to 6 degrees of freedom. The default X, Y, and Z directions are the global reference directions. The X, Y, and Z directions are chosen from a reference frame if a Frame input is provided. The corresponding degree of freedom will be unrestrained if an input is empty. **Commons uses:** * Boundary condition in an analysis. * A prescribed displacement is used when the deflection/displacement allowed is known. **Tips:** * To prescribe a displacement using the **Displacement Restraint** block, input a displacement value you wish to move the boundary in each degree of freedom. * *Note: The displacement input value will not be divided by the number of nodes/faces in the boundary selected.* ## Example File The example below shows a brake pedal simulation setup with just two displacement restraint blocks; one is used to restrain all DOFs, and the other allows Uz of -10mm. Download Example: [Displacement Restraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/displacement_restraint.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/displacement_restraint.png) *** ## Boundary, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame Restrains the selected boundary entities in up to six degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities containing the nodes to restrain. | | Ux | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the x-axis. | | Uy | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the y-axis. | | Uz | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the z-axis. | | Rx | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the x-axis. | | Ry | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the y-axis. | | Rz | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the z-axis. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the input translational and rotational components. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Restraint](../../../../block-documentation/types/restraint) | *** ## Cad faces, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame Restrains the selected CAD faces in up to six degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The boundary CAD Faces to restrain. | | Ux | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the x-axis. | | Uy | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the y-axis. | | Uz | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the z-axis. | | Rx | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the x-axis. | | Ry | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the y-axis. | | Rz | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the z-axis. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the input translational and rotational components. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Restraint](../../../../block-documentation/types/restraint) | # Edge Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/edge-force ## About this Block **What it does:** Applies a force vector to selected boundary edge entities. The force distributes over the nodes on the selected edge. **Tips:** * It only works with edge entities in boundary selection blocks. An error occurs if either nodes or faces are selected as the entity. * The reference Frame defines the components of the Vector. This input is optional. Leaving it blank automatically applies the global coordinate system. * Add a Vector or Vector Field block type to the Vector input. * Using a Vector Field allows you to use a varying magnitude. * The Vector is measured in force per unit length. * If you type in the Vector units as N/m they automatically convert to the standard block units. ## Example File ![Edge Force](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/edge_force.png) *** Applies a force vector to selected boundary edge entities. The force will be distributed over the nodes on the selected edge. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary edges to apply the load. | | Vector | [Vector Field](../../../../block-documentation/types/vector-field) | The force vector per unit length. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Boundary Force](../../../../block-documentation/types/boundary-force) | # Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/force > **[Boundary, Vector, Frame](#boundary-vector-frame)** > **[Cad faces, Vector, Frame](#cad-faces-vector-frame)** *** ## About this Block **What it does:** The **Force** block is a Boundary Condition for analysis that applies a force over a selected boundary. **Common uses:** * Boundary condition in an analysis. **Tips:** * The **Force** block requires a Boundary, to choose where to apply the force, and a Vector, to determine the magnitude and direction of the force. There is an optional input of a Frame, allowing for further definition of the orientation of the force. * When choosing entities: * If you select nodes, it divides the applied force evenly among them. * If you choose edges, it divides the force evenly among the total length of the edges. * If you select faces, it divides the force over the entire area of your selection. * For example, if you use nodes in the FE Boundary, then regions with more nodes will generally see more force since with this option we are taking the force divided by the total number of nodes and applying that value to each node. Instead, if you use the Faces option, then the Force is divided by the total area and this is applied as a force per unit area to each element face which should result in a more evenly applied Force across the entire FE Boundary. ## Example File Download Example: [Force](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Force.ntop) ![Force](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/force.png) *** ## Boundary, Vector, Frame Applies a force vector to a selected boundary. The force will be evenly distributed over the selected boundary entities. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities to apply the load. | | Vector | [Vector](../../../../block-documentation/types/vector) | The force vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Force](../../../../block-documentation/types/force) | *** ## Cad faces, Vector, Frame Applies a force vector to the selected CAD faces. The force will be evenly distributed over the CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces. | | Vector | [Vector](../../../../block-documentation/types/vector) | The force vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Force](../../../../block-documentation/types/force) | # Heat Generation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/heat-generation **What it does:** Applies a total heat generation power to a selected region. **Common uses:** * A boundary condition in a thermal analysis. **Tips:** * The quantity of heat generation is distributed across the entities based on the volume fraction. * The Magnitude is the Power of the heat generation. The basic units shown for this input are g-mm^2/s^3. These are the basic units for W or J/s. ## Example File Download Example: [Thermal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thermal_analysis.ntop) *** Applies a total heat generation power to a selected region. The quantity of heat generation is distributed across the nodes based on volume fraction. ### Inputs | Name | Type | Description | | - | - | - | | Region | [Region](../../../../block-documentation/types/region) | The region of elements the load will be applied to. | | Magnitude | [Scalar](../../../../block-documentation/types/scalar) | The amount of heat generation power for the region. | ### Outputs | Type | | - | | [Heat Generation](../../../../block-documentation/types/heat-generation) | # Initial Temperature Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/initial-temperature ## About this Block **What it does:** This block is used to define the baseline temperature to be used in thermal stress analysis. **Commons uses:** * A boundary condition in a thermal stress analysis. **Tips:** * Use it with an **Applied Temperature** boundary condition. * The thermal stress is calculated from the difference between the initial temperature and the applied temperature. ## Example File ![Initial Temperature](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/temperature_load.png) Download Example: [Thermal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thermal_analysis.ntop) *** Defines the baseline temperature to be used in a thermal stress analysis. Thermal stress will be calculated from the difference between the initial temperature and the applied temperature load. ### Inputs | Name | Type | Description | | - | - | - | | Initial temperature | [Temperature Field](../../../../block-documentation/types/temperature-field) | The baseline temperature which does not produce thermal stress in a thermal stress analysis. | ### Outputs | Type | | - | | [Model Load](../../../../block-documentation/types/model-load) | # Point Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/point-force > **[Point, Boundary, Vector, FE Coupling Enum, Frame, 1.1.0](#point-boundary-vector-fe-coupling-enum-frame-110)** > **[Point, Boundary, Vector, Frame](#point-boundary-vector-frame)** > **[Point, Cad faces, Vector, FE Coupling Enum, Frame, 1.1.0](#point-cad-faces-vector-fe-coupling-enum-frame-110)** > **[Point, Cad faces, Vector, Frame](#point-cad-faces-vector-frame)** *** ## About this Block **What it does:** The **Point Force** block is a boundary condition that distributes a remote force to the selected boundary through Rigid (RBE2) / Flexible (RBE3) body elements. **Common uses:** * When the force(s) applied to a boundary are known at a Remote Point. * Simplifying simulations by applying representative point force(s) instead of additional components **Tips:** The block has the following inputs: * Point: The point where the force(s) are specified * Boundary: The boundary entities (typically surface nodes) to which the force will be transferred. * Force: The force vector. * Connector: This defines the the behavior of the nodes on the boundary linked to the motion of the point and has 2 options - * Rigid: The rigid option constrains the nodes on the boundary to move with the point. It prevents any relative motion between the nodes on the boundary and behaves like a rigid entity. This is popularly known as the RBE2 connector that connects an independent node (green) to a set of dependent nodes (yellow) ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_3.png) * Flexible: This flexible option links the motion of the point to the nodes on the boundary and enables relative motion between these nodes. This distributes the mass between the nodes on the boundary and avoids locally stiffening the model (unlike the Rigid connector). This is popularly known as the RBE3 connector that connects a dependent node (yellow) to a set of independent nodes (green) ![Flexible Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_4.png) *Note: Rigid connectors add elements with infinite stiffness to the model, while flexible connectors provide a distributed connection between the FE boundary and remote point. Therefore flexible connectors don't influence the stiffness of the model and are the preferred choice for load distribution.* * Frame: The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. ## Example File Download Example: [Point Force](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_force.ntop) | Rigid | Flexible | | - | - | | ![Rigid](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_force_rigid.gif) | ![Flexible](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_force_flex.gif) | *** ## Point, Boundary, Vector, FE Coupling Enum, Frame, 1.1.0 Applies a point force to a selected boundary by distributing the load through rigid/flexible body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities that the force will be transferred to. | | Force | [Vector](../../../../block-documentation/types/vector) | The force vector. | | Connector | FE Coupling Enum | Option to create either a Rigid (RBE2) or Flexible (RBE3) connector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | *** ## Point, Boundary, Vector, Frame Applies a point force to a selected boundary by distributing the load through rigid body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities that the force will be transferred to. | | Force | [Vector](../../../../block-documentation/types/vector) | The force vector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | *** ## Point, Cad faces, Vector, FE Coupling Enum, Frame, 1.1.0 Applies a point force to the selected CAD faces by distributing the load through rigid/flexible body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces that the force will be transferred to. | | Force | [Vector](../../../../block-documentation/types/vector) | The applied force. | | Connector | FE Coupling Enum | Option to create either a Rigid (RBE2) or Flexible (RBE3) connector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | *** ## Point, Cad faces, Vector, Frame Applies a point force to the selected CAD faces by distributing the load through rigid body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces that the force will be transferred to. | | Force | [Vector](../../../../block-documentation/types/vector) | The applied force. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | # Point Moment Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/point-moment > **[Point, Boundary, Vector, FE Coupling Enum, Frame, 1.1.0](#point-boundary-vector-fe-coupling-enum-frame-110)** > **[Point, Boundary, Vector, Frame](#point-boundary-vector-frame)** > **[Point, Cad faces, Vector, FE Coupling Enum, Frame, 1.1.0](#point-cad-faces-vector-fe-coupling-enum-frame-110)** > **[Point, Cad faces, Vector, Frame](#point-cad-faces-vector-frame)** *** ## About this Block **What it does:** The **Point Moment** block is a boundary condition that applies a remote moment to the selected boundary by distributing the load through Rigid (RBE2) / Flexible (RBE3) body elements. **Common uses:** * When the moment(s) applied to a boundary are known at a Remote Point. * Simplifying simulations by applying representative point moment(s) instead of additional components **Tips:** The block has the following inputs: * Point: The point where the moment(s) are specified * Boundary: The boundary entities (typically surface nodes) to which the force will be transferred. * Moment: The moment vector. * Connector: This defines the the behavior of the nodes on the boundary linked to the motion of the point and has 2 options - * Rigid: The rigid option constrains the nodes on the boundary to move with the point. It prevents any relative motion between the nodes on the boundary and behaves like a rigid entity. This is popularly known as the RBE2 connector that connects an independent node (green) to a set of dependent nodes (yellow) ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_3.png) * Flexible: This flexible option links the motion of the point to the nodes on the boundary and enables relative motion between these nodes. This distributes the mass between the nodes on the boundary and avoids locally stiffening the model (unlike the Rigid connector). This is popularly known as the RBE3 connector that connects a dependent node (yellow) to a set of independent nodes (green) ![Flexible Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_4.png) *Note: Rigid connectors add elements with infinite stiffness to the model, while flexible connectors provide a distributed connection between the FE boundary and remote point. Therefore flexible connectors don't influence the stiffness of the model and are the preferred choice for load distribution.* * Frame: The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. ## Example File The setup is similar to Point Force, and you can check the Point Force example below: Download Example: [Point Force](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_force.ntop) | Rigid | Flexible | | - | - | | ![Rigid](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_force_rigid.gif) | ![Flexible](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/point_force_flex.gif) | *** ## Point, Boundary, Vector, FE Coupling Enum, Frame, 1.1.0 Applies a point moment to a selected boundary by distributing the load through rigid/flexible body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities that the moment will be transferred to. | | Moment | [Vector](../../../../block-documentation/types/vector) | The applied moment. | | Connector | FE Coupling Enum | Option to create either a Rigid (RBE2) or Flexible (RBE3) connector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | *** ## Point, Boundary, Vector, Frame Applies a point moment to a selected boundary by distributing the load through rigid body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities that the moment will be transferred to. | | Moment | [Vector](../../../../block-documentation/types/vector) | The applied moment. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | *** ## Point, Cad faces, Vector, FE Coupling Enum, Frame, 1.1.0 Applies a point moment to the selected CAD faces by distributing the load through rigid/flexible body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces that the moment will be transferred to. | | Moment | [Vector](../../../../block-documentation/types/vector) | The applied moment. | | Connector | FE Coupling Enum | Option to create either a Rigid (RBE2) or Flexible (RBE3) connector. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | *** ## Point, Cad faces, Vector, Frame Applies a point moment to the selected CAD faces by distributing the load through rigid body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The load application point. | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces that the moment will be transferred to. | | Moment | [Vector](../../../../block-documentation/types/vector) | The applied moment. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Force](../../../../block-documentation/types/remote-force) | # Point Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/point-restraint > **[Point, Boundary, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame](#point-boundary-scalar-scalar-scalar-scalar-scalar-scalar-frame)** > **[Point, Cad faces, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame](#point-cad-faces-scalar-scalar-scalar-scalar-scalar-scalar-frame)** *** ## Point, Boundary, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame Applies a displacement restraint to a remote point attached to selected boundary entities using rigid body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The restraint application point. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities containing the nodes to restrain. | | Ux | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the x-axis. | | Uy | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the y-axis. | | Uz | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the z-axis. | | Rx | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the x-axis. | | Ry | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the y-axis. | | Rz | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the z-axis. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the input translational and rotational components.If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Restraint](../../../../block-documentation/types/remote-restraint) | *** ## Point, Cad faces, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Frame Applies a displacement restraint to a remote point attached to the selected CAD faces using rigid body elements. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | The restraint application point. | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces to be restrained. | | Ux | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the x-axis. | | Uy | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the y-axis. | | Uz | [Scalar](../../../../block-documentation/types/scalar) | Translational restraint along the z-axis. | | Rx | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the x-axis. | | Ry | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the y-axis. | | Rz | [Scalar](../../../../block-documentation/types/scalar) | Rotational restraint along the z-axis. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the input translational and rotational components.If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Remote Restraint](../../../../block-documentation/types/remote-restraint) | # Pressure Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/pressure > **[Boundary, Scalar Field](#boundary-scalar-field)** > **[Boundary, Scalar Field, 1.1.0](#boundary-scalar-field-110)** > **[Boundary, Scalar Field, 1.2.0](#boundary-scalar-field-120)** > **[Cad faces, Scalar Field, 1.1.0](#cad-faces-scalar-field-110)** > **[Cad faces, Scalar Field, 1.2.0](#cad-faces-scalar-field-120)** *** ## Boundary, Scalar Field Applies a pressure to selected boundary face entities. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the pressure. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The pressure magnitude. | ### Outputs | Type | | - | | [Pressure](../../../../block-documentation/types/pressure) | *** ## Boundary, Scalar Field, 1.1.0 Applies a pressure to selected boundary face entities. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the pressure. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The pressure magnitude. | ### Outputs | Type | | - | | [Pressure](../../../../block-documentation/types/pressure) | *** ## Boundary, Scalar Field, 1.2.0 Applies a pressure to selected boundary face entities. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the pressure. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The pressure magnitude. | ### Outputs | Type | | - | | [Pressure](../../../../block-documentation/types/pressure) | *** ## Cad faces, Scalar Field, 1.1.0 Applies a pressure to selected CAD Faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces to apply the pressure boundary condition. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The pressure magnitude. | ### Outputs | Type | | - | | [Pressure](../../../../block-documentation/types/pressure) | *** ## Cad faces, Scalar Field, 1.2.0 Applies a pressure to selected CAD Faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces to apply the pressure boundary condition. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The pressure magnitude. | ### Outputs | Type | | - | | [Pressure](../../../../block-documentation/types/pressure) | # Radiation Boundary Load Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/radiation-boundary-load > **[Boundary, Temperature Field, Scalar Field](#boundary-temperature-field-scalar-field)** > **[Cad faces, Temperature Field, Scalar Field](#cad-faces-temperature-field-scalar-field)** *** ## Boundary, Temperature Field, Scalar Field Applies a radiation load to selected boundary face entities for the given Ambient temp, Emissivity, and Stefan-Boltzmann constant of 5.670374419e-8 W\.m^-2.K^-4 ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the load. | | Ambient temp | [Temperature Field](../../../../block-documentation/types/temperature-field) | The temperature of the medium surrounding the boundary. | | Emissivity | [Scalar Field](../../../../block-documentation/types/scalar-field) | Non-dimensional measure of the ability of the Boundary to emit radiation energy. | ### Outputs | Type | | - | | [Radiation Heat Flux](../../../../block-documentation/types/radiation-heat-flux) | *** ## Cad faces, Temperature Field, Scalar Field Applies a radiation load to the selected CAD faces for the given Ambient temp, Emissivity, and Stefan-Boltzmann constant of 5.670374419e-8 W\.m^-2.K^-4 ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces. | | Ambient temp | [Temperature Field](../../../../block-documentation/types/temperature-field) | The temperature of the medium surrounding the boundary. | | Emissivity | [Scalar Field](../../../../block-documentation/types/scalar-field) | Non-dimensional measure of the ability of the object to emit radiation energy. | ### Outputs | Type | | - | | [Radiation Heat Flux](../../../../block-documentation/types/radiation-heat-flux) | # Rotational Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/rotational-force Defines a static load which accounts for the inertia effects of an angular velocity and acceleration about a stationary axis of rotation. ### Inputs | Name | Type | Description | | - | - | - | | Region | [Region](../../../../block-documentation/types/region) | The Region of elements the rotational load will be applied to. The load will only be applied to regions with mass. | | Axis | [Axis](../../../../block-documentation/types/axis) | The Axis of rotation. | | Angular velocity | [Scalar](../../../../block-documentation/types/scalar) | Angular Velocity of the force expressed in dimensions of Angle / Time. | | Angular acceleration | [Scalar](../../../../block-documentation/types/scalar) | The Angular Acceleration of the force expressed in dimensions of Angle / Time^2. | ### Outputs | Type | | - | | [Body Force](../../../../block-documentation/types/body-force) | # Surface Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/surface-force > **[Boundary, Vector Field, Frame](#boundary-vector-field-frame)** > **[Cad faces, Vector Field, Frame](#cad-faces-vector-field-frame)** *** ## Boundary, Vector Field, Frame Applies a general force vector field to selected boundary face entities. The force will be distributed over the nodes of the selected faces. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the load. | | Vector | [Vector Field](../../../../block-documentation/types/vector-field) | The force vector per unit area. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Boundary Force](../../../../block-documentation/types/boundary-force) | *** ## Cad faces, Vector Field, Frame Applies a general force vector field to the selected CAD faces. The force will be distributed over the nodes of the selected faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces. | | Vector | [Vector Field](../../../../block-documentation/types/vector-field) | The force vector per unit area across the faces. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Boundary Force](../../../../block-documentation/types/boundary-force) | # Surface Heat Flux Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/surface-heat-flux > **[Boundary, Scalar Field](#boundary-scalar-field)** > **[Cad faces, Scalar Field](#cad-faces-scalar-field)** *** ## Boundary, Scalar Field Applies a distributed heat flux normal to selected boundary face entities. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary faces to apply the heat flux. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The distributed heat flux. | ### Outputs | Type | | - | | [Heat Flux](../../../../block-documentation/types/heat-flux) | *** ## Cad faces, Scalar Field Applies a distributed heat flux normal to the selected CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The distributed heat flux. | ### Outputs | Type | | - | | [Heat Flux](../../../../block-documentation/types/heat-flux) | # Temperature Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/temperature-restraint > **[Boundary, Temperature Field](#boundary-temperature-field)** > **[Cad faces, Temperature Field](#cad-faces-temperature-field)** *** ## Boundary, Temperature Field Applies a temperature restraint to selected boundary entities. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The boundary entities to apply the temperature. | | Temperature | [Temperature Field](../../../../block-documentation/types/temperature-field) | The temperature value to be enforced. | ### Outputs | Type | | - | | [Temperature Restraint](../../../../block-documentation/types/temperature-restraint) | *** ## Cad faces, Temperature Field Applies a temperature restraint to the selected CAD faces. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces. | | Temperature | [Temperature Field](../../../../block-documentation/types/temperature-field) | The temperature value to be enforced. | ### Outputs | Type | | - | | [Temperature Restraint](../../../../block-documentation/types/temperature-restraint) | # Velocity Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/velocity > **[Boundary, Vector Field, 5.23.0](#boundary-vector-field-5230)** > **[Cad faces, Vector Field, 5.23.0](#cad-faces-vector-field-5230)** *** ## Boundary, Vector Field, 5.23.0 A Boundary Condition that specifies a fluid's velocity entering or leaving a domain. ### Inputs | Name | Type | Description | | - | - | - | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | The Boundary selected for the velocity. | | Velocity | [Vector Field](../../../../block-documentation/types/vector-field) | The Velocity vector. | ### Outputs | Type | | - | | [Velocity](../../../../block-documentation/types/velocity) | *** ## Cad faces, Vector Field, 5.23.0 A Boundary Condition that specifies a fluid's velocity entering or leaving a domain. ### Inputs | Name | Type | Description | | - | - | - | | Cad faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The CAD faces to apply the velocity boundary condition. | | Velocity | [Vector Field](../../../../block-documentation/types/vector-field) | The Velocity vector. | ### Outputs | Type | | - | | [Velocity](../../../../block-documentation/types/velocity) | # Volumetric Heat Generation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/boundary-conditions/volumetric-heat-generation **What it does:** Applies a total heat generation density to a selected region. **Common uses:** * A boundary condition in a thermal analysis. **Tips:** * The base units for the Magnitude is g/mm-s^3. ## Example File Download Example: [Thermal Analysis](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thermal_analysis.ntop) *** Applies a heat generation density to a selected region. ### Inputs | Name | Type | Description | | - | - | - | | Region | [Region](../../../../block-documentation/types/region) | The region of elements the load will be applied to. | | Magnitude | [Scalar Field](../../../../block-documentation/types/scalar-field) | The amount of heat generation per unit volume. | ### Outputs | Type | | - | | [Heat Generation](../../../../block-documentation/types/heat-generation) | # Exchange Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange > **[Import FE Mesh](../../../block-documentation/blocks/structures/exchange/import-fe-mesh)** > **[Export FE Mesh](../../../block-documentation/blocks/structures/exchange/export-fe-mesh)** > **[Export Material](../../../block-documentation/blocks/structures/exchange/export-material)** > **[Export FE Model](../../../block-documentation/blocks/structures/exchange/export-fe-model)** > **[Export Static Analysis](../../../block-documentation/blocks/structures/exchange/export-static-analysis)** > **[Export Modal Analysis](../../../block-documentation/blocks/structures/exchange/export-modal-analysis)** > **[Export Buckling Analysis](../../../block-documentation/blocks/structures/exchange/export-buckling-analysis)** > **[Export Thermal Analysis](../../../block-documentation/blocks/structures/exchange/export-thermal-analysis)** > **[Import Static Structural Result](../../../block-documentation/blocks/structures/exchange/import-static-structural-result)** > **[Import Modal Result](../../../block-documentation/blocks/structures/exchange/import-modal-result)** > **[Import Buckling Result](../../../block-documentation/blocks/structures/exchange/import-buckling-result)** > **[Import Static Thermal Result](../../../block-documentation/blocks/structures/exchange/import-static-thermal-result)** > **[Import Time Dependent Structural Result](../../../block-documentation/blocks/structures/exchange/import-time-dependent-structural-result)** > **[Import Time Dependent Thermal Result](../../../block-documentation/blocks/structures/exchange/import-time-dependent-thermal-result)** > **[Import Superelement](../../../block-documentation/blocks/structures/exchange/import-superelement)** > **[Displacement Point Map](../../../block-documentation/blocks/structures/exchange/displacement-point-map)** > **[Von Mises Stress Point Map](../../../block-documentation/blocks/structures/exchange/von-mises-stress-point-map)** > **[Temperature Point Map](../../../block-documentation/blocks/structures/exchange/temperature-point-map)** > **[Heat Flux Point Map](../../../block-documentation/blocks/structures/exchange/heat-flux-point-map)** > **[Density Point Map](../../../block-documentation/blocks/structures/exchange/density-point-map)** > **[Pressure Point Map](../../../block-documentation/blocks/structures/exchange/pressure-point-map)** > **[Velocity Point Map](../../../block-documentation/blocks/structures/exchange/velocity-point-map)** > **[Unit System](../../../block-documentation/blocks/structures/exchange/unit-system)** # Density Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/density-point-map Create a Scalar Point Map from the density values of a CFD analysis. ### Inputs | Name | Type | Description | | - | - | - | | Cfd analysis | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | Density point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | # Displacement Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/displacement-point-map > **[Static Structural Result, Integer](#static-structural-result-integer)** > **[Time Dependent Structural Result, Integer](#time-dependent-structural-result-integer)** *** ## About this Block **What it does:** The **Displacement Point Map** block generates a Vector Point Map of nodal displacements from the static structural simulation results. **Common uses:** * Can visualize structural results. **Tips:** * The point map consists of all the nodal points from the Static Structural Analysis, and the displacement values associated with each of those points. These points and values are \* accessible in the properties of the Point Map. * The HUD can be used to change the Scale, Weight, Lower bound, Upper bound, color palette and units as required. * The point map can be exported with the **Export Point Map** block. ## Example File Download Example: [Displacement Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Displacement_Point_Map.ntop) ![Displacement Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Displacement_Point_Map.gif) *** ## Static Structural Result, Integer Create a Vector Point Map from nodal displacements of a Static or Explicit Analysis result. ### Inputs | Name | Type | Description | | - | - | - | | Analysis result | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | Displacement point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | *** ## Time Dependent Structural Result, Integer Create a Vector Point Map from nodal displacements of a Static or Explicit Analysis result. ### Inputs | Name | Type | Description | | - | - | - | | Analysis result | [Time Dependent Structural Result](../../../../block-documentation/types/time-dependent-structural-result) | Displacement point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | # Export Buckling Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/export-buckling-analysis Export the setup of a linear Buckling Analysis to an external CAE format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Fe model | [FE Model](../../../../block-documentation/types/fe-model) | The FE Model to export. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | The number of modes to calculate. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The target unit system. | ### Outputs | Type | | - | | [FE Mesh File Data](../../../../block-documentation/types/fe-mesh-file-data) | # Export FE Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/export-fe-mesh Export an FE Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported mesh file. | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The mesh to export. | | Units | Length Unit Enum | The target units. | | Sets | [FE Set List](../../../../block-documentation/types/fe-set) | Element and node sets to export. | ### Outputs | Type | | - | | [FE Mesh File Data](../../../../block-documentation/types/fe-mesh-file-data) | # Export FE Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/export-fe-model Export an FE Model containing FE Mesh, Material and Attribute data, element/entity sets, and FE Connectors to an external CAE format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Model | [FE Model](../../../../block-documentation/types/fe-model) | The FE Model to export. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The target unit system. | | Sets | [FE Set List](../../../../block-documentation/types/fe-set) | Element and node sets to export. | ### Outputs | Type | | - | | [FE Mesh File Data](../../../../block-documentation/types/fe-mesh-file-data) | # Export Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/export-material > **[Path, Material, Unit System](#path-material-unit-system)** > **[Path, Material, Unit System, 1.1.0](#path-material-unit-system-110)** *** ## Path, Material, Unit System Export a Material to an external CAE format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported mesh file. | | Material | [Material](../../../../block-documentation/types/material) | The material to export. | | Units | [Unit System](../../../../block-documentation/types/unit-system) | The target unit system. | ### Outputs | Type | | - | | [Material File Data](../../../../block-documentation/types/material-file-data) | *** ## Path, Material, Unit System, 1.1.0 Export a Material to an external CAE format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported mesh file. | | Material | [Material](../../../../block-documentation/types/material) | The material to export. | | Units | [Unit System](../../../../block-documentation/types/unit-system) | The target unit system. | ### Outputs | Type | | - | | [Material File Data](../../../../block-documentation/types/material-file-data) | # Export Modal Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/export-modal-analysis Export the setup of a Modal Analysis to an external CAE format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Fe model | [FE Model](../../../../block-documentation/types/fe-model) | The FE Model to export. | | Restraints | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | | Number of modes | [Integer](../../../../block-documentation/types/integer) | The number of modes to calculate. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The target unit system. | ### Outputs | Type | | - | | [FE Mesh File Data](../../../../block-documentation/types/fe-mesh-file-data) | # Export Static Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/export-static-analysis Export the setup of a Static Analysis to an external CAE format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Fe model | [FE Model](../../../../block-documentation/types/fe-model) | The FE Model to export. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The target unit system. | ### Outputs | Type | | - | | [FE Mesh File Data](../../../../block-documentation/types/fe-mesh-file-data) | # Export Thermal Analysis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/export-thermal-analysis Export the setup of a Thermal Analysis to an external CAE format. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Fe model | [FE Model](../../../../block-documentation/types/fe-model) | The FE Model to export. | | Load case | [Boundary Condition List](../../../../block-documentation/types/boundary-condition) | The restraints and applied loads. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The target unit system. | ### Outputs | Type | | - | | [FE Mesh File Data](../../../../block-documentation/types/fe-mesh-file-data) | # Heat Flux Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/heat-flux-point-map ## About this Block **What it does:** The **Heat Flux Point Map** block generates a Vector Point Map of nodal heat flux from the Thermal Analysis. **Common uses:** * Can visualize thermal analysis results. * The heat flux field can be used to modify geometry to optimize heat transfer. **Tips:** * The point map consists of all the nodal points from the Thermal Analysis, and the heat flux values associated with each of those points. These points and values are accessible in the properties of the Point Map. * The HUD can be used to change the Scale, Weight, Lower bound, Upper bound, color palette and units as required. * The point map can be exported with the **Export Point Map** block. ## Example File Download Example: [Heat Flux Point Map](/ExtendedBlockDocs/HFP.ntop) ![Heat Flux Point Map](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/ExtendedBlockDocs/hfp.gif) *** Creates a vector point map of nodal heat flux values of a linear steady state thermal analysis. ### Inputs | Name | Type | Description | | - | - | - | | Thermal analysis | [Thermal Result](../../../../block-documentation/types/thermal-result) | Thermal analysis to generate a point map from. | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | # Import Buckling Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-buckling-result ## About this Block **What it does:** Imports structured simulation result files from disk. VTK file formats (`.vtk`, `.vtu`) have the most comprehensive feature coverage and are recommended for simulation data exchange. Other file formats may behave differently from what the tips below describe. **Common uses:** * Importing results from external solvers. * Importing ML inference outputs. ## Block Types and Field Schemas Each import block defines a schema of expected fields (for example, displacement, stress, temperature). When a VTK file is loaded, nTop matches the data arrays in the file against this schema using name-based substring matching, assembles the results, and applies unit conversion. ### Import Static Structural Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | strain principal | min, mid, max | Vector-3 | — | | strain | xx, yy, zz, xy, yz, xz | Tensor-6 | — | | stress von\_mises | — | Scalar-1 | M L⁻¹ T⁻² | | stress principal | min, mid, max | Vector-3 | M L⁻¹ T⁻² | | stress | xx, yy, zz, xy, yz, xz | Tensor-6 | M L⁻¹ T⁻² | | reaction force | x, y, z | Vector-3 | M L T⁻² | Where multiple field labels share a common substring (for example, `stress von_mises`, `stress principal`, `stress`), the table order reflects the matching priority — more specific labels are listed first. See the Label Priority section below for details. ### Import Time Dependent Structural Result (.vtk, .vtu) All fields from Import Static Structural Result, plus: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | velocity | x, y, z | Vector-3 | L T⁻¹ | | acceleration | x, y, z | Vector-3 | L T⁻² | ### Import Static Thermal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | heat flux | x, y, z | Vector-3 | M T⁻³ | | temperature | — | Scalar-1 | Θ | | thermal reaction flux | — | Scalar-1 | M T⁻³ | ### Import Time Dependent Thermal Result (.vtk, .vtu) Same fields as Import Static Thermal Result. ### Import Modal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | eigen frequency | — | Field Data — Modes | T⁻¹ | ### Import Buckling Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | load factor | — | Field Data — Modes | — | ### Import CFD Analysis Result (.vtk, .vtu, .vti) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | density | — | Scalar-1 | M L⁻³ | | force | x, y, z | Vector-3 | M L T⁻² | | pressure | — | Scalar-1 | M L⁻¹ T⁻² | | temperature | — | Scalar-1 | Θ | | velocity | x, y, z | Vector-3 | L T⁻¹ | VTI-only fields: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | cell region | — | Scalar-1 | — | | implicit field | — | Scalar-1 | L | ## Data Array Matching nTop identifies importable fields by matching VTK data array names against the known field labels for each block type. ### Array Name Matching Matching checks whether the array name **contains** the field label as a substring. Before comparison, all underscores are replaced with spaces in both the array name and the field label, and matching is case-insensitive. For example, given the field label `displacement`: * `displacement` → match * `Displacement` → match * `my_displacement_results` → match (contains `displacement` after underscore replacement) * `nodal_displacement_field` → match * `disp` → no match ### Label Priority When an array name could match multiple field labels, a fixed priority order applies — more specific labels are checked before less specific ones. For stress-related fields the priority is: 1. `stress von_mises` (Scalar-1) 2. `stress principal` (Vector-3) 3. `stress` (Tensor-6) An array named `stress_von_mises_output` matches `stress von_mises` and is treated as a Scalar-1 field. It does not fall through to `stress` or `stress principal`. The same priority pattern applies to strain: 1. `strain principal` (Vector-3) 2. `strain` (Tensor-6) ### Component Names and Dimensionality Each field label has an expected dimensionality: Scalar-1, Vector-3, or Tensor-6. Once an array is matched to a field label, nTop checks the array's components to verify compatibility. Components must be packed into a single multi-component VTK array. nTop does not combine separate scalar arrays into vectors or tensors. A displacement field must be a single array with 3 components, not three separate arrays named `displacement_x`, `displacement_y`, `displacement_z`. **Component name resolution:** VTK arrays support named components (via `SetComponentName`/`GetComponentName`). nTop uses these names to map components to their expected slots: * **Vector-3 fields** (for example, `displacement`, `velocity`): components named `x`, `y`, `z` * **Vector-3 principal fields** (for example, `stress principal`): components named `min`, `mid`, `max` * **Tensor-6 fields** (for example, `stress`, `strain`): components named `xx`, `yy`, `zz`, `xy`, `yz`, `xz` **Numerical fallback:** If component names are not set, components are mapped by their numerical index (`0`, `1`, `2`, …) in positional order. For a Vector-3 field, component 0 maps to the first expected slot (for example, `x` or `min`), component 1 to the second, and so on. **Note on Voigt notation:** For Tensor-6 fields using the numerical fallback, nTop expects the component order `xx, yy, zz, xy, yz, xz` (indices 0–5). Different solvers may use different Voigt conventions. If your solver's default ordering does not match, use explicit component names to avoid silently scrambled tensor components. **Component count must match.** If the number of components in the array does not match the expected dimensionality of the matched field label, the field will fail to import. For example, an array matching `stress` (Tensor-6) must have exactly 6 components. A 3-component array matching `stress` will not import; it would need to match `stress principal` instead. ### Data Precision All imported data arrays are cast to double precision (float64), regardless of the precision in the source file. ## Point Data, Cell Data, and Field Data ### Point Data (Default) All importable fields are expected to be VTK point data arrays. This is the standard and recommended way to provide simulation results to nTop. ### Cell Data Fallback If a field label is matched by a cell data array but no corresponding point data array exists for the same label, nTop automatically interpolates the cell data to points using VTK's `vtkCellDataToPointData` filter. If both a point data array and a cell data array share the same field label, only the point data array is imported. The cell data array is ignored for that label. Other labels that only appear as cell data are still imported normally. **Cell data in time series and CFD:** When multiple arrays match the same label (triggering time series or CFD key-value behavior), cell data arrays are interpolated to point data individually before being assembled. For example, if `velocity_1` is point data and `velocity_2` is cell data, `velocity_2` is interpolated to points and both are included in the time series. ### Field Data VTK Field Data arrays have special handling and are only supported for specific attributes: * **Eigen frequency** in the Import Modal Result block * **Load factor** in the Import Buckling Result block * **Time** in the time-dependent Import Result blocks All other fields must be point data (or cell data that can be interpolated to points). Placing a regular field like `reaction_force` as VTK Field Data will cause a shape mismatch and the field will fail to import. If your solver outputs a field as Field Data, convert it to point data before importing — for example, by using ParaView's `FieldDataToDataSetAttribute` filter and saving the result. ## Time Series Behavior Time series import applies to all block types except CFD (see CFD-Specific Behavior below). When multiple VTK data arrays match the same field label, nTop interprets them as a time series. ### Time Series Detection Multiple arrays matching the same field label category trigger time series interpretation. The matching uses the same substring logic described above. For example, if a file contains three arrays named `displacement_1`, `displacement_2`, `displacement_3`, all three contain the substring `displacement` and are interpreted as a three-step time series. The suffix does not need to be numeric. Arrays named `displacement_foo` and `displacement_bar` would also be interpreted as a two-step time series. Only the storage order of the arrays in the file determines their placement in the series. **Caution:** This mechanism can be triggered unintentionally. If a file contains arrays named `temperature` and `ambient_temperature`, both match the `temperature` label and nTop will interpret them as a two-step time series rather than two distinct fields. To avoid this, rename or remove one of the arrays so that only one matches the label. ### Time Values Time values are determined by two mechanisms, in order of priority: 1. **Embedded metadata:** The number of time steps is read from VTK XML metadata on the UnstructuredGrid TimeValues attribute. The physical time value is furthermore read from a seperate scalar FieldData array `Time`. 2. **Dummy values:** If no time metadata is present, nTop assigns sequential integer time values starting from 0 (that is, 0, 1, 2, …). ### Step Count and Skipping The longest series of matching arrays across all field label categories determines the expected number of time steps. Any field label category that does not produce exactly that number of steps is skipped entirely. For example, if a file contains: * `displacement_1`, `displacement_2`, `displacement_3` → 3 steps (longest) * `stress_1`, `stress_2` → 2 steps The expected step count is 3. Because `stress` only produces 2 steps, it is skipped and not imported at all. Only `displacement` is imported. ### Static Blocks and Time Series Only the time-dependent block types (**Import Time Dependent Structural Result** and **Import Time Dependent Thermal Result**) return and visualize full time series data. If a file containing time series data is loaded into a static block type (for example, **Import Analysis Result**), the time series is still detected and processed, but only the last snapshot in the series is returned. nTop logs the following warning: `File contains time series but import is Static. Using last step only.` ## CFD-Specific Behavior The **Import CFD Analysis Result** block differs from the other block types in several ways. It supports `.vti` (uniform grid) files in addition to `.vtk` and `.vtu`, and it does not use the time series mechanism described above. ### Key-Value Results CFD results are structured as key-value pairs. When multiple arrays match the same field label, each is stored as a separate entry in a dictionary rather than being interpreted as a time series. For example, a file containing arrays named `velocity_initial`, `velocity_1_s`, and `velocity_time-averaged` produces a CFD result with three entries in the velocity dictionary. Downstream in nTop, CFD results expose a list of keys and a corresponding list of fields, allowing you to select individual entries. ### Cell Region (VTI Only) `cell region` is an optional scalar point data array of type unsigned char (values 0–255). It defines region association IDs for nodes in a uniform grid, typically used to distinguish between boundary conditions and bulk regions. For example, `cell region = 1` might indicate bulk fluid nodes, while `cell region = 2` indicates solid no-slip wall nodes. You can use this field with downstream blocks such as **Filter Cell Region**. ### Implicit Field (VTI Only) `implicit field` is a scalar point data array containing the signed distance field associated with the voxelization of the input geometry. This field is used purely for visualization — it determines the surface body displayed in the viewport for surface plots. If you can retain or reconstruct the signed distance field from the original voxelization, it is worth including as an implicit field. If no implicit field is provided, nTop falls back to treating the entire domain as interior, which still works but may produce less useful surface visualizations. ### Beam Radius (VTU Only) `beam radius` is a scalar point data array containing the radii of the associated beams in the FE Mesh. If beam radius is not provided for beam elements, nTop may fail to render surface visualizations of the imported result. ## Unit System The **Unit System** input tells nTop what units the data in the file is expressed in. If the specified unit system differs from SI, nTop converts the imported data from the given units to SI upon import. If the file already contains SI data, set the unit system to SI and no conversion is applied. Each field label has associated physical dimensions (see the Block Types and Field Schemas section above). nTop uses these dimensions to determine which unit conversions to apply. For example, a velocity field has dimensions of L T⁻¹ (length per time), so both the length and time unit factors from the selected unit system are used in the conversion. Fields with no physical dimensions listed (such as strain) are dimensionless and are not affected by the unit system setting. ## Supported Cell Types nTop supports the following VTK cell types: **Volume elements:** tetrahedron, hexahedron, voxel, wedge, pyramid **Surface elements:** triangle, quad **Beam elements:** line, vertex All other cell types are ignored during import. nTop logs a warning indicating the number of skipped cells per unsupported type. If a file consists entirely of unsupported cell types, nTop tries to fall back to a vertex representation or produce an error. ## Troubleshooting ### Field Not Appearing After Import **Component count mismatch.** The array's number of components does not match what the matched field label expects. For example, a 3-component array matching `stress` (which expects Tensor-6) will not import. Verify that the array has the correct number of components for its intended field label. **Field Data instead of Point Data.** Only eigen frequency and load factor use VTK Field Data. All other fields must be Point Data (or Cell Data). If your solver writes a result as Field Data, see the Field Data section above for the recommended workaround. ### Unintentional Time Series If a file contains multiple arrays whose names match the same field label, nTop interprets them as a time series. This can happen unintentionally when array names share a common substring. For example, arrays named `temperature_surface` and `temperature_volume` both match the `temperature` label and are treated as a two-step series rather than two distinct fields. To fix this, rename or remove one of the arrays so that only one matches the intended label. ### Separate Arrays Instead of Multi-Component nTop expects vector and tensor fields to be stored as a single multi-component array. Three separate scalar arrays named `displacement_x`, `displacement_y`, `displacement_z` will not be combined into a vector. Instead, all three match the `displacement` label and trigger the time series mechanism, producing incorrect results. Please make sure your solver or post-processor writes vectors as a single array with named components (`x`, `y`, `z`) or indexed components (`0`, `1`, `2`). ### Time Series Data in a Static Block If a file with time series data is loaded into a static import block (for example, **Import Analysis Result** instead of **Import Time Dependent Structural Result**), only the last time step is returned. nTop logs a warning when this occurs. If you need the full series, use the corresponding time-dependent block type. *** Import Buckling Result file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Buckling Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [Buckling Result](../../../../block-documentation/types/buckling-result) | # Import FE Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-fe-mesh ## About this Block This block imports an FE Mesh created in a different program. This is useful for bringing over a mesh that is already set up for analysis, eliminating the need to repeat steps. Choose the File Path and the Units that the file was created in, to import the part. ## Example File Download Example nTop File: [Import FE Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportFEMesh.ntop) Download Example FE Model to Import: [Import FE Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportFEMesh.ntop) *This file imports an FE Mesh into the Notebook and shows you how to use it in the Notebook to create an FE Model.* ![Import FE Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/ImportFEMesh.jpg) *** Import FE Mesh file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of FE Mesh file. | | Units | Length Unit Enum | Units of imported file. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # Import Modal Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-modal-result ## About this Block **What it does:** Imports structured simulation result files from disk. VTK file formats (`.vtk`, `.vtu`) have the most comprehensive feature coverage and are recommended for simulation data exchange. Other file formats may behave differently from what the tips below describe. **Common uses:** * Importing results from external solvers. * Importing ML inference outputs. ## Block Types and Field Schemas Each import block defines a schema of expected fields (for example, displacement, stress, temperature). When a VTK file is loaded, nTop matches the data arrays in the file against this schema using name-based substring matching, assembles the results, and applies unit conversion. ### Import Static Structural Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | strain principal | min, mid, max | Vector-3 | — | | strain | xx, yy, zz, xy, yz, xz | Tensor-6 | — | | stress von\_mises | — | Scalar-1 | M L⁻¹ T⁻² | | stress principal | min, mid, max | Vector-3 | M L⁻¹ T⁻² | | stress | xx, yy, zz, xy, yz, xz | Tensor-6 | M L⁻¹ T⁻² | | reaction force | x, y, z | Vector-3 | M L T⁻² | Where multiple field labels share a common substring (for example, `stress von_mises`, `stress principal`, `stress`), the table order reflects the matching priority — more specific labels are listed first. See the Label Priority section below for details. ### Import Time Dependent Structural Result (.vtk, .vtu) All fields from Import Static Structural Result, plus: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | velocity | x, y, z | Vector-3 | L T⁻¹ | | acceleration | x, y, z | Vector-3 | L T⁻² | ### Import Static Thermal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | heat flux | x, y, z | Vector-3 | M T⁻³ | | temperature | — | Scalar-1 | Θ | | thermal reaction flux | — | Scalar-1 | M T⁻³ | ### Import Time Dependent Thermal Result (.vtk, .vtu) Same fields as Import Static Thermal Result. ### Import Modal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | eigen frequency | — | Field Data — Modes | T⁻¹ | ### Import Buckling Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | load factor | — | Field Data — Modes | — | ### Import CFD Analysis Result (.vtk, .vtu, .vti) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | density | — | Scalar-1 | M L⁻³ | | force | x, y, z | Vector-3 | M L T⁻² | | pressure | — | Scalar-1 | M L⁻¹ T⁻² | | temperature | — | Scalar-1 | Θ | | velocity | x, y, z | Vector-3 | L T⁻¹ | VTI-only fields: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | cell region | — | Scalar-1 | — | | implicit field | — | Scalar-1 | L | ## Data Array Matching nTop identifies importable fields by matching VTK data array names against the known field labels for each block type. ### Array Name Matching Matching checks whether the array name **contains** the field label as a substring. Before comparison, all underscores are replaced with spaces in both the array name and the field label, and matching is case-insensitive. For example, given the field label `displacement`: * `displacement` → match * `Displacement` → match * `my_displacement_results` → match (contains `displacement` after underscore replacement) * `nodal_displacement_field` → match * `disp` → no match ### Label Priority When an array name could match multiple field labels, a fixed priority order applies — more specific labels are checked before less specific ones. For stress-related fields the priority is: 1. `stress von_mises` (Scalar-1) 2. `stress principal` (Vector-3) 3. `stress` (Tensor-6) An array named `stress_von_mises_output` matches `stress von_mises` and is treated as a Scalar-1 field. It does not fall through to `stress` or `stress principal`. The same priority pattern applies to strain: 1. `strain principal` (Vector-3) 2. `strain` (Tensor-6) ### Component Names and Dimensionality Each field label has an expected dimensionality: Scalar-1, Vector-3, or Tensor-6. Once an array is matched to a field label, nTop checks the array's components to verify compatibility. Components must be packed into a single multi-component VTK array. nTop does not combine separate scalar arrays into vectors or tensors. A displacement field must be a single array with 3 components, not three separate arrays named `displacement_x`, `displacement_y`, `displacement_z`. **Component name resolution:** VTK arrays support named components (via `SetComponentName`/`GetComponentName`). nTop uses these names to map components to their expected slots: * **Vector-3 fields** (for example, `displacement`, `velocity`): components named `x`, `y`, `z` * **Vector-3 principal fields** (for example, `stress principal`): components named `min`, `mid`, `max` * **Tensor-6 fields** (for example, `stress`, `strain`): components named `xx`, `yy`, `zz`, `xy`, `yz`, `xz` **Numerical fallback:** If component names are not set, components are mapped by their numerical index (`0`, `1`, `2`, …) in positional order. For a Vector-3 field, component 0 maps to the first expected slot (for example, `x` or `min`), component 1 to the second, and so on. **Note on Voigt notation:** For Tensor-6 fields using the numerical fallback, nTop expects the component order `xx, yy, zz, xy, yz, xz` (indices 0–5). Different solvers may use different Voigt conventions. If your solver's default ordering does not match, use explicit component names to avoid silently scrambled tensor components. **Component count must match.** If the number of components in the array does not match the expected dimensionality of the matched field label, the field will fail to import. For example, an array matching `stress` (Tensor-6) must have exactly 6 components. A 3-component array matching `stress` will not import; it would need to match `stress principal` instead. ### Data Precision All imported data arrays are cast to double precision (float64), regardless of the precision in the source file. ## Point Data, Cell Data, and Field Data ### Point Data (Default) All importable fields are expected to be VTK point data arrays. This is the standard and recommended way to provide simulation results to nTop. ### Cell Data Fallback If a field label is matched by a cell data array but no corresponding point data array exists for the same label, nTop automatically interpolates the cell data to points using VTK's `vtkCellDataToPointData` filter. If both a point data array and a cell data array share the same field label, only the point data array is imported. The cell data array is ignored for that label. Other labels that only appear as cell data are still imported normally. **Cell data in time series and CFD:** When multiple arrays match the same label (triggering time series or CFD key-value behavior), cell data arrays are interpolated to point data individually before being assembled. For example, if `velocity_1` is point data and `velocity_2` is cell data, `velocity_2` is interpolated to points and both are included in the time series. ### Field Data VTK Field Data arrays have special handling and are only supported for specific attributes: * **Eigen frequency** in the Import Modal Result block * **Load factor** in the Import Buckling Result block * **Time** in the time-dependent Import Result blocks All other fields must be point data (or cell data that can be interpolated to points). Placing a regular field like `reaction_force` as VTK Field Data will cause a shape mismatch and the field will fail to import. If your solver outputs a field as Field Data, convert it to point data before importing — for example, by using ParaView's `FieldDataToDataSetAttribute` filter and saving the result. ## Time Series Behavior Time series import applies to all block types except CFD (see CFD-Specific Behavior below). When multiple VTK data arrays match the same field label, nTop interprets them as a time series. ### Time Series Detection Multiple arrays matching the same field label category trigger time series interpretation. The matching uses the same substring logic described above. For example, if a file contains three arrays named `displacement_1`, `displacement_2`, `displacement_3`, all three contain the substring `displacement` and are interpreted as a three-step time series. The suffix does not need to be numeric. Arrays named `displacement_foo` and `displacement_bar` would also be interpreted as a two-step time series. Only the storage order of the arrays in the file determines their placement in the series. **Caution:** This mechanism can be triggered unintentionally. If a file contains arrays named `temperature` and `ambient_temperature`, both match the `temperature` label and nTop will interpret them as a two-step time series rather than two distinct fields. To avoid this, rename or remove one of the arrays so that only one matches the label. ### Time Values Time values are determined by two mechanisms, in order of priority: 1. **Embedded metadata:** The number of time steps is read from VTK XML metadata on the UnstructuredGrid TimeValues attribute. The physical time value is furthermore read from a seperate scalar FieldData array `Time`. 2. **Dummy values:** If no time metadata is present, nTop assigns sequential integer time values starting from 0 (that is, 0, 1, 2, …). ### Step Count and Skipping The longest series of matching arrays across all field label categories determines the expected number of time steps. Any field label category that does not produce exactly that number of steps is skipped entirely. For example, if a file contains: * `displacement_1`, `displacement_2`, `displacement_3` → 3 steps (longest) * `stress_1`, `stress_2` → 2 steps The expected step count is 3. Because `stress` only produces 2 steps, it is skipped and not imported at all. Only `displacement` is imported. ### Static Blocks and Time Series Only the time-dependent block types (**Import Time Dependent Structural Result** and **Import Time Dependent Thermal Result**) return and visualize full time series data. If a file containing time series data is loaded into a static block type (for example, **Import Analysis Result**), the time series is still detected and processed, but only the last snapshot in the series is returned. nTop logs the following warning: `File contains time series but import is Static. Using last step only.` ## CFD-Specific Behavior The **Import CFD Analysis Result** block differs from the other block types in several ways. It supports `.vti` (uniform grid) files in addition to `.vtk` and `.vtu`, and it does not use the time series mechanism described above. ### Key-Value Results CFD results are structured as key-value pairs. When multiple arrays match the same field label, each is stored as a separate entry in a dictionary rather than being interpreted as a time series. For example, a file containing arrays named `velocity_initial`, `velocity_1_s`, and `velocity_time-averaged` produces a CFD result with three entries in the velocity dictionary. Downstream in nTop, CFD results expose a list of keys and a corresponding list of fields, allowing you to select individual entries. ### Cell Region (VTI Only) `cell region` is an optional scalar point data array of type unsigned char (values 0–255). It defines region association IDs for nodes in a uniform grid, typically used to distinguish between boundary conditions and bulk regions. For example, `cell region = 1` might indicate bulk fluid nodes, while `cell region = 2` indicates solid no-slip wall nodes. You can use this field with downstream blocks such as **Filter Cell Region**. ### Implicit Field (VTI Only) `implicit field` is a scalar point data array containing the signed distance field associated with the voxelization of the input geometry. This field is used purely for visualization — it determines the surface body displayed in the viewport for surface plots. If you can retain or reconstruct the signed distance field from the original voxelization, it is worth including as an implicit field. If no implicit field is provided, nTop falls back to treating the entire domain as interior, which still works but may produce less useful surface visualizations. ### Beam Radius (VTU Only) `beam radius` is a scalar point data array containing the radii of the associated beams in the FE Mesh. If beam radius is not provided for beam elements, nTop may fail to render surface visualizations of the imported result. ## Unit System The **Unit System** input tells nTop what units the data in the file is expressed in. If the specified unit system differs from SI, nTop converts the imported data from the given units to SI upon import. If the file already contains SI data, set the unit system to SI and no conversion is applied. Each field label has associated physical dimensions (see the Block Types and Field Schemas section above). nTop uses these dimensions to determine which unit conversions to apply. For example, a velocity field has dimensions of L T⁻¹ (length per time), so both the length and time unit factors from the selected unit system are used in the conversion. Fields with no physical dimensions listed (such as strain) are dimensionless and are not affected by the unit system setting. ## Supported Cell Types nTop supports the following VTK cell types: **Volume elements:** tetrahedron, hexahedron, voxel, wedge, pyramid **Surface elements:** triangle, quad **Beam elements:** line, vertex All other cell types are ignored during import. nTop logs a warning indicating the number of skipped cells per unsupported type. If a file consists entirely of unsupported cell types, nTop tries to fall back to a vertex representation or produce an error. ## Troubleshooting ### Field Not Appearing After Import **Component count mismatch.** The array's number of components does not match what the matched field label expects. For example, a 3-component array matching `stress` (which expects Tensor-6) will not import. Verify that the array has the correct number of components for its intended field label. **Field Data instead of Point Data.** Only eigen frequency and load factor use VTK Field Data. All other fields must be Point Data (or Cell Data). If your solver writes a result as Field Data, see the Field Data section above for the recommended workaround. ### Unintentional Time Series If a file contains multiple arrays whose names match the same field label, nTop interprets them as a time series. This can happen unintentionally when array names share a common substring. For example, arrays named `temperature_surface` and `temperature_volume` both match the `temperature` label and are treated as a two-step series rather than two distinct fields. To fix this, rename or remove one of the arrays so that only one matches the intended label. ### Separate Arrays Instead of Multi-Component nTop expects vector and tensor fields to be stored as a single multi-component array. Three separate scalar arrays named `displacement_x`, `displacement_y`, `displacement_z` will not be combined into a vector. Instead, all three match the `displacement` label and trigger the time series mechanism, producing incorrect results. Please make sure your solver or post-processor writes vectors as a single array with named components (`x`, `y`, `z`) or indexed components (`0`, `1`, `2`). ### Time Series Data in a Static Block If a file with time series data is loaded into a static import block (for example, **Import Analysis Result** instead of **Import Time Dependent Structural Result**), only the last time step is returned. nTop logs a warning when this occurs. If you need the full series, use the corresponding time-dependent block type. *** Import Modal Result file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Modal Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [Modal Result](../../../../block-documentation/types/modal-result) | # Import Static Structural Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-static-structural-result ## About this Block **What it does:** Imports structured simulation result files from disk. VTK file formats (`.vtk`, `.vtu`) have the most comprehensive feature coverage and are recommended for simulation data exchange. Other file formats may behave differently from what the tips below describe. **Common uses:** * Importing results from external solvers. * Importing ML inference outputs. ## Block Types and Field Schemas Each import block defines a schema of expected fields (for example, displacement, stress, temperature). When a VTK file is loaded, nTop matches the data arrays in the file against this schema using name-based substring matching, assembles the results, and applies unit conversion. ### Import Static Structural Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | strain principal | min, mid, max | Vector-3 | — | | strain | xx, yy, zz, xy, yz, xz | Tensor-6 | — | | stress von\_mises | — | Scalar-1 | M L⁻¹ T⁻² | | stress principal | min, mid, max | Vector-3 | M L⁻¹ T⁻² | | stress | xx, yy, zz, xy, yz, xz | Tensor-6 | M L⁻¹ T⁻² | | reaction force | x, y, z | Vector-3 | M L T⁻² | Where multiple field labels share a common substring (for example, `stress von_mises`, `stress principal`, `stress`), the table order reflects the matching priority — more specific labels are listed first. See the Label Priority section below for details. ### Import Time Dependent Structural Result (.vtk, .vtu) All fields from Import Static Structural Result, plus: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | velocity | x, y, z | Vector-3 | L T⁻¹ | | acceleration | x, y, z | Vector-3 | L T⁻² | ### Import Static Thermal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | heat flux | x, y, z | Vector-3 | M T⁻³ | | temperature | — | Scalar-1 | Θ | | thermal reaction flux | — | Scalar-1 | M T⁻³ | ### Import Time Dependent Thermal Result (.vtk, .vtu) Same fields as Import Static Thermal Result. ### Import Modal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | eigen frequency | — | Field Data — Modes | T⁻¹ | ### Import Buckling Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | load factor | — | Field Data — Modes | — | ### Import CFD Analysis Result (.vtk, .vtu, .vti) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | density | — | Scalar-1 | M L⁻³ | | force | x, y, z | Vector-3 | M L T⁻² | | pressure | — | Scalar-1 | M L⁻¹ T⁻² | | temperature | — | Scalar-1 | Θ | | velocity | x, y, z | Vector-3 | L T⁻¹ | VTI-only fields: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | cell region | — | Scalar-1 | — | | implicit field | — | Scalar-1 | L | ## Data Array Matching nTop identifies importable fields by matching VTK data array names against the known field labels for each block type. ### Array Name Matching Matching checks whether the array name **contains** the field label as a substring. Before comparison, all underscores are replaced with spaces in both the array name and the field label, and matching is case-insensitive. For example, given the field label `displacement`: * `displacement` → match * `Displacement` → match * `my_displacement_results` → match (contains `displacement` after underscore replacement) * `nodal_displacement_field` → match * `disp` → no match ### Label Priority When an array name could match multiple field labels, a fixed priority order applies — more specific labels are checked before less specific ones. For stress-related fields the priority is: 1. `stress von_mises` (Scalar-1) 2. `stress principal` (Vector-3) 3. `stress` (Tensor-6) An array named `stress_von_mises_output` matches `stress von_mises` and is treated as a Scalar-1 field. It does not fall through to `stress` or `stress principal`. The same priority pattern applies to strain: 1. `strain principal` (Vector-3) 2. `strain` (Tensor-6) ### Component Names and Dimensionality Each field label has an expected dimensionality: Scalar-1, Vector-3, or Tensor-6. Once an array is matched to a field label, nTop checks the array's components to verify compatibility. Components must be packed into a single multi-component VTK array. nTop does not combine separate scalar arrays into vectors or tensors. A displacement field must be a single array with 3 components, not three separate arrays named `displacement_x`, `displacement_y`, `displacement_z`. **Component name resolution:** VTK arrays support named components (via `SetComponentName`/`GetComponentName`). nTop uses these names to map components to their expected slots: * **Vector-3 fields** (for example, `displacement`, `velocity`): components named `x`, `y`, `z` * **Vector-3 principal fields** (for example, `stress principal`): components named `min`, `mid`, `max` * **Tensor-6 fields** (for example, `stress`, `strain`): components named `xx`, `yy`, `zz`, `xy`, `yz`, `xz` **Numerical fallback:** If component names are not set, components are mapped by their numerical index (`0`, `1`, `2`, …) in positional order. For a Vector-3 field, component 0 maps to the first expected slot (for example, `x` or `min`), component 1 to the second, and so on. **Note on Voigt notation:** For Tensor-6 fields using the numerical fallback, nTop expects the component order `xx, yy, zz, xy, yz, xz` (indices 0–5). Different solvers may use different Voigt conventions. If your solver's default ordering does not match, use explicit component names to avoid silently scrambled tensor components. **Component count must match.** If the number of components in the array does not match the expected dimensionality of the matched field label, the field will fail to import. For example, an array matching `stress` (Tensor-6) must have exactly 6 components. A 3-component array matching `stress` will not import; it would need to match `stress principal` instead. ### Data Precision All imported data arrays are cast to double precision (float64), regardless of the precision in the source file. ## Point Data, Cell Data, and Field Data ### Point Data (Default) All importable fields are expected to be VTK point data arrays. This is the standard and recommended way to provide simulation results to nTop. ### Cell Data Fallback If a field label is matched by a cell data array but no corresponding point data array exists for the same label, nTop automatically interpolates the cell data to points using VTK's `vtkCellDataToPointData` filter. If both a point data array and a cell data array share the same field label, only the point data array is imported. The cell data array is ignored for that label. Other labels that only appear as cell data are still imported normally. **Cell data in time series and CFD:** When multiple arrays match the same label (triggering time series or CFD key-value behavior), cell data arrays are interpolated to point data individually before being assembled. For example, if `velocity_1` is point data and `velocity_2` is cell data, `velocity_2` is interpolated to points and both are included in the time series. ### Field Data VTK Field Data arrays have special handling and are only supported for specific attributes: * **Eigen frequency** in the Import Modal Result block * **Load factor** in the Import Buckling Result block * **Time** in the time-dependent Import Result blocks All other fields must be point data (or cell data that can be interpolated to points). Placing a regular field like `reaction_force` as VTK Field Data will cause a shape mismatch and the field will fail to import. If your solver outputs a field as Field Data, convert it to point data before importing — for example, by using ParaView's `FieldDataToDataSetAttribute` filter and saving the result. ## Time Series Behavior Time series import applies to all block types except CFD (see CFD-Specific Behavior below). When multiple VTK data arrays match the same field label, nTop interprets them as a time series. ### Time Series Detection Multiple arrays matching the same field label category trigger time series interpretation. The matching uses the same substring logic described above. For example, if a file contains three arrays named `displacement_1`, `displacement_2`, `displacement_3`, all three contain the substring `displacement` and are interpreted as a three-step time series. The suffix does not need to be numeric. Arrays named `displacement_foo` and `displacement_bar` would also be interpreted as a two-step time series. Only the storage order of the arrays in the file determines their placement in the series. **Caution:** This mechanism can be triggered unintentionally. If a file contains arrays named `temperature` and `ambient_temperature`, both match the `temperature` label and nTop will interpret them as a two-step time series rather than two distinct fields. To avoid this, rename or remove one of the arrays so that only one matches the label. ### Time Values Time values are determined by two mechanisms, in order of priority: 1. **Embedded metadata:** The number of time steps is read from VTK XML metadata on the UnstructuredGrid TimeValues attribute. The physical time value is furthermore read from a seperate scalar FieldData array `Time`. 2. **Dummy values:** If no time metadata is present, nTop assigns sequential integer time values starting from 0 (that is, 0, 1, 2, …). ### Step Count and Skipping The longest series of matching arrays across all field label categories determines the expected number of time steps. Any field label category that does not produce exactly that number of steps is skipped entirely. For example, if a file contains: * `displacement_1`, `displacement_2`, `displacement_3` → 3 steps (longest) * `stress_1`, `stress_2` → 2 steps The expected step count is 3. Because `stress` only produces 2 steps, it is skipped and not imported at all. Only `displacement` is imported. ### Static Blocks and Time Series Only the time-dependent block types (**Import Time Dependent Structural Result** and **Import Time Dependent Thermal Result**) return and visualize full time series data. If a file containing time series data is loaded into a static block type (for example, **Import Analysis Result**), the time series is still detected and processed, but only the last snapshot in the series is returned. nTop logs the following warning: `File contains time series but import is Static. Using last step only.` ## CFD-Specific Behavior The **Import CFD Analysis Result** block differs from the other block types in several ways. It supports `.vti` (uniform grid) files in addition to `.vtk` and `.vtu`, and it does not use the time series mechanism described above. ### Key-Value Results CFD results are structured as key-value pairs. When multiple arrays match the same field label, each is stored as a separate entry in a dictionary rather than being interpreted as a time series. For example, a file containing arrays named `velocity_initial`, `velocity_1_s`, and `velocity_time-averaged` produces a CFD result with three entries in the velocity dictionary. Downstream in nTop, CFD results expose a list of keys and a corresponding list of fields, allowing you to select individual entries. ### Cell Region (VTI Only) `cell region` is an optional scalar point data array of type unsigned char (values 0–255). It defines region association IDs for nodes in a uniform grid, typically used to distinguish between boundary conditions and bulk regions. For example, `cell region = 1` might indicate bulk fluid nodes, while `cell region = 2` indicates solid no-slip wall nodes. You can use this field with downstream blocks such as **Filter Cell Region**. ### Implicit Field (VTI Only) `implicit field` is a scalar point data array containing the signed distance field associated with the voxelization of the input geometry. This field is used purely for visualization — it determines the surface body displayed in the viewport for surface plots. If you can retain or reconstruct the signed distance field from the original voxelization, it is worth including as an implicit field. If no implicit field is provided, nTop falls back to treating the entire domain as interior, which still works but may produce less useful surface visualizations. ### Beam Radius (VTU Only) `beam radius` is a scalar point data array containing the radii of the associated beams in the FE Mesh. If beam radius is not provided for beam elements, nTop may fail to render surface visualizations of the imported result. ## Unit System The **Unit System** input tells nTop what units the data in the file is expressed in. If the specified unit system differs from SI, nTop converts the imported data from the given units to SI upon import. If the file already contains SI data, set the unit system to SI and no conversion is applied. Each field label has associated physical dimensions (see the Block Types and Field Schemas section above). nTop uses these dimensions to determine which unit conversions to apply. For example, a velocity field has dimensions of L T⁻¹ (length per time), so both the length and time unit factors from the selected unit system are used in the conversion. Fields with no physical dimensions listed (such as strain) are dimensionless and are not affected by the unit system setting. ## Supported Cell Types nTop supports the following VTK cell types: **Volume elements:** tetrahedron, hexahedron, voxel, wedge, pyramid **Surface elements:** triangle, quad **Beam elements:** line, vertex All other cell types are ignored during import. nTop logs a warning indicating the number of skipped cells per unsupported type. If a file consists entirely of unsupported cell types, nTop tries to fall back to a vertex representation or produce an error. ## Troubleshooting ### Field Not Appearing After Import **Component count mismatch.** The array's number of components does not match what the matched field label expects. For example, a 3-component array matching `stress` (which expects Tensor-6) will not import. Verify that the array has the correct number of components for its intended field label. **Field Data instead of Point Data.** Only eigen frequency and load factor use VTK Field Data. All other fields must be Point Data (or Cell Data). If your solver writes a result as Field Data, see the Field Data section above for the recommended workaround. ### Unintentional Time Series If a file contains multiple arrays whose names match the same field label, nTop interprets them as a time series. This can happen unintentionally when array names share a common substring. For example, arrays named `temperature_surface` and `temperature_volume` both match the `temperature` label and are treated as a two-step series rather than two distinct fields. To fix this, rename or remove one of the arrays so that only one matches the intended label. ### Separate Arrays Instead of Multi-Component nTop expects vector and tensor fields to be stored as a single multi-component array. Three separate scalar arrays named `displacement_x`, `displacement_y`, `displacement_z` will not be combined into a vector. Instead, all three match the `displacement` label and trigger the time series mechanism, producing incorrect results. Please make sure your solver or post-processor writes vectors as a single array with named components (`x`, `y`, `z`) or indexed components (`0`, `1`, `2`). ### Time Series Data in a Static Block If a file with time series data is loaded into a static import block (for example, **Import Analysis Result** instead of **Import Time Dependent Structural Result**), only the last time step is returned. nTop logs a warning when this occurs. If you need the full series, use the corresponding time-dependent block type. *** Import Static Structural Result file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Static Structural Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | # Import Static Thermal Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-static-thermal-result ## About this Block **What it does:** Imports structured simulation result files from disk. VTK file formats (`.vtk`, `.vtu`) have the most comprehensive feature coverage and are recommended for simulation data exchange. Other file formats may behave differently from what the tips below describe. **Common uses:** * Importing results from external solvers. * Importing ML inference outputs. ## Block Types and Field Schemas Each import block defines a schema of expected fields (for example, displacement, stress, temperature). When a VTK file is loaded, nTop matches the data arrays in the file against this schema using name-based substring matching, assembles the results, and applies unit conversion. ### Import Static Structural Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | strain principal | min, mid, max | Vector-3 | — | | strain | xx, yy, zz, xy, yz, xz | Tensor-6 | — | | stress von\_mises | — | Scalar-1 | M L⁻¹ T⁻² | | stress principal | min, mid, max | Vector-3 | M L⁻¹ T⁻² | | stress | xx, yy, zz, xy, yz, xz | Tensor-6 | M L⁻¹ T⁻² | | reaction force | x, y, z | Vector-3 | M L T⁻² | Where multiple field labels share a common substring (for example, `stress von_mises`, `stress principal`, `stress`), the table order reflects the matching priority — more specific labels are listed first. See the Label Priority section below for details. ### Import Time Dependent Structural Result (.vtk, .vtu) All fields from Import Static Structural Result, plus: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | velocity | x, y, z | Vector-3 | L T⁻¹ | | acceleration | x, y, z | Vector-3 | L T⁻² | ### Import Static Thermal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | heat flux | x, y, z | Vector-3 | M T⁻³ | | temperature | — | Scalar-1 | Θ | | thermal reaction flux | — | Scalar-1 | M T⁻³ | ### Import Time Dependent Thermal Result (.vtk, .vtu) Same fields as Import Static Thermal Result. ### Import Modal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | eigen frequency | — | Field Data — Modes | T⁻¹ | ### Import Buckling Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | load factor | — | Field Data — Modes | — | ### Import CFD Analysis Result (.vtk, .vtu, .vti) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | density | — | Scalar-1 | M L⁻³ | | force | x, y, z | Vector-3 | M L T⁻² | | pressure | — | Scalar-1 | M L⁻¹ T⁻² | | temperature | — | Scalar-1 | Θ | | velocity | x, y, z | Vector-3 | L T⁻¹ | VTI-only fields: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | cell region | — | Scalar-1 | — | | implicit field | — | Scalar-1 | L | ## Data Array Matching nTop identifies importable fields by matching VTK data array names against the known field labels for each block type. ### Array Name Matching Matching checks whether the array name **contains** the field label as a substring. Before comparison, all underscores are replaced with spaces in both the array name and the field label, and matching is case-insensitive. For example, given the field label `displacement`: * `displacement` → match * `Displacement` → match * `my_displacement_results` → match (contains `displacement` after underscore replacement) * `nodal_displacement_field` → match * `disp` → no match ### Label Priority When an array name could match multiple field labels, a fixed priority order applies — more specific labels are checked before less specific ones. For stress-related fields the priority is: 1. `stress von_mises` (Scalar-1) 2. `stress principal` (Vector-3) 3. `stress` (Tensor-6) An array named `stress_von_mises_output` matches `stress von_mises` and is treated as a Scalar-1 field. It does not fall through to `stress` or `stress principal`. The same priority pattern applies to strain: 1. `strain principal` (Vector-3) 2. `strain` (Tensor-6) ### Component Names and Dimensionality Each field label has an expected dimensionality: Scalar-1, Vector-3, or Tensor-6. Once an array is matched to a field label, nTop checks the array's components to verify compatibility. Components must be packed into a single multi-component VTK array. nTop does not combine separate scalar arrays into vectors or tensors. A displacement field must be a single array with 3 components, not three separate arrays named `displacement_x`, `displacement_y`, `displacement_z`. **Component name resolution:** VTK arrays support named components (via `SetComponentName`/`GetComponentName`). nTop uses these names to map components to their expected slots: * **Vector-3 fields** (for example, `displacement`, `velocity`): components named `x`, `y`, `z` * **Vector-3 principal fields** (for example, `stress principal`): components named `min`, `mid`, `max` * **Tensor-6 fields** (for example, `stress`, `strain`): components named `xx`, `yy`, `zz`, `xy`, `yz`, `xz` **Numerical fallback:** If component names are not set, components are mapped by their numerical index (`0`, `1`, `2`, …) in positional order. For a Vector-3 field, component 0 maps to the first expected slot (for example, `x` or `min`), component 1 to the second, and so on. **Note on Voigt notation:** For Tensor-6 fields using the numerical fallback, nTop expects the component order `xx, yy, zz, xy, yz, xz` (indices 0–5). Different solvers may use different Voigt conventions. If your solver's default ordering does not match, use explicit component names to avoid silently scrambled tensor components. **Component count must match.** If the number of components in the array does not match the expected dimensionality of the matched field label, the field will fail to import. For example, an array matching `stress` (Tensor-6) must have exactly 6 components. A 3-component array matching `stress` will not import; it would need to match `stress principal` instead. ### Data Precision All imported data arrays are cast to double precision (float64), regardless of the precision in the source file. ## Point Data, Cell Data, and Field Data ### Point Data (Default) All importable fields are expected to be VTK point data arrays. This is the standard and recommended way to provide simulation results to nTop. ### Cell Data Fallback If a field label is matched by a cell data array but no corresponding point data array exists for the same label, nTop automatically interpolates the cell data to points using VTK's `vtkCellDataToPointData` filter. If both a point data array and a cell data array share the same field label, only the point data array is imported. The cell data array is ignored for that label. Other labels that only appear as cell data are still imported normally. **Cell data in time series and CFD:** When multiple arrays match the same label (triggering time series or CFD key-value behavior), cell data arrays are interpolated to point data individually before being assembled. For example, if `velocity_1` is point data and `velocity_2` is cell data, `velocity_2` is interpolated to points and both are included in the time series. ### Field Data VTK Field Data arrays have special handling and are only supported for specific attributes: * **Eigen frequency** in the Import Modal Result block * **Load factor** in the Import Buckling Result block * **Time** in the time-dependent Import Result blocks All other fields must be point data (or cell data that can be interpolated to points). Placing a regular field like `reaction_force` as VTK Field Data will cause a shape mismatch and the field will fail to import. If your solver outputs a field as Field Data, convert it to point data before importing — for example, by using ParaView's `FieldDataToDataSetAttribute` filter and saving the result. ## Time Series Behavior Time series import applies to all block types except CFD (see CFD-Specific Behavior below). When multiple VTK data arrays match the same field label, nTop interprets them as a time series. ### Time Series Detection Multiple arrays matching the same field label category trigger time series interpretation. The matching uses the same substring logic described above. For example, if a file contains three arrays named `displacement_1`, `displacement_2`, `displacement_3`, all three contain the substring `displacement` and are interpreted as a three-step time series. The suffix does not need to be numeric. Arrays named `displacement_foo` and `displacement_bar` would also be interpreted as a two-step time series. Only the storage order of the arrays in the file determines their placement in the series. **Caution:** This mechanism can be triggered unintentionally. If a file contains arrays named `temperature` and `ambient_temperature`, both match the `temperature` label and nTop will interpret them as a two-step time series rather than two distinct fields. To avoid this, rename or remove one of the arrays so that only one matches the label. ### Time Values Time values are determined by two mechanisms, in order of priority: 1. **Embedded metadata:** The number of time steps is read from VTK XML metadata on the UnstructuredGrid TimeValues attribute. The physical time value is furthermore read from a seperate scalar FieldData array `Time`. 2. **Dummy values:** If no time metadata is present, nTop assigns sequential integer time values starting from 0 (that is, 0, 1, 2, …). ### Step Count and Skipping The longest series of matching arrays across all field label categories determines the expected number of time steps. Any field label category that does not produce exactly that number of steps is skipped entirely. For example, if a file contains: * `displacement_1`, `displacement_2`, `displacement_3` → 3 steps (longest) * `stress_1`, `stress_2` → 2 steps The expected step count is 3. Because `stress` only produces 2 steps, it is skipped and not imported at all. Only `displacement` is imported. ### Static Blocks and Time Series Only the time-dependent block types (**Import Time Dependent Structural Result** and **Import Time Dependent Thermal Result**) return and visualize full time series data. If a file containing time series data is loaded into a static block type (for example, **Import Analysis Result**), the time series is still detected and processed, but only the last snapshot in the series is returned. nTop logs the following warning: `File contains time series but import is Static. Using last step only.` ## CFD-Specific Behavior The **Import CFD Analysis Result** block differs from the other block types in several ways. It supports `.vti` (uniform grid) files in addition to `.vtk` and `.vtu`, and it does not use the time series mechanism described above. ### Key-Value Results CFD results are structured as key-value pairs. When multiple arrays match the same field label, each is stored as a separate entry in a dictionary rather than being interpreted as a time series. For example, a file containing arrays named `velocity_initial`, `velocity_1_s`, and `velocity_time-averaged` produces a CFD result with three entries in the velocity dictionary. Downstream in nTop, CFD results expose a list of keys and a corresponding list of fields, allowing you to select individual entries. ### Cell Region (VTI Only) `cell region` is an optional scalar point data array of type unsigned char (values 0–255). It defines region association IDs for nodes in a uniform grid, typically used to distinguish between boundary conditions and bulk regions. For example, `cell region = 1` might indicate bulk fluid nodes, while `cell region = 2` indicates solid no-slip wall nodes. You can use this field with downstream blocks such as **Filter Cell Region**. ### Implicit Field (VTI Only) `implicit field` is a scalar point data array containing the signed distance field associated with the voxelization of the input geometry. This field is used purely for visualization — it determines the surface body displayed in the viewport for surface plots. If you can retain or reconstruct the signed distance field from the original voxelization, it is worth including as an implicit field. If no implicit field is provided, nTop falls back to treating the entire domain as interior, which still works but may produce less useful surface visualizations. ### Beam Radius (VTU Only) `beam radius` is a scalar point data array containing the radii of the associated beams in the FE Mesh. If beam radius is not provided for beam elements, nTop may fail to render surface visualizations of the imported result. ## Unit System The **Unit System** input tells nTop what units the data in the file is expressed in. If the specified unit system differs from SI, nTop converts the imported data from the given units to SI upon import. If the file already contains SI data, set the unit system to SI and no conversion is applied. Each field label has associated physical dimensions (see the Block Types and Field Schemas section above). nTop uses these dimensions to determine which unit conversions to apply. For example, a velocity field has dimensions of L T⁻¹ (length per time), so both the length and time unit factors from the selected unit system are used in the conversion. Fields with no physical dimensions listed (such as strain) are dimensionless and are not affected by the unit system setting. ## Supported Cell Types nTop supports the following VTK cell types: **Volume elements:** tetrahedron, hexahedron, voxel, wedge, pyramid **Surface elements:** triangle, quad **Beam elements:** line, vertex All other cell types are ignored during import. nTop logs a warning indicating the number of skipped cells per unsupported type. If a file consists entirely of unsupported cell types, nTop tries to fall back to a vertex representation or produce an error. ## Troubleshooting ### Field Not Appearing After Import **Component count mismatch.** The array's number of components does not match what the matched field label expects. For example, a 3-component array matching `stress` (which expects Tensor-6) will not import. Verify that the array has the correct number of components for its intended field label. **Field Data instead of Point Data.** Only eigen frequency and load factor use VTK Field Data. All other fields must be Point Data (or Cell Data). If your solver writes a result as Field Data, see the Field Data section above for the recommended workaround. ### Unintentional Time Series If a file contains multiple arrays whose names match the same field label, nTop interprets them as a time series. This can happen unintentionally when array names share a common substring. For example, arrays named `temperature_surface` and `temperature_volume` both match the `temperature` label and are treated as a two-step series rather than two distinct fields. To fix this, rename or remove one of the arrays so that only one matches the intended label. ### Separate Arrays Instead of Multi-Component nTop expects vector and tensor fields to be stored as a single multi-component array. Three separate scalar arrays named `displacement_x`, `displacement_y`, `displacement_z` will not be combined into a vector. Instead, all three match the `displacement` label and trigger the time series mechanism, producing incorrect results. Please make sure your solver or post-processor writes vectors as a single array with named components (`x`, `y`, `z`) or indexed components (`0`, `1`, `2`). ### Time Series Data in a Static Block If a file with time series data is loaded into a static import block (for example, **Import Analysis Result** instead of **Import Time Dependent Structural Result**), only the last time step is returned. nTop logs a warning when this occurs. If you need the full series, use the corresponding time-dependent block type. *** Import Static Thermal Result file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Static Thermal Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [Static Thermal Result](../../../../block-documentation/types/static-thermal-result) | # Import Superelement Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-superelement ## About this Block **What it does:** The **Import Superelement** block imports a .bdf and .fem file to represent structural components that serve as efficient building blocks in larger nTop simulations. * A superelement is a reduced-order model of a larger FEA model, representing its stiffness and mass properties with a smaller set of degrees of freedom at its boundary. The imported superelement can be used directly as a domain in FEA and optimization problems. **Common uses:** * Incorporating pre-analyzed, complex components into a larger assembly for system-level analysis without needing to re-mesh or re-solve the full component. * Connecting superelements to other FE domains using rigid connectors for efficient analysis of large assemblies. * Applying boundary conditions directly to the external nodes of the superelement. **Tips:** * Ensure that the .bdf file containing the superelement's stiffness and mass properties corresponds correctly to the .fem file defining the global coordinates of the external grid points. * Verify that the selected Unit System in the block input matches the unit system used to create the superelement files. This is crucial for accurate results. * Remember that the FE points derived from the superelement's properties cannot be used to define a separate FE domain. ## Example File Download Example: [Superelement Example](https://storage.googleapis.com/files-learn/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Import%20Superelement%20of%20Aircraft%20Wing.zip) ![Superelement Example](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.29/superelements.png) *** Imports a Superelement file from an external location. The .bdf file should contain the stiffness and mass properties, as well as the external grid IDs of the Super Element. The .fem file should contain the corresponding global coordinates of the external grid points. ### Inputs | Name | Type | Description | | - | - | - | | Dmig file | [Path](../../../../block-documentation/types/path) | Path to the .bdf file containing the superelement's stiffness, mass properties, and external grid IDs. | | Grid file | [Path](../../../../block-documentation/types/path) | Path to the .fem file defining the global coordinates of the superelement's external grid points. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system used for the imported superelement. This ensures consistent translation of its properties into the current analysis unit system. | ### Outputs | Type | | - | | [Superelement](../../../../block-documentation/types/superelement) | # Import Time Dependent Structural Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-time-dependent-structural-result ## About this Block **What it does:** Imports structured simulation result files from disk. VTK file formats (`.vtk`, `.vtu`) have the most comprehensive feature coverage and are recommended for simulation data exchange. Other file formats may behave differently from what the tips below describe. **Common uses:** * Importing results from external solvers. * Importing ML inference outputs. ## Block Types and Field Schemas Each import block defines a schema of expected fields (for example, displacement, stress, temperature). When a VTK file is loaded, nTop matches the data arrays in the file against this schema using name-based substring matching, assembles the results, and applies unit conversion. ### Import Static Structural Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | strain principal | min, mid, max | Vector-3 | — | | strain | xx, yy, zz, xy, yz, xz | Tensor-6 | — | | stress von\_mises | — | Scalar-1 | M L⁻¹ T⁻² | | stress principal | min, mid, max | Vector-3 | M L⁻¹ T⁻² | | stress | xx, yy, zz, xy, yz, xz | Tensor-6 | M L⁻¹ T⁻² | | reaction force | x, y, z | Vector-3 | M L T⁻² | Where multiple field labels share a common substring (for example, `stress von_mises`, `stress principal`, `stress`), the table order reflects the matching priority — more specific labels are listed first. See the Label Priority section below for details. ### Import Time Dependent Structural Result (.vtk, .vtu) All fields from Import Static Structural Result, plus: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | velocity | x, y, z | Vector-3 | L T⁻¹ | | acceleration | x, y, z | Vector-3 | L T⁻² | ### Import Static Thermal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | heat flux | x, y, z | Vector-3 | M T⁻³ | | temperature | — | Scalar-1 | Θ | | thermal reaction flux | — | Scalar-1 | M T⁻³ | ### Import Time Dependent Thermal Result (.vtk, .vtu) Same fields as Import Static Thermal Result. ### Import Modal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | eigen frequency | — | Field Data — Modes | T⁻¹ | ### Import Buckling Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | load factor | — | Field Data — Modes | — | ### Import CFD Analysis Result (.vtk, .vtu, .vti) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | density | — | Scalar-1 | M L⁻³ | | force | x, y, z | Vector-3 | M L T⁻² | | pressure | — | Scalar-1 | M L⁻¹ T⁻² | | temperature | — | Scalar-1 | Θ | | velocity | x, y, z | Vector-3 | L T⁻¹ | VTI-only fields: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | cell region | — | Scalar-1 | — | | implicit field | — | Scalar-1 | L | ## Data Array Matching nTop identifies importable fields by matching VTK data array names against the known field labels for each block type. ### Array Name Matching Matching checks whether the array name **contains** the field label as a substring. Before comparison, all underscores are replaced with spaces in both the array name and the field label, and matching is case-insensitive. For example, given the field label `displacement`: * `displacement` → match * `Displacement` → match * `my_displacement_results` → match (contains `displacement` after underscore replacement) * `nodal_displacement_field` → match * `disp` → no match ### Label Priority When an array name could match multiple field labels, a fixed priority order applies — more specific labels are checked before less specific ones. For stress-related fields the priority is: 1. `stress von_mises` (Scalar-1) 2. `stress principal` (Vector-3) 3. `stress` (Tensor-6) An array named `stress_von_mises_output` matches `stress von_mises` and is treated as a Scalar-1 field. It does not fall through to `stress` or `stress principal`. The same priority pattern applies to strain: 1. `strain principal` (Vector-3) 2. `strain` (Tensor-6) ### Component Names and Dimensionality Each field label has an expected dimensionality: Scalar-1, Vector-3, or Tensor-6. Once an array is matched to a field label, nTop checks the array's components to verify compatibility. Components must be packed into a single multi-component VTK array. nTop does not combine separate scalar arrays into vectors or tensors. A displacement field must be a single array with 3 components, not three separate arrays named `displacement_x`, `displacement_y`, `displacement_z`. **Component name resolution:** VTK arrays support named components (via `SetComponentName`/`GetComponentName`). nTop uses these names to map components to their expected slots: * **Vector-3 fields** (for example, `displacement`, `velocity`): components named `x`, `y`, `z` * **Vector-3 principal fields** (for example, `stress principal`): components named `min`, `mid`, `max` * **Tensor-6 fields** (for example, `stress`, `strain`): components named `xx`, `yy`, `zz`, `xy`, `yz`, `xz` **Numerical fallback:** If component names are not set, components are mapped by their numerical index (`0`, `1`, `2`, …) in positional order. For a Vector-3 field, component 0 maps to the first expected slot (for example, `x` or `min`), component 1 to the second, and so on. **Note on Voigt notation:** For Tensor-6 fields using the numerical fallback, nTop expects the component order `xx, yy, zz, xy, yz, xz` (indices 0–5). Different solvers may use different Voigt conventions. If your solver's default ordering does not match, use explicit component names to avoid silently scrambled tensor components. **Component count must match.** If the number of components in the array does not match the expected dimensionality of the matched field label, the field will fail to import. For example, an array matching `stress` (Tensor-6) must have exactly 6 components. A 3-component array matching `stress` will not import; it would need to match `stress principal` instead. ### Data Precision All imported data arrays are cast to double precision (float64), regardless of the precision in the source file. ## Point Data, Cell Data, and Field Data ### Point Data (Default) All importable fields are expected to be VTK point data arrays. This is the standard and recommended way to provide simulation results to nTop. ### Cell Data Fallback If a field label is matched by a cell data array but no corresponding point data array exists for the same label, nTop automatically interpolates the cell data to points using VTK's `vtkCellDataToPointData` filter. If both a point data array and a cell data array share the same field label, only the point data array is imported. The cell data array is ignored for that label. Other labels that only appear as cell data are still imported normally. **Cell data in time series and CFD:** When multiple arrays match the same label (triggering time series or CFD key-value behavior), cell data arrays are interpolated to point data individually before being assembled. For example, if `velocity_1` is point data and `velocity_2` is cell data, `velocity_2` is interpolated to points and both are included in the time series. ### Field Data VTK Field Data arrays have special handling and are only supported for specific attributes: * **Eigen frequency** in the Import Modal Result block * **Load factor** in the Import Buckling Result block * **Time** in the time-dependent Import Result blocks All other fields must be point data (or cell data that can be interpolated to points). Placing a regular field like `reaction_force` as VTK Field Data will cause a shape mismatch and the field will fail to import. If your solver outputs a field as Field Data, convert it to point data before importing — for example, by using ParaView's `FieldDataToDataSetAttribute` filter and saving the result. ## Time Series Behavior Time series import applies to all block types except CFD (see CFD-Specific Behavior below). When multiple VTK data arrays match the same field label, nTop interprets them as a time series. ### Time Series Detection Multiple arrays matching the same field label category trigger time series interpretation. The matching uses the same substring logic described above. For example, if a file contains three arrays named `displacement_1`, `displacement_2`, `displacement_3`, all three contain the substring `displacement` and are interpreted as a three-step time series. The suffix does not need to be numeric. Arrays named `displacement_foo` and `displacement_bar` would also be interpreted as a two-step time series. Only the storage order of the arrays in the file determines their placement in the series. **Caution:** This mechanism can be triggered unintentionally. If a file contains arrays named `temperature` and `ambient_temperature`, both match the `temperature` label and nTop will interpret them as a two-step time series rather than two distinct fields. To avoid this, rename or remove one of the arrays so that only one matches the label. ### Time Values Time values are determined by two mechanisms, in order of priority: 1. **Embedded metadata:** The number of time steps is read from VTK XML metadata on the UnstructuredGrid TimeValues attribute. The physical time value is furthermore read from a seperate scalar FieldData array `Time`. 2. **Dummy values:** If no time metadata is present, nTop assigns sequential integer time values starting from 0 (that is, 0, 1, 2, …). ### Step Count and Skipping The longest series of matching arrays across all field label categories determines the expected number of time steps. Any field label category that does not produce exactly that number of steps is skipped entirely. For example, if a file contains: * `displacement_1`, `displacement_2`, `displacement_3` → 3 steps (longest) * `stress_1`, `stress_2` → 2 steps The expected step count is 3. Because `stress` only produces 2 steps, it is skipped and not imported at all. Only `displacement` is imported. ### Static Blocks and Time Series Only the time-dependent block types (**Import Time Dependent Structural Result** and **Import Time Dependent Thermal Result**) return and visualize full time series data. If a file containing time series data is loaded into a static block type (for example, **Import Analysis Result**), the time series is still detected and processed, but only the last snapshot in the series is returned. nTop logs the following warning: `File contains time series but import is Static. Using last step only.` ## CFD-Specific Behavior The **Import CFD Analysis Result** block differs from the other block types in several ways. It supports `.vti` (uniform grid) files in addition to `.vtk` and `.vtu`, and it does not use the time series mechanism described above. ### Key-Value Results CFD results are structured as key-value pairs. When multiple arrays match the same field label, each is stored as a separate entry in a dictionary rather than being interpreted as a time series. For example, a file containing arrays named `velocity_initial`, `velocity_1_s`, and `velocity_time-averaged` produces a CFD result with three entries in the velocity dictionary. Downstream in nTop, CFD results expose a list of keys and a corresponding list of fields, allowing you to select individual entries. ### Cell Region (VTI Only) `cell region` is an optional scalar point data array of type unsigned char (values 0–255). It defines region association IDs for nodes in a uniform grid, typically used to distinguish between boundary conditions and bulk regions. For example, `cell region = 1` might indicate bulk fluid nodes, while `cell region = 2` indicates solid no-slip wall nodes. You can use this field with downstream blocks such as **Filter Cell Region**. ### Implicit Field (VTI Only) `implicit field` is a scalar point data array containing the signed distance field associated with the voxelization of the input geometry. This field is used purely for visualization — it determines the surface body displayed in the viewport for surface plots. If you can retain or reconstruct the signed distance field from the original voxelization, it is worth including as an implicit field. If no implicit field is provided, nTop falls back to treating the entire domain as interior, which still works but may produce less useful surface visualizations. ### Beam Radius (VTU Only) `beam radius` is a scalar point data array containing the radii of the associated beams in the FE Mesh. If beam radius is not provided for beam elements, nTop may fail to render surface visualizations of the imported result. ## Unit System The **Unit System** input tells nTop what units the data in the file is expressed in. If the specified unit system differs from SI, nTop converts the imported data from the given units to SI upon import. If the file already contains SI data, set the unit system to SI and no conversion is applied. Each field label has associated physical dimensions (see the Block Types and Field Schemas section above). nTop uses these dimensions to determine which unit conversions to apply. For example, a velocity field has dimensions of L T⁻¹ (length per time), so both the length and time unit factors from the selected unit system are used in the conversion. Fields with no physical dimensions listed (such as strain) are dimensionless and are not affected by the unit system setting. ## Supported Cell Types nTop supports the following VTK cell types: **Volume elements:** tetrahedron, hexahedron, voxel, wedge, pyramid **Surface elements:** triangle, quad **Beam elements:** line, vertex All other cell types are ignored during import. nTop logs a warning indicating the number of skipped cells per unsupported type. If a file consists entirely of unsupported cell types, nTop tries to fall back to a vertex representation or produce an error. ## Troubleshooting ### Field Not Appearing After Import **Component count mismatch.** The array's number of components does not match what the matched field label expects. For example, a 3-component array matching `stress` (which expects Tensor-6) will not import. Verify that the array has the correct number of components for its intended field label. **Field Data instead of Point Data.** Only eigen frequency and load factor use VTK Field Data. All other fields must be Point Data (or Cell Data). If your solver writes a result as Field Data, see the Field Data section above for the recommended workaround. ### Unintentional Time Series If a file contains multiple arrays whose names match the same field label, nTop interprets them as a time series. This can happen unintentionally when array names share a common substring. For example, arrays named `temperature_surface` and `temperature_volume` both match the `temperature` label and are treated as a two-step series rather than two distinct fields. To fix this, rename or remove one of the arrays so that only one matches the intended label. ### Separate Arrays Instead of Multi-Component nTop expects vector and tensor fields to be stored as a single multi-component array. Three separate scalar arrays named `displacement_x`, `displacement_y`, `displacement_z` will not be combined into a vector. Instead, all three match the `displacement` label and trigger the time series mechanism, producing incorrect results. Please make sure your solver or post-processor writes vectors as a single array with named components (`x`, `y`, `z`) or indexed components (`0`, `1`, `2`). ### Time Series Data in a Static Block If a file with time series data is loaded into a static import block (for example, **Import Analysis Result** instead of **Import Time Dependent Structural Result**), only the last time step is returned. nTop logs a warning when this occurs. If you need the full series, use the corresponding time-dependent block type. *** Import Time Dependent Structural Result file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Time Dependent Structural Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [Time Dependent Structural Result](../../../../block-documentation/types/time-dependent-structural-result) | # Import Time Dependent Thermal Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/import-time-dependent-thermal-result ## About this Block **What it does:** Imports structured simulation result files from disk. VTK file formats (`.vtk`, `.vtu`) have the most comprehensive feature coverage and are recommended for simulation data exchange. Other file formats may behave differently from what the tips below describe. **Common uses:** * Importing results from external solvers. * Importing ML inference outputs. ## Block Types and Field Schemas Each import block defines a schema of expected fields (for example, displacement, stress, temperature). When a VTK file is loaded, nTop matches the data arrays in the file against this schema using name-based substring matching, assembles the results, and applies unit conversion. ### Import Static Structural Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | strain principal | min, mid, max | Vector-3 | — | | strain | xx, yy, zz, xy, yz, xz | Tensor-6 | — | | stress von\_mises | — | Scalar-1 | M L⁻¹ T⁻² | | stress principal | min, mid, max | Vector-3 | M L⁻¹ T⁻² | | stress | xx, yy, zz, xy, yz, xz | Tensor-6 | M L⁻¹ T⁻² | | reaction force | x, y, z | Vector-3 | M L T⁻² | Where multiple field labels share a common substring (for example, `stress von_mises`, `stress principal`, `stress`), the table order reflects the matching priority — more specific labels are listed first. See the Label Priority section below for details. ### Import Time Dependent Structural Result (.vtk, .vtu) All fields from Import Static Structural Result, plus: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | velocity | x, y, z | Vector-3 | L T⁻¹ | | acceleration | x, y, z | Vector-3 | L T⁻² | ### Import Static Thermal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | heat flux | x, y, z | Vector-3 | M T⁻³ | | temperature | — | Scalar-1 | Θ | | thermal reaction flux | — | Scalar-1 | M T⁻³ | ### Import Time Dependent Thermal Result (.vtk, .vtu) Same fields as Import Static Thermal Result. ### Import Modal Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | eigen frequency | — | Field Data — Modes | T⁻¹ | ### Import Buckling Result (.vtk, .vtu) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | displacement | x, y, z | Vector-3 | L | | load factor | — | Field Data — Modes | — | ### Import CFD Analysis Result (.vtk, .vtu, .vti) | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | density | — | Scalar-1 | M L⁻³ | | force | x, y, z | Vector-3 | M L T⁻² | | pressure | — | Scalar-1 | M L⁻¹ T⁻² | | temperature | — | Scalar-1 | Θ | | velocity | x, y, z | Vector-3 | L T⁻¹ | VTI-only fields: | Field Label | Components | Dimensionality | Physical Dimensions | | :- | :- | :- | :- | | cell region | — | Scalar-1 | — | | implicit field | — | Scalar-1 | L | ## Data Array Matching nTop identifies importable fields by matching VTK data array names against the known field labels for each block type. ### Array Name Matching Matching checks whether the array name **contains** the field label as a substring. Before comparison, all underscores are replaced with spaces in both the array name and the field label, and matching is case-insensitive. For example, given the field label `displacement`: * `displacement` → match * `Displacement` → match * `my_displacement_results` → match (contains `displacement` after underscore replacement) * `nodal_displacement_field` → match * `disp` → no match ### Label Priority When an array name could match multiple field labels, a fixed priority order applies — more specific labels are checked before less specific ones. For stress-related fields the priority is: 1. `stress von_mises` (Scalar-1) 2. `stress principal` (Vector-3) 3. `stress` (Tensor-6) An array named `stress_von_mises_output` matches `stress von_mises` and is treated as a Scalar-1 field. It does not fall through to `stress` or `stress principal`. The same priority pattern applies to strain: 1. `strain principal` (Vector-3) 2. `strain` (Tensor-6) ### Component Names and Dimensionality Each field label has an expected dimensionality: Scalar-1, Vector-3, or Tensor-6. Once an array is matched to a field label, nTop checks the array's components to verify compatibility. Components must be packed into a single multi-component VTK array. nTop does not combine separate scalar arrays into vectors or tensors. A displacement field must be a single array with 3 components, not three separate arrays named `displacement_x`, `displacement_y`, `displacement_z`. **Component name resolution:** VTK arrays support named components (via `SetComponentName`/`GetComponentName`). nTop uses these names to map components to their expected slots: * **Vector-3 fields** (for example, `displacement`, `velocity`): components named `x`, `y`, `z` * **Vector-3 principal fields** (for example, `stress principal`): components named `min`, `mid`, `max` * **Tensor-6 fields** (for example, `stress`, `strain`): components named `xx`, `yy`, `zz`, `xy`, `yz`, `xz` **Numerical fallback:** If component names are not set, components are mapped by their numerical index (`0`, `1`, `2`, …) in positional order. For a Vector-3 field, component 0 maps to the first expected slot (for example, `x` or `min`), component 1 to the second, and so on. **Note on Voigt notation:** For Tensor-6 fields using the numerical fallback, nTop expects the component order `xx, yy, zz, xy, yz, xz` (indices 0–5). Different solvers may use different Voigt conventions. If your solver's default ordering does not match, use explicit component names to avoid silently scrambled tensor components. **Component count must match.** If the number of components in the array does not match the expected dimensionality of the matched field label, the field will fail to import. For example, an array matching `stress` (Tensor-6) must have exactly 6 components. A 3-component array matching `stress` will not import; it would need to match `stress principal` instead. ### Data Precision All imported data arrays are cast to double precision (float64), regardless of the precision in the source file. ## Point Data, Cell Data, and Field Data ### Point Data (Default) All importable fields are expected to be VTK point data arrays. This is the standard and recommended way to provide simulation results to nTop. ### Cell Data Fallback If a field label is matched by a cell data array but no corresponding point data array exists for the same label, nTop automatically interpolates the cell data to points using VTK's `vtkCellDataToPointData` filter. If both a point data array and a cell data array share the same field label, only the point data array is imported. The cell data array is ignored for that label. Other labels that only appear as cell data are still imported normally. **Cell data in time series and CFD:** When multiple arrays match the same label (triggering time series or CFD key-value behavior), cell data arrays are interpolated to point data individually before being assembled. For example, if `velocity_1` is point data and `velocity_2` is cell data, `velocity_2` is interpolated to points and both are included in the time series. ### Field Data VTK Field Data arrays have special handling and are only supported for specific attributes: * **Eigen frequency** in the Import Modal Result block * **Load factor** in the Import Buckling Result block * **Time** in the time-dependent Import Result blocks All other fields must be point data (or cell data that can be interpolated to points). Placing a regular field like `reaction_force` as VTK Field Data will cause a shape mismatch and the field will fail to import. If your solver outputs a field as Field Data, convert it to point data before importing — for example, by using ParaView's `FieldDataToDataSetAttribute` filter and saving the result. ## Time Series Behavior Time series import applies to all block types except CFD (see CFD-Specific Behavior below). When multiple VTK data arrays match the same field label, nTop interprets them as a time series. ### Time Series Detection Multiple arrays matching the same field label category trigger time series interpretation. The matching uses the same substring logic described above. For example, if a file contains three arrays named `displacement_1`, `displacement_2`, `displacement_3`, all three contain the substring `displacement` and are interpreted as a three-step time series. The suffix does not need to be numeric. Arrays named `displacement_foo` and `displacement_bar` would also be interpreted as a two-step time series. Only the storage order of the arrays in the file determines their placement in the series. **Caution:** This mechanism can be triggered unintentionally. If a file contains arrays named `temperature` and `ambient_temperature`, both match the `temperature` label and nTop will interpret them as a two-step time series rather than two distinct fields. To avoid this, rename or remove one of the arrays so that only one matches the label. ### Time Values Time values are determined by two mechanisms, in order of priority: 1. **Embedded metadata:** The number of time steps is read from VTK XML metadata on the UnstructuredGrid TimeValues attribute. The physical time value is furthermore read from a seperate scalar FieldData array `Time`. 2. **Dummy values:** If no time metadata is present, nTop assigns sequential integer time values starting from 0 (that is, 0, 1, 2, …). ### Step Count and Skipping The longest series of matching arrays across all field label categories determines the expected number of time steps. Any field label category that does not produce exactly that number of steps is skipped entirely. For example, if a file contains: * `displacement_1`, `displacement_2`, `displacement_3` → 3 steps (longest) * `stress_1`, `stress_2` → 2 steps The expected step count is 3. Because `stress` only produces 2 steps, it is skipped and not imported at all. Only `displacement` is imported. ### Static Blocks and Time Series Only the time-dependent block types (**Import Time Dependent Structural Result** and **Import Time Dependent Thermal Result**) return and visualize full time series data. If a file containing time series data is loaded into a static block type (for example, **Import Analysis Result**), the time series is still detected and processed, but only the last snapshot in the series is returned. nTop logs the following warning: `File contains time series but import is Static. Using last step only.` ## CFD-Specific Behavior The **Import CFD Analysis Result** block differs from the other block types in several ways. It supports `.vti` (uniform grid) files in addition to `.vtk` and `.vtu`, and it does not use the time series mechanism described above. ### Key-Value Results CFD results are structured as key-value pairs. When multiple arrays match the same field label, each is stored as a separate entry in a dictionary rather than being interpreted as a time series. For example, a file containing arrays named `velocity_initial`, `velocity_1_s`, and `velocity_time-averaged` produces a CFD result with three entries in the velocity dictionary. Downstream in nTop, CFD results expose a list of keys and a corresponding list of fields, allowing you to select individual entries. ### Cell Region (VTI Only) `cell region` is an optional scalar point data array of type unsigned char (values 0–255). It defines region association IDs for nodes in a uniform grid, typically used to distinguish between boundary conditions and bulk regions. For example, `cell region = 1` might indicate bulk fluid nodes, while `cell region = 2` indicates solid no-slip wall nodes. You can use this field with downstream blocks such as **Filter Cell Region**. ### Implicit Field (VTI Only) `implicit field` is a scalar point data array containing the signed distance field associated with the voxelization of the input geometry. This field is used purely for visualization — it determines the surface body displayed in the viewport for surface plots. If you can retain or reconstruct the signed distance field from the original voxelization, it is worth including as an implicit field. If no implicit field is provided, nTop falls back to treating the entire domain as interior, which still works but may produce less useful surface visualizations. ### Beam Radius (VTU Only) `beam radius` is a scalar point data array containing the radii of the associated beams in the FE Mesh. If beam radius is not provided for beam elements, nTop may fail to render surface visualizations of the imported result. ## Unit System The **Unit System** input tells nTop what units the data in the file is expressed in. If the specified unit system differs from SI, nTop converts the imported data from the given units to SI upon import. If the file already contains SI data, set the unit system to SI and no conversion is applied. Each field label has associated physical dimensions (see the Block Types and Field Schemas section above). nTop uses these dimensions to determine which unit conversions to apply. For example, a velocity field has dimensions of L T⁻¹ (length per time), so both the length and time unit factors from the selected unit system are used in the conversion. Fields with no physical dimensions listed (such as strain) are dimensionless and are not affected by the unit system setting. ## Supported Cell Types nTop supports the following VTK cell types: **Volume elements:** tetrahedron, hexahedron, voxel, wedge, pyramid **Surface elements:** triangle, quad **Beam elements:** line, vertex All other cell types are ignored during import. nTop logs a warning indicating the number of skipped cells per unsupported type. If a file consists entirely of unsupported cell types, nTop tries to fall back to a vertex representation or produce an error. ## Troubleshooting ### Field Not Appearing After Import **Component count mismatch.** The array's number of components does not match what the matched field label expects. For example, a 3-component array matching `stress` (which expects Tensor-6) will not import. Verify that the array has the correct number of components for its intended field label. **Field Data instead of Point Data.** Only eigen frequency and load factor use VTK Field Data. All other fields must be Point Data (or Cell Data). If your solver writes a result as Field Data, see the Field Data section above for the recommended workaround. ### Unintentional Time Series If a file contains multiple arrays whose names match the same field label, nTop interprets them as a time series. This can happen unintentionally when array names share a common substring. For example, arrays named `temperature_surface` and `temperature_volume` both match the `temperature` label and are treated as a two-step series rather than two distinct fields. To fix this, rename or remove one of the arrays so that only one matches the intended label. ### Separate Arrays Instead of Multi-Component nTop expects vector and tensor fields to be stored as a single multi-component array. Three separate scalar arrays named `displacement_x`, `displacement_y`, `displacement_z` will not be combined into a vector. Instead, all three match the `displacement` label and trigger the time series mechanism, producing incorrect results. Please make sure your solver or post-processor writes vectors as a single array with named components (`x`, `y`, `z`) or indexed components (`0`, `1`, `2`). ### Time Series Data in a Static Block If a file with time series data is loaded into a static import block (for example, **Import Analysis Result** instead of **Import Time Dependent Structural Result**), only the last time step is returned. nTop logs a warning when this occurs. If you need the full series, use the corresponding time-dependent block type. *** Import Time Dependent Thermal Result file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Time Dependent Thermal Result file. | | Unit system | [Unit System](../../../../block-documentation/types/unit-system) | The unit system of the external results. This will be used to consistently translate the external results into the active unit system. | ### Outputs | Type | | - | | [Time Dependent Thermal Result](../../../../block-documentation/types/time-dependent-thermal-result) | # Pressure Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/pressure-point-map Create a Scalar Point Map from the pressure values of a CFD analysis. ### Inputs | Name | Type | Description | | - | - | - | | Cfd analysis | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | Pressure point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | # Temperature Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/temperature-point-map > **[CFD Analysis Result, Integer](#cfd-analysis-result-integer)** > **[Thermal Result, Integer](#thermal-result-integer)** > **[Thermal Result, Integer, 2.0.0](#thermal-result-integer-200)** *** ## About this Block **What it does:** The **Temperature Point Map** block generates a Scalar Point Map of nodal temperatures from thermal analysis results. **Common uses:** * Can visualize thermal analysis results. **Tips:** * The point map consists of all the nodal points from the Thermal Analysis, and the temperature values associated with each of those points. These points and values are accessible in the properties of the Point Map. * The HUD can be used to change the Lower bound, Upper bound, color palette and units as required. * The point map can be exported with the **Export Point Map** block. ## Example File Download Example: [Temperature Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Temperature_Point_Map.ntop) ![Temperature Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Temperature_Point_Map.png) *** ## CFD Analysis Result, Integer Create a Temperature Point Map from the temperature values of a CFD analysis. ### Inputs | Name | Type | Description | | - | - | - | | Cfd analysis | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | Thermal point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | *** ## Thermal Result, Integer Create a Scalar Point Map from nodal temperature values of a steady state thermal analysis. ### Inputs | Name | Type | Description | | - | - | - | | Thermal analysis | [Thermal Result](../../../../block-documentation/types/thermal-result) | Thermal point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | *** ## Thermal Result, Integer, 2.0.0 Create a Temperature Point Map from nodal temperature values of a steady state thermal analysis. ### Inputs | Name | Type | Description | | - | - | - | | Thermal analysis | [Thermal Result](../../../../block-documentation/types/thermal-result) | Thermal point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Temperature Point Map](../../../../block-documentation/types/temperature-point-map) | # Unit System Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/unit-system Create a unit system for CAE interoperability. If compound units are not provided, the base units will be used to determine the compound units. ### Inputs | Name | Type | Description | | - | - | - | | Length | Length Unit Enum | Unit of length. | | Mass | Mass Unit Enum | Unit of mass. | | Time | Time Unit Enum | Unit of time. | | Temperature | Temperature Unit Enum | Unit of temperature. | | Force | Force Unit Enum | Unit of force. | | Pressure | Pressure Unit Enum | Unit of pressure. | | Frequency | Frequency Unit Enum | Unit of frequency. | | Heat flux | Heat Flux Unit Enum | Unit of heat flux. | | Thermal conductivity | Thermal Conductivity Unit Enum | Unit of thermal conductivity. | | Power | Power Unit Enum | Unit of power. | | Energy/torque | Energy Unit Enum | Unit of energy/torque. | | Specific heat | Specific Heat Unit Enum | Unit of specific heat. | | Volumetric heat generation | Volumetric Heat Generation Unit Enum | Unit of volumetric heat generation. | | Convection coefficient | Convection Coefficient Unit Enum | Unit of convection coefficient. | | Density | Density Unit Enum | Unit of density. | ### Outputs | Type | | - | | [Unit System](../../../../block-documentation/types/unit-system) | # Velocity Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/velocity-point-map Create a Vector Point Map from the velocities of a CFD Analysis result. ### Inputs | Name | Type | Description | | - | - | - | | Analysis result | [CFD Analysis Result](../../../../block-documentation/types/cfd-analysis-result) | Velocity point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | # Von Mises Stress Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/exchange/von-mises-stress-point-map > **[Static Structural Result, Integer](#static-structural-result-integer)** > **[Static Structural Result, Integer, 1.1.0](#static-structural-result-integer-110)** > **[Time Dependent Structural Result, Integer](#time-dependent-structural-result-integer)** > **[Time Dependent Structural Result, Integer, 1.1.0](#time-dependent-structural-result-integer-110)** *** ## About this Block **What it does:** The **Von Mises Stress Point Map** block generates a Scalar Point Map of von Mises stress from the static structural simulation results. **Common uses:** * Can visualize structural results. **Tips:** * The point map consists of all the nodal points from the Static Analysis, and the stress values associated with each of those points. These points and values are accessible in the properties of the Point Map. * The HUD can be used to change the Lower bound, Upper bound color palette and units as required. * The point map can be exported with the **Export Point Map** block. ## Example File Download Example: [Stress\_Point\_Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Stress_Point_Map.ntop) ![Stress Point Map](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Stress_Point_Map.png) *** ## Static Structural Result, Integer Create a Scalar Point Map from nodal von Mises stress values of a Static or Explicit Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Analysis result | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | Von Mises stress point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | *** ## Static Structural Result, Integer, 1.1.0 Create a Scalar Point Map from nodal von Mises stress values of a Static or Explicit Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Analysis result | [Static Structural Result](../../../../block-documentation/types/static-structural-result) | Von Mises stress point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | *** ## Time Dependent Structural Result, Integer Create a Scalar Point Map from nodal von Mises stress values of a Static or Explicit Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Analysis result | [Time Dependent Structural Result](../../../../block-documentation/types/time-dependent-structural-result) | Von Mises stress point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | *** ## Time Dependent Structural Result, Integer, 1.1.0 Create a Scalar Point Map from nodal von Mises stress values of a Static or Explicit Analysis. ### Inputs | Name | Type | Description | | - | - | - | | Analysis result | [Time Dependent Structural Result](../../../../block-documentation/types/time-dependent-structural-result) | Von Mises stress point map for this result | | Step number | [Integer](../../../../block-documentation/types/integer) | The step number for which the point map will be created. The last step is used by default. | ### Outputs | Type | | - | | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | # Material Attributes Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes > **[Isotropic Material](../../../block-documentation/blocks/structures/material-attributes/isotropic-material)** > **[Isotropic Linear Elastic Property](../../../block-documentation/blocks/structures/material-attributes/isotropic-linear-elastic-property)** > **[Isotropic Thermal Property](../../../block-documentation/blocks/structures/material-attributes/isotropic-thermal-property)** > **[Isotropic Thermal Expansion Property](../../../block-documentation/blocks/structures/material-attributes/isotropic-thermal-expansion-property)** > **[Orthotropic Material](../../../block-documentation/blocks/structures/material-attributes/orthotropic-material)** > **[Orthotropic Linear Elastic Property](../../../block-documentation/blocks/structures/material-attributes/orthotropic-linear-elastic-property)** > **[Orthotropic Stiffness Tensor](../../../block-documentation/blocks/structures/material-attributes/orthotropic-stiffness-tensor)** > **[Orthotropic Thermal Property](../../../block-documentation/blocks/structures/material-attributes/orthotropic-thermal-property)** > **[Orthotropic Thermal Expansion Property](../../../block-documentation/blocks/structures/material-attributes/orthotropic-thermal-expansion-property)** > **[Anisotropic Material](../../../block-documentation/blocks/structures/material-attributes/anisotropic-material)** > **[Anisotropic Stiffness Tensor](../../../block-documentation/blocks/structures/material-attributes/anisotropic-stiffness-tensor)** > **[Anisotropic Thermal Property](../../../block-documentation/blocks/structures/material-attributes/anisotropic-thermal-property)** > **[Anisotropic Thermal Expansion Property](../../../block-documentation/blocks/structures/material-attributes/anisotropic-thermal-expansion-property)** > **[Solid Attribute](../../../block-documentation/blocks/structures/material-attributes/solid-attribute)** > **[Beam Attribute](../../../block-documentation/blocks/structures/material-attributes/beam-attribute)** > **[Shell Attribute](../../../block-documentation/blocks/structures/material-attributes/shell-attribute)** > **[Point Attribute](../../../block-documentation/blocks/structures/material-attributes/point-attribute)** # Anisotropic Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/anisotropic-material Defines an Anisotropic Material by providing a list of Anisotropic Material Properties and the material density. The properties of an anisotropic material can vary in any direction. ### Inputs | Name | Type | Description | | - | - | - | | Properties | [Anisotropic Material Property List](../../../../block-documentation/types/anisotropic-material-property) | The list of anisotropic material properties that define the material. | | Density | [Scalar Field](../../../../block-documentation/types/scalar-field) | The material density. | ### Outputs | Type | | - | | [Anisotropic Material](../../../../block-documentation/types/anisotropic-material) | # Anisotropic Stiffness Tensor Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/anisotropic-stiffness-tensor Defines an Anisotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship sigma\_i = C\_ij \* epsilon\_j (i,j=1,6), where sigma = (sigma\_xx, sigma\_yy, sigma\_zz, sigma\_yz, sigma\_zx, sigma\_xy) and epsilon = (epsilon\_xx, epsilon\_yy, epsilon\_zz, gamma\_yz, gamma\_zx, gamma\_xy). Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | C11 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,1. | | C12 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,2. | | C13 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,3. | | C14 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,4. | | C15 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,5. | | C16 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,6. | | C22 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 2,2. | | C23 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 2,3. | | C24 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 2,4. | | C25 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 2,5. | | C26 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 2,6. | | C33 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 3,3. | | C34 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 3,4. | | C35 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 3,5. | | C36 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 3,6. | | C44 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 4,4. | | C45 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 4,5. | | C46 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 4,6. | | C55 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 5,5. | | C56 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 5,6. | | C66 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 6,6. | ### Outputs | Type | | - | | [Anisotropic Linear Elastic Property](../../../../block-documentation/types/anisotropic-linear-elastic-property) | # Anisotropic Thermal Expansion Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/anisotropic-thermal-expansion-property Defines an Anisotropic Thermal Expansion Property by specifying a matrix of thermal expansion coefficients in Voigt notation, (epsilon\_xx, epislon\_yy, epsilon\_zz, gamma\_yz, gamma\_zx, gamma\_xy) = (T - T\_o) \* (alpha\_1, alpha\_2, alpha\_3, alpha\_4, alpha\_5, alpha\_6), where T is the current temperature, and T\_o is the baseline reference temperature. Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | Alpha1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal expansion coefficient, Alpha 1. | | Alpha2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal expansion coefficient, Alpha 2. | | Alpha3 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal expansion coefficient, Alpha 3. | | Alpha4 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal expansion coefficient, Alpha 4. | | Alpha5 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal expansion coefficient, Alpha 5. | | Alpha6 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal expansion coefficient, Alpha 6. | ### Outputs | Type | | - | | [Anisotropic Thermal Expansion Property](../../../../block-documentation/types/anisotropic-thermal-expansion-property) | # Anisotropic Thermal Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/anisotropic-thermal-property Defines an Anisotropic Thermal Property by specifying specific heat capacity and a second order thermal conductivity tensor, K\_ij, for the constitutive relationship between heat flux and the temperature gradient, q\_i = -K\_ij \* dT/dx\_j. Providing scalar fields as inputs will result in spatially varying material property. ### Inputs | Name | Type | Description | | - | - | - | | K11 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity component 1,1. | | K12 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity component 1,2. | | K13 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity component 1,3. | | K22 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity component 2,2. | | K23 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity component 2,3. | | K33 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity component 3,3. | | Specific heat | [Scalar Field](../../../../block-documentation/types/scalar-field) | Specific heat capacity. | ### Outputs | Type | | - | | [Anisotropic Thermal Property](../../../../block-documentation/types/anisotropic-thermal-property) | # Beam Attribute Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/beam-attribute > **[Scalar Field, Isotropic Material, Implicit Body, 1.1.0](#scalar-field-isotropic-material-implicit-body-110)** > **[Scalar Field, Material, Implicit Body](#scalar-field-material-implicit-body)** *** ## About this Block **What it does:** Applies material and thickness attributes beam elements. **Common uses:** * An input in [**Solid Domain**](/block-documentation/blocks/structures/model/solid-domain.html). **Tips:** * You can use multiple FE Attributes in an **Solid Domain**. * If no Region is defined, the attribute applies the material to the entire mesh. Use the Region input to define a material in a specific area. * When defining a Region for the attribute, all elements need an assigned attribute. Do this by providing one or more additional attributes for all regions, or at least one additional attribute without a Region to apply that attribute to all areas not covered by the first Region. * You can use a Scalar Field to define the thickness of the beams. ## Example File Download Example: [FE Beam Attribute](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_attributes.ntop) ![FE Beam Attribute](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_beam.png) *** ## Scalar Field, Isotropic Material, Implicit Body, 1.1.0 Define the beam thickness and material properties as attributes of beam elements. ### Inputs | Name | Type | Description | | - | - | - | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The thickness at the nodes of the beam elements. | | Isotropic material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | The underlying material. | | Region | [Implicit Body](../../../../block-documentation/types/implicit-body) | The region this attribute applies to. | ### Outputs | Type | | - | | [Solid Attribute](../../../../block-documentation/types/solid-attribute) | *** ## Scalar Field, Material, Implicit Body Apply attributes to beam elements. ### Inputs | Name | Type | Description | | - | - | - | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The thickness at the nodes of the beam elements. | | Material | [Material](../../../../block-documentation/types/material) | The underlying material. | | Region | [Implicit Body](../../../../block-documentation/types/implicit-body) | The region this attribute applies to. | ### Outputs | Type | | - | | [Solid Attribute](../../../../block-documentation/types/solid-attribute) | # Isotropic Linear Elastic Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/isotropic-linear-elastic-property ## About this Block **What it does:** Assigns the Young's Modulus and Poisson's ratio to an **Isotropic Material**. **Common uses:** * An input in defining an **Isotropic Material**. **Tips:** * Create spatially varying properties by using Scalar Fields as inputs. *** Defines an Isotropic Linear Elastic Property by specifying Young’s modulus and Poisson’s ratio. Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | Young's modulus | [Scalar Field](../../../../block-documentation/types/scalar-field) | Young's modulus. | | Poisson's ratio | [Scalar Field](../../../../block-documentation/types/scalar-field) | Poisson's ratio. | ### Outputs | Type | | - | | [Isotropic Linear Elastic Property](../../../../block-documentation/types/isotropic-linear-elastic-property) | # Isotropic Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/isotropic-material ## About this Block **What it does:** Defines an isotropic material using a list of provided isotropic material properties. The properties of isotropic materials behave the same in every direction. **Common uses:** * Simulation or analysis of an isotropic material. **Tips:** * Acceptable inputs include both physical and thermal properties. *** Defines an Isotropic Material by providing a list of Isotropic Material Properties. An isotropic material behaves the same in all directions. ### Inputs | Name | Type | Description | | - | - | - | | Properties | [Isotropic Material Property List](../../../../block-documentation/types/isotropic-material-property) | The list of isotropic material properties that define the material. | | Density | [Scalar Field](../../../../block-documentation/types/scalar-field) | The material density. | ### Outputs | Type | | - | | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | # Isotropic Thermal Expansion Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/isotropic-thermal-expansion-property ## About this Block **What it does:** Assigns a Coefficient of Thermal Expansion to an **Isotropic Material**. **Common uses:** * An input in defining an **Isotropic Material**. * For conducting a **Thermal Analysis**. **Tips:** * Create spatially varying properties by using Scalar Fields as inputs. *** Defines an Isotropic Thermal Expansion Property by specifying the coefficient of thermal expansion. Providing a scalar field as input will result in a spatially varying material property. ### Inputs | Name | Type | Description | | - | - | - | | Alpha | [Scalar Field](../../../../block-documentation/types/scalar-field) | Coefficient of thermal expansion. | ### Outputs | Type | | - | | [Isotropic Thermal Expansion Property](../../../../block-documentation/types/isotropic-thermal-expansion-property) | # Isotropic Thermal Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/isotropic-thermal-property > **[Dictionary, Dictionary](#dictionary-dictionary)** > **[Scalar Field, Scalar Field](#scalar-field-scalar-field)** *** ## About this Block **What it does:** Assigns the Thermal Conductivity and Specific Heat to an **Isotropic Material**. **Common uses:** * An input in defining an **Isotropic Material**. * For conducting a **Thermal Analysis**. **Tips:** * Create spatially varying properties by using Scalar Fields as inputs. * This block has an overload, to allow you to define an Isotropic Nonlinear Thermal Property. This overload is in Beta. *** ## Dictionary, Dictionary Defines an Isotropic Nonlinear Thermal Property by specifying the thermal conductivity and specific heat capacity. Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | Conductivity | [Dictionary](../../../../block-documentation/types/dictionary) | Thermal conductivity. | | Specific heat | [Dictionary](../../../../block-documentation/types/dictionary) | Specific heat capacity. | ### Outputs | Type | | - | | [Isotropic Thermal Property](../../../../block-documentation/types/isotropic-thermal-property) | *** ## Scalar Field, Scalar Field Defines an Isotropic Thermal Property by specifying the thermal conductivity and specific heat capacity. Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | Conductivity | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity. | | Specific heat | [Scalar Field](../../../../block-documentation/types/scalar-field) | Specific heat capacity. | ### Outputs | Type | | - | | [Isotropic Thermal Property](../../../../block-documentation/types/isotropic-thermal-property) | # Orthotropic Linear Elastic Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/orthotropic-linear-elastic-property ## About this Block **What it does:** Creates a list of the Shear Modulus, Poisson's Ratio, and Modulus of Elasticity inputs. Each of these variable inputs are separated out into their X, Y, and Z components. **Common uses:** * An input in defining an **Orthotropic Material**. **Tips:** * Create spatially varying properties by using Scalar Fields as inputs. *** Defines an Orthotropic Linear Elastic Property by specifying directional elastic properties. Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | E1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Modulus of elasticity in the x-direction. | | E2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Modulus of elasticity in the y-direction. | | E3 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Modulus of elasticity in the z-direction. | | Nu12 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Poisson's ratio in the xy-plane. | | Nu23 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Poisson's ratio in yz-plane. | | Nu13 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Poisson's ratio in xz-plane. | | G12 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Shear modulus in xy-plane. | | G23 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Shear modulus in yz-plane. | | G13 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Shear modulus in xz-plane. | ### Outputs | Type | | - | | [Orthotropic Linear Elastic Property](../../../../block-documentation/types/orthotropic-linear-elastic-property) | # Orthotropic Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/orthotropic-material ## About this Block **What it does:** Defines an orthotropic material using a list of provided orthotropic material properties. Orthotropic materials have mechanical or thermal properties in two or three planes perpendicular to each other. Wood is an example of an orthotropic material. **Common uses:** * Simulation or analysis of an orthotropic material. **Tips:** * Acceptable inputs include both physical and thermal properties. * Most required inputs are separated into their X, Y, and Z components. *** Defines an Orthotropic Material by providing a list of Orthotropic Material Properties. The properties of an orthotropic material can vary in three mutually orthogonal directions. ### Inputs | Name | Type | Description | | - | - | - | | Properties | [Orthotropic Material Property List](../../../../block-documentation/types/orthotropic-material-property) | The list of orthotropic material properties that define the material. | | Density | [Scalar Field](../../../../block-documentation/types/scalar-field) | The material density. | ### Outputs | Type | | - | | [Orthotropic Material](../../../../block-documentation/types/orthotropic-material) | # Orthotropic Stiffness Tensor Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/orthotropic-stiffness-tensor Defines an Orthotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship sigma\_i = C\_ij \* epsilon\_j (i,j=1,6), where sigma = (sigma\_xx, sigma\_yy, sigma\_zz, sigma\_yz, sigma\_zx, sigma\_xy) and epsilon = (epsilon\_xx, epsilon\_yy, epsilon\_zz, gamma\_yz, gamma\_zx, gamma\_xy). Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | C11 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,1. | | C12 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,2. | | C13 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 1,3. | | C22 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 2,2. | | C23 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 2,3. | | C33 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 3,3. | | C44 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 4,4. | | C55 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 5,5. | | C66 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Material stiffness component 6,6. | ### Outputs | Type | | - | | [Orthotropic Linear Elastic Property](../../../../block-documentation/types/orthotropic-linear-elastic-property) | # Orthotropic Thermal Expansion Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/orthotropic-thermal-expansion-property ## About this Block **What it does:** Creates a list of the Coefficient of Thermal Expansion inputs that are separated into their X, Y, and Z components. **Common uses:** * An input in defining an **Orthotropic Material**. * For conducting a **Thermal Analysis**. **Tips:** * Create spatially varying properties by using Scalar Fields as inputs. *** Defines an Orthotropic Thermal Expansion Property by specifying the directional thermal expansion coefficients. Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | Alpha1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Coefficient of thermal expansion in the x-direction. | | Alpha2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Coefficient of thermal expansion in the y-direction. | | Alpha3 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Coefficient of thermal expansion in the z-direction. | ### Outputs | Type | | - | | [Orthotropic Thermal Expansion Property](../../../../block-documentation/types/orthotropic-thermal-expansion-property) | # Orthotropic Thermal Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/orthotropic-thermal-property > **[Dictionary, Dictionary, Dictionary, Dictionary](#dictionary-dictionary-dictionary-dictionary)** > **[Scalar Field, Scalar Field, Scalar Field, Scalar Field](#scalar-field-scalar-field-scalar-field-scalar-field)** *** ## About this Block **What it does:** Assigns the Thermal Conductivity and Specific Heat to an **Orthotropic Material**. **Common uses:** * An input in defining an **Orthotropic Material**. * For conducting a **Thermal Analysis**. **Tips:** * Create spatially varying properties by using Scalar Fields as inputs. * Most required inputs are separated into their X, Y, and Z components. * This block has an overload, to allow you to define an Orthotropic Nonlinear Thermal Property. This overload is in Beta. *** ## Dictionary, Dictionary, Dictionary, Dictionary Define an Orthotropic Nonlinear Thermal Property by specifying directional thermal properties of the desired material. Providing scalar fields as thermal properties will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | Kx | [Dictionary](../../../../block-documentation/types/dictionary) | Thermal conductivity in x-direction. | | Ky | [Dictionary](../../../../block-documentation/types/dictionary) | Thermal conductivity in y-direction. | | Kz | [Dictionary](../../../../block-documentation/types/dictionary) | Thermal conductivity in z-direction. | | Specific heat | [Dictionary](../../../../block-documentation/types/dictionary) | Specific heat capacity. | ### Outputs | Type | | - | | [Orthotropic Thermal Property](../../../../block-documentation/types/orthotropic-thermal-property) | *** ## Scalar Field, Scalar Field, Scalar Field, Scalar Field Defines an Orthotropic Thermal Property by specifying directional thermal properties. Providing scalar fields as inputs will result in spatially varying material properties. ### Inputs | Name | Type | Description | | - | - | - | | K1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity in the x-direction. | | K2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity in the y-direction. | | K3 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal conductivity in the z-direction. | | Specific heat | [Scalar Field](../../../../block-documentation/types/scalar-field) | Specific heat capacity. | ### Outputs | Type | | - | | [Orthotropic Thermal Property](../../../../block-documentation/types/orthotropic-thermal-property) | # Point Attribute Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/point-attribute ## About this Block **What it does**: The **Point Attribute** block can be used to assign the mass properties to the remote point in the [**Rigid Connector**](/block-documentation/blocks/beta/simulation/rigid-connector.html) or **Spring** blocks. It is used to define the mass and moment of inertia of the component being represented in a structural analysis or optimization study. The image below shows a gripper connected to a robotic arm. The second image shows the robotic gripper replaced by a point mass entity (A) at its center of mass tied to the connection points on the arm through rigid connections (B). The mass of this point (A) is defined by the **Point Attribute** block. ![Point Attribute](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FP_1.png) The Point Attribute is added to the first overload of the [**Solid Domain**](/block-documentation/blocks/structures/model/solid-domain.html) block to include it in the Simulation Model being analyzed or optimized. A combination of the Point Attribute, FE Point and the Rigid Connector blocks enables users to define a remote point mass in the **Simulation Model** through a rigid or flexible connector. Please refer to the [**Rigid Connector**](/block-documentation/blocks/beta/simulation/rigid-connector.html) block section of the Documentation to learn about the setup. ![Point Attribute Setup](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FP_2.png) **Point Attribute Block** * Offset : The offset is used to specify the center of rotation for the inertia calculations. By default, the center of rotation is at the point defined in the **Solid Domain** block. This location will be moved from the point by the offset distance specified in this input. This input follows the Frame definition in the block which is the global coordinate system by default * Inertia ij : This defines the 6 components of the mass moments of inertia tensor * Frame : The frame is used to define the offset directions as well as the axes used to calculate the mass moment of inertia components *** Define material properties as attributes of a Point. ### Inputs | Name | Type | Description | | - | - | - | | Mass | [Scalar](../../../../block-documentation/types/scalar) | Mass of the point. | | Offset | [Vector](../../../../block-documentation/types/vector) | Offsets the center of mass from the attachment point. | | Inertia xx | [Scalar](../../../../block-documentation/types/scalar) | Component of mass moment of inertia in XX. | | Inertia yy | [Scalar](../../../../block-documentation/types/scalar) | Component of mass moment of inertia in YY. | | Inertia zz | [Scalar](../../../../block-documentation/types/scalar) | Component of mass moment of inertia in ZZ. | | Inertia xy | [Scalar](../../../../block-documentation/types/scalar) | Component of mass moment of inertia in XY. | | Inertia yz | [Scalar](../../../../block-documentation/types/scalar) | Component of mass moment of inertia in YZ. | | Inertia xz | [Scalar](../../../../block-documentation/types/scalar) | Component of mass moment of inertia in XZ. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for defining the location of the point, the offset, and the mass moments of inertia. If not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Solid Attribute](../../../../block-documentation/types/solid-attribute) | # Shell Attribute Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/shell-attribute > **[Scalar Field, Isotropic Material, Implicit Body, 1.1.0](#scalar-field-isotropic-material-implicit-body-110)** > **[Scalar Field, Material, Implicit Body](#scalar-field-material-implicit-body)** *** ## About this Block **What it does:** Applies material and thickness attributes to shell elements. **Common uses:** * An input in [**Solid Domain**](/block-documentation/blocks/structures/model/solid-domain.html). **Tips:** * You can use multiple FE Attributes in an **Solid Domain**. * If no Region is defined, the attribute applies the material to the entire mesh. Use the Region input to define a material in a specific area. * When defining a Region for the attribute, all elements need an assigned attribute. Do this by providing one or more additional attributes for all regions, or at least one additional attribute without a Region to apply that attribute to all areas not covered by the first Region. * You can use a Scalar Field to define the thickness of the shell. ## Example File Download Example: [FE Shell Attribute](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_attributes.ntop) ![FE Shell Attribute](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_shell.png) *** ## Scalar Field, Isotropic Material, Implicit Body, 1.1.0 Define shell thickness and material properties as attributes of shell elements. ### Inputs | Name | Type | Description | | - | - | - | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The thickness at the nodes of the shell elements. | | Isotropic material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | The underlying material. | | Region | [Implicit Body](../../../../block-documentation/types/implicit-body) | The region this attribute applies to. | ### Outputs | Type | | - | | [Solid Attribute](../../../../block-documentation/types/solid-attribute) | *** ## Scalar Field, Material, Implicit Body Apply attributes to shell elements. ### Inputs | Name | Type | Description | | - | - | - | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The thickness at the nodes of the shell elements. | | Material | [Material](../../../../block-documentation/types/material) | The underlying material. | | Region | [Implicit Body](../../../../block-documentation/types/implicit-body) | The region this attribute applies to. | ### Outputs | Type | | - | | [Solid Attribute](../../../../block-documentation/types/solid-attribute) | # Solid Attribute Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/material-attributes/solid-attribute ## About this Block **What it does:** Applies material attributes for solid elements. **Common uses:** * An input in [**Solid Domain**](/block-documentation/blocks/structures/model/solid-domain.html). **Tips:** * You can use multiple FE Attributes in a Domain. * If no Region is defined, the attribute applies the material to the entire mesh. Use the Region input to define a material in a specific area. * When defining a Region for the attribute, all elements need an assigned attribute. Do this by providing one or more additional attributes for all regions, or at least one additional attribute without a Region to apply that attribute to all areas not covered by previous Region(s). ## Example File Download Example: [FE Solid Attribute](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_attributes.ntop) ![FE Solid Attribute](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_solid.png) *** Define material properties as attributes of solid elements. ### Inputs | Name | Type | Description | | - | - | - | | Material | [Material](../../../../block-documentation/types/material) | The underlying material. | | Frame | [Frame](../../../../block-documentation/types/frame) | The material orientation. | | Region | [Implicit Body](../../../../block-documentation/types/implicit-body) | The region this attribute applies to. | ### Outputs | Type | | - | | [Solid Attribute](../../../../block-documentation/types/solid-attribute) | # Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh > **[FE Volume Mesh](../../../block-documentation/blocks/structures/mesh/fe-volume-mesh)** > **[FE Lattice Mesh](../../../block-documentation/blocks/structures/mesh/fe-lattice-mesh)** > **[FE Surface Mesh](../../../block-documentation/blocks/structures/mesh/fe-surface-mesh)** > **[FE CAD Solid Mesh](../../../block-documentation/blocks/structures/mesh/fe-cad-solid-mesh)** > **[FE Shell Mesh from CAD](../../../block-documentation/blocks/structures/mesh/fe-shell-mesh-from-cad)** > **[Volume Mesh](../../../block-documentation/blocks/structures/mesh/volume-mesh)** > **[Robust Tetrahedral Mesh](../../../block-documentation/blocks/structures/mesh/robust-tetrahedral-mesh)** > **[Delaunay Volume Mesh](../../../block-documentation/blocks/structures/mesh/delaunay-volume-mesh)** > **[Remesh Surface](../../../block-documentation/blocks/structures/mesh/remesh-surface)** > **[Parallel Remesh Surface](../../../block-documentation/blocks/structures/mesh/parallel-remesh-surface)** > **[Remesh Surface with Cyclic Symmetry](../../../block-documentation/blocks/structures/mesh/remesh-surface-with-cyclic-symmetry)** > **[Mirror FE Mesh](../../../block-documentation/blocks/structures/mesh/mirror-fe-mesh)** > **[Merge FE Meshes](../../../block-documentation/blocks/structures/mesh/merge-fe-meshes)** > **[Boundary Layer Mesh](../../../block-documentation/blocks/structures/mesh/boundary-layer-mesh)** > **[Mesh Quality](../../../block-documentation/blocks/structures/mesh/mesh-quality)** > **[Associate FE Mesh](../../../block-documentation/blocks/structures/mesh/associate-fe-mesh)** > **[FE Point](../../../block-documentation/blocks/structures/mesh/fe-point)** # Associate FE Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/associate-fe-mesh Associates an FE Mesh with a CAD Body. Boundary Conditions applied to the CAD Body will then be transferred to the associated FE Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The FE Mesh to be associated with a CAD body. | | Geometry | [CAD Body List](../../../../block-documentation/types/cad-body) | The CAD Body. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Maximum distance between selected mesh elements and the chosen topology. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # Boundary Layer Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/boundary-layer-mesh > **[Mesh, Integer, Scalar, Scalar, Bool](#mesh-integer-scalar-scalar-bool)** > **[Mesh, Integer, Scalar, Scalar, Bool, 1.1.0](#mesh-integer-scalar-scalar-bool-110)** > **[Mesh, Integer, Scalar, Scalar, Bool, 1.2.0](#mesh-integer-scalar-scalar-bool-120)** *** ## About this Block **What it does:** Creates a solid mesh along the boundary of a surface mesh using a defined number of layers. There is also an option to create a completely solid mesh. **Commons uses:** * Thickening a surface mesh. **Tips:** * If the surface mesh contains quad elements, hexagon elements are created. * If the surface mesh contains triangular elements, then wedge elements are created. * If Tetrahedralize is toggled on, it meshes the interior using tetrahedral elements where it can. * Can't be used in Topology Optimization because not all elements will be tetrahedral. * The Growth rate specifies the ratio of element size from one element to another. The number can be anything greater than 1. The smaller the number is, the more uniform the mesh is. ## Example File Download Example: [Boundary Layer Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/boundary_layer_mesh.ntop) ![Boundary Layer Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/boundarylayer.png) *** ## Mesh, Integer, Scalar, Scalar, Bool Create a boundary layer mesh from a surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Number of layers | [Integer](../../../../block-documentation/types/integer) | Number of boundary layer elements. | | Thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the boundary layer. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | Successive growth rate between successive layers. | | Tetrahedralize | [Bool](../../../../block-documentation/types/bool) | Tetrahedralize the interior. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | *** ## Mesh, Integer, Scalar, Scalar, Bool, 1.1.0 Create a boundary layer mesh from a surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Number of layers | [Integer](../../../../block-documentation/types/integer) | Number of boundary layer elements. | | Thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the boundary layer. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | Successive growth rate between successive layers. | | Tetrahedralize | [Bool](../../../../block-documentation/types/bool) | Tetrahedralize the interior. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | *** ## Mesh, Integer, Scalar, Scalar, Bool, 1.2.0 Create a boundary layer mesh from a surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Number of layers | [Integer](../../../../block-documentation/types/integer) | Number of boundary layer elements. | | Thickness | [Scalar](../../../../block-documentation/types/scalar) | Thickness of the boundary layer. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | Successive growth rate between successive layers. | | Tetrahedralize | [Bool](../../../../block-documentation/types/bool) | Tetrahedralize the interior. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | # Delaunay Volume Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/delaunay-volume-mesh ## About this Block **What it does:** Creates a volume mesh forming a Delaunay tetrahedralization from a list of points. Delaunay tetrahedralization (also called Delaunay triangulation) is a particular mesh that tends to be more geometrically balanced (for example, avoiding skinny triangles). **Commons uses:** * Closing open lattice beams. **Tips:** * Doesn't take convex features into consideration, therefore, it is best to use with simple parts. * Some input options for the Vertices input can be: * Lattice vertices * Mesh vertices * **Random Points in Body** * Can close open lattice beams using this block, but you can't have any convex holes in the part. ## Example File Download Example: [Delaunay Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/delaunay.ntop) ![Delaunay Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/delaunaymesh.png) *** Create a volume mesh forming a Delaunay tetrahedralization from a list of points. ### Inputs | Name | Type | Description | | - | - | - | | Vertices | [Point List](../../../../block-documentation/types/point) | List of points to connect via a Delaunay tetrahedralization. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | # FE CAD Solid Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/fe-cad-solid-mesh > **[CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar](#cad-body-scalar-field-geometric-order-enum-scalar-scalar-scalar)** > **[CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0](#cad-body-scalar-field-geometric-order-enum-scalar-scalar-scalar-110)** > **[CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, 1.2.0](#cad-body-scalar-field-geometric-order-enum-scalar-scalar-scalar-scalar-scalar-scalar-preserved-faces-120)** > **[CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, 1.3.0](#cad-body-scalar-field-geometric-order-enum-scalar-scalar-scalar-scalar-scalar-scalar-preserved-faces-130)** > **[CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, Preserved nodes, 5.28.0](#cad-body-scalar-field-geometric-order-enum-scalar-scalar-scalar-scalar-scalar-scalar-preserved-faces-preserved-nodes-5280)** *** ## CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar Create an FE Mesh of solid tetrahedral elements from a single solid CAD Body. Note that faulty CAD input here can cause the meshing algorithms to fail. If faulty geometry is expected, consider using the "FE Robust Tetrahedral Mesh" function. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | The input CAD Body to mesh with solid tetrahedral elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0 Create an FE Mesh of solid tetrahedral elements from a single solid CAD Body. Note that faulty CAD input here can cause the meshing algorithms to fail. If faulty geometry is expected, consider using the "FE Robust Tetrahedral Mesh" function. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | The input CAD Body to mesh with solid tetrahedral elements. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. The linear option may be suitable for a fast analysis, but quadratic elements are recommend when accuracy is more important. For quadratic elements, the mid-side nodes are inserted along the straight edges of the elements. That is, the quadratic elements are not curved. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, 1.2.0 Create a volumetric FE Mesh from a single solid CAD Body by discretizing and adding integration points of the desired order to each element within the mesh. Note, faulty CAD input can cause the meshing algorithm to fail. ### Inputs | Name | Type | Description | | - | - | - | | Body | [CAD Body](../../../../block-documentation/types/cad-body) | The input geometric discretization. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. An undefined value turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about 5% of the edge length. An undefined value turns off feature deletion. | | Preserved faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The edges of the provided CAD Faces will be preserved in the resulting FE Mesh. If left empty, all CAD Face edges will be preserved. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, 1.3.0 Create a volumetric FE Mesh from a single solid CAD Body by discretizing and adding integration points of the desired order to each element within the mesh. Note, faulty CAD input can cause the meshing algorithm to fail. ### Inputs | Name | Type | Description | | - | - | - | | Body | [CAD Body](../../../../block-documentation/types/cad-body) | The input geometric discretization. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. An undefined value turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about 5% of the edge length. An undefined value turns off feature deletion. | | Preserved faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The edges of the provided CAD Faces will be preserved in the resulting FE Mesh. If left empty, all CAD Face edges will be preserved. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, Preserved nodes, 5.28.0 Create a volumetric FE Mesh from a single solid CAD Body by discretizing and adding integration points of the desired order to each element within the mesh. Note, faulty CAD input can cause the meshing algorithm to fail. ### Inputs | Name | Type | Description | | - | - | - | | Body | [CAD Body](../../../../block-documentation/types/cad-body) | The input geometric discretization. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. An undefined value turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about 5% of the edge length. An undefined value turns off feature deletion. | | Preserved faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The edges of the provided CAD Faces will be preserved in the resulting FE Mesh. If left empty, all CAD Face edges will be preserved. | | Preserved nodes | [Point List](../../../../block-documentation/types/point) | Points to preserve as nodes in the resulting FE Mesh. If left empty, node preservation will be turned off. Note: Boundary points can be preserved. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # FE Lattice Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/fe-lattice-mesh > **[Graph, Geometric Order Enum, Scalar Field](#graph-geometric-order-enum-scalar-field)** > **[Lattice, Geometric Order Enum, Scalar Field](#lattice-geometric-order-enum-scalar-field)** *** ## About this Block **What it does:** Generates an FE Mesh for beam based graph lattices. Lattice meshing takes less computation time than volume meshing and homogenization. **Common uses:** * Input in an **FE Component**. **Tips:** * This method dramatically reduces the number of elements from a typical volume mesh, but it ignores certain mechanical behavior like edge effects and stress concentrations in the lattice. * Discretization takes a Lattice type as an input. * The Geometric order can be Linear, where integration points are added at every mesh intersection, or Quadratic, where integration points are added at the midpoint of the mesh edges. * Linear Geometric order is faster but less accurate. * Quadratic Geometric order is slower but more accurate. We recommend this option if you are using the results downstream. * Subdivision input will split the original beam into equal length subdivisions. ![latticemesh\_subdivison](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/latticemesh_subdivison.png) * Use **Trim Lattice** to make sure the lattice elements lie within the volume of the lattice structure. If you get a warning about short lattice beams, use **Collapse Lattice Vertices** with a threshold much lower than the unit cell size. ## Example File Download Example:[FE Lattice Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_lattice_mesh.ntop) ![FE Lattice Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_lattice_mesh.png) *** ## Graph, Geometric Order Enum, Scalar Field Converts a Graph lattice into an FE Mesh by adding integration points of the desired order to the Graph lattice geometry. ### Inputs | Name | Type | Description | | - | - | - | | Discretization | [Graph](../../../../block-documentation/types/graph) | The input geometric discretization. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | | Subdivisions | [Scalar Field](../../../../block-documentation/types/scalar-field) | Each beam in the Graph will be subdivided into the given number of finite elements. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## Lattice, Geometric Order Enum, Scalar Field Converts a graph-based Lattice into an FE Mesh by adding integration points of the desired order to the Lattice geometry. ### Inputs | Name | Type | Description | | - | - | - | | Discretization | [Lattice](../../../../block-documentation/types/lattice) | The input geometric discretization. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | | Subdivisions | [Scalar Field](../../../../block-documentation/types/scalar-field) | The number of finite elements that each beam in the Lattice will be subdivided into. If the provided Lattice is face-based, the faces will be remeshed with an updated average edge length equal to the current average edge length subdivided by the subdivisions input. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # FE Point Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/fe-point Creates a six degree of freedom node that can be included in a simulation or optimization. ### Inputs | Name | Type | Description | | - | - | - | | Point | [Point](../../../../block-documentation/types/point) | Location of FE Point. | ### Outputs | Type | | - | | [FE Point](../../../../block-documentation/types/fe-point) | # FE Shell Mesh from CAD Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/fe-shell-mesh-from-cad > **[CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, Preserved nodes, 5.28.0](#cad-body-scalar-field-geometric-order-enum-scalar-scalar-scalar-scalar-scalar-scalar-preserved-faces-preserved-nodes-5280)** > **[CAD Body, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar](#cad-body-scalar-field-surface-mesh-shape-enum-geometric-order-enum-scalar-scalar-scalar)** > **[CAD Body, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0](#cad-body-scalar-field-surface-mesh-shape-enum-geometric-order-enum-scalar-scalar-scalar-110)** > **[CAD Body, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.2.0](#cad-body-scalar-field-surface-mesh-shape-enum-geometric-order-enum-scalar-scalar-scalar-120)** *** ## CAD Body, Scalar Field, Geometric Order Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved faces, Preserved nodes, 5.28.0 Create a FE Surface Mesh from the faces of a single CAD Body by discretizing and adding integration points of the desired order to each element within the mesh. Note, faulty CAD input can cause the meshing algorithm to fail. ### Inputs | Name | Type | Description | | - | - | - | | Body | [CAD Body](../../../../block-documentation/types/cad-body) | The input geometric discretization. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. An undefined value turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about 5% of the edge length. An undefined value turns off feature deletion. | | Preserved faces | [CAD Face List](../../../../block-documentation/types/cad-face) | The edges of the provided CAD Faces will be preserved in the resulting FE Mesh. If left empty, all CAD Face edges will be preserved. | | Preserved nodes | [Point List](../../../../block-documentation/types/point) | Points to preserve as nodes in the resulting FE Mesh. If left empty, node preservation will be turned off. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## CAD Body, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar Create an FE Mesh of shell elements from a single CAD Body. Note that faulty CAD input here can cause the meshing algorithms to fail. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | The input CAD Body to mesh with shell elements. If a solid body is provided, note that only the boundary of solid body is meshed. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Shape | Surface Mesh Shape Enum | The desired element shape. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## CAD Body, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.1.0 Create an FE Mesh of shell elements from a single CAD Body. Note that faulty CAD input here can cause the meshing algorithms to fail. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | The input CAD Body to mesh with shell elements. If a solid body is provided, note that only the boundary of solid body is meshed. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Shape | Surface Mesh Shape Enum | The desired element shape. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## CAD Body, Scalar Field, Surface Mesh Shape Enum, Geometric Order Enum, Scalar, Scalar, Scalar, 1.2.0 Create an FE Mesh of shell elements from a single CAD Body. Note that faulty CAD input here can cause the meshing algorithms to fail. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | The input CAD Body to mesh with shell elements. If a solid body is provided, note that only the boundary of solid body is meshed. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the elements. Note that the input can be a scalar field to achieve a spatially varying mesh size. | | Shape | Surface Mesh Shape Enum | The desired element shape. | | Geometric order | Geometric Order Enum | The geometric order of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements on a curved surface. The smaller this angle the more elements will be generated to conform to a curved input. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The angle used to automatically detect feature angles in the input domain that will be preserved in the output mesh. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # FE Surface Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/fe-surface-mesh ## About this Block **What it does:** Generates an FE Mesh for an input surface mesh. **Common uses:** * Input in an **FE Component**. * Meshing surface lattices. **Tips:** * **FE Surface Mesh** is used with shell elements that are approximations of the 3D geometry. These are used for thin-walled geometries. Running simulations on shell elements decreases the computational time with a lower element count. * Use this block with the **FE Shell Attribute** block when you are creating an **FE Component**. * Thickness of the surface mesh is defined in the **FE Shell Attribute** block. This shell element represents the midplane of the 3D part. * Linear Geometric order is faster but less accurate. * Quadratic Geometric order is slower but more accurate. We recommend this option if you are using the results downstream. ## Example File Download Example: [FE Surface Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_surface_mesh.ntop) ![FE Surface Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_surface_mesh.png) *** Convert a 3D Surface Mesh into an FE Mesh containing 3D shell elements. Standard Isoparametric model is used for shell element formulations. ### Inputs | Name | Type | Description | | - | - | - | | Discretization | [Mesh](../../../../block-documentation/types/mesh) | The input geometric discretization. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # FE Volume Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/fe-volume-mesh ## About this Block **What it does:** Takes a 3D mesh and adds integration points to each element within the mesh to allow for downstream analysis. **Commons uses:** * For use in downstream analysis, such as Topology Optimization and Static Analysis. **Tips:** * The geometric order can be Linear, where integration points are added at every mesh intersection, or Quadratic, where integration points are added at the midpoint of the mesh edges. * Linear Geometric order is faster, but less accurate. * Quadratic Geometric order is slower, but more accurate. We recommend this option if you are using the results downstream. ## Example File Download Example: [FE Volume Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEVolumeMesh.ntop) ![FE Volume Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEVolumeMesh.jpg) *** Convert a Volume Mesh to an FE Mesh by adding integration points of the desired order to each element within the mesh. ### Inputs | Name | Type | Description | | - | - | - | | Discretization | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | The input geometric discretization. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # Merge FE Meshes Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/merge-fe-meshes ## About this Block **What it does:** Combines adjacent nodes of multiple FE Meshes to generate a single FE Mesh. Nodes from the different meshes, within a distance tolerance, collapse into a single node. **Commons uses:** * Export one mesh object that may have disconnected pieces. * Merging a list of meshes for downstream use. **Tips:** * The merged node will take the location from the first FE Mesh in the list. * For example, if two meshes are in a list, merged nodes will take the location of the first mesh in the list, and if you add a third mesh, the merged nodes of that mesh will be merged into the nodes in the mesh from the first merging process. * Nodes are merged, but faces and edges are preserved. * If the merged meshes have matching meshes on the interface, the inner multiple boundaries are removed. ## Example File Download Example: [Merge FE Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/merge_fe_mesh.ntop) ![Merge FE Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/mergefemesh.png) *** Combine FE Meshes to generate one single mesh by collapsing nodes that are within a given tolerance. ### Inputs | Name | Type | Description | | - | - | - | | Meshes | [FE Mesh List](../../../../block-documentation/types/fe-mesh) | The meshes to merge. | | Distance threshold | [Scalar](../../../../block-documentation/types/scalar) | Vertices within this distance threshold will be merged together into one vertex. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # Mesh Quality Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/mesh-quality > **[FE Mesh, Bool](#fe-mesh-bool)** > **[Mesh, Bool](#mesh-bool)** > **[Volume Mesh, Bool](#volume-mesh-bool)** *** The **Mesh Quality** block assesses the quality of a mesh specifically for simulation purposes. The numerical algorithms employed with FEA or CFD require highly regular elements, which may not be necessary for simply creating an STL or other discretizations for CAD or manufacturing. The **Mesh Quality** block computes various mesh metrics and allows you to visualize them on the mesh itself. The block accepts the following mesh types: Mesh (i.e. surface mesh), Volume Mesh, and FE Mesh. For simulation workflows, it is useful to check the surface mesh quality before proceeding to volume meshing. To follow is a description of the supported mesh metrics. The min, max, and average values of these metrics are available in the properties panel of the **Mesh Quality** block. They can also be visualized in the Heads-Up-Display (HUD) by toggling the visibility icon on the block and selecting the desired metric in the HUD dropdown. The threshold slider can hide elements above or below a specific value, leaving only the poorer quality elements in the 3D scene. ![Cyclic Symmetry Inputs](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/meshquality.png) ![Cyclic Symmetry Inputs](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/meshquality_1.png) The **Mesh Quality metric** provides a composite quality metric between 0 and 1. This metric is based on the ratio of the volume to the sum of the square of the edge lengths for 2D elements or the square root of the cube of the sum of the square of the edge lengths for 3D elements. A value of 1 indicates a perfect cube or square, while a value of 0 indicates that the element has a zero or negative volume. This can also be expressed as follows: * For 2D elements: `Quality = C * Element Area / SUM(Edge Length^2)` * For 3D elements: `Quality = C * Volume / SQRT(SUM(Edge Length^2)^3)` Where the value of C for each type of element type is given by: | Element Type | C | | - | - | | Triangle | 6.92820323 | | Quadrangle | 4.0 | | Tetrahedron | 124.70765802 | | Hexagon | 41.56921938 | | Wedge | 62.35382905 | | Pyramid | 96 | The **Skewness metric** indicates how close to ideal (or equiangular) a 2D or 3D element is. The following table provides a range of skewness values and corresponding mesh quality. | Skewness Value | Mesh Quality | | - | - | | 1.0 | Degenerate | | 0.75 - 1.0 | Poor | | 0.5 - 0.75 | Fair | | 0.25 - 0.5 | Good | | 0.0 - 0.25 | Excellent | | 0.0 | Equiangular | The **Orthogonality metric** is a measure of the face normal vectors and ranges from 0.0 to 1.0. A value of 0.0 is worst, and a value of 1.0 is best. The **intersecting triangles metric** will tell you how many triangles in the mesh are intersecting each other. A common source of volume meshing failures is intersecting triangles in the surface mesh. A quality surface mesh should not have any intersecting triangles. Note that computing intersecting triangles is an option on the **Mesh Quality** block and is turned off by default because computing intersecting triangles can be computationally intensive, particularly for volume meshes. When the intersecting triangle option has been turned off, the metric will be grayed out in the HUD dropdown menu. *** ## FE Mesh, Bool Computes Mesh Quality metrics relevant for simulation including orthogonality, skewness, composite mesh quality, and intersecting triangles. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The mesh to be analyzed. | | Check intersections | [Bool](../../../../block-documentation/types/bool) | Calculate intersecting triangles. Enabling this option will result in the block taking longer to evaluate. | ### Outputs | Type | | - | | [Mesh Quality](../../../../block-documentation/types/mesh-quality) | *** ## Mesh, Bool Computes Mesh Quality metrics relevant for simulation including orthogonality, skewness, composite mesh quality, and intersecting triangles. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | The mesh to be analyzed. | | Check intersections | [Bool](../../../../block-documentation/types/bool) | Calculate intersecting triangles. Enabling this option will increase block runtime. | ### Outputs | Type | | - | | [Mesh Quality](../../../../block-documentation/types/mesh-quality) | *** ## Volume Mesh, Bool Computes Mesh Quality metrics relevant for simulation including orthogonality, skewness, composite mesh quality, and intersecting triangles. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | The mesh to be analyzed. | | Check intersections | [Bool](../../../../block-documentation/types/bool) | Calculate intersecting triangles. Enabling this option will result in the block taking longer to evaluate. | ### Outputs | Type | | - | | [Mesh Quality](../../../../block-documentation/types/mesh-quality) | # Mirror FE Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/mirror-fe-mesh > **[FE Mesh, Planes, Bool, Scalar](#fe-mesh-planes-bool-scalar)** > **[FE Mesh, Planes, Bool, Scalar, 1.1.0](#fe-mesh-planes-bool-scalar-110)** *** ## About this Block **What it does:** This block mirrors an existing FE Mesh to cut down processing time for symmetrical parts. **Commons uses:** * Topology Optimization * Analysis **Tips:** * Start with a part that is already halved or cut it in half using a Plane with **Boolean Subtract**. * You can merge the meshes after mirroring or keep them separate. If you keep them separate, you will need to use a Connector in your **FE Model**. ## Example File Download Example: [Mirror FE Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/mirror_fe_mesh_1.ntop) ![Mirror FE Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/mirrorfemesh.png) *** ## FE Mesh, Planes, Bool, Scalar Mirror an FE Mesh using planar symmetry ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The mesh to mirror. | | Planes | [Plane List](../../../../block-documentation/types/plane) | The mirror planes. | | Merge | [Bool](../../../../block-documentation/types/bool) | Option to merge all meshes after mirroring. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for determining coincident nodes. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | *** ## FE Mesh, Planes, Bool, Scalar, 1.1.0 Mirror an FE Mesh using planar symmetry ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The mesh to mirror. | | Planes | [Plane List](../../../../block-documentation/types/plane) | The mirror planes. | | Merge | [Bool](../../../../block-documentation/types/bool) | Option to merge all meshes after mirroring. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for determining coincident nodes. | ### Outputs | Type | | - | | [FE Mesh](../../../../block-documentation/types/fe-mesh) | # Parallel Remesh Surface Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/parallel-remesh-surface ## About this Block Preface: The **Parallel Remesh Surface** block is an additional block that allows users to run Remesh Surface block on multiple CPU threads. For more information on Remesh Surface, please see the information available [here](/block-documentation/blocks/structures/mesh/remesh-surface.html). **What it does:** The **Parallel Remesh Surface** block re-meshes an existing surface mesh using parallel processing. The algorithm automatically partitions the input mesh and pre-meshes each partition in parallel. * The number of partitions is equal to the Max Thread input. An increase in mesh density may occur along the lines where the partitions are "stitched" together. *Note: When the Max Threads input is greater than one, the block is not guaranteed to be deterministic and may produce different results each time it is executed. This is often acceptable during design iterations when time-to-results is more important than determinism. If you require meshing to be fully deterministic and always produce the same results, you should use one thread.* **Common uses:** * Preparing a surface mesh for simulation and optimization. **Tips:** * Parallel Remesh Surface provides nearly deterministic results when keeping the Thread Count constant. * Running Parallel Remesh Surface with Thread Count = 1 produces the same result as the Remesh Surface block. * The number of nodes/elements can vary significantly between multithreaded and single-threaded. On average, we have noticed a 10% increase in mesh elements when using multiple cores. * Generally, we have noticed a significant speed improvement when utilizing up to 32 threads. * Not all remeshing operations will improve with multiple threads. For meshes with low element count, single-core meshing can be faster. However, for the vast majority of meshes, running parallel threads will be faster. ## Example File Download Example: [Parallel Remesh Surface](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/parallel_remesh.ntop)
  **Remesh Surface** **Parallel Remesh Surface**
  ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.0/1_thread.png) ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.0/16_thread.png)
Time 67,239ms 16,323ms (16 Max Threads)
*** Remesh an existing surface mesh using parallel processing. The algorithm will automatically partition the input mesh and pre-mesh each partition in parallel. The number of partitions is equal to the Max Threads. When the Max Threads is greater than one, the results may differ each time the block is executed. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to remesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Surface Mesh Shape Enum | The element shape of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. | | Max threads | [Integer](../../../../block-documentation/types/integer) | The number of parallel threads that will be used by the meshing algorithm. If not provided, the Max Threads will be set to the maximum available on the machine up to 32. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Remesh Surface Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/remesh-surface > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar](#mesh-scalar-field-surface-mesh-shape-enum-scalar-scalar-scalar-scalar-scalar-scalar)** > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, 1.1.0](#mesh-scalar-field-surface-mesh-shape-enum-scalar-scalar-scalar-scalar-scalar-scalar-110)** > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved nodes, 1.2.0](#mesh-scalar-field-surface-mesh-shape-enum-scalar-scalar-scalar-scalar-scalar-scalar-preserved-nodes-120)** > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved nodes, Preserved lines, Implicit Body, 6.0.0](#mesh-scalar-field-surface-mesh-shape-enum-scalar-scalar-scalar-scalar-scalar-scalar-preserved-nodes-preserved-lines-implicit-body-600)** *** ## About this Block - Remesh Surface **What it does:** Changes an existing surface mesh by editing the mesh elements based on size, shape, and density. **Common uses:** * Preparation for creating quality FE meshes for downstream analysis. * Cleaning up defects in a mesh. * Converting a surface mesh into a solid mesh. **Tips:** * When converting a surface mesh into a solid mesh, make sure the Edge Length is the same size in both blocks. When the triangle edges are the same size, converting them into 3D is easier and faster. Dealing with different edge lengths makes the process slower. * The Edge Length should be greater than or equal to the feature size of the input Mesh. Start high and reduce it until you are happy with how it looks. * Try to balance fidelity and computing time. Too many elements = long computing time, and not enough elements = low fidelity. * Minimum Feature Size: If you are setting a minimum Feature Size, it's recommended to use 5% of the chosen Edge Length. * Remesh Shape: * Triangular: is the most commonly used and is the most efficient. * Quad and Quad-dominated: Can't be converted to a volume mesh in nTop but can be used in **CAD Body from Mesh**. It is preferred to use the **Quadrangulate Mesh** block instead. | Input | Example | | - | - | | Edge length: Specifies the approximate edge length of the mesh elements. Can be a singular, consistent value, or a scalar field, meaning you can spatially vary the size of the mesh. *Note: When using a Scalar field input for the Edge length, the Edge length input has priority over the other inputs.* | ![Edge length](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remesh.png) | | Span Angle: Refines elements that lie on curves. It signifies the maximum allowed angle that elements on curved surfaces are allowed to span. With a smaller span angle, elements on the curve are more refined to fit the span angle. | ![Span Angle](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/span.png) | | Growth Rate: Specifies the ratio of element size from one element to another. The number can be anything greater than 1. The smaller the number, the more uniform the mesh. In the image to the right, you can see how changing the growth rate from 2 to 1.05 creates a more uniform mesh. | ![Growth Rate](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/growthrate.png) | | Feature Angle: Controls the degree to which curved surfaces are converted to flat edges in a mesh. The value represents the maximum allowed angle between two adjacent planes that define an edge. A lower value results in more planar regions of the mesh where an input surface is curved. | ![Feature Angle](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/featureangle.png) | ## Example File Download Example: [Remesh Surface](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remesh_surface.ntop) *Remesh a surface mesh to edit the existing mesh.* ![Remesh Surface](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remesh_surface.jpg) ## About this Block - Overload - Remesh Surface with Cyclic Symmetry (Beta) **What it does:** Remeshes an existing surface mesh to optimize it for cyclic symmetry. **Common uses:** * Analysis involving Cyclic Symmetry. **Tips:** If you get the error, "Surface meshing errors occurred," or "Cannot find matching pair of nodes in upper and lower layers," the program is warning you that the closed edge of the lower boundary mesh is not consistent with the transformation of the independent normal. Either the sector angle or independent normal need to be adjusted. You may also try changing your input mesh to be a **Remesh Surface** or a **Mesh from CAD Body** block. Below is a visualization of of the inputs: ![Remesh Cyclic Symmetry](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remesh_cyclic.png) ## Example File Download Example: [Cyclic Symmetry](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cyclic_symmetry.ntop) *Use the Cyclic Symmetry block on a sector of your model and run a Modal and Static analysis. This example meshes the sector using the Remesh Surface with Cyclic Symmetry block* ![Cyclic Symmetry](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/remesh_surface_cyclic.jpg) *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar Remesh an existing surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to remesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Surface Mesh Shape Enum | The element shape of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, 1.1.0 Remesh an existing surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to remesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Surface Mesh Shape Enum | The element shape of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved nodes, 1.2.0 Remesh an existing surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to remesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Surface Mesh Shape Enum | The element shape of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. | | Preserved nodes | [Point List](../../../../block-documentation/types/point) | Points to preserve as nodes in the resulting FE Mesh. If left empty, node preservation will be turned off. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Preserved nodes, Preserved lines, Implicit Body, 6.0.0 Remesh an existing surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to remesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Surface Mesh Shape Enum | The element shape of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. | | Preserved nodes | [Point List](../../../../block-documentation/types/point) | Points to preserve as nodes in the resulting FE Mesh. If left empty, node preservation will be turned off. | | Preserved lines | [Polycurve List](../../../../block-documentation/types/polycurve) | A list of polycurves whose edges will be recovered in the output mesh. Each polycurve is sampled at the target edge length and the resulting edges are guaranteed to appear in the remeshed output. | | Preserved region | [Implicit Body](../../../../block-documentation/types/implicit-body) | An implicit body defining the region to preserve. Edges and faces of the input mesh that lie within the body are kept intact. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Remesh Surface with Cyclic Symmetry Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/remesh-surface-with-cyclic-symmetry > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Axis, Vector, Scalar](#mesh-scalar-field-surface-mesh-shape-enum-scalar-scalar-scalar-scalar-scalar-scalar-axis-vector-scalar)** > **[Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Axis, Vector, Scalar, 1.1.0](#mesh-scalar-field-surface-mesh-shape-enum-scalar-scalar-scalar-scalar-scalar-scalar-axis-vector-scalar-110)** *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Axis, Vector, Scalar Remesh a given surface mesh to create conformal nodes and elements on independent and dependent planes. The independent plane is defined by a normal, and the dependent plane is defined by rotating the normal about an axis of rotation in the independent plane. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to remesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Surface Mesh Shape Enum | The element shape of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. | | Rotational axis | [Axis](../../../../block-documentation/types/axis) | The axis of rotation for the cyclically symmetric mesh. The independent surface normal will be rotated about the axis to determine the plane to construct a conformal mesh. The rotational axis must lie in the plane defined by the independent normal. | | Independent normal | [Vector](../../../../block-documentation/types/vector) | The normal defining the independent planar surface. | | Sector angle | [Scalar](../../../../block-documentation/types/scalar) | The rotation of the independent normal about the rotational axis to define the dependent (and bounding) plane of the cyclically symmetric mesh. 360 degrees (or 2 pi) must be divided evenly by the sector angle. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Mesh, Scalar Field, Surface Mesh Shape Enum, Scalar, Scalar, Scalar, Scalar, Scalar, Scalar, Axis, Vector, Scalar, 1.1.0 Remesh a given surface mesh to create conformal nodes and elements on independent and dependent planes. The independent plane is defined by a normal, and the dependent plane is defined by rotating the normal about an axis of rotation in the independent plane. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to remesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Surface Mesh Shape Enum | The element shape of the output mesh. | | Span angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. This value must be greater than 1.001. | | Feature angle | [Scalar](../../../../block-documentation/types/scalar) | The maximum angle used to automatically compute the preserved edges in the input surface. Decreasing the feature angle will produce a mesh whose edges are better aligned with the input surface. | | Min edge length | [Scalar](../../../../block-documentation/types/scalar) | The minimum allowed edge length of the generated elements in the output mesh. | | Chord height | [Scalar](../../../../block-documentation/types/scalar) | The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. | | Min feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. | | Rotational axis | [Axis](../../../../block-documentation/types/axis) | The axis of rotation for the cyclically symmetric mesh. The independent surface normal will be rotated about the axis to determine the plane to construct a conformal mesh. The rotational axis must lie in the plane defined by the independent normal. | | Independent normal | [Vector](../../../../block-documentation/types/vector) | The normal defining the independent planar surface. | | Sector angle | [Scalar](../../../../block-documentation/types/scalar) | The rotation of the independent normal about the rotational axis to define the dependent (and bounding) plane of the cyclically symmetric mesh. 360 degrees (or 2 pi) must be divided evenly by the sector angle. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Robust Tetrahedral Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/robust-tetrahedral-mesh > **[Mesh, Scalar, Integer, Scalar, 2.0.0](#mesh-scalar-integer-scalar-200)** > **[Mesh, Scalar, Integer, Scalar, 2.1.0](#mesh-scalar-integer-scalar-210)** > **[Mesh, Scalar, Scalar, Regions](#mesh-scalar-scalar-regions)** *** ## About this Block **What it does:** Creates a solid mesh from a surface mesh using a robust algorithm. It is tolerant of very low-quality inputs, converting them into FEA quality elements. This block can handle complex parts but is slower than the **Volume Mesh** block. **Commons uses:** * Converting complex surface meshes into solid meshes. **Tips:** * Edge length isn't a Scalar Field input. Therefore, it can't vary throughout the mesh. * Use the **Remesh Surface** block to clean up the mesh before using the **Robust Tetrahedral Mesh** block. When doing this, use the same Edge length in both blocks to easily create the 3D elements. * If your part isn't that complex, we recommend using the **Volume Mesh** block for faster results. ## Example File Download Example: [Robust Tetrahedral Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/robust_tetrahedral_mesh.ntop) ![Robust Tetrahedral Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/robust.png) *** ## Mesh, Scalar, Integer, Scalar, 2.0.0 Mesh a solid domain with tetrahedral elements using algorithms that are tolerant to defects such as self-intersections. This function will remesh the boundary of the input domain to generate valid, high-quality elements. If the input domain is likely to be free of any defects, consider using the faster Volume Mesh block. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Edge length | [Scalar](../../../../block-documentation/types/scalar) | The target edge length of the generated elements. | | Regularity factor | [Integer](../../../../block-documentation/types/integer) | A number between 0 and 10 indicating the level of mesh optimization that will be done to improve the shape of the tets. A value of 0 indicates a minimum amount of optimization and a value of 10 indicates a high amount of optimization to achieve regular shaped tetrahedra. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | A tolerance that controls how closely the output mesh vertices must be to the input surface. If not provided, a default value is derived by multiplying the diagonal of the bounding box of the input geometry by 0.001. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | *** ## Mesh, Scalar, Integer, Scalar, 2.1.0 Mesh a solid domain with tetrahedral elements using algorithms that are tolerant to defects such as self-intersections. This function will remesh the boundary of the input domain to generate valid, high-quality elements. If the input domain is likely to be free of any defects, consider using the faster Volume Mesh block. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Edge length | [Scalar](../../../../block-documentation/types/scalar) | The target edge length of the generated elements. | | Regularity factor | [Integer](../../../../block-documentation/types/integer) | A number between 0 and 10 indicating the level of mesh optimization that will be done to improve the shape of the tets. A value of 0 indicates a minimum amount of optimization and a value of 10 indicates a high amount of optimization to achieve regular shaped tetrahedra. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | A tolerance that controls how closely the output mesh vertices must be to the input surface. If not provided, a default value is derived by multiplying the diagonal of the bounding box of the input geometry by 0.001. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | *** ## Mesh, Scalar, Scalar, Regions Tetrahedralize a domain that may contain flaws in the input geometry. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Edge length | [Scalar](../../../../block-documentation/types/scalar) | The target edge length of the generated elements. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | A tolerance that controls how closely the output mesh vertices must be to the input surface. If not provided, a default value is derived by multiplying the diagonal of the bounding box of the input geometry by 0.001. | | Regions | [Mesh List](../../../../block-documentation/types/mesh) | Regions whose boundaries will be included in the output mesh. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | # Volume Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/volume-mesh > **[Mesh, Scalar Field, Scalar, 1.1.0](#mesh-scalar-field-scalar-110)** > **[Mesh, Scalar Field, Scalar, Preserved nodes, 1.2.0](#mesh-scalar-field-scalar-preserved-nodes-120)** > **[Mesh, Scalar Field, Volume Mesh Shape Enum, Scalar](#mesh-scalar-field-volume-mesh-shape-enum-scalar)** *** ## About this Block **What it does:** Converts a surface mesh into a solid mesh. It is the preferred method for simple geometry, as it is speedy but less tolerant of defects. **Commons uses:** * Converting simple geometry surface meshes into solid meshes. **Tips:** * Use the **Remesh Surface** block to clean up the mesh before using the **Volume Mesh** block. When doing this, use the same Edge length in both blocks to easily create the 3D elements. * You can vary the Edge length by using a Scalar Field input. * If you get an error while using **Volume Mesh**, you may want to use the **Robust Tetrahedral Mesh** instead. * The Growth rate specifies the ratio of element size from one element to another. The number can be anything greater than 1. The smaller the number is, the more uniform the mesh is. ## Example File Download Example: [Volume Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/volume_mesh.ntop) ![Volume Mesh](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/volumemesh1.png) *** ## Mesh, Scalar Field, Scalar, 1.1.0 Mesh a solid domain with tetrahedral elements that conform to the boundary of the specified Domain. If the Domain contains quad faces, quadrilateral pyramids will be used. The Remesh Surface block can be used to remesh the boundary Domain if necessary. If the input domain contains defects that cause this block to fail, consider using the Robust Tetrahedral Mesh block. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | *** ## Mesh, Scalar Field, Scalar, Preserved nodes, 1.2.0 Mesh a solid domain with tetrahedral elements that conform to the boundary of the specified Domain. If the Domain contains quad faces, quadrilateral pyramids will be used. The Remesh Surface block can be used to remesh the boundary Domain if necessary. If the input domain contains defects that cause this block to fail, consider using the Robust Tetrahedral Mesh block. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | | Preserved nodes | [Point List](../../../../block-documentation/types/point) | Points to preserve as nodes in the resulting FE Mesh. If left empty, node preservation will be turned off. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | *** ## Mesh, Scalar Field, Volume Mesh Shape Enum, Scalar Mesh a solid domain with tetrahedral elements that conform to the boundary of the input domain. The Remesh Surface block can be used to remesh the boundary domain if needed. If the input domain contains defects that cause this block to fail, consider using the Robust Tetrahedral Mesh block. ### Inputs | Name | Type | Description | | - | - | - | | Domain | [Mesh](../../../../block-documentation/types/mesh) | The domain to mesh. | | Edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | The target edge length of the generated elements. | | Shape | Volume Mesh Shape Enum | The element shape of the output mesh. | | Growth rate | [Scalar](../../../../block-documentation/types/scalar) | The rate at which the size of adjacent elements can grow. | ### Outputs | Type | | - | | [Volume Mesh](../../../../block-documentation/types/volume-mesh) | # Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model > **[Simulation Model](../../../block-documentation/blocks/structures/model/simulation-model)** > **[Solid Domain](../../../block-documentation/blocks/structures/model/solid-domain)** > **[Lattice Domain](../../../block-documentation/blocks/structures/model/lattice-domain)** > **[Tie Constraint](../../../block-documentation/blocks/structures/model/tie-constraint)** > **[Structural Contact](../../../block-documentation/blocks/structures/model/structural-contact)** > **[Thermal Bonded Contact](../../../block-documentation/blocks/structures/model/thermal-bonded-contact)** > **[Cyclic Symmetry](../../../block-documentation/blocks/structures/model/cyclic-symmetry)** > **[Rigid Connector](../../../block-documentation/blocks/structures/model/rigid-connector)** > **[Spring](../../../block-documentation/blocks/structures/model/spring)** # Cyclic Symmetry Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/cyclic-symmetry ## About this Block **What it does:** Enables computational speed up by performing an analysis on a sector of your model that is cyclically symmetrical, instead of solving on the entire model. When leveraging cyclic symmetry to reduce the overall model size, you can still visualize the results on the full model. **Common uses:** * Modal Analysis, and Static Analysis. **Tips:** * Acts similar to the **Tie Constraint** block, since it ties the degrees of freedom of the upper boundary to the lower boundary. * For generalized loading conditions acting on a cyclic symmetric structure, the force and displacement are approximated by a Fourier Series and harmonic analysis. * The **Harmonic count** input is the maximum harmonic index to use in the series, and it physically represents the maximum number of variations in the displacement of a point spaced by the sector angle, or nodal diameter. If N equals the number of sectors in the full 360° model, the range of the harmonic count input is zero to N/2 (if N is even) and (N-1)/2 (if N is odd). * When reviewing modal results with the cyclic symmetry constraint, the mode frequencies and harmonic index are displayed in the HUD legend. * Although it is not necessary, you can create a conformal mesh between the upper and lower boundaries of the sector using the **Remesh Surface with Cyclic Symmetry** block. In some cases this yields more accurate results because each node on the upper boundary is tied to exactly one node on the lower boundary, and a multipoint constraint is not required. Below is a visualization of of the inputs: ![Cyclic Symmetry Inputs](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cyclic_inputs.png) ![Cyclic Symmetry Visualization](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cyclic_symmetry.png) ## Example File Download Example: [Cyclic Symmetry](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cyclic_symmetry.ntop) *Use the Cyclic Symmetry block on a sector of your model and run a Modal and Static analysis. This example meshes the sector using the Remesh Surface with Cyclic Symmetry block.* ![Cyclic Symmetry](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/cyclic_symmetry_example.jpg) *** Creates a cyclic symmetry constraint between the upper and lower boundaries of the sector. ### Inputs | Name | Type | Description | | - | - | - | | Upper boundary | [Boundary](../../../../block-documentation/types/boundary) | The upper (dependent) Boundary. | | Lower boundary | [Boundary](../../../../block-documentation/types/boundary) | The lower (independent) Boundary. | | Rotational axis | [Axis](../../../../block-documentation/types/axis) | Rotational axis | | Sector angle | [Scalar](../../../../block-documentation/types/scalar) | The angle between the upper and lower boundaries. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Tolerance between the location of the dependent and independent nodes when they are mirrored on each other. | | Harmonic count | [Integer](../../../../block-documentation/types/integer) | Number of harmonics to evaluate for the structure. The maximum number of harmonics to be evaluated is half the total number of sectors in the full model. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | # Lattice Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/lattice-domain > **[FE Mesh, Scalar Field, Material](#fe-mesh-scalar-field-material)** > **[Lattice, Geometric Order Enum, Scalar Field, Isotropic Material](#lattice-geometric-order-enum-scalar-field-isotropic-material)** *** ## About this Block **What it does:** The **Lattice Domain** block creates an **FE Domain** from an input Lattice. **Common uses:** * Use this to create a **Simulation Model** for analysis workflows. * Save time and skip traditional meshing when you are running an analysis. **Tips:** * This block is an FE Domain type, which allows it to auto convert (called autocast) to an **Simulation Model** when it is used in an input that requires an **Simulation Model**. This is useful for single component setups. * Open the properties of this block to use the FE attributes, FE Model, or FE Mesh chips. * This block combines the **FE Lattice Mesh** with the **Lattice Domain**, removing the need for any meshing steps. * When you are creating Boundary Conditions use the FE Mesh chip from the properties. If you don't use this chip, you will get an error if your Boundary Condition references an FE Mesh that isn't in the **Simulation Model**. * Linear Geometric order is faster, but less accurate. * Quadratic Geometric order is slower, but more accurate. We recommend this option if you are using the results downstream. * Subdivision input will split the original beam into equal length subdivisions. ![latticemesh\_subdivison](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/latticemesh_subdivison.png) **Tips for the FE Mesh overload:** * Remove any inputs to change to the FE Mesh overload. * Assigns a user-defined isotropic material and thickness to the lattice. * This block is a custom block containing an [**Beam Attribute**](/block-documentation/blocks/structures/material-attributes/beam-attribute.html) inserted into an **FE Component**. * Input an **FE Lattice Mesh** into the Mesh input. If you use an [**FE Volume Mesh**](/block-documentation/blocks/structures/mesh/fe-volume-mesh.html) or [**FE Surface Mesh**](/block-documentation/blocks/structures/mesh/fe-surface-mesh.html), you will receive an error. ## Example File Download Example: [Lattice Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_lattice_component.ntop) ![FE Lattice Component](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_lattice_component.png) *** ## FE Mesh, Scalar Field, Material Creates a Solid Domain from a graph lattice with isotropic material properties. ### Inputs | Name | Type | Description | | - | - | - | | Lattice mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The input FE Mesh derived from a Graph lattice. | | Thickness | [Scalar Field](../../../../block-documentation/types/scalar-field) | The Graph lattice thickness at the vertices. Note that the input can be a scalar field and the position of the Graph lattice vertices will be evaluated in the field to set the thickness. In this case the resulting beam elements will be formulated as tapered beams. | | Material | [Material](../../../../block-documentation/types/material) | The isotropic material for the domain. | ### Outputs | Type | | - | | [FE Domain](../../../../block-documentation/types/fe-domain) | *** ## Lattice, Geometric Order Enum, Scalar Field, Isotropic Material Meshes a lattice using either beam or shell elements and creates a Solid Domain with the given material properties. ### Inputs | Name | Type | Description | | - | - | - | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to be meshed. | | Geometric order | Geometric Order Enum | The geometric order of the finite elements. | | Subdivisions | [Scalar Field](../../../../block-documentation/types/scalar-field) | The number of finite elements along a Lattice beam. Shell elements cannot be subdivided. | | Material | [Isotropic Material](../../../../block-documentation/types/isotropic-material) | The isotropic material specification for the Domain. | ### Outputs | Type | | - | | [FE Domain](../../../../block-documentation/types/fe-domain) | # Rigid Connector Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/rigid-connector > **[FE Point, Boundary, FE Coupling Enum](#fe-point-boundary-fe-coupling-enum)** > **[FE Point, Boundary, FE Coupling Enum](#fe-point-boundary-fe-coupling-enum)** *** ## About this Block ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FP_1.png) The **Rigid Connector** block can be used to define a connection between a point and a surface of a component in a simulation or optimization study. This is typically used in multi-component simulations where only the mass of the auxiliary components affect the analysis while the geometry of these components can be neglected. These auxiliary components are modeled as [point FE component](/block-documentation/blocks/structures/model/fe-component.html) in nTop. This can be used to reduce the size of the finite element model, improving the performance of the simulation or optimization solver without compromising the accuracy of the results. For example, the screenshot above represents a gripper connected to a robotic arm. The second image shows the robotic gripper replaced by a point mass entity (A) at its center of mass tied to the connection points on the arm through rigid connections (B). This Rigid Connector system in combination with point masses can be used in studies where the mass participation of the components are essential like a Modal Analysis, a Buckling Analysis or an Optimization study (Topology or Field Optimization) with a Frequency Response as a constraint or an objective. **Rigid Connector Block** ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_2.png) The block has the following inputs : * Point : This is the location where the block will create a remote point. This is typically at the center of mass of the component being represented. To learn more about the attributes that can be applied to the point, please refer to the Point Attribute section in the [Documentation](/block-documentation/blocks/structures/material-attributes/fe-point-attribute.html). * Boundary : This defines the boundaries (typically nodes on a surface) that will be connected to the point with rigid elements * Connector : This defines the the behavior of the nodes on the boundary linked to the motion of the point and has 2 options - * Rigid : The rigid option constrains the nodes on the boundary to move with the point. It prevents any relative motion between the nodes on the boundary and behaves like a rigid entity. This is popularly known as the RBE2 connector that connects an independent node (green) to a set of dependent nodes (yellow) ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_3.png) * Flexible : This flexible option links the motion of the point to the nodes on the boundary and enables relative motion between these nodes. This distributes the mass between the nodes on the boundary and avoids locally stiffening the model (unlike the Rigid connector). This is popularly known as the RBE3 connector that connects a dependent node (yellow) to a set of independent nodes (green) ![Flexible Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_4.png) Here is an example that illustrates how this block works. **Example 1 - Modal Analysis and Optimization of a Camera Bracket** ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_5.png) Here is a bracket (gray) that is used to connect a camera (yellow) to a mount (not pictured in the image). The requirement for this bracket is to have a first natural frequency that is greater than 350 Hz. To estimate the first natural frequency and to optimize the bracket to obey this requirement, it is essential to include the mass of the camera in the analysis. This can be defined as a remote point mass attached to the mounting locations with flexible (RBE3) connectors. ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_6.png) ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_7.png) The remote point mass can be defined and attached to the mounting locations in the following way : 1. Add a second FE Component to the FE Model. Use the second overload of the FE Component that takes a Point and an FE Attribute 2. In the Point input, specify the x, y, z location of the camera’s center of mass. In the attached example, this point is specified as a variable that contains the camera’s center of mass property 3. To the FE Attribute input, add an FE Point Attribute and input the mass properties of the camera. In the attached example, a mass of 200 g was specified in this block 4. In the Connectors input of the FE Model, add the Rigid Connector block 5. Enter the coordinates of the point representing the camera’s center of mass. Here, the center of mass variable was used to specify this input just like the FE Component block 6. Define the Boundary that the remote mass is connected to 7. Finally specify the connector type. In this example, the Flexible (RBE3) connector was used ![Rigid Connector](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_8.png) This **FE Model** with the remote point mass was used in Topology Optimization to define the natural frequency response. In this example, this response was defined to keep the first natural frequency of the bracket-remote mass model above 350 Hz and below 1050 Hz. In addition to this, a volume fraction constraint of 0.35 was imposed on the design space. The optimization was carried out with a compliance minimization objective for a 120g load in the +Y direction on the bracket and the camera.
**Design 1** **Design 2**
![Before](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_9.png) ![After](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RC_10.png)
480 g 178 g
922 Hz 635 Hz
The optimized bracket is 64% lighter than the original design with the first natural frequency over 350 Hz. ## Example File Download Example: [Rigid Connector Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/rigid_connector.ntop) *** ## FE Point, Boundary, FE Coupling Enum Defines a rigid element connector between a Point and Boundary. The connector may either be Flexible (RBE3) or Rigid (RBE2). ### Inputs | Name | Type | Description | | - | - | - | | Fe point | [FE Point](../../../../block-documentation/types/fe-point) | Point to create the connector from. | | Boundary | [Boundary](../../../../block-documentation/types/boundary) | Boundary to be connected to Point. | | Connector | FE Coupling Enum | Option to create either a Flexible (RBE3) or Rigid (RBE2) connector. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | *** ## FE Point, Boundary, FE Coupling Enum Defines a rigid element connector between a Point and FE Boundary. The connector may either be Flexible (RBE3) or Rigid (RBE2). ### Inputs | Name | Type | Description | | - | - | - | | Fe point | [FE Point](../../../../block-documentation/types/fe-point) | Point to create the connector from. | | Boundary | [CAD Face List](../../../../block-documentation/types/cad-face) | The dependent FE Boundary. | | Connector | FE Coupling Enum | Option to create either a Flexible (RBE3) or Rigid (RBE2) connector. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | # Simulation Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/simulation-model > **[Domains, Connectors](#domains-connectors)** > **[Domains, Connectors, 5.23.0](#domains-connectors-5230)** *** ## About this Block **What it does:** The **Simulation Model** block uses Domains based on the overload either **Virtual Domain** or **FE Domain** and Connectors to assign attributes to the domains to prepare them for analysis. **Common uses:** * Preparing your part for analysis (used in every analysis workflow). * Exported for analysis in other programs. **Tips:** * Each **Solid Domain** with Mesh overload needs one FE Mesh and at least one Material Attribute. * Each **Virtual Domain** and **Solid Domain** with Implicit Body overload needs one Implicit Body and at least one Material Attribute. * A **Simulation Model** does not need a connector to run if it only has one domain in it. * A Domain block can auto convert (called autocast) to a **Simulation Model** when it is used in an input that requires an **Simulation Model**. This is useful for single domain setups. ## Example File Download Example: [FE Model](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEModel.ntop) ![FE Model](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEModel.png) *** ## Domains, Connectors Combines a list of FE Domains and corresponding Connectors into an FE Model. The block performs checks to determine whether all domains are connected/restrained properly. ### Inputs | Name | Type | Description | | - | - | - | | Domains | [FE Domain List](../../../../block-documentation/types/fe-domain) | The domains in the model. | | Connectors | [Connector List](../../../../block-documentation/types/connector) | The connectors and interactions in the model. | ### Outputs | Type | | - | | [FE Model](../../../../block-documentation/types/fe-model) | *** ## Domains, Connectors, 5.23.0 Combines a list of Virtual Domains and corresponding Connectors into a Virtual Model. ### Inputs | Name | Type | Description | | - | - | - | | Domains | [Virtual Domain List](../../../../block-documentation/types/virtual-domain) | The domains in the model. | | Connectors | [Connector List](../../../../block-documentation/types/connector) | The connectors and interactions in the model. | ### Outputs | Type | | - | | [Virtual Model](../../../../block-documentation/types/virtual-model) | # Solid Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/solid-domain > **[FE Mesh, Attributes](#fe-mesh-attributes)** > **[Implicit Body, Attributes](#implicit-body-attributes)** *** ## About this Block **What it does:** The **Solid Domain** block assigns material attribute to either an FE Mesh or an Implicit Body to be used in an **FE Model**. Think of this block as a property container. **Common uses:** * A required input in [**Simulation Model**](/block-documentation/blocks/structures/model/simulation-model.html) for analysis workflows. **Tips:** * Requires a [**Beam Attribute**](/block-documentation/blocks/structures/material-attributes/beam-attribute.html), [**Shell Attribute**](/block-documentation/blocks/structures/material-attributes/shell-attribute.html), or [**Solid Attribute**](/block-documentation/blocks/structures/material-attributes/solid-attribute.html) to define the properties of the mesh. * The **FE Solid Domain** and the **Lattice Domain** are built-in custom blocks optimized for solid models and lattices. These can replace the **Solid Domain** block. * A **Solid Domain** block can auto convert (called autocast) to an **Simulation Model** when it is used in an input that requires an **Simulation Model**. This is useful for single component setups. ## Example File Download Example: [Solid Domain](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEModel.ntop) ![FE Model](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEModel.png) *** ## FE Mesh, Attributes Create a Solid FE Domain by assigning Solid Attributes to an FE Mesh and checking if all the elements of the FE Mesh have corresponding attributes assigned to them. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh. | | Attributes | [Solid Attribute List](../../../../block-documentation/types/solid-attribute) | The list of element attributes. | ### Outputs | Type | | - | | [FE Domain](../../../../block-documentation/types/fe-domain) | *** ## Implicit Body, Attributes Creates a Solid Domain by assigning Solid Attributes to an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body. | | Attributes | [Solid Attribute List](../../../../block-documentation/types/solid-attribute) | The list of Solid Attributes. | ### Outputs | Type | | - | | [Virtual Domain](../../../../block-documentation/types/virtual-domain) | # Spring Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/spring Creates a spring element between two FE Points. The spring force is calculated using the following formula: F=K\*(u2-u1), where K is a stiffness tensor constructed from the stiffness inputs Kx, Ky, Kz, Kxx, Kyy, and Kzz, and vector u represents the displacement at a point, which includes both translational and rotational components. ### Inputs | Name | Type | Description | | - | - | - | | Point 1 | [FE Point](../../../../block-documentation/types/fe-point) | Location of FE Point. | | Point 2 | [FE Point](../../../../block-documentation/types/fe-point) | Location of FE Point. | | Ground point 2 | [Bool](../../../../block-documentation/types/bool) | Option to ground point 2. Will apply a displacement restraint in all degrees of freedom to the point. | | Kx | [Scalar](../../../../block-documentation/types/scalar) | Stiffness value in x direction. | | Ky | [Scalar](../../../../block-documentation/types/scalar) | Stiffness value in y direction. | | Kz | [Scalar](../../../../block-documentation/types/scalar) | Stiffness value in z direction. | | Kxx | [Scalar](../../../../block-documentation/types/scalar) | Stiffness value rotating around the x axis. | | Kyy | [Scalar](../../../../block-documentation/types/scalar) | Stiffness value rotating around the y axis. | | Kzz | [Scalar](../../../../block-documentation/types/scalar) | Stiffness value rotating around the z axis. | | Frame | [Frame](../../../../block-documentation/types/frame) | The reference frame for the components of the spring coefficients. If a frame is not specified, the components are in the global coordinate system. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | # Structural Contact Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/structural-contact > **[Boundary, Boundary, Scalar, Contact Type Enum, Scalar Field, 1.1.0](#boundary-boundary-scalar-contact-type-enum-scalar-field-110)** > **[Boundary, Boundary, Scalar Field, Scalar](#boundary-boundary-scalar-field-scalar)** > **[CAD Face, CAD Face, Scalar, Contact Type Enum, Scalar Field, 1.1.0](#cad-face-cad-face-scalar-contact-type-enum-scalar-field-110)** > **[CAD Face, CAD Face, Scalar Field, Scalar](#cad-face-cad-face-scalar-field-scalar)** *** ## About this Block **What it does:** The **Structural Contact** creates a bonded contact between two boundaries, allowing mechanical load transfer between the two domains. **Common uses:** * To allow elastic connection between two boundaries with user-defined stiffness. Enables connections such as welded/glued surfaces, elastic joints, etc. **Tips:** * Unlike a **Tie Constraint**, which is a rigid connection between boundary entities, bonded contact allows relative motion between the selected entities through an elastic connection * Bonded contact acts as a spring with contact stiffness attached between independent and dependent boundary entities. The contact resistance between two materials is often recommended to be the average of their Young's modulus. Another method of determining the contact stiffness is k = E \* A/d (where A is the contact area and d is the contact layer thickness). * If two domains are bonded, no sliding or separation between components is allowed. It is assumed that they are glued together. * If no nodes are selected on the default tolerance value, slightly increase the tolerance to increase the region. ## Example File Download Example: [Structural Bonded Contact](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Structural_Bonded_Contact.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/structural_bonded.png) *** ## Boundary, Boundary, Scalar, Contact Type Enum, Scalar Field, 1.1.0 Creates a bonded or no separation contact type between two Boundaries and allows mechanical loads to be transferred between two Domains. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [Boundary](../../../../block-documentation/types/boundary) | The independent boundary. | | Dependent | [Boundary](../../../../block-documentation/types/boundary) | The dependent boundary. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | | Type | Contact Type Enum | Type of contact. Bonded contact prohibits relative displacement in the normal and tangential direction. No Separation contact prohibits relative displacement in the normal direction and allows displacement in the tangential direction. | | Contact stiffness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Structural stiffness of the contact penalization. If not provided, the Contact Stiffness will be set equal to the average of the diagonal mean of the material coefficient matrix of the contacting surfaces. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | *** ## Boundary, Boundary, Scalar Field, Scalar Creates a bonded contact between two Boundaries which allows for mechanical load transference between the two Domains. A contact stiffness value of one half of the sum of the Young’s modulus for both materials is recommended for most applications. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [Boundary](../../../../block-documentation/types/boundary) | The independent Boundary. | | Dependent | [Boundary](../../../../block-documentation/types/boundary) | The dependent Boundary. | | Contact stiffness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Structural stiffness of the contact elements. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | *** ## CAD Face, CAD Face, Scalar, Contact Type Enum, Scalar Field, 1.1.0 Creates a bonded or no separation contact type between CAD Faces and allows mechanical loads to be transferred between two Domains. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face defining the independent boundary. | | Dependent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face defining the dependent boundary. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | | Type | Contact Type Enum | Type of contact. Bonded contact prohibits relative displacement in the normal and tangential direction. No Separation contact prohibits relative displacement in the normal direction and allows displacement in the tangential direction. | | Contact stiffness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Structural stiffness of the contact penalization. If not provided, the Contact Stiffness will be set equal to the average of the diagonal mean of the material coefficient matrix of the contacting surfaces. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | *** ## CAD Face, CAD Face, Scalar Field, Scalar Creates a bonded contact between CAD faces which allows for mechanical load transference between the two Domains. A contact stiffness value of one half of the sum of the Young’s modulus for both materials is recommended for most applications. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face defining the independent boundary. | | Dependent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face defining the dependent boundary. | | Contact stiffness | [Scalar Field](../../../../block-documentation/types/scalar-field) | Structural stiffness of the contact elements. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | # Thermal Bonded Contact Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/thermal-bonded-contact > **[Boundary, Boundary, Scalar Field, Scalar](#boundary-boundary-scalar-field-scalar)** > **[CAD Face, CAD Face, Scalar Field, Scalar](#cad-face-cad-face-scalar-field-scalar)** *** ## About this Block **What it does:** This block creates a bonded contact between two FE boundaries, allowing for heat flux between the two components. **Common uses:** * Domains of two regions do not necessarily share common nodes and element faces; it is necessary to "tie" these two regions together mathematically and couple them mechanically. **Tips:** * Contact resistance can be defined to account for thin membrane material at the boundary, such as thermal paste. * The thermal contact resistance between two materials is often calculated from experimental tests of contact conductance, and the values can be found in thermal conductivity tables. * If boundary entities can't be found within the defined tolerance, try refining the FE Mesh or increasing the tolerance to effectively capture the connection between the two boundaries ## Example File Download Example: [Thermal Contact](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/thermal_bonded_contact.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/Thermal_Bonded_Contact.png) *** ## Boundary, Boundary, Scalar Field, Scalar Creates a bonded contact between two boundaries which allows for heat flux between the two domains. A contact resistance can be defined to account for thin membrane material at the boundary such as thermal paste. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [Boundary](../../../../block-documentation/types/boundary) | The independent boundary. | | Dependent | [Boundary](../../../../block-documentation/types/boundary) | The dependent boundary. | | Resistance | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal resistance of the contact elements. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | *** ## CAD Face, CAD Face, Scalar Field, Scalar Creates a bonded contact between two CAD faces which allows for heat flux between the two domains. A contact resistance can be defined to account for thin membrane material at the boundary such as thermal paste. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face defining the independent boundary. | | Dependent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face defining the dependent boundary. | | Resistance | [Scalar Field](../../../../block-documentation/types/scalar-field) | Thermal resistance of the contact elements. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | # Tie Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/model/tie-constraint > **[Boundary, Boundary, Bool, Scalar](#boundary-boundary-bool-scalar)** > **[CAD Face, CAD Face, Bool, Scalar](#cad-face-cad-face-bool-scalar)** *** ## About this Block **What it does:** Connects two different Domains within the same **Simulation Model**. A boundary is chosen on each Domain and tied together with a tolerance. **Common uses:** * Connecting Domains in [**Simulation Model.**](/block-documentation/blocks/structures/model/simulation-model.html) **Tips:** * Two unique boundary selection blocks choose the regions to be tied together. Depending on the choice of independent boundary entities, the following formulations are used: * If faces are selected as independent boundary entities, each dependent node is tied with the closest face on the independent boundary. Shape function values of the face entity (at the dependent node location) are then used to generate tie constraint equations for the node-face pair. * If nodes are selected as independent boundary entities, each dependent node is tied with the closest independent node (within the given tolerance). * Tie constraints don't support edges as the independent boundary. * If the tolerance is too low to find any independent entities for at least one dependent node, an error will occur. You can fix this error by increasing the tolerance or editing the boundary. * The Rotation checkbox toggles the option to tie rotational degrees of freedom. ## Example File Download Example: [Tie Constraint](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEModel.ntop) ![FE Model](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/FEModel.png) *** ## Boundary, Boundary, Bool, Scalar Define a tie constraint between two boundary regions so that there is no relative motion between them for structural analysis and no temperature difference between them for thermal analysis. For each selected independent entity, the function looks for the dependent entity and checks if it lies within the radius distance of the independent entity. If no entities are found within the defined radius, the tie constraint will indicate an error. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [Boundary](../../../../block-documentation/types/boundary) | The independent boundary. | | Dependent | [Boundary](../../../../block-documentation/types/boundary) | The dependent boundary. | | Rotation | [Bool](../../../../block-documentation/types/bool) | Option to tie rotational degrees of freedom. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | *** ## CAD Face, CAD Face, Bool, Scalar Define a tie constraint between two boundary regions so that there is no relative motion between them. For each selected independent entity, the function looks for the dependent entity and checks if it lies within the radius distance of the independent entity. If no entities are found within the defined radius, the tie constraint will indicate an error. ### Inputs | Name | Type | Description | | - | - | - | | Independent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face on the independent boundary. | | Dependent | [CAD Face](../../../../block-documentation/types/cad-face) | The CAD face on the dependent boundary. | | Rotation | [Bool](../../../../block-documentation/types/bool) | Option to tie rotational degrees of freedom. | | Radius | [Scalar](../../../../block-documentation/types/scalar) | Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this tolerance will not be constrained to the independent boundary. | ### Outputs | Type | | - | | [Connector](../../../../block-documentation/types/connector) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/utilities > **[FE Region by Body](../../../block-documentation/blocks/structures/utilities/fe-region-by-body)** > **[FE Boundary by Body](../../../block-documentation/blocks/structures/utilities/fe-boundary-by-body)** > **[FE Boundary by Flood Fill](../../../block-documentation/blocks/structures/utilities/fe-boundary-by-flood-fill)** > **[Virtual Region by Body](../../../block-documentation/blocks/structures/utilities/virtual-region-by-body)** > **[Virtual Boundary by Body](../../../block-documentation/blocks/structures/utilities/virtual-boundary-by-body)** > **[Transform Material](../../../block-documentation/blocks/structures/utilities/transform-material)** # FE Boundary by Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/utilities/fe-boundary-by-body ## About this Block **What it does:** Selects the FE Mesh boundary entities whose center of mass lies within the tolerance value of the implicit body. **Commons uses:** * Choosing elements for Boundary Conditions. **Tips:** * This block selects elements that are present within the FE Mesh. These elements include nodes, edges, and faces. * **How to decide which Entity type to choose:** * Choosing your entity depends on the Boundary Condition you are using. Does it make a difference if you apply the Boundary Condition on a face/edge/node? For example, all the restraints (Point, Displacement, Temperature, Initial Temperature, Applied Temperature) evaluate their value at the nodes. However, the **Force** block acts differently. If you select nodes, it divides the applied force evenly among them. If you choose edges, it divides the force evenly among the total length of the edges, and if you select faces, it divides the force over the entire area of your selection. * For example, if you use nodes in the FE Boundary, regions with more nodes will generally see more force since, with this option, we are taking the force divided by the total number of nodes and applying that value to each node. Instead, if you use the Faces option, the force is divided by the total area, and this applies as a force per unit area to each element face which results in a more evenly spread force across the entire FE Boundary. * Some boundary conditions have preferred boundary element types, like **Heat Flux** and **Pressure** only allow face entities. ## Example File Download Example: [FE Boundary by Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/selections.ntop) ![FE Region by Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_boundary_body.png) *** Select boundary entities of the FE Mesh (faces/edges/nodes) that lie within a desired tolerance of an Implicit Body. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh. | | Entity | FE Boundary Enum | The type of mesh entity to select. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The implicit body to select with. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Option to select entities outside the implicit body instead of inside. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for checking at the implicit body's boundary. A positive value will effectively extend the region while a negative value will shrink it. | | Name | [Text](../../../../block-documentation/types/text) | Optional name for this set in the exported file. | ### Outputs | Type | | - | | [FE Boundary](../../../../block-documentation/types/fe-boundary) | # FE Boundary by Flood Fill Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/utilities/fe-boundary-by-flood-fill ## About this Block **What it does:** Selects surface entities on an FE Mesh. The entities available to be selected are nodes, faces, or edges. When a direction is defined, the block shoots a ray at the mesh and finds the intersection. The first intersecting entity (*entity*) becomes the basis for the flood fill. The flood fill compares the normal of *entity* with all the neighboring entities. If the entities are below the tolerance angle provided, it selects it. With no direction, it finds the closest entity to the origin, which becomes the *entity*. **Commons uses:** * Defining boundaries in a Boundary Condition block type. **Tips:** * **No Directional Input:** * **Angle:** Default * **Direction:** Undefined (Optional input) * Depending on the location of the origin point, the flood fill operation chooses the closest entity to the origin as the seed entity (*entity0*) on the surface when no direction is defined. ![FE Boundary by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/floodfill_no_direction.png) * **With Directional Input:** * **Angle:** Default * **Direction:** Defined * When you define the direction with a vector, the flood fill operation shoots a ray from the origin in that direction to choose the seed entity (*entity0*). * For example, if you choose the vector as (0,0,1), then the closest intersecting surface mesh entity in the positive Z-direction is chosen. * If the origin point doesn't intersect with an entity in that direction, you will receive an error that says, "No mesh entities were found." ![FE Boundary by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/floodfill_direction.png) * **Angle:** * The angle defines how many entities to select by comparing the normal of seed entity (*entity0*) with all neighboring entities. It chooses entities if they are below the tolerance angle. This is beneficial for selecting entities on curved surfaces. * When the angle is x degrees, the flood fill chooses all entities with an angle up to but not including x degrees between them and the normal of *entity0*. ![FE Boundary by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/floodfill_angle.png) * **How to decide which Entity type to choose:** * Choosing your entity depends on the Boundary Condition you are using. Does it make a difference if you apply the Boundary Condition on a face/edge/node? For example, all the restraints (Point, Displacement, Temperature, Initial Temperature, Applied Temperature) evaluate their value at the nodes. However, the **Force** block acts differently. If you select nodes, it divides the applied force evenly among them. If you choose edges, it divides the force evenly among the total length of the edges, and if you select faces, it divides the force over the entire area of your selection. * For example, if you use nodes in the FE Boundary, regions with more nodes will generally see more force since, with this option, we are taking the force divided by the total number of nodes and applying that value to each node. Instead, if you use the Faces option, the force is divided by the total area, and this applies as a force per unit area to each element face which results in a more evenly spread force across the entire FE Boundary. * Some boundary conditions have preferred boundary element types, like **Heat Flux** and **Pressure** only allow face entities. ## Example File Download Example: [FE Boundary by Flood Fill](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/selections.ntop) *** Select boundary entities of an FE Mesh (faces/edges/nodes) using a flood fill operation. The block chooses the closest mesh entities to the specified origin, and uses a flood fill operation to select all mesh entities that lie within a certain specified angle and direction of the originally selected entity. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite Element mesh. | | Entity | FE Boundary Enum | The type of mesh entity to select. | | Origin | [Point](../../../../block-documentation/types/point) | The origin of the direction for initial face selection. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | The feature angle for the flood fill operation. | | Direction | [Vector](../../../../block-documentation/types/vector) | The direction to intersect the mesh. If not provided then the origin point will be projected to the nearest face. | | Name | [Text](../../../../block-documentation/types/text) | Optional name for this set in the exported file. | ### Outputs | Type | | - | | [FE Boundary](../../../../block-documentation/types/fe-boundary) | # FE Region by Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/utilities/fe-region-by-body ## About this Block **What it does:** Selects the FE Mesh elements whose center of mass lies within the tolerance value of the implicit body. **Commons uses:** * Choosing areas for defining material and elemental properties. * Choosing elements for Boundary Conditions. **Tips:** * This block selects elements that are present within the FE Mesh. These elements include beams, shells, or cells (including interior cells). * **How to decide which Entity type to choose:** * Choosing your entity depends on the type of elements available in the mesh. * Cells can only be selected on an **FE Volume Mesh**. * Shells can only be selected on **FE Surface Mesh** and **FE Lattice Mesh** (only if the lattice contains faces). * Beams can only be selected on beam-based FE Lattice Meshes. ## Example File Download Example: [FE Region by Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/selections.ntop) ![FE Region by Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/fe_region_body.png) *** Select elements in an FE Mesh using an Implicit Body. Elements with their center of mass lying within a defined tolerance of the Implicit Body will be selected. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [FE Mesh](../../../../block-documentation/types/fe-mesh) | The finite element mesh. | | Entity | FE Interior Region Enum | The type of mesh entity to select. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The implicit body to select with. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Option to select entities outside the implicit body instead of inside. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for checking at the implicit body's Region. A positive value will effectively extend the region while a negative value will shrink it. | | Name | [Text](../../../../block-documentation/types/text) | Optional name for this set in the exported file. | ### Outputs | Type | | - | | [FE Region](../../../../block-documentation/types/fe-region) | # Transform Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/utilities/transform-material Transforms a material from basis Source to new basis Destination with tensor omega\_ij=dot(Destination\_i,Source\_j). ### Inputs | Name | Type | Description | | - | - | - | | Material | [Material](../../../../block-documentation/types/material) | The underlying material. | | Source x | [Vector Field](../../../../block-documentation/types/vector-field) | First component of source frame. | | Source y | [Vector Field](../../../../block-documentation/types/vector-field) | Second component of source frame. | | Source z | [Vector Field](../../../../block-documentation/types/vector-field) | Third component of source frame. | | Destination x | [Vector Field](../../../../block-documentation/types/vector-field) | First component of destination frame. | | Destination y | [Vector Field](../../../../block-documentation/types/vector-field) | Second component of destination frame. | | Destination z | [Vector Field](../../../../block-documentation/types/vector-field) | Third component of destination frame. | ### Outputs | Type | | - | | [Anisotropic Material](../../../../block-documentation/types/anisotropic-material) | # Virtual Boundary by Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/utilities/virtual-boundary-by-body > **[FE Boundary Enum, Implicit Body, Bool, Scalar](#fe-boundary-enum-implicit-body-bool-scalar)** > **[Implicit Body, Bool, Scalar, Virtual Domain, Text, 5.52.0](#implicit-body-bool-scalar-virtual-domain-text-5520)** *** ## FE Boundary Enum, Implicit Body, Bool, Scalar Identifies an Implicit Body to intersect with a Domain to select the boundary. The output is most often used to specify the location of Boundary Conditions. The Domain is determined at the time of analysis such that Boundary Conditions can be reused and applied to multiple Domains. ### Inputs | Name | Type | Description | | - | - | - | | Entity | FE Boundary Enum | The type of mesh entity to select. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body used to select the boundary. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Option to select entities outside the Implicit Body instead of inside. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for checking at the Implicit Body's boundary. A positive value will effectively extend the body, while a negative value will shrink it. | ### Outputs | Type | | - | | [Virtual Boundary](../../../../block-documentation/types/virtual-boundary) | *** ## Implicit Body, Bool, Scalar, Virtual Domain, Text, 5.52.0 Identifies an Implicit Body to intersect with a Domain to select the boundary. The output is most often used to specify the location of Boundary Conditions. The Domain is determined at the time of analysis such that Boundary Conditions can be reused and applied to multiple Domains. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body used to select the boundary. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Option to select entities outside the Implicit Body instead of inside. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for checking at the Implicit Body's boundary. A positive value will effectively extend the body, while a negative value will shrink it. | | Domain body | [Virtual Domain](../../../../block-documentation/types/virtual-domain) | Optional input to specify domain body. | | Name | [Text](../../../../block-documentation/types/text) | Optional name for this set in the exported file. | ### Outputs | Type | | - | | [Virtual Boundary](../../../../block-documentation/types/virtual-boundary) | # Virtual Region by Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/utilities/virtual-region-by-body > **[FE Interior Region Enum, Implicit Body, Bool, Scalar](#fe-interior-region-enum-implicit-body-bool-scalar)** > **[Implicit Body, Bool, Scalar, Virtual Domain, Text, 5.52.0](#implicit-body-bool-scalar-virtual-domain-text-5520)** *** ## FE Interior Region Enum, Implicit Body, Bool, Scalar Identifies an Implicit Body to intersect with a Domain to create a sub-region. The output is most often used to specify the location of Body Forces or Optimization Constraints. The Domain is determined at the time of analysis such that Body Forces can be reused and applied to multiple Domains. ### Inputs | Name | Type | Description | | - | - | - | | Entity | FE Interior Region Enum | The type of mesh entity to select. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body used to select the sub-region. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Option to select entities outside the Implicit Body instead of inside. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for checking at the Implicit Body's region. A positive value will effectively extend the body, while a negative value will shrink it. | ### Outputs | Type | | - | | [Virtual Region](../../../../block-documentation/types/virtual-region) | *** ## Implicit Body, Bool, Scalar, Virtual Domain, Text, 5.52.0 Identifies an Implicit Body to intersect with a Domain to create a sub-region. The output is most often used to specify the location of Body Forces or Optimization Constraints. The Domain is determined at the time of analysis such that Body Forces can be reused and applied to multiple Domains. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | The Implicit Body used to select the sub-region. | | Reverse | [Bool](../../../../block-documentation/types/bool) | Option to select entities outside the Implicit Body instead of inside. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The tolerance for checking at the Implicit Body's region. A positive value will effectively extend the body, while a negative value will shrink it. | | Domain | [Virtual Domain](../../../../block-documentation/types/virtual-domain) | Optional input to specify domain body. | | Name | [Text](../../../../block-documentation/types/text) | Optional name for this set in the exported file. | ### Outputs | Type | | - | | [Virtual Region](../../../../block-documentation/types/virtual-region) | # Utilities Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities ## Exchange > **[Import Implicit Body](../../block-documentation/blocks/utilities/exchange/import-implicit-body)** > **[Export Implicit Body](../../block-documentation/blocks/utilities/exchange/export-implicit-body)** > **[Import Part](../../block-documentation/blocks/utilities/exchange/import-part)** > **[Export Part](../../block-documentation/blocks/utilities/exchange/export-part)** > **[Import Lattice Graph](../../block-documentation/blocks/utilities/exchange/import-lattice-graph)** > **[Import Thick Lattice Graph](../../block-documentation/blocks/utilities/exchange/import-thick-lattice-graph)** > **[Export Lattice](../../block-documentation/blocks/utilities/exchange/export-lattice)** > **[Import Mesh](../../block-documentation/blocks/utilities/exchange/import-mesh)** > **[Export Mesh](../../block-documentation/blocks/utilities/exchange/export-mesh)** > **[Export 3MF](../../block-documentation/blocks/utilities/exchange/export-3mf)** > **[Import Voxel Grid](../../block-documentation/blocks/utilities/exchange/import-voxel-grid)** > **[Export Voxel Grid](../../block-documentation/blocks/utilities/exchange/export-voxel-grid)** > **[Export Text](../../block-documentation/blocks/utilities/exchange/export-text)** > **[Import Points](../../block-documentation/blocks/utilities/exchange/import-points)** > **[Export Point Map](../../block-documentation/blocks/utilities/exchange/export-point-map)** > **[Import Table](../../block-documentation/blocks/utilities/exchange/import-table)** > **[Export Table](../../block-documentation/blocks/utilities/exchange/export-table)** > **[Import Bitmap](../../block-documentation/blocks/utilities/exchange/import-bitmap)** ## Conversion > **[CAD Body from Quad Mesh](../../block-documentation/blocks/utilities/conversion/cad-body-from-quad-mesh)** > **[Implicit Body from Mesh](../../block-documentation/blocks/utilities/conversion/implicit-body-from-mesh)** > **[Implicit Body from Surface](../../block-documentation/blocks/utilities/conversion/implicit-body-from-surface)** > **[Implicit Body from Surface Boundary](../../block-documentation/blocks/utilities/conversion/implicit-body-from-surface-boundary)** > **[Mesh from CAD Body](../../block-documentation/blocks/utilities/conversion/mesh-from-cad-body)** > **[Mesh from Implicit Body](../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-body)** > **[Mesh from Implicit by AT](../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-at)** > **[Multi-Region Mesh from Implicit](../../block-documentation/blocks/utilities/conversion/multi-region-mesh-from-implicit)** > **[Mesh from Implicit by DC](../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-dc)** > **[Implicit Body from CAD Body](../../block-documentation/blocks/utilities/conversion/implicit-body-from-cad-body)** > **[UV Field from Surface](../../block-documentation/blocks/utilities/conversion/uv-field-from-surface)** > **[Voxel Grid from Mesh](../../block-documentation/blocks/utilities/conversion/voxel-grid-from-mesh)** > **[Mesh from Voxel Grid](../../block-documentation/blocks/utilities/conversion/mesh-from-voxel-grid)** > **[Voxel Grid from Implicit Body](../../block-documentation/blocks/utilities/conversion/voxel-grid-from-implicit-body)** > **[Implicit Body from Voxel Grid](../../block-documentation/blocks/utilities/conversion/implicit-body-from-voxel-grid)** > **[Text from Scalar](../../block-documentation/blocks/utilities/conversion/text-from-scalar)** > **[Scalar from Text](../../block-documentation/blocks/utilities/conversion/scalar-from-text)** > **[Simplified Body Representation](../../block-documentation/blocks/utilities/conversion/simplified-body-representation)** ## General > **[Concatenate Text](../../block-documentation/blocks/utilities/general/concatenate-text)** > **[Split Text](../../block-documentation/blocks/utilities/general/split-text)** > **[Tab](../../block-documentation/blocks/utilities/general/tab)** > **[Table from Columns](../../block-documentation/blocks/utilities/general/table-from-columns)** > **[Extract Column as Text](../../block-documentation/blocks/utilities/general/extract-column-as-text)** > **[Column from Text](../../block-documentation/blocks/utilities/general/column-from-text)** > **[Cartesian Product](../../block-documentation/blocks/utilities/general/cartesian-product)** > **[Dictionary](../../block-documentation/blocks/utilities/general/dictionary)** > **[Export JSON](../../block-documentation/blocks/utilities/general/export-json)** > **[JSON From Dictionary](../../block-documentation/blocks/utilities/general/json-from-dictionary)** > **[Map from Lists](../../block-documentation/blocks/utilities/general/map-from-lists)** > **[Evaluate Map](../../block-documentation/blocks/utilities/general/evaluate-map)** ## System > **[Await](../../block-documentation/blocks/utilities/system/await)** > **[Run Command](../../block-documentation/blocks/utilities/system/run-command)** > **[Get Environment Variable](../../block-documentation/blocks/utilities/system/get-environment-variable)** > **[Temporary Directory](../../block-documentation/blocks/utilities/system/temporary-directory)** > **[Remove Temporary Directory](../../block-documentation/blocks/utilities/system/remove-temporary-directory)** ## Transforms > **[Scale Object](../../block-documentation/blocks/utilities/transforms/scale-object)** > **[Rotate Object](../../block-documentation/blocks/utilities/transforms/rotate-object)** > **[Translate Object](../../block-documentation/blocks/utilities/transforms/translate-object)** > **[Transform Object](../../block-documentation/blocks/utilities/transforms/transform-object)** > **[Rotation Transform](../../block-documentation/blocks/utilities/transforms/rotation-transform)** > **[Translation Transform](../../block-documentation/blocks/utilities/transforms/translation-transform)** > **[Combine Transforms](../../block-documentation/blocks/utilities/transforms/combine-transforms)** > **[Orient Object](../../block-documentation/blocks/utilities/transforms/orient-object)** > **[Map Bitmap to Plane](../../block-documentation/blocks/utilities/transforms/map-bitmap-to-plane)** > **[Axis from Transform](../../block-documentation/blocks/utilities/transforms/axis-from-transform)** > **[Invert Transform](../../block-documentation/blocks/utilities/transforms/invert-transform)** # Conversion Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion > **[CAD Body from Quad Mesh](../../../block-documentation/blocks/utilities/conversion/cad-body-from-quad-mesh)** > **[Implicit Body from Mesh](../../../block-documentation/blocks/utilities/conversion/implicit-body-from-mesh)** > **[Implicit Body from Surface](../../../block-documentation/blocks/utilities/conversion/implicit-body-from-surface)** > **[Implicit Body from Surface Boundary](../../../block-documentation/blocks/utilities/conversion/implicit-body-from-surface-boundary)** > **[Mesh from CAD Body](../../../block-documentation/blocks/utilities/conversion/mesh-from-cad-body)** > **[Mesh from Implicit Body](../../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-body)** > **[Mesh from Implicit by AT](../../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-at)** > **[Multi-Region Mesh from Implicit](../../../block-documentation/blocks/utilities/conversion/multi-region-mesh-from-implicit)** > **[Mesh from Implicit by DC](../../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-dc)** > **[Implicit Body from CAD Body](../../../block-documentation/blocks/utilities/conversion/implicit-body-from-cad-body)** > **[UV Field from Surface](../../../block-documentation/blocks/utilities/conversion/uv-field-from-surface)** > **[Voxel Grid from Mesh](../../../block-documentation/blocks/utilities/conversion/voxel-grid-from-mesh)** > **[Mesh from Voxel Grid](../../../block-documentation/blocks/utilities/conversion/mesh-from-voxel-grid)** > **[Voxel Grid from Implicit Body](../../../block-documentation/blocks/utilities/conversion/voxel-grid-from-implicit-body)** > **[Implicit Body from Voxel Grid](../../../block-documentation/blocks/utilities/conversion/implicit-body-from-voxel-grid)** > **[Text from Scalar](../../../block-documentation/blocks/utilities/conversion/text-from-scalar)** > **[Scalar from Text](../../../block-documentation/blocks/utilities/conversion/scalar-from-text)** > **[Simplified Body Representation](../../../block-documentation/blocks/utilities/conversion/simplified-body-representation)** # CAD Body from Quad Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/cad-body-from-quad-mesh > **[Mesh, 1.1.0](#mesh-110)** > **[Mesh, 1.2.0](#mesh-120)** > **[Mesh, Integer](#mesh-integer)** *** ## About this Block **What it does:** The CAD Body from Mesh block converts a quad surface mesh into a CAD Body. This block is useful for exporting parts made in nTop back to other CAD software, as a Parasolid (X\_T,X\_B) or STEP file (.STEP), using the Export Part block. **Common uses:** * Converts quad mesh to a CAD Body **Tips:** * The input mesh must be a quad mesh, created by the Quadrangulate Mesh or Remesh Surface block with a Quad Shape input. * The CAD Body is defined by a boundary representation (BREP), which is the standard geometric representation for most CAD software. BREP bodies are defined by a connection of surface elements, such as faces, edges, and vertices that separate the inside and outside of the body. The CAD Body from Mesh block converts the quad mesh into a series of surfaces. * This article has information on quad mesh ([https://support.ntopology.com/hc/articles/7206137654931](https://support.ntopology.com/hc/articles/7206137654931)) * For an overview of lattice exportation: ([https://support.ntopology.com/hc/articles/360048784874](https://support.ntopology.com/hc/articles/360048784874)) *** ## Mesh, 1.1.0 Creates a CAD Body from a quad Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to convert to a CAD body. | ### Outputs | Type | | - | | [CAD Body](../../../../block-documentation/types/cad-body) | *** ## Mesh, 1.2.0 Creates a CAD Body from a quad Mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to convert to a CAD body. | ### Outputs | Type | | - | | [CAD Body](../../../../block-documentation/types/cad-body) | *** ## Mesh, Integer Create a CAD body from a quad mesh.This block will approximate the limit of a Catmull-Clark subdivision surface as a collection of bicubic B-spline patches. When a quad-dominant mesh is given as input, up to two levels of global Catmull-Clark refinement will be performed to create a quad mesh that can be represented by bicubic patches. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to convert to a CAD body. | | Refinement level | [Integer](../../../../block-documentation/types/integer) | The maximum level of adaptive refinement to allow \[0, 9]. Higher values improve the precision in regions where patches only approximate the limit of the Catmull-Clark surface. Such regions occur around the one ring of an extraordinary vertex and along edges that are tagged as semi-sharp. | ### Outputs | Type | | - | | [CAD Body](../../../../block-documentation/types/cad-body) | # Implicit Body from CAD Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/implicit-body-from-cad-body > **[CAD Body, Scalar](#cad-body-scalar)** > **[CAD Body, Scalar, 1.1.0](#cad-body-scalar-110)** > **[CAD Body, Scalar, 1.2.0](#cad-body-scalar-120)** *** ## About this Block **What it does:** "The Implicit Body from CAD Body block converts a CAD body, which is a type of CAD geometry, to an Implicit Body type. **Common uses:** * Converting a CAD Body into an Implicit Body **Tips:** * Tolerance input decides the distance of the Implicit Body from the surface of the CAD body. * This function can also be carried out by double clicking, then right clicking on a CAD part and choosing the option, "Convert CAD Body to Implicit Body." *** ## CAD Body, Scalar Create an Implicit Body from a CAD Body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to get Implicit body from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of conversion determined by the distance of resultant Implicit body to the surface of the CAD body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## CAD Body, Scalar, 1.1.0 Create an Implicit Body from a CAD Body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to get Implicit body from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of conversion determined by the distance of resultant Implicit body to the surface of the CAD body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## CAD Body, Scalar, 1.2.0 Create an Implicit Body from a CAD Body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to get Implicit body from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of conversion determined by the distance of resultant Implicit body to the surface of the CAD body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Implicit Body from Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/implicit-body-from-mesh ## About this Block **What it does:** This Implicit Body from Mesh block takes a mesh input and converts it into an Implicit Body. **Common uses:** * Convert a Mesh into Implicit Body **Tips:** * The resulting Implicit Body may have graphical errors if the geometry is thin. To fix this, use a Thicken Body block to thicken the Implicit Body. *** Convert a mesh to an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to convert. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Implicit Body from Surface Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/implicit-body-from-surface > **[CAD Body, Scalar, 5.24.0](#cad-body-scalar-5240)** > **[Mesh, 5.24.0](#mesh-5240)** *** ## CAD Body, Scalar, 5.24.0 Create an implicit body from a surface with the zero-surface extending tangentially at the boundary. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | Surface to create the implicit body from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of conversion determined by the distance of resultant Implicit body to the surface of the CAD body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Mesh, 5.24.0 Create an implicit body from a surface with the zero-surface extending tangentially at the boundary. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Surface to create the implicit body from. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Implicit Body from Surface Boundary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/implicit-body-from-surface-boundary > **[CAD Body, Scalar, 5.24.0](#cad-body-scalar-5240)** > **[Mesh, 5.24.0](#mesh-5240)** *** ## CAD Body, Scalar, 5.24.0 Create an Implicit Body with the zero-surface extending orthogonally at a surface boundary. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | Surface to create the implicit body from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of conversion determined by the distance of resultant Implicit body to the surface of the CAD body. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | *** ## Mesh, 5.24.0 Create an Implicit Body with the zero-surface extending orthogonally at a surface boundary. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Surface to create the implicit body from. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Implicit Body from Voxel Grid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/implicit-body-from-voxel-grid Generates an implicit body from a voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Voxel grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | The voxel grid to convert. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Mesh from CAD Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/mesh-from-cad-body ## About this Block **What it does:** The Mesh from CAD Body block takes in a CAD body and converts it into a surface mesh. **Common uses:** * Generate a Surface Mesh from CAD Body * Meshing **Tips:** * The tolerance is a scalar input that determines the maximum allowable distance from the mesh to the surface of the CAD body. * The Max edge length input is the maximum allowable length of each edge in the mesh. *** Create a surface Mesh from a CAD Body. ### Inputs | Name | Type | Description | | - | - | - | | Cad body | [CAD Body](../../../../block-documentation/types/cad-body) | CAD body to mesh. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of meshing determined by distance from mesh face to surface of CAD body. | | Max edge length | [Scalar](../../../../block-documentation/types/scalar) | Optional max edge length of any triangles in the mesh. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Mesh from Implicit Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/mesh-from-implicit-body > **[Implicit Body, Scalar, Scalar, Bool, Bool, 2.0.0](#implicit-body-scalar-scalar-bool-bool-200)** > **[Implicit Body, Scalar, Scalar, Bool, Bool, 2.1.0](#implicit-body-scalar-scalar-bool-bool-210)** > **[Implicit Body, Scalar, Scalar, Bool, Bool, 2.2.0](#implicit-body-scalar-scalar-bool-bool-220)** > **[Implicit Body, Scalar, Scalar, Bool, Bool, 2.3.0](#implicit-body-scalar-scalar-bool-bool-230)** > **[Implicit Body, Scalar, Scalar, Bool, Bool, 2.4.0](#implicit-body-scalar-scalar-bool-bool-240)** > **[Implicit Body, Scalar, Scalar, Bool, Bool, 2.5.0](#implicit-body-scalar-scalar-bool-bool-250)** > **[Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.0.0](#implicit-body-scalar-scalar-integer-implicit-body-bool-200)** > **[Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.1.0](#implicit-body-scalar-scalar-integer-implicit-body-bool-210)** > **[Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.2.0](#implicit-body-scalar-scalar-integer-implicit-body-bool-220)** > **[Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.3.0](#implicit-body-scalar-scalar-integer-implicit-body-bool-230)** > **[Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.4.0](#implicit-body-scalar-scalar-integer-implicit-body-bool-240)** > **[Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.5.0](#implicit-body-scalar-scalar-integer-implicit-body-bool-250)** *** ## About this Block V2.00 **What it does:** Turns an implicit body into a triangular mesh. **Common uses:** * Preparation for analysis * Exporting **Tips:** * **Tolerance:** Translates to the voxel size. The voxel size is given by half the input tolerance. As a rule of thumb the number of triangles in the unsimplified output mesh quadruples whenever the tolerance input is halved. Keep that in mind to avoid generating unreasonably large meshes. As long as you only use this input, the output mesh is guaranteed to be watertight and manifold. In most cases the output mesh will also be free of self-intersections. * **Min. feature size:** This input is very different from the min feature size of v1 and should not be confused. If you provide a feature size, the block performs a filtering step to remove any features or holes which are smaller than the provided input. Use this input if the output mesh captures small details which are not manufacturable. * Apart from the "Min. feature size" input, the block automatically removes meshing artifacts (where an artifact is a connected component which is smaller than 0.1% percent of the surface area of the largest connected component). This step is different from the filtering step in that this cleans up artifacts produced by the meshing step, while the filtering step works directly on the (voxelized) implicit surface. * **Sharpening option:** Enable this to reconstruct sharp features present in the implicit body. Typically, enabling the sharpening option improves the approximation quality of the mesh by a lot. Thus, in practice, it is often possible to decrease the tolerance input and enable sharpening to obtain a given target tolerance between the mesh and the implicit. * In most cases the output mesh should not have any defects (i.e. closed, no self-intersections, and manifold). However, in a rare occurrence, the resulting mesh may have self-intersections, be non-manifold, or have pockets (i.e., two triangles with an extremely small dihedral angle). Enabling this option will substantially increase the runtime of the block, typically it will take more than twice as long. * **Simplification option:** The old version provides an "adaptivity" input that can be used to obtain a mesh with fewer elements in areas of low curvature. In a similar spirit, the new version has a "simplify" option that produces a mesh with the least amount of triangles while still conforming to the input tolerance. Similar to the old version, the simplification process can introduce new mesh defects (self-intersections and overfolds). The Simplification option forcibly decimates and combines \~ 90% of the elements which can result in loss of geometry fidelity. Simplifying Mesh By Threshold will allow you to tune the decimation percentage. Enabling this option will substantially increase the runtime of the block. ![Simplification](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/mesh1.png) \> Left: V2.0.0 Mesh from Implicit Body with sharpening and simplification option enabled. Right: V1.0.0 Mesh from Implicit Body with adaptivity set to 0.5. * Overloads: The block has an overload which provides even more inputs. In particular it provides a "Sharpening Extent" input. This can be used to localize the sharpening to certain regions of the mesh. It also provides a "Sharpening iterations" parameter which can be used to run the sharpening algorithm multiple times to potentially increase the quality of the sharp feature reconstruction. * Note that while we expect that most users will be happy with the new **Mesh from Implicit Body** block, you can use the old block by opening the version drop down in the information panel. Select version 1.0.0 to obtain the old block. **Further tips on the Sharpening option:** When using the Sharpen feature option, we often don't need every single edge in our model to remain sharp. Generally, we are concerned with specific regions such as where we apply boundary conditions for analysis, have GD\&T requirements for machining, assembly, and various other applications. Therefore it is recommended to use the Overload to expose the Sharpen Extents option and the Sharpen Iterations. This option helps decrease the time spent meshing and reduces the overall element count. When generating the implicit body that encloses the region in which we want to keep edges sharp, we suggest that the implicit body be as localized as possible (i.e., enclose just the region you intend to keep sharp, rather than having an oversize implicit). When using either the Sharpen or Sharpen Extents options, the mesh near the edges defined to remain sharp can sometimes have very thin triangles. Image #1 below shows a 0.5mm thick walled TPMS with a thin green body used to enclose the edges, which remain sharp. Image #2 below (left) shows the overall mesh of the part, and (right) shows a zoomed-in section at one of the edges. Encircled in red are very thin triangular elements. These small elements can cause a few issues downstream. ![Sharpening](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/sharp1.png) \> Image #1: Body to mesh (grey) and implicit used (green) to enclose the edges where we want to preserve sharpness. ![Sharpening](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/sharp2.png) \> Image #2: Mesh from Implicit Body (with extents). Left: Full mesh. Right: Zoomed in on an edge, encircling thin elements. 1. **If you are satisfied with this mesh and want to export it (and are unaware of thin elements):** As this edge is not adequately defined, you might have issues with applying the boundary conditions when preparing for an analysis, final machining if the face/edge was critical to GD\&T, or tolerance/alignment issues when assembling the part. 2. **Issues in the Remesh Surface block:** When doing a final analysis or generating a mesh/slice stack for manufacturing, it's common to always use the [**Remesh Surface**](/block-documentation/blocks/structures/mesh/remesh-surface.html) block after **Mesh from Implicit Body**. (For rapid iterations, using real-time simulation, the **Mesh from Implicit Body** is generally sufficient and not worth waiting for **Remesh Surface** to complete). Image #3 below (right) shows the mesh after the **Remesh Surface** block. The thin elements from the **Mesh from Implicit Body** (i.e., a now assumed feature) are trying to resolve, and in doing so, many small elements are getting generated. If we zoom out on Image #3 (left), we can see that this has occurred in several locations, resulting in a larger mesh and file size. There are a few ways we can work on addressing this, none work 100%, but it will help quite a bit nonetheless. ![Sharpening](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/sharp3.png) \> Image #3: Result of Remesh Surface, without addressing thin mesh. Excess elements generated. 3. **Collapse Mesh Vertices:** The **Collapse Mesh Vertices** block helps eliminate some of the thin elements generated in the **Mesh from Implicit Body** block. Watching the GIF in Image #4 below, you can see that the slivers resolve in some instances. You have to manually adjust the Distance threshold input to find a value that works best (too small, and you won't capture the elements, too large, and you will unintentionally deform your part). * **Sharpen iterations:** We suggest using the Overload on the **Mesh from Implicit Bod**y to expose the number of iterations for sharpening. Increasing the number will take longer for the mesh to generate but will also do a better job of not creating as many thin elements, although they still exist. Without extensive testing, we recommend a suggested iteration value of 3. It is significantly better than 1 and marginally worse than 10 when comparing the total element count in this simple example: * Sharpen Iteration 1: 721K * Sharpen Iteration 3: 628K * Sharpen Iteration 10: 612K ![Sharpening](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/CollapseMeshVerticies_01.gif) \> Image #4: The above GIF shows how the Collapse Mesh Vertices block can help address some of the thin elements. 4. If it is required to have all edges preserved, it is strongly recommended that you use the Overload with an implicit body that captures the entire part to expose the Sharpen Iterations. * While neither method fully satisfies or completely resolves edge preservation, utilizing both should significantly help address the issues described above. You should note that the Collapse Mesh Vertices may result in self-intersecting triangles on significantly more complicated parts, causing a need for additional refinement. Download Example: [Mesh from Implicit Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/bike_seat.ntop) ![Mesh from Implicit Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/mesh_from.png) *** ## Implicit Body, Scalar, Scalar, Bool, Bool, 2.0.0 Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than Mesh from Implicit by DC, but can handle more complex geometry and produces cleaner meshes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges and vertices. If you choose this option, the block will take longer to compute. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Bool, Bool, 2.1.0 Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than Mesh from Implicit by DC, but can handle more complex geometry and produces cleaner meshes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges and vertices. If you choose this option, the block will take longer to compute. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Bool, Bool, 2.2.0 Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than Mesh from Implicit by DC, but can handle more complex geometry and produces cleaner meshes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges and vertices. If you choose this option, the block will take longer to compute. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Bool, Bool, 2.3.0 Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than Mesh from Implicit by DC, but can handle more complex geometry and produces cleaner meshes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges and vertices. If you choose this option, the block will take longer to compute. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Bool, Bool, 2.4.0 Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than Mesh from Implicit by DC, but can handle more complex geometry and produces cleaner meshes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges and vertices. If you choose this option, the block will take longer to compute. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Bool, Bool, 2.5.0 Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than Mesh from Implicit by DC, but can handle more complex geometry and produces cleaner meshes. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges and vertices. If you choose this option, the block will take longer to compute. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.0.0 Creates a Mesh from an Implicit Body. Increase the number of iterations to produce a sharper result. Limit sharpening to selected regions by using Sharpen Extents. Reduce the triangle count of the final result by checking the Simplify input ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen iterations | [Integer](../../../../block-documentation/types/integer) | Number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. We recommend values from 1 to 10. | | Sharpen extents | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional Implicit Body defining the extent of sharpening. Use this input to limit sharpening to a particular region of the Mesh. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.1.0 Creates a Mesh from an Implicit Body. Increase the number of iterations to produce a sharper result. Limit sharpening to selected regions by using Sharpen Extents. Reduce the triangle count of the final result by checking the Simplify input ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen iterations | [Integer](../../../../block-documentation/types/integer) | Number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. We recommend values from 1 to 10. | | Sharpen extents | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional Implicit Body defining the extent of sharpening. Use this input to limit sharpening to a particular region of the Mesh. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.2.0 Creates a Mesh from an Implicit Body. Increase the number of iterations to produce a sharper result. Limit sharpening to selected regions by using Sharpen Extents. Reduce the triangle count of the final result by checking the Simplify input ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen iterations | [Integer](../../../../block-documentation/types/integer) | Number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. We recommend values from 1 to 10. | | Sharpen extents | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional Implicit Body defining the extent of sharpening. Use this input to limit sharpening to a particular region of the Mesh. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.3.0 Creates a Mesh from an Implicit Body. Increase the number of iterations to produce a sharper result. Limit sharpening to selected regions by using Sharpen Extents. Reduce the triangle count of the final result by checking the Simplify input ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen iterations | [Integer](../../../../block-documentation/types/integer) | Number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. We recommend values from 1 to 10. | | Sharpen extents | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional Implicit Body defining the extent of sharpening. Use this input to limit sharpening to a particular region of the Mesh. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.4.0 Creates a Mesh from an Implicit Body. Increase the number of iterations to produce a sharper result. Limit sharpening to selected regions by using Sharpen Extents. Reduce the triangle count of the final result by checking the Simplify input ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen iterations | [Integer](../../../../block-documentation/types/integer) | Number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. We recommend values from 1 to 10. | | Sharpen extents | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional Implicit Body defining the extent of sharpening. Use this input to limit sharpening to a particular region of the Mesh. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Implicit Body, Scalar, Scalar, Integer, Implicit Body, Bool, 2.5.0 Creates a Mesh from an Implicit Body. Increase the number of iterations to produce a sharper result. Limit sharpening to selected regions by using Sharpen Extents. Reduce the triangle count of the final result by checking the Simplify input ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | The maximum allowable deviation of the Mesh from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | Option to specify the approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. When provided, features that are smaller than this input will be filtered out and not included in the final result. | | Sharpen iterations | [Integer](../../../../block-documentation/types/integer) | Number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. We recommend values from 1 to 10. | | Sharpen extents | [Implicit Body](../../../../block-documentation/types/implicit-body) | Optional Implicit Body defining the extent of sharpening. Use this input to limit sharpening to a particular region of the Mesh. | | Simplify | [Bool](../../../../block-documentation/types/bool) | Option to reduce the triangle count as much as possible without violating the given tolerance criteria. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Mesh from Implicit by AT Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-at Converts an Implicit Body to a Mesh using Adaptive Tessellation. This method may significantly reduce computational and memory overhead compared to traditional methods, especially when finer tolerances are required. It achieves this by creating fewer triangles in flatter or less complex regions, resulting in a lower overall triangle count. However, this optimization can lead to a less regular and lower quality mesh in certain areas unless remeshing is enabled. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable deviation of the tessellation from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Sharpen | [Bool](../../../../block-documentation/types/bool) | Option to preserve sharp edges, corners, as well as walls thinner than meshing tolerance. If you check this option, the block will take longer to compute. | | Remesh | [Bool](../../../../block-documentation/types/bool) | Remesh the resulting adapted tessellation for better triangle quality. Note there is a risk of producing self-intersections. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Mesh from Implicit by DC Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-dc Converts an Implicit Body to a Mesh using dual contouring. This version has lower computational overhead than Mesh from Implicit Body, however the result may contain self-intersections and non-manifold edges or vertices. Use Mesh from Implicit Body when a clean mesh is required and/or for the option to sharpen specific regions. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Min. feature size | [Scalar](../../../../block-documentation/types/scalar) | The minimum feature size to preserve during the conversion. Features that are smaller than this input may not be included in the final result. | | Adaptivity | [Scalar](../../../../block-documentation/types/scalar) | Factor to control how much the Mesh is decimated. Higher values will cause more decimation, yielding a lower mesh element count in flat regions. Enter 0 for no decimation. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Mesh from Voxel Grid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/mesh-from-voxel-grid Generates a surface mesh from a voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | Voxel grid to convert into a surface mesh. | | Adaptivity | [Scalar](../../../../block-documentation/types/scalar) | Factor between 0 and 1 to control the decimation of triangles in planar regions. A higher factor results in more triangles decimated. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Multi-Region Mesh from Implicit Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/multi-region-mesh-from-implicit Converts an Implicit Body to a Mesh using Adaptive Tessellation. This method may significantly reduce computational and memory overhead compared to traditional methods, especially when finer tolerances are required. It achieves this by creating fewer triangles in flatter or less complex regions, resulting in a lower overall triangle count. However, this optimization can lead to a less regular and lower quality mesh in certain areas unless remeshing is enabled. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert. | | Tolerance | [Scalar Field](../../../../block-documentation/types/scalar-field) | The maximum allowable deviation of the tessellation from the implicit geometry. As this value gets smaller, the resulting mesh will be more precise, but the block will take longer to compute. | | Remesh | [Bool](../../../../block-documentation/types/bool) | Remesh the resulting adapted tessellation for better triangle quality. Note there is a risk of producing self-intersections. | | Low face count | [Bool](../../../../block-documentation/types/bool) | This option reduces tessellation time and produces a lower triangle count along thin walls, small gaps, and high curvature ridges at the same tolerance, but may adversely affect tessellation quality. | | Mask | [Implicit Body](../../../../block-documentation/types/implicit-body) | Mask used to further divide the output into faces. | | Feature surfaces | [Implicit Body List](../../../../block-documentation/types/implicit-body) | Force the mesh to have feature edges. | | Max. edge length | [Scalar Field](../../../../block-documentation/types/scalar-field) | Specifies the largest edge size at each point on the tessellation. | | Remesh surf. proj. | [Bool](../../../../block-documentation/types/bool) | If remeshing is enabled, project vertices to implicit surface. Note: this risks self-intersections if the tolerance is too low. | | Remesh sag refine | [Scalar](../../../../block-documentation/types/scalar) | If remeshing is enabled, refines mesh density in high curvature regions and projects vertices to implicit surface to ensure edges are not sagging above or below the implicit surface within a given fraction of input tessellation tolerance. Note: setting this fraction too low where the tessellation tolerance is a poor representation of the implicit geometry risks creating self-intersections and poor quality elements. | | Remesh anisotropic | [Bool](../../../../block-documentation/types/bool) | If remeshing is enabled and Remesh Sag Refine is set less than 1.0, sag refinement produces an anisotropic mesh with triangles elongated along curvature. This reduces triangle count where there is high curvature along ridges while staying within sag tolerance. | | Remesh feature align | [Bool](../../../../block-documentation/types/bool) | If remeshing is enabled and feature surfaces are input, aligns remeshed elements to mesh feature edges. | | Component min. size | [Scalar](../../../../block-documentation/types/scalar) | If the output contains more than one disconnected components, setting this input will delete any disconnected component whose bounding box diagonal is smaller than the provided value. | | Merge faces | [Bool](../../../../block-documentation/types/bool) | If enabled, neighboring faces with the same name are merged together into a single face. | | Default name | [Text](../../../../block-documentation/types/text) | Name applied to any face that doesn't have a name of its own. | ### Outputs | Type | | - | | [Multi-Region Mesh](../../../../block-documentation/types/multi-region-mesh) | # Scalar from Text Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/scalar-from-text ## About this Block **What it does:** The **Scalar from Text** block converts a Text to a Scalar value. **Common uses:** * This block converts the text list output from the **Extract Column** block to a scalar list. **Tips:** * This block will process text lists into scalar lists. * Units will not be recognized and will cause conversion issues. * No punctuation other than periods or letters are allowed. * If using exponential notation, ensure no spaces exist before or after the letter `e`. * Positive and negative exponents are allowed. *** Convert Text to a Scalar value. Values that cannot be converted will be shown as NaN. ### Inputs | Name | Type | Description | | - | - | - | | Text | [Text](../../../../block-documentation/types/text) | Text to be converted to a scalar. Note that units are not recognized and no punctuation(other than periods) or letters are allowed. If using exponential notation ensure that there are no spaces before or after the letter e. Positive and negative exponents are accepted. | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | # Simplified Body Representation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/simplified-body-representation Creates a simplified representation of an Implicit Body as a boundary envelope with equivalent mass properties. Overall mass will always match. Center of gravity and moments of inertia can optionally match. ### Inputs | Name | Type | Description | | - | - | - | | Envelope | [CAD Body List](../../../../block-documentation/types/cad-body) | A CAD Body envelope representing the Body you wish to simplify. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Body to be simplified. | | Density | [Scalar](../../../../block-documentation/types/scalar) | Density of the material from which the Body will be manufactured. | | Match inertia | [Bool](../../../../block-documentation/types/bool) | Option to match center of gravity and moments of inertia. | | Uniform density | [Bool](../../../../block-documentation/types/bool) | Changes the method used to match mass properties to one compatible with CAD packages that do not support variable density parts. | SolidWorks users should check this option ensure correct center of gravity and moments of inertia. | ### Outputs | Type | | - | | [Part](../../../../block-documentation/types/part) | # Text from Scalar Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/text-from-scalar Convert a Scalar to Text using a specified reference consistently across unit systems. ### Inputs | Name | Type | Description | | - | - | - | | Value | [Scalar](../../../../block-documentation/types/scalar) | The value to convert to text. | | Reference | [Scalar](../../../../block-documentation/types/scalar) | The reference used to maintain a consistent output. Typically this is a value of 1, with the desired unit. For example, if looking to export in units of millimeters, then an input of 1mm would be appropriate. | | Precision | [Integer](../../../../block-documentation/types/integer) | The number of significant digits for formatting the output value as text. | ### Outputs | Type | | - | | [Text](../../../../block-documentation/types/text) | # UV Field from Surface Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/uv-field-from-surface > **[CAD Face, Scalar, 5.27.0](#cad-face-scalar-5270)** > **[CAD Face, Scalar, 5.31.0](#cad-face-scalar-5310)** *** ## CAD Face, Scalar, 5.27.0 Creates a closest-point UV parameterization field from a CAD face. The output range will be 0 to 1 from edge to edge in the U and V directions. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [CAD Face](../../../../block-documentation/types/cad-face) | Surface to create the implicit body from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of conversion determined by the distance of the resultant Implicit Body to the surface of the CAD Body. | ### Outputs | Type | | - | | [Vector Field](../../../../block-documentation/types/vector-field) | *** ## CAD Face, Scalar, 5.31.0 Creates a closest-point UV parameterization field from a CAD face. The output range will be 0 to 1 from edge to edge in the U and V directions. ### Inputs | Name | Type | Description | | - | - | - | | Surface | [CAD Face](../../../../block-documentation/types/cad-face) | Surface to create the implicit body from. | | Tolerance | [Scalar](../../../../block-documentation/types/scalar) | Tolerance of conversion determined by the distance of the resultant Implicit Body to the surface of the CAD Body. | ### Outputs | Type | | - | | [2D Vector Field](../../../../block-documentation/types/2d-vector-field) | # Voxel Grid from Implicit Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/voxel-grid-from-implicit-body Generates a voxel grid from an implicit body. ### Inputs | Name | Type | Description | | - | - | - | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to convert into a voxel grid. | | Voxel size | [Scalar](../../../../block-documentation/types/scalar) | Size of a voxel. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | # Voxel Grid from Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/conversion/voxel-grid-from-mesh > **[Mesh, Scalar](#mesh-scalar)** > **[Mesh, Scalar, 1.1.0](#mesh-scalar-110)** > **[Mesh, Scalar, 1.2.0](#mesh-scalar-120)** *** ## Mesh, Scalar Generates a voxel grid from a watertight surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to convert into a voxel grid. | | Voxel size | [Scalar](../../../../block-documentation/types/scalar) | Size of a voxel. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | *** ## Mesh, Scalar, 1.1.0 Generates a voxel grid from a watertight surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to convert into a voxel grid. | | Voxel size | [Scalar](../../../../block-documentation/types/scalar) | Size of a voxel. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | *** ## Mesh, Scalar, 1.2.0 Generates a voxel grid from a watertight surface mesh. ### Inputs | Name | Type | Description | | - | - | - | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Surface mesh to convert into a voxel grid. | | Voxel size | [Scalar](../../../../block-documentation/types/scalar) | Size of a voxel. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | # Exchange Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange > **[Import Implicit Body](../../../block-documentation/blocks/utilities/exchange/import-implicit-body)** > **[Export Implicit Body](../../../block-documentation/blocks/utilities/exchange/export-implicit-body)** > **[Import Part](../../../block-documentation/blocks/utilities/exchange/import-part)** > **[Export Part](../../../block-documentation/blocks/utilities/exchange/export-part)** > **[Import Lattice Graph](../../../block-documentation/blocks/utilities/exchange/import-lattice-graph)** > **[Import Thick Lattice Graph](../../../block-documentation/blocks/utilities/exchange/import-thick-lattice-graph)** > **[Export Lattice](../../../block-documentation/blocks/utilities/exchange/export-lattice)** > **[Import Mesh](../../../block-documentation/blocks/utilities/exchange/import-mesh)** > **[Export Mesh](../../../block-documentation/blocks/utilities/exchange/export-mesh)** > **[Export 3MF](../../../block-documentation/blocks/utilities/exchange/export-3mf)** > **[Import Voxel Grid](../../../block-documentation/blocks/utilities/exchange/import-voxel-grid)** > **[Export Voxel Grid](../../../block-documentation/blocks/utilities/exchange/export-voxel-grid)** > **[Export Text](../../../block-documentation/blocks/utilities/exchange/export-text)** > **[Import Points](../../../block-documentation/blocks/utilities/exchange/import-points)** > **[Export Point Map](../../../block-documentation/blocks/utilities/exchange/export-point-map)** > **[Import Table](../../../block-documentation/blocks/utilities/exchange/import-table)** > **[Export Table](../../../block-documentation/blocks/utilities/exchange/export-table)** > **[Import Bitmap](../../../block-documentation/blocks/utilities/exchange/import-bitmap)** # Export 3MF Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-3mf > **[Path, Mesh, Graph, Length Unit Enum](#path-mesh-graph-length-unit-enum)** > **[Path, Mesh, Thick Graph, Length Unit Enum](#path-mesh-thick-graph-length-unit-enum)** *** ## About this Block **What it does:** The 3MF Export block accepts mesh types, with the option to add a thickened lattice, and exports it to 3MF (3D Manufacturing Format). The format is similar to a container that holds all of the information together. **Common uses:** * Exporting 3MF files for use in alternative software or other instances of nTop. **Tips:** * Only beam-based lattices are supported for export * This block is especially useful when there is a complex lattice because it eliminates the need to mesh the lattice. * If you use a lattice without a thickness, then a 1mm thickness is automatically applied. * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) * How to export a 3MF file: ([https://support.ntopology.com/hc/articles/360054069993](https://support.ntopology.com/hc/articles/360054069993)) *** ## Path, Mesh, Graph, Length Unit Enum Exports a Mesh and Graph lattice into a single 3MF file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported 3MF file. | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to export. | | Lattice | [Graph](../../../../block-documentation/types/graph) | Corresponding Graph or Thick Graph to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Mesh File Data](../../../../block-documentation/types/mesh-file-data) | *** ## Path, Mesh, Thick Graph, Length Unit Enum Exports a Mesh and Graph lattice into a single 3MF file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported 3MF file. | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to export. | | Lattice | [Thick Graph](../../../../block-documentation/types/thick-graph) | Corresponding Graph or Thick Graph to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Mesh File Data](../../../../block-documentation/types/mesh-file-data) | # Export Implicit Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-implicit-body ## About this Block **What it does:** The **Export Implicit Body** block exports a \*.implicit file to a file path selected via file path text or dialog. **Common uses:** * Export an Implicit Body to use in other workflows or applications powered by nTop Core. * Share an Implicit Body designed in nTop, removing your IP-containing nTop notebooks. * Share the \*implicit file with implicit interop partners. You can learn more about implicit interop [here](https://www.ntop.com/software/capabilities/implicit-interop/). ## Example File Download Example: [Import and Export Implicit Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/import_implicit.ntop) ![Import and Export Implicit Body](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.0/import_implicit.png) *** Export an Implicit Body to a file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Body | [Implicit Body](../../../../block-documentation/types/implicit-body) | Implicit body to export. | ### Outputs | Type | | - | | [Implicit Body File](../../../../block-documentation/types/implicit-body-file) | # Export Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-lattice > **[Path, Graph, Length Unit Enum](#path-graph-length-unit-enum)** > **[Path, Graph, Length Unit Enum, 2.0.0](#path-graph-length-unit-enum-200)** > **[Path, Lattice, Length Unit Enum, 2.0.0](#path-lattice-length-unit-enum-200)** > **[Path, Thick Graph, Length Unit Enum](#path-thick-graph-length-unit-enum)** > **[Path, Thick Graph, Length Unit Enum, 2.0.0](#path-thick-graph-length-unit-enum-200)** *** ## About this Block **What it does:** The export lattice block exports lattice structures to other software. Export lattice allows exports to be in Lattice Graph Interchange Module (LTCX) and 3MF (3MF) format. **Common uses:** * Exporting lattices for use in alternative software or other instances of nTop. **Tips:** * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) * For an overview of lattice exportation: ([https://support.ntopology.com/hc/articles/360048784874](https://support.ntopology.com/hc/articles/360048784874)) * Be sure to specify the units to export the lattice successfully. *** ## Path, Graph, Length Unit Enum Export a Graph lattice object to an external location. Supported formats are .ltcx and .3mf. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Lattice File Data](../../../../block-documentation/types/lattice-file-data) | *** ## Path, Graph, Length Unit Enum, 2.0.0 Export a Graph lattice to an external location. Supported formats are .ltcx and .3mf. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Graph | [Graph](../../../../block-documentation/types/graph) | Graph to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Lattice File Data](../../../../block-documentation/types/lattice-file-data) | *** ## Path, Lattice, Length Unit Enum, 2.0.0 Export a Lattice object to an external location. Supported formats are .ltcx and .3mf. Only graph-based Lattice Bodies will be exported. The thickness in the exported 3mf file will be the value sampled at the end points of the lattice beams. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Lattice | [Lattice](../../../../block-documentation/types/lattice) | Lattice to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Lattice File Data](../../../../block-documentation/types/lattice-file-data) | *** ## Path, Thick Graph, Length Unit Enum Export a Graph lattice object to an external location. Supported formats are .ltcx and .3mf. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Graph | [Thick Graph](../../../../block-documentation/types/thick-graph) | Graph to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Lattice File Data](../../../../block-documentation/types/lattice-file-data) | *** ## Path, Thick Graph, Length Unit Enum, 2.0.0 Export a Thick Graph lattice object to an external location. Supported formats are .ltcx and .3mf. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported file. | | Thick graph | [Thick Graph](../../../../block-documentation/types/thick-graph) | Thick Graph to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Lattice File Data](../../../../block-documentation/types/lattice-file-data) | # Export Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-mesh ## About this Block **What it does:** The Export Mesh block saves a surface mesh to a specified file path as either an .OBJ, .STL, .PLY, or .3MF file. The length units are specified as an input. **Common uses:** * Exporting meshes for use in alternative software or other instances of nTop. **Tips:** * Easiest way to export an STL, OBJ, or PLY file. * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) * If you are having trouble exporting a complex mesh, consider using Refine Mesh, Simplify Mesh by Amount, or Simplify Mesh by Threshold blocks to reduce the file size. ([https://support.ntopology.com/hc/articles/360061372374](https://support.ntopology.com/hc/articles/360061372374)) *** Export mesh file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported mesh file. | | Mesh | [Mesh](../../../../block-documentation/types/mesh) | Mesh to export. | | Units | Length Unit Enum | Units of exported file. | ### Outputs | Type | | - | | [Mesh File Data](../../../../block-documentation/types/mesh-file-data) | # Export Part Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-part > **[Path, Curve (old), 2.0.0](#path-curve-old-200)** > **[Path, Curve, 5.20.0](#path-curve-5200)** > **[Path, Part](#path-part)** > **[Path, Curves, 2.0.0](#path-curves-200)** > **[Path, Curves, 5.20.0](#path-curves-5200)** > **[Path, Parts, 2.0.0](#path-parts-200)** > **[Path, Part](#path-part)** > **[Path, Part, 2.0.0](#path-part-200)** *** ## About this Block **What it does:** The Export Part block allows you to export one or more CAD Part, CAD Body, or Curve from nTopology. The files can be exported as a Parasolid (X\_T and X\_B) or STEP file. **Common uses:** * Exporting parts for use in alternative software. **Tips:** * When entering a CAD Body list into the Export part block, only the last item in the list exports as a body. * This block has an overload that allows you to export a Curve. * Parts can be exported as Parasolid (X\_T, X\_B), STEP, or IGES files. * For best methods of export: ([https://support.ntopology.com/hc/articles/7323484481555](https://support.ntopology.com/hc/articles/7323484481555)) * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** ## Path, Curve (old), 2.0.0 Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Curve | [Curve (old)](../../../../block-documentation/types/curve-old) | Curve to Export | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | *** ## Path, Curve, 5.20.0 Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Curve | [Curve](../../../../block-documentation/types/curve) | Curve to Export | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | *** ## Path, Part Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Part | [Curve (old) List](../../../../block-documentation/types/curve-old) | Part to export. | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | *** ## Path, Curves, 2.0.0 Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Curves | [Curve (old) List](../../../../block-documentation/types/curve-old) | Curves to Export | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | *** ## Path, Curves, 5.20.0 Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Curves | [Curve List](../../../../block-documentation/types/curve) | Curves to Export | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | *** ## Path, Parts, 2.0.0 Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Parts | [Part List](../../../../block-documentation/types/part) | Parts to Export | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | *** ## Path, Part Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Part | [Part](../../../../block-documentation/types/part) | Part to export. | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | *** ## Path, Part, 2.0.0 Export part file to an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported part file. | | Part | [Part](../../../../block-documentation/types/part) | Part to Export | ### Outputs | Type | | - | | [Part File Data](../../../../block-documentation/types/part-file-data) | # Export Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-point-map > **[Path, Scalar Point Map, Length Unit Enum](#path-scalar-point-map-length-unit-enum)** > **[Path, Vector Point Map, Length Unit Enum](#path-vector-point-map-length-unit-enum)** *** ## About this Block **What it does:** Export Point Map allows you to export a Scalar Point Map or Vector Point Map as a CSV file. The CSV file will consist of the "x, y, z" points followed by the values (either single scalar or vector components separated by commas). Selecting units ensures the appropriate scale when exporting the values. Exporting point maps is useful for saving simulation or sampled field data. **Common uses:** * The most common point map inputs include: Point Map, Topology Optimization Density Point Map, and Von Mises Stress Point Map. **Tips:** * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** ## Path, Scalar Point Map, Length Unit Enum Export a Point Map to a file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Point map | [Scalar Point Map](../../../../block-documentation/types/scalar-point-map) | The point map to export. | | Units | Length Unit Enum | The units of the points in the export file. | ### Outputs | Type | | - | | [Point Map File](../../../../block-documentation/types/point-map-file) | *** ## Path, Vector Point Map, Length Unit Enum Export a Point Map to a file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | The output file path. | | Point map | [Vector Point Map](../../../../block-documentation/types/vector-point-map) | The point map to export. | | Units | Length Unit Enum | The units of the points in the export file. | ### Outputs | Type | | - | | [Point Map File](../../../../block-documentation/types/point-map-file) | # Export Table Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-table ## About this Block **What it does:** Exports Table data to an external file. **Common uses:** * This block is used to export a Table to an external CSV file. *** Exports Table data to an external file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported Table file. | | Table | [Table](../../../../block-documentation/types/table) | Table to export. | ### Outputs | Type | | - | | [Table File Data](../../../../block-documentation/types/table-file-data) | # Export Text Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-text > **[Path, Text](#path-text)** > **[Path, Text](#path-text)** *** ## About this Block **What it does:** Exports text to a file. The text input can come from Concatenate Text, Text from Scalar, Validate, or Text Variable blocks. Files can be exported as either Text File (TXT) or Comma-Separated Value file (CSV). **Common uses:** * Exporting text files for use in alternative software. **Tips:** * Can export a list of text to a single file * Scalar results can be converted to text using Text from Scalar, and text blocks can be combined using Concatenate Text, allowing for comma-separated tables of data to be exported to a text file * List processing can be used to export multiple text objects to multiple files. Just be sure to specify different file paths for each text object (using a File Path List) so the files don’t get overwritten. * Can be used for the analysis of lattice beam angles * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** ## Path, Text Export list of text objects to a file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the text to. | | Text | [Text List](../../../../block-documentation/types/text) | The text list to write to a file. | ### Outputs | Type | | - | | [Text File](../../../../block-documentation/types/text-file) | *** ## Path, Text Export text to a file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the text to. | | Text | [Text](../../../../block-documentation/types/text) | Text to write to a file. | ### Outputs | Type | | - | | [Text File](../../../../block-documentation/types/text-file) | # Export Voxel Grid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/export-voxel-grid > **[Path, Voxel Grid, Length Unit Enum](#path-voxel-grid-length-unit-enum)** > **[Path, Voxel Grid, Length Unit Enum, 1.1.0](#path-voxel-grid-length-unit-enum-110)** *** ## About this Block **What it does:** The Export Voxel Grid block exports your voxel model as a VDB file. **Common uses:** * Exporting voxel grids for use in alternative software or other instances of nTop. **Tips:** * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) * The block contains a file path for the location of export, the grid to be exported, and the unit scale to store voxel data. *** ## Path, Voxel Grid, Length Unit Enum Export voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the VDB file to. | | Grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | Voxel grid to export. | | Units | Length Unit Enum | Unit scale to store voxel data. | ### Outputs | Type | | - | | [None](../../../../block-documentation/types/none) | *** ## Path, Voxel Grid, Length Unit Enum, 1.1.0 Export voxel grid. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Path to export the VDB file to. | | Grid | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | Voxel grid to export. | | Units | Length Unit Enum | Unit scale to store voxel data. | ### Outputs | Type | | - | | [None](../../../../block-documentation/types/none) | # Import Bitmap Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-bitmap Import Bitmap file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of bitmap file. | | Dot pitch | [Scalar](../../../../block-documentation/types/scalar) | The distance between the dots of a png. | ### Outputs | Type | | - | | [Bitmap](../../../../block-documentation/types/bitmap) | # Import Implicit Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-implicit-body ## About this Block **What it does:** The **Import Implicit Body** block imports a \*.implicit file from a designated path. **Common uses:** * Import an Implicit Body saved from any nTop workflow to use in your current workflow. * Validate/Inspect the file before sending it to an implicit interop partner. * Share an Implicit Body designed in nTop, removing your IP-containing nTop notebooks. **Tips:** * If you encounter an error when opening a \*.implicit file, open its original nTop file in nTop 5.0 and export a new \*.implicit file. * Ensure you are importing an implicit version that is compatible with your nTop version. * Implicit files exported from versions older than nTop 5.0 will not be importable in nTop 5.0 and later. * Implicit files exported from nTop 5.0 and later will not be importable by nTop versions older than nTop 5.0 * Implicit files exported from nTop 5.0 and later will not be importable by versions of nTop Plugin for EOSPRINT older than version 1.0.0. ## Example File Download Example: [Import and Export Implicit Body](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/import_implicit.ntop) ![Import and Export Implicit Body](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.0/import_implicit.png) *** Import Implicit Body file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Implicit Body file. | ### Outputs | Type | | - | | [Implicit Body](../../../../block-documentation/types/implicit-body) | # Import Lattice Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-lattice-graph > **[Path](#path)** > **[Path, 1.1.0](#path-110)** *** ## About this Block **What it does:** The Import Lattice block imports a lattice file in the Lattice Graph Interchange Module (.LTCX) and 3MF (.3MF) format from an external location. **Common uses:** * Custom Unit Cells **Tips:** * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** ## Path Import Lattice Graph file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Lattice Graph file. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | *** ## Path, 1.1.0 Import Lattice Graph file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Lattice Graph file. | ### Outputs | Type | | - | | [Graph](../../../../block-documentation/types/graph) | # Import Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-mesh > **[Path, Length Unit Enum](#path-length-unit-enum)** > **[Path, Length Unit Enum, 1.1.0](#path-length-unit-enum-110)** *** ## About this Block **What it does:** The **Import Mesh** block imports a mesh from a specified file. **Common uses:** * Importing a Mesh **Tips:** * It accepts the following mesh formats ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) * Imported meshes are assigned units for the location of the mesh vertices. The **Import Mesh** block can be automatically created by going to **File -> Import** then importing a mesh file. Also, dragging a mesh file from the File Explorer into nTop creates an **Import Mesh** block. * The wireframe checkbox in the display can be toggled to view the mesh without wireframe. *** ## Path, Length Unit Enum Import Mesh file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Mesh file. | | Units | Length Unit Enum | Units of imported file. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | *** ## Path, Length Unit Enum, 1.1.0 Import Mesh file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Mesh file. | | Units | Length Unit Enum | Units of imported file. | ### Outputs | Type | | - | | [Mesh](../../../../block-documentation/types/mesh) | # Import Part Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-part > **[Path, Bool, CAD Healing Enum, Bool](#path-bool-cad-healing-enum-bool)** > **[Path, Bool, CAD Healing Enum, Bool, 1.1.0](#path-bool-cad-healing-enum-bool-110)** > **[Path, Bool, CAD Healing Enum, Bool, 1.2.0](#path-bool-cad-healing-enum-bool-120)** > **[Path, Bool, CAD Healing Enum, Bool, 2.0.0](#path-bool-cad-healing-enum-bool-200)** > **[Path, Bool, CAD Healing Enum, Bool, 2.1.0](#path-bool-cad-healing-enum-bool-210)** *** ## About this Block **What it does:** The **Import Part** block allows you to import a CAD Part file by a designated path. The file types that can be imported are Parasolid (X\_T, X\_B), STEP, CREO, Solidworks, NX, and CATIA files. Assemblies can be imported with a full view of components in the properties panel in the 2.0.0 version of the block. **Common uses:** Importing a CAD Part **Tips:** ![Import Part](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/import_part.png) CAD assemblies are no longer flattened with our latest version of the **Import Part** block. To preserve the assembly hierarchy on import, we had to implement a new type called Component that you will find under any Part objects. Component contains Instance, Placement, and Template. Instance is a Part type object representing the CAD component in the assembly structure. You will find all bodies and curves of each assembly component under this. Placement is a Transform object required for transforming the Template into the Instance. Template is a Part type object representing the original part level design. You can apply the design workflow to the Template and transform with Placement to locate the nTop design along with the rest of the components in the assembly. All the instances can have multiple CAD bodies that are accessible by opening the properties of an instance. Bodies and curves are now sorted by bounding box Xmin \< Ymin \< Zmin \< Xmax \< Ymax \< Zmax. (i.e. the geometry with the least Xmin is first). Faces aren't sorted based on the geometry. Rotate Y to Z: This input should be checked for parts coming from a Y-up coordinate system (SolidWorks and Creo) Heal CAD: This input heals the input CAD. This is not applicable to Parasolid files. You can right click Embed the **Import Part** block or change the Caching: field in the info panel to Cache imported data. This will embed the CAD data so that your **Import Part** file is not affected by the file directory. Check Model input checks for any self intersections and shows a warning if any and doesn't heal the CAD part. The file versions that are supported for import are here ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** ## Path, Bool, CAD Healing Enum, Bool Import part file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of part file. | | Rotate y to z | [Bool](../../../../block-documentation/types/bool) | For a part coming from CAD systems like SolidWorks and Creo that use a Y-up coordinate system, rotate it so Z becomes the up direction. | | Heal cad | CAD Healing Enum | Set level of automatic healing for CAD on import. This healing does not apply to x\_t and x\_b files | | Check model | [Bool](../../../../block-documentation/types/bool) | Check the imported model for defects such as self-intersecting or degenerate features. Turning this option off will import models faster, but not detect defects that could lead to downstream modeling issues. It is generally recommended to leave this option on. | ### Outputs | Type | | - | | [Part](../../../../block-documentation/types/part) | *** ## Path, Bool, CAD Healing Enum, Bool, 1.1.0 Import part file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of part file. | | Rotate y to z | [Bool](../../../../block-documentation/types/bool) | For a part coming from CAD systems like SolidWorks and Creo that use a Y-up coordinate system, rotate it so Z becomes the up direction. | | Heal cad | CAD Healing Enum | Set level of automatic healing for CAD on import. This healing does not apply to x\_t and x\_b files | | Check model | [Bool](../../../../block-documentation/types/bool) | Check the imported model for defects such as self-intersecting or degenerate features. Turning this option off will import models faster, but not detect defects that could lead to downstream modeling issues. It is generally recommended to leave this option on. | ### Outputs | Type | | - | | [Part](../../../../block-documentation/types/part) | *** ## Path, Bool, CAD Healing Enum, Bool, 1.2.0 Import part file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of part file. | | Rotate y to z | [Bool](../../../../block-documentation/types/bool) | For a part coming from CAD systems like SolidWorks and Creo that use a Y-up coordinate system, rotate it so Z becomes the up direction. | | Heal cad | CAD Healing Enum | Set level of automatic healing for CAD on import. This healing does not apply to x\_t and x\_b files | | Check model | [Bool](../../../../block-documentation/types/bool) | Check the imported model for defects such as self-intersecting or degenerate features. Turning this option off will import models faster, but not detect defects that could lead to downstream modeling issues. It is generally recommended to leave this option on. | ### Outputs | Type | | - | | [Part](../../../../block-documentation/types/part) | *** ## Path, Bool, CAD Healing Enum, Bool, 2.0.0 Import part file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of part file. | | Rotate y to z | [Bool](../../../../block-documentation/types/bool) | For a part coming from CAD systems like SolidWorks and Creo that use a Y-up coordinate system, rotate it so Z becomes the up direction. | | Heal cad | CAD Healing Enum | Set level of automatic healing for CAD on import. This healing does not apply to x\_t and x\_b files | | Check model | [Bool](../../../../block-documentation/types/bool) | Check the imported model for defects such as self-intersecting or degenerate features. Turning this option off will import models faster, but not detect defects that could lead to downstream modeling issues. It is generally recommended to leave this option on. | ### Outputs | Type | | - | | [Part](../../../../block-documentation/types/part) | *** ## Path, Bool, CAD Healing Enum, Bool, 2.1.0 Import part file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of part file. | | Rotate y to z | [Bool](../../../../block-documentation/types/bool) | For a part coming from CAD systems like SolidWorks and Creo that use a Y-up coordinate system, rotate it so Z becomes the up direction. | | Heal cad | CAD Healing Enum | Set level of automatic healing for CAD on import. This healing does not apply to x\_t and x\_b files | | Check model | [Bool](../../../../block-documentation/types/bool) | Check the imported model for defects such as self-intersecting or degenerate features. Turning this option off will import models faster, but not detect defects that could lead to downstream modeling issues. It is generally recommended to leave this option on. | ### Outputs | Type | | - | | [Part](../../../../block-documentation/types/part) | # Import Points Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-points ## About this Block **What it does:** The Import Points block imports a list of points from a CSV file. This file must be formatted as "x, y, z" without any headers. **Tips:** * The Units input will define the point units. * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** Import a list of points from a CSV file. Each row of the file should be formatted as "x, y, z" ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | Source File. | | Units | Length Unit Enum | The units of the points in the source data. | ### Outputs | Type | | - | | [Point List](../../../../block-documentation/types/point) | # Import Table Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-table ## About this Block **What it does:** The **Import Table** block lets you import tabular data by a designated path. The file type must be a CSV using UTF-8 or UTF-16 encoding with a list separator of a comma. Tables consist of rows and column-oriented data stored and extracted as Text type. **Common uses:** * This block imports any tabular data set with an arbitrary number of columns. * Examples: * This block can be used to store and extract non-linear material data. * This block can be used to store and extract design parameter sets. **Tips:** * The imported CSV must be a rectangular MxN table. * You can use the **Include headers:** input to choose whether to include headers. If checked,this input then makes the first row of the Table as column headers. * You can access the header names in the properties of the Table as a Text list. * The block will ignore duplicate and invalid (or empty) headers. * You can extract Table columns into usable lists using the **Extract Column** block. * You can use integers representing the column number or valid headers (if they exist) to identify which Column to extract. *** Imports a tabular data set as a Table. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Table file. | | Include headers | [Bool](../../../../block-documentation/types/bool) | Option to include the first row of the Table as column headers. | ### Outputs | Type | | - | | [Table](../../../../block-documentation/types/table) | # Import Thick Lattice Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-thick-lattice-graph ## About this Block **What it does:** The Import Thick Lattice block imports a lattice file in the Lattice Graph Interchange Module (LTCX) and 3MF (3MF) format from an external location. **Common uses:** * Custom Unit Cells **Tips:** * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** Import Thick Lattice Graph file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Thick Lattice Graph file. | ### Outputs | Type | | - | | [Thick Graph](../../../../block-documentation/types/thick-graph) | # Import Voxel Grid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/exchange/import-voxel-grid > **[Path, Length Unit Enum](#path-length-unit-enum)** > **[Path, Length Unit Enum, 1.1.0](#path-length-unit-enum-110)** *** ## About this Block **What it does:** The Import Voxel Grid block imports your voxel model as a VDB file. **Common uses:** * Create a Mesh from Voxel Grid * Create an Implicit Body from Voxel Grid **Tips:** * Choose the units to import with the "Units" field. * For information on all import/export file types: ([https://support.ntopology.com/hc/articles/360048249514](https://support.ntopology.com/hc/articles/360048249514)) *** ## Path, Length Unit Enum Import Voxel Grid file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Voxel Grid file. | | Units | Length Unit Enum | Units of imported file. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | *** ## Path, Length Unit Enum, 1.1.0 Import Voxel Grid file from an external location. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of Voxel Grid file. | | Units | Length Unit Enum | Units of imported file. | ### Outputs | Type | | - | | [Voxel Grid](../../../../block-documentation/types/voxel-grid) | # General Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general > **[Concatenate Text](../../../block-documentation/blocks/utilities/general/concatenate-text)** > **[Split Text](../../../block-documentation/blocks/utilities/general/split-text)** > **[Tab](../../../block-documentation/blocks/utilities/general/tab)** > **[Table from Columns](../../../block-documentation/blocks/utilities/general/table-from-columns)** > **[Extract Column as Text](../../../block-documentation/blocks/utilities/general/extract-column-as-text)** > **[Column from Text](../../../block-documentation/blocks/utilities/general/column-from-text)** > **[Cartesian Product](../../../block-documentation/blocks/utilities/general/cartesian-product)** > **[Dictionary](../../../block-documentation/blocks/utilities/general/dictionary)** > **[Export JSON](../../../block-documentation/blocks/utilities/general/export-json)** > **[JSON From Dictionary](../../../block-documentation/blocks/utilities/general/json-from-dictionary)** > **[Map from Lists](../../../block-documentation/blocks/utilities/general/map-from-lists)** > **[Evaluate Map](../../../block-documentation/blocks/utilities/general/evaluate-map)** # Cartesian Product Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/cartesian-product Creates a Table of all possible combinations from a set of Columns. ### Inputs | Name | Type | Description | | - | - | - | | Columns | [Column List](../../../../block-documentation/types/column) | List of Columns to generate combinations from. | ### Outputs | Type | | - | | [Table](../../../../block-documentation/types/table) | # Column from Text Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/column-from-text Creates a Column from a Text List. ### Inputs | Name | Type | Description | | - | - | - | | Rows | [Text List](../../../../block-documentation/types/text) | Text List to convert to a Column. | | Header | [Text](../../../../block-documentation/types/text) | Option to define a Header value. If undefined, the resulting Column will have an invalid Header. | ### Outputs | Type | | - | | [Column](../../../../block-documentation/types/column) | # Concatenate Text Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/concatenate-text > **[Text, Text](#text-text)** > **[Text, Text, Text](#text-text-text)** *** ## Text, Text Merge an ordered list of text into one text object. ### Inputs | Name | Type | Description | | - | - | - | | Text | [Text List](../../../../block-documentation/types/text) | Ordered list of text to concatenate. | | Delimiter | [Text](../../../../block-documentation/types/text) | Optional text to insert between each text object being concatenated. | ### Outputs | Type | | - | | [Text](../../../../block-documentation/types/text) | *** ## Text, Text, Text Merge an ordered list of text into one text object. ### Inputs | Name | Type | Description | | - | - | - | | Text 1 | [Text](../../../../block-documentation/types/text) | First text object to concatenate. | | Text 2 | [Text](../../../../block-documentation/types/text) | Second text object to concatenate. | | Delimiter | [Text](../../../../block-documentation/types/text) | Optional text to insert between each text object being concatenated. | ### Outputs | Type | | - | | [Text](../../../../block-documentation/types/text) | # Dictionary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/dictionary > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** > **[Keys, Values](#keys-values)** *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Integer List](../../../../block-documentation/types/integer) | The keys for returning the associated values. | | Values | [Integer List](../../../../block-documentation/types/integer) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Integer List](../../../../block-documentation/types/integer) | The keys for returning the associated values. | | Values | [Design Constraint List](../../../../block-documentation/types/design-constraint) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Integer List](../../../../block-documentation/types/integer) | The keys for returning the associated values. | | Values | [Scalar List](../../../../block-documentation/types/scalar) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Integer List](../../../../block-documentation/types/integer) | The keys for returning the associated values. | | Values | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Integer List](../../../../block-documentation/types/integer) | The keys for returning the associated values. | | Values | [Text List](../../../../block-documentation/types/text) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Integer List](../../../../block-documentation/types/integer) | The keys for returning the associated values. | | Values | [Vector Field List](../../../../block-documentation/types/vector-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar List](../../../../block-documentation/types/scalar) | The keys for returning the associated values. | | Values | [Integer List](../../../../block-documentation/types/integer) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar List](../../../../block-documentation/types/scalar) | The keys for returning the associated values. | | Values | [Scalar List](../../../../block-documentation/types/scalar) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar List](../../../../block-documentation/types/scalar) | The keys for returning the associated values. | | Values | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar List](../../../../block-documentation/types/scalar) | The keys for returning the associated values. | | Values | [Text List](../../../../block-documentation/types/text) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar List](../../../../block-documentation/types/scalar) | The keys for returning the associated values. | | Values | [Vector Field List](../../../../block-documentation/types/vector-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The keys for returning the associated values. | | Values | [Integer List](../../../../block-documentation/types/integer) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The keys for returning the associated values. | | Values | [Scalar List](../../../../block-documentation/types/scalar) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The keys for returning the associated values. | | Values | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The keys for returning the associated values. | | Values | [Text List](../../../../block-documentation/types/text) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The keys for returning the associated values. | | Values | [Vector Field List](../../../../block-documentation/types/vector-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Temperature List](../../../../block-documentation/types/temperature) | The keys for returning the associated values. | | Values | [Integer List](../../../../block-documentation/types/integer) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Temperature List](../../../../block-documentation/types/temperature) | The keys for returning the associated values. | | Values | [Scalar List](../../../../block-documentation/types/scalar) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Temperature List](../../../../block-documentation/types/temperature) | The keys for returning the associated values. | | Values | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Temperature List](../../../../block-documentation/types/temperature) | The keys for returning the associated values. | | Values | [Text List](../../../../block-documentation/types/text) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Temperature List](../../../../block-documentation/types/temperature) | The keys for returning the associated values. | | Values | [Vector Field List](../../../../block-documentation/types/vector-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Text List](../../../../block-documentation/types/text) | The keys for returning the associated values. | | Values | [Integer List](../../../../block-documentation/types/integer) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Text List](../../../../block-documentation/types/text) | The keys for returning the associated values. | | Values | [Scalar List](../../../../block-documentation/types/scalar) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Text List](../../../../block-documentation/types/text) | The keys for returning the associated values. | | Values | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Text List](../../../../block-documentation/types/text) | The keys for returning the associated values. | | Values | [Text List](../../../../block-documentation/types/text) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Text List](../../../../block-documentation/types/text) | The keys for returning the associated values. | | Values | [Vector Field List](../../../../block-documentation/types/vector-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Vector Field List](../../../../block-documentation/types/vector-field) | The keys for returning the associated values. | | Values | [Integer List](../../../../block-documentation/types/integer) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Vector Field List](../../../../block-documentation/types/vector-field) | The keys for returning the associated values. | | Values | [Scalar List](../../../../block-documentation/types/scalar) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Vector Field List](../../../../block-documentation/types/vector-field) | The keys for returning the associated values. | | Values | [Scalar Field List](../../../../block-documentation/types/scalar-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Vector Field List](../../../../block-documentation/types/vector-field) | The keys for returning the associated values. | | Values | [Text List](../../../../block-documentation/types/text) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | *** ## Keys, Values Creates a Dictionary from a set of keys and corresponding key values ### Inputs | Name | Type | Description | | - | - | - | | Keys | [Vector Field List](../../../../block-documentation/types/vector-field) | The keys for returning the associated values. | | Values | [Vector Field List](../../../../block-documentation/types/vector-field) | The associated values per key. | ### Outputs | Type | | - | | [Dictionary](../../../../block-documentation/types/dictionary) | # Evaluate Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/evaluate-map > **[Map (1d,1d), Scalar](#map-1d1d-scalar)** > **[Map (1d,1d), Scalar Field](#map-1d1d-scalar-field)** > **[Map (2d,1d), Scalar, Scalar](#map-2d1d-scalar-scalar)** > **[Map (2d,1d), Scalar Field, Scalar Field](#map-2d1d-scalar-field-scalar-field)** > **[Map (3d,1d), Scalar, Scalar, Scalar](#map-3d1d-scalar-scalar-scalar)** > **[Map (3d,1d), Scalar Field, Scalar Field, Scalar Field](#map-3d1d-scalar-field-scalar-field-scalar-field)** *** ## Map (1d,1d), Scalar Evaluate a Map \<1d,1d>. ### Inputs | Name | Type | Description | | - | - | - | | Map object | [Map (1d,1d)](../../../../block-documentation/types/map-1d,1d) | Map to be evaluated. | | Input variable 1 | [Scalar](../../../../block-documentation/types/scalar) | Input Variable | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Map (1d,1d), Scalar Field Evaluate a Map \<1d,1d>. ### Inputs | Name | Type | Description | | - | - | - | | Map object | [Map (1d,1d)](../../../../block-documentation/types/map-1d,1d) | Map to be evaluated. | | Input variable 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input Variable | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Map (2d,1d), Scalar, Scalar Evaluate a Map \<2d,1d>. ### Inputs | Name | Type | Description | | - | - | - | | Map object | [Map (2d,1d)](../../../../block-documentation/types/map-2d,1d) | Map to be evaluated. | | Input variable 1 | [Scalar](../../../../block-documentation/types/scalar) | Input Variable | | Input variable 2 | [Scalar](../../../../block-documentation/types/scalar) | Input Variable | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Map (2d,1d), Scalar Field, Scalar Field Evaluate a Map \<2d,1d>. ### Inputs | Name | Type | Description | | - | - | - | | Map object | [Map (2d,1d)](../../../../block-documentation/types/map-2d,1d) | Map to be evaluated. | | Input variable 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input Variable | | Input variable 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input Variable | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | *** ## Map (3d,1d), Scalar, Scalar, Scalar Evaluate a Map \<3d,1d>. ### Inputs | Name | Type | Description | | - | - | - | | Map object | [Map (3d,1d)](../../../../block-documentation/types/map-3d,1d) | Map to be evaluated. | | Input variable 1 | [Scalar](../../../../block-documentation/types/scalar) | Input Variable | | Input variable 2 | [Scalar](../../../../block-documentation/types/scalar) | Input Variable | | Input variable 3 | [Scalar](../../../../block-documentation/types/scalar) | Input Variable | ### Outputs | Type | | - | | [Scalar](../../../../block-documentation/types/scalar) | *** ## Map (3d,1d), Scalar Field, Scalar Field, Scalar Field Evaluate a Map \<3d,1d>. ### Inputs | Name | Type | Description | | - | - | - | | Map object | [Map (3d,1d)](../../../../block-documentation/types/map-3d,1d) | Map to be evaluated. | | Input variable 1 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input Variable | | Input variable 2 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input Variable | | Input variable 3 | [Scalar Field](../../../../block-documentation/types/scalar-field) | Input Variable | ### Outputs | Type | | - | | [Scalar Field](../../../../block-documentation/types/scalar-field) | # Export JSON Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/export-json Export a JSON file. ### Inputs | Name | Type | Description | | - | - | - | | Path | [Path](../../../../block-documentation/types/path) | System path of exported JSON file. | | Json | [JSON](../../../../block-documentation/types/json) | JSON to export. | ### Outputs | Type | | - | | [JSON File Data](../../../../block-documentation/types/json-file-data) | # Extract Column as Text Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/extract-column-as-text > **[Table, Integer](#table-integer)** > **[Table, Text](#table-text)** *** ## About this Block **What it does:** The **Extract Column** block extracts a single column of data from a Table as a Text list. **Common uses:** * This block can be used to extract a column from a Table type as a Text list by providing the column header name as text to the **Column:** input. **Tips:** * This block will extract the Table column as a Text list. The **Scalar from Text** block can then be used to convert the extracted text list into a scalar list. *** ## Table, Integer Extracts a single column of data from a Table as a Text list. ### Inputs | Name | Type | Description | | - | - | - | | Table | [Table](../../../../block-documentation/types/table) | Table to get data from. | | Index | [Integer](../../../../block-documentation/types/integer) | Index of column to extract. | ### Outputs | Type | | - | | [Text List](../../../../block-documentation/types/text) | *** ## Table, Text Extracts a single column of data from a Table as a Text list. ### Inputs | Name | Type | Description | | - | - | - | | Table | [Table](../../../../block-documentation/types/table) | Table to get data from. | | Header | [Text](../../../../block-documentation/types/text) | Header name of column to extract. | ### Outputs | Type | | - | | [Text List](../../../../block-documentation/types/text) | # JSON From Dictionary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/json-from-dictionary > **[Dictionary, 5.30.0](#dictionary-5300)** > **[Dictionary](#dictionary)** *** ## Dictionary, 5.30.0 Converts a Dictionary\ into a JSON format. ### Inputs | Name | Type | Description | | - | - | - | | Dictionary | [Dictionary](../../../../block-documentation/types/dictionary) | Text-based Dictionary to convert into a JSON format. | ### Outputs | Type | | - | | [JSON](../../../../block-documentation/types/json) | *** ## Dictionary Converts a Dictionary\ into a JSON format. ### Inputs | Name | Type | Description | | - | - | - | | Dictionary | [Dictionary](../../../../block-documentation/types/dictionary) | Text-based Dictionary to convert into a JSON format. | ### Outputs | Type | | - | | [JSON](../../../../block-documentation/types/json) | # Map from Lists Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/map-from-lists > **[Input variable 1, Output variable 1, Interpolation Enum](#input-variable-1-output-variable-1-interpolation-enum)** > **[Input variable 1, Input variable 2, Output variable 1](#input-variable-1-input-variable-2-output-variable-1)** > **[Input variable 1, Input variable 2, Input variable 3, Output variable 1](#input-variable-1-input-variable-2-input-variable-3-output-variable-1)** *** ## Input variable 1, Output variable 1, Interpolation Enum Create a Map \<1d,1d> from a collection of points using linear or cubic interpolation within the convex hull of the point set and no extrapolation. ### Inputs | Name | Type | Description | | - | - | - | | Input variable 1 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of input variable 1. | | Output variable 1 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of output variable 1. | | Interpolation type | Interpolation Enum | Interpolation type. | ### Outputs | Type | | - | | [Map (1d,1d)](../../../../block-documentation/types/map-1d,1d) | *** ## Input variable 1, Input variable 2, Output variable 1 Create a Map \<2d,1d> from a collection of points using linear or cubic interpolation within the convex hull of the point set and no extrapolation. ### Inputs | Name | Type | Description | | - | - | - | | Input variable 1 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of input variable 1. | | Input variable 2 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of input variable 2. | | Output variable 1 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of output variable 1. | ### Outputs | Type | | - | | [Map (2d,1d)](../../../../block-documentation/types/map-2d,1d) | *** ## Input variable 1, Input variable 2, Input variable 3, Output variable 1 Create a Map \<3d,1d> from a collection of points using linear or cubic interpolation within the convex hull of the point set and no extrapolation. ### Inputs | Name | Type | Description | | - | - | - | | Input variable 1 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of input variable 1. | | Input variable 2 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of input variable 2. | | Input variable 3 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of input variable 3. | | Output variable 1 | [Scalar List](../../../../block-documentation/types/scalar) | Data points of output variable 1. | ### Outputs | Type | | - | | [Map (3d,1d)](../../../../block-documentation/types/map-3d,1d) | # Split Text Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/split-text Splits a single text object into a list of text objects based on a delimiting string, character, or string of delimiters. ### Inputs | Name | Type | Description | | - | - | - | | Text | [Text](../../../../block-documentation/types/text) | Text object to split. | | Delimiter | [Text](../../../../block-documentation/types/text) | The character or string used to split the text object. If no delimiter is provided, the input string will be split into its constituent characters. | | Split by each | [Bool](../../../../block-documentation/types/bool) | Option to split text around each character contained in Delimiter. | ### Outputs | Type | | - | | [Text List](../../../../block-documentation/types/text) | # Tab Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/tab Returns a single Tab character. ### Inputs | Name | Type | Description | | - | - | - | ### Outputs | Type | | - | | [Text](../../../../block-documentation/types/text) | # Table from Columns Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/general/table-from-columns Combines multiple Columns of data into a single Table. ### Inputs | Name | Type | Description | | - | - | - | | Columns | [Column List](../../../../block-documentation/types/column) | Columns to be combined. | ### Outputs | Type | | - | | [Table](../../../../block-documentation/types/table) | # System Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/system > **[Await](../../../block-documentation/blocks/utilities/system/await)** > **[Run Command](../../../block-documentation/blocks/utilities/system/run-command)** > **[Get Environment Variable](../../../block-documentation/blocks/utilities/system/get-environment-variable)** > **[Temporary Directory](../../../block-documentation/blocks/utilities/system/temporary-directory)** > **[Remove Temporary Directory](../../../block-documentation/blocks/utilities/system/remove-temporary-directory)** # Await Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/system/await ## About this Block **What it does:** The **Await** block is executed once the *Wait For* input is built and will produce the object in the *Return* input as the output. This way, the **Await** block runs blocks one after the other in a serial order. **Commons uses:** * The **Await** block combined with the [Run Command](/block-documentation/blocks/beta/utilities/run-command.html) block runs commands after input completion. **Tips:** * The [How to use Run Command block](https://support.ntop.com/hc/en-us/articles/23766024928787) support article has an example of using multiple Await blocks to execute an nTop to Fluent workflow in a serial order. ## Example File The image below shows an example of using the Await block to wait to complete the **Export Mesh** block before running the Run Command block with the Python script. ![Await](https://storage.googleapis.com/files-learn/static/ReleaseImages/4.18/Await.png) Download Example: [Await Example](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/run_command_await.ntop) *** The Await block will execute once the 'Wait For' input is built, and will produce the object in the 'Return' input as the output. This way the Await block can be used to force blocks to run one after the other in serial order. ### Inputs | Name | Type | Description | | - | - | - | | Wait for | [Any](../../../../block-documentation/types/any) | The data that is required to be available prior to executing the block. | | Return | [Any](../../../../block-documentation/types/any) | The value to be returned when the 'Wait For' input has executed. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | # Get Environment Variable Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/system/get-environment-variable Gets the value of an environment variable. ### Inputs | Name | Type | Description | | - | - | - | | Name | [Text](../../../../block-documentation/types/text) | The name of the environment variable. | | Required | [Bool](../../../../block-documentation/types/bool) | Raise an error if the specified environment variable is not set. If unchecked, an unset environment variable returns an empty Text object and raises a warning. | | Rerun | [List Interface](../../../../block-documentation/types/list-interface) | The block reruns when this input changes. To ensure the block reruns any time a notebook input changes, pass in a Group of all notebook inputs. | ### Outputs | Type | | - | | [Text](../../../../block-documentation/types/text) | # Remove Temporary Directory Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/system/remove-temporary-directory Delete a temporary directory from disk, including any contained files. ### Inputs | Name | Type | Description | | - | - | - | | Temporary directory | [Temporary Directory](../../../../block-documentation/types/temporary-directory) | The temporary directory to remove. | | Wait for | [Any](../../../../block-documentation/types/any) | The data that is required to be available prior to executing the block. | ### Outputs | Type | | - | | [Path](../../../../block-documentation/types/path) | # Run Command Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/system/run-command ## About this Block **What it does:** The **Run Command** block allows users to run any command-line command directly within nTop. This block enables the execution of diverse external processes, such as executing complex simulations, interfacing with external design tools, or integrating manufacturing processes. **Common uses:** * Connecting applications: Any command line executables of design, analysis, or manufacturing software and tools * Automation: Execute Command Line or PowerShell commands for automation. * Scripting: Execute commands in Python, Lua, or any other scripting language you choose. **Tips:** [Run Command Security Warning](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/RunCommand.png) * Permission Setting for Run Command blocks * nTop will prompt you with a Security Warning to trust Run Command blocks before allowing them to run because Run Commands could contain security hazards. You can select the preference of your permission setting from Settings > Data > Run Command (Beta). Learn more about the settings available [Run Command Permission Settings](/_user_interface/_settings/run_command.html). * Working Directory Input * The Working Directory input lets you set a relative directory dynamically associated with the process. * Note: The default Working Directory is not where your file is located. It is the directory of the parent process. This means the default directory depends on how nTop is opened; opening nTop from the standard installation will result in the directory "C:\Program Files\nTopology\nTopology". This will be different if you open or execute the nTop Notebook via PowerShell. Running an external process through the default nTop directory could lead to library collisions. * If you experience library collisions, please set a Working Directory manually. * The [Await](/block-documentation/blocks/utilities/general/await.html) block * The Await custom block lets you pause and wait for a block completion before running the **Run Command** Block. * In practical terms, utilizing the command input for the **Run Command** block ensures optimal functionality, allowing the **Run Command** block to patiently wait for the output from the Await block upon the **Export Mesh**'s completion. * An example of this is when the execution of the **Run Command** Block is based on the completion of an **Export Mesh** block. * The Await block contains two input variables of Any type to facilitate this synchronization. * The first input, *Await*, is for the block awaiting completion. The second input, *Return*, is the output once the Await is completed. ## Example File Download Example: [Run Command with Await](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/run_command_await.ntop) This [support article](https://support.ntop.com/hc/en-us/articles/23766024928787) has different examples of using the **Run Command** block. *** Run an external command, capturing the exit code, standard output, and standard error. ### Inputs | Name | Type | Description | | - | - | - | | Command | [Text](../../../../block-documentation/types/text) | Command to execute. | | Log output | [Bool](../../../../block-documentation/types/bool) | If checked, write standard output to the nTop Log Panel. | | Log error | [Bool](../../../../block-documentation/types/bool) | If checked, write standard error to the nTop Log Panel. | | Timeout | [Scalar](../../../../block-documentation/types/scalar) | Option to cancel execution if unfinished after a set time period. | | Working directory | [Path](../../../../block-documentation/types/path) | Option to set a working directory for external command. | ### Outputs | Type | | - | | [Command Output](../../../../block-documentation/types/command-output) | # Temporary Directory Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/system/temporary-directory Make a temporary directory on disk. The returned Temporary Directory type contains the path. It is the caller's responsibility to clean up this temporary directory with Remove Temporary Directory before the end of the nTop session. ### Inputs | Name | Type | Description | | - | - | - | | Rerun | [List Interface](../../../../block-documentation/types/list-interface) | A new Temporary Directory is generated when this input changes. To ensure the block reruns any time a notebook input changes, pass in a Group of all notebook inputs. | ### Outputs | Type | | - | | [Temporary Directory](../../../../block-documentation/types/temporary-directory) | # Transforms Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms > **[Scale Object](../../../block-documentation/blocks/utilities/transforms/scale-object)** > **[Rotate Object](../../../block-documentation/blocks/utilities/transforms/rotate-object)** > **[Translate Object](../../../block-documentation/blocks/utilities/transforms/translate-object)** > **[Transform Object](../../../block-documentation/blocks/utilities/transforms/transform-object)** > **[Rotation Transform](../../../block-documentation/blocks/utilities/transforms/rotation-transform)** > **[Translation Transform](../../../block-documentation/blocks/utilities/transforms/translation-transform)** > **[Combine Transforms](../../../block-documentation/blocks/utilities/transforms/combine-transforms)** > **[Orient Object](../../../block-documentation/blocks/utilities/transforms/orient-object)** > **[Map Bitmap to Plane](../../../block-documentation/blocks/utilities/transforms/map-bitmap-to-plane)** > **[Axis from Transform](../../../block-documentation/blocks/utilities/transforms/axis-from-transform)** > **[Invert Transform](../../../block-documentation/blocks/utilities/transforms/invert-transform)** # Axis from Transform Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/axis-from-transform Extract the Axis of rotation from a Transformation. The Transformation must include a rotation. ### Inputs | Name | Type | Description | | - | - | - | | Transform | [Transformation](../../../../block-documentation/types/transformation) | Transformation to extract axis from. | ### Outputs | Type | | - | | [Axis](../../../../block-documentation/types/axis) | # Combine Transforms Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/combine-transforms Combine multiple Transform operations into a single Transform. ### Inputs | Name | Type | Description | | - | - | - | | Transforms | [Transformation List](../../../../block-documentation/types/transformation) | List of transforms to combine. | ### Outputs | Type | | - | | [Transformation](../../../../block-documentation/types/transformation) | # Invert Transform Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/invert-transform Get the inverse of a transformation. ### Inputs | Name | Type | Description | | - | - | - | | Transform | [Transformation](../../../../block-documentation/types/transformation) | Transformation to get the inverse of. | ### Outputs | Type | | - | | [Transformation](../../../../block-documentation/types/transformation) | # Map Bitmap to Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/map-bitmap-to-plane Place a bitmap on a plane. Bitmaps are mapped from their center to the center of the target plane. Bitmaps are displayed in the viewport. ### Inputs | Name | Type | Description | | - | - | - | | Bitmap | [Bitmap](../../../../block-documentation/types/bitmap) | Bitmap file to map. | | Plane | [Plane](../../../../block-documentation/types/plane) | Plane to map the bitmap to. | | Interpolation type | Interpolation Enum | Interpolation type used to convert a bitmap into a field. | | Length | [Scalar](../../../../block-documentation/types/scalar) | Optional input to resize the length of the bitmap. | | Width | [Scalar](../../../../block-documentation/types/scalar) | Optional input to resize the width of the bitmap. | ### Outputs | Type | | - | | [Planar Image](../../../../block-documentation/types/planar-image) | # Orient Object Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/orient-object > **[Transformable, Plane, Plane](#transformable-plane-plane)** > **[Transformable, Plane, Plane, 1.1.0](#transformable-plane-plane-110)** *** ## Transformable, Plane, Plane Orient geometry from a source Plane to a destination Plane. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to orient. | | Source | [Plane](../../../../block-documentation/types/plane) | Initial reference plane. | | Destination | [Plane](../../../../block-documentation/types/plane) | Plane to orient the object to. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | *** ## Transformable, Plane, Plane, 1.1.0 Orient geometry from a source Plane to a destination Plane. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to orient. | | Source | [Plane](../../../../block-documentation/types/plane) | Initial reference plane. | | Destination | [Plane](../../../../block-documentation/types/plane) | Plane to orient the object to. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | # Rotate Object Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/rotate-object > **[Transformable, Point, Vector, Scalar](#transformable-point-vector-scalar)** > **[Transformable, Point, Vector, Scalar, 1.1.0](#transformable-point-vector-scalar-110)** *** ## Transformable, Point, Vector, Scalar Rotate an object around an axis. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to rotate. | | Rotation center | [Point](../../../../block-documentation/types/point) | Starting point of axis. | | Axis | [Vector](../../../../block-documentation/types/vector) | Axis direction to rotate around. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Rotation angle. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | *** ## Transformable, Point, Vector, Scalar, 1.1.0 Rotate an object around an axis. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to rotate. | | Rotation center | [Point](../../../../block-documentation/types/point) | Starting point of axis. | | Axis | [Vector](../../../../block-documentation/types/vector) | Axis direction to rotate around. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Rotation angle. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | # Rotation Transform Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/rotation-transform ## About this Block The Rotation Transform block defines a transform that rotates an object about a specified axis. To rotate a body by its central axis, place the centroid property of its bounding box in the 'Center point' input. The transform can be used by using the **Transform Object** block. Alternatively, the **Rotate Object** block performs the same operation directly on an object. *** Create a transform to represent a rotation around an axis. ### Inputs | Name | Type | Description | | - | - | - | | Center point | [Point](../../../../block-documentation/types/point) | Starting point of axis. | | Axis | [Vector](../../../../block-documentation/types/vector) | Direction of axis to rotate around. | | Angle | [Scalar](../../../../block-documentation/types/scalar) | Rotation angle. | ### Outputs | Type | | - | | [Transformation](../../../../block-documentation/types/transformation) | # Scale Object Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/scale-object > **[Transformable, Scalar, Point](#transformable-scalar-point)** > **[Transformable, Scalar, Point, 1.1.0](#transformable-scalar-point-110)** > **[Transformable, Scalar, Point, 1.2.0](#transformable-scalar-point-120)** *** ## Transformable, Scalar, Point Scale object relative to a point. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to scale. | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor to scale the object by. | | Scale point | [Point](../../../../block-documentation/types/point) | Reference point to scale from. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | *** ## Transformable, Scalar, Point, 1.1.0 Scale object relative to a point. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to scale. | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor to scale the object by. | | Scale point | [Point](../../../../block-documentation/types/point) | Reference point to scale from. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | *** ## Transformable, Scalar, Point, 1.2.0 Scale object relative to a point. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to scale. | | Factor | [Scalar](../../../../block-documentation/types/scalar) | Factor to scale the object by. | | Scale point | [Point](../../../../block-documentation/types/point) | Reference point to scale from. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | # Transform Object Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/transform-object > **[Transformable, Transformation](#transformable-transformation)** > **[Transformable, Transformation, 1.1.0](#transformable-transformation-110)** *** ## Transformable, Transformation Apply multiple transforms to an object. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to transform. | | Transform | [Transformation](../../../../block-documentation/types/transformation) | Transform to apply. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | *** ## Transformable, Transformation, 1.1.0 Apply multiple transforms to an object. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to transform. | | Transform | [Transformation](../../../../block-documentation/types/transformation) | Transform to apply. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | # Translate Object Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/translate-object > **[Transformable, Vector](#transformable-vector)** > **[Transformable, Vector, Scalar, 5.52.0](#transformable-vector-scalar-5520)** *** ## About this Block **What it does:** The **Translate Object** block moves an object from its current position to a new location in 3D space based on a defined translation vector. This block is universal and supports all nTop object types, including CAD Bodies, Implicit Bodies, Meshes, Lattices, Points, and Curves. **Common uses:** * Manually moving parts or assemblies to specific coordinates for build preparation or simulation setup. * Centering a part at the world origin (0,0,0) before applying a Remap Constraint. * Patterning: Manually creating custom layouts of parts by translating copies of an original body. **Tips:** * Centering at Origin: To move a part exactly to the origin, use the negative value of the part's centroid. You can extract the Centroid property from the object's Bounding Box and multiply that vector by -1 to create the required translation vector. * Chaining Transforms: You can use the output of a Translate Object block as the input for further transformations, such as Rotate Object or Mirror Body, to reach a final desired orientation.Example FileDownload Example: Translate Object to Origin ## Example File Download Example: [Translate Object](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/translate_object.ntop) ![Example Screenshot](https://storage.googleapis.com/files-learn/static/ExtendedBlockDocs/translate_object.webp) *** ## Transformable, Vector Translate an object by a distance vector. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to translate. | | Vector | [Vector](../../../../block-documentation/types/vector) | Vector to translate by. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | *** ## Transformable, Vector, Scalar, 5.52.0 Translate an object by a distance and a direction vector. ### Inputs | Name | Type | Description | | - | - | - | | Object | [Transformable](../../../../block-documentation/types/transformable) | Object to translate. | | Direction | [Vector](../../../../block-documentation/types/vector) | Direction to translate by. This vector will be normalized. | | Distance | [Scalar](../../../../block-documentation/types/scalar) | Distance to translate by. | ### Outputs | Type | | - | | [Any](../../../../block-documentation/types/any) | # Translation Transform Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/utilities/transforms/translation-transform Create a transform to represent a translation by a distance vector. ### Inputs | Name | Type | Description | | - | - | - | | Vector | [Vector](../../../../block-documentation/types/vector) | Translation vector. | ### Outputs | Type | | - | | [Transformation](../../../../block-documentation/types/transformation) | # Enums Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums > **[Aggregate Enum](enums/aggregate-enum)** > **[Ascii or Binary Enum](enums/ascii-or-binary-enum)** > **[Blend Enum](enums/blend-enum)** > **[Blending Side Enum](enums/blending-side-enum)** > **[Boolean Enum](enums/boolean-enum)** > **[CAD Export Format Enum](enums/cad-export-format-enum)** > **[CAD Healing Enum](enums/cad-healing-enum)** > **[CFD Boundary Enum](enums/cfd-boundary-enum)** > **[Comparison Enum](enums/comparison-enum)** > **[Conformal Rule](enums/conformal-rule)** > **[Contact Type Enum](enums/contact-type-enum)** > **[Continuity Enum](enums/continuity-enum)** > **[Curvature Enum](enums/curvature-enum)** > **[Direction Component Enum](enums/direction-component-enum)** > **[Easing Direction Enum](enums/easing-direction-enum)** > **[Easing Enum](enums/easing-enum)** > **[Extend From Enum](enums/extend-from-enum)** > **[Extension Type Enum](enums/extension-type-enum)** > **[Extrapolation Enum](enums/extrapolation-enum)** > **[FE Boundary Enum](enums/fe-boundary-enum)** > **[FE Coupling Enum](enums/fe-coupling-enum)** > **[FE Interior Region Enum](enums/fe-interior-region-enum)** > **[File Compression Enum](enums/file-compression-enum)** > **[Filter Boundary Enum](enums/filter-boundary-enum)** > **[Geometric Order Enum](enums/geometric-order-enum)** > **[Grayscale Bits Enum](enums/grayscale-bits-enum)** > **[Implicit Lattice Rule](enums/implicit-lattice-rule)** > **[Inside or Outside Enum](enums/inside-or-outside-enum)** > **[Interpolation Enum](enums/interpolation-enum)** > **[Manufacturing Support Region Type Enum](enums/manufacturing-support-region-type-enum)** > **[Mesh Sharpen Enum](enums/mesh-sharpen-enum)** > **[Message Type Enum](enums/message-type-enum)** > **[Noise Distance Enum](enums/noise-distance-enum)** > **[Noise Return Enum](enums/noise-return-enum)** > **[Offset Enum](enums/offset-enum)** > **[Optimization Algorithm Enum](enums/optimization-algorithm-enum)** > **[Optimization Constraint Enum](enums/optimization-constraint-enum)** > **[Optimization Objective Enum](enums/optimization-objective-enum)** > **[Permutation Enum](enums/permutation-enum)** > **[Point Cloud Extrapolation Enum](enums/point-cloud-extrapolation-enum)** > **[Point Cloud Interpolation Enum (old)](enums/point-cloud-interpolation-enum-old)** > **[Point Cloud Interpolation Enum](enums/point-cloud-interpolation-enum)** > **[Print Type Enum](enums/print-type-enum)** > **[Selection Connectivity](enums/selection-connectivity)** > **[Selection Containment](enums/selection-containment)** > **[Selection Region](enums/selection-region)** > **[Shell Enum](enums/shell-enum)** > **[Surface Lattice Enum](enums/surface-lattice-enum)** > **[Surface Mesh Shape Enum](enums/surface-mesh-shape-enum)** > **[Surface Rule](enums/surface-rule)** > **[Tensor Component Enum](enums/tensor-component-enum)** > **[TPMS Enum](enums/tpms-enum)** > **[Turbulence Model Enum](enums/turbulence-model-enum)** > **[Convection Coefficient Unit Enum](enums/convection-coefficient-unit-enum)** > **[Density Unit Enum](enums/density-unit-enum)** > **[Energy Unit Enum](enums/energy-unit-enum)** > **[Force Unit Enum](enums/force-unit-enum)** > **[Frequency Unit Enum](enums/frequency-unit-enum)** > **[Heat Flux Unit Enum](enums/heat-flux-unit-enum)** > **[Length Unit Enum](enums/length-unit-enum)** > **[Mass Unit Enum](enums/mass-unit-enum)** > **[Power Unit Enum](enums/power-unit-enum)** > **[Pressure Unit Enum](enums/pressure-unit-enum)** > **[Specific Heat Unit Enum](enums/specific-heat-unit-enum)** > **[Temperature Unit Enum](enums/temperature-unit-enum)** > **[Thermal Conductivity Unit Enum](enums/thermal-conductivity-unit-enum)** > **[Time Unit Enum](enums/time-unit-enum)** > **[Volumetric Heat Generation Unit Enum](enums/volumetric-heat-generation-unit-enum)** > **[UV Position Enum](enums/uv-position-enum)** > **[Vector Component Enum](enums/vector-component-enum)** > **[Volume Lattice Enum](enums/volume-lattice-enum)** > **[Volume Lattice Fill Enum](enums/volume-lattice-fill-enum)** > **[Volume Mesh Shape Enum](enums/volume-mesh-shape-enum)** > **[Volumetric Rule](enums/volumetric-rule)** > **[Voxel Grid Filter Enum](enums/voxel-grid-filter-enum)** > **[Voxel Grid Type Enum](enums/voxel-grid-type-enum)** # Aggregate Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/aggregate-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Sum | | 1 | Min | | 2 | Max | | 3 | Variance | # Ascii or Binary Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/ascii-or-binary-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | ASCII | | 1 | Binary | # Blend Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/blend-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Rounded | | 1 | Chamfered | | 2 | Sharp | | 3 | Continuous | # Blending Side Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/blending-side-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Outside | | 1 | Inside | # Boolean Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/boolean-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Union | | 1 | Intersect | | 2 | Subtract | # CAD Export Format Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/cad-export-format-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | .implicit | | 1 | .x\_t | | 2 | .stl | # CAD Healing Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/cad-healing-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | None | | 1 | Basic | | 2 | Deep | # CFD Boundary Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/cfd-boundary-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | interior | | 1 | wall | | 2 | pressure-inlet, inlet-vent, intake-fan | | 3 | pressure-outlet, exhaust-fan, outlet-vent | | 4 | symmetry | | 5 | periodic-shadow | | 6 | press-far-field | | 7 | velocity-inlet | | 8 | periodic | | 9 | fan, porous-jump, radiator | | 10 | mass-flow-inlet | | 11 | interface | | 12 | parent (hanging node) | | 13 | outflow | | 14 | axis | # Comparison Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/comparison-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Equals | | 1 | Not Equal | | 2 | Less Than | | 3 | Less Than or Equal to | | 4 | Greater Than | | 5 | Greater Than or Equal to | # Conformal Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/conformal-rule ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Simple cubic | | 1 | Body centered cubic | | 2 | Face centered cubic | | 3 | Column | | 4 | Columns | | 5 | Diamond | | 6 | Fluorite | | 7 | Octet | | 8 | Truncated cube | | 9 | Truncated octahedron | | 10 | Kelvin cell | | 11 | IsoTruss | | 12 | Re-entrant | | 13 | Weaire-Phelan | | 14 | Triangular honeycomb | | 15 | Triangular honeycomb rotated | | 16 | Hexagonal honeycomb | | 17 | Re-entrant honeycomb | | 18 | Square honeycomb rotated | | 19 | Square honeycomb | | 20 | Face centered cubic foam | | 21 | Body centered cubic foam | | 22 | Simple cubic foam | | 23 | Quad central axis face surface | # Contact Type Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/contact-type-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Bonded | | 1 | No Separation | # Continuity Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/continuity-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Geometric (G0) | | 1 | Tangent (G1) | | 2 | Curvature (G2) | # Convection Coefficient Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/convection-coefficient-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | W/mm^2\*K | | 1 | W/cm^2\*K | | 2 | W/m^2\*K | | 3 | W/nmi^2\*K | | 4 | kW/mm^2\*K | | 5 | kW/cm^2\*K | | 6 | kW/m^2\*K | | 7 | kW/nmi^2\*K | | 8 | MW/mm^2\*K | | 9 | MW/cm^2\*K | | 10 | MW/m^2\*K | | 11 | MW/nmi^2\*K | | 12 | Btu/ms*in^2*dF | | 13 | Btu/ms*ft^2*dF | | 14 | Btu/s*in^2*dF | | 15 | Btu/s*ft^2*dF | | 16 | Btu/min*in^2*dF | | 17 | Btu/min*ft^2*dF | | 18 | Btu/hr*in^2*dF | | 19 | Btu/hr*ft^2*dF | # Curvature Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/curvature-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Min | | 1 | Max | | 2 | Mean | # Density Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/density-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | g/mm^3 | | 1 | g/cm^3 | | 2 | g/m^3 | | 3 | g/nmi^3 | | 4 | kg/mm^3 | | 5 | kg/cm^3 | | 6 | kg/m^3 | | 7 | kg/nmi^3 | | 8 | tonne/mm^3 | | 9 | tonne/cm^3 | | 10 | tonne/m^3 | | 11 | tonne/nmi^3 | | 12 | oz/in^3 | | 13 | oz/ft^3 | | 14 | lbm/in^3 | | 15 | lbm/ft^3 | | 16 | ton/in^3 | | 17 | ton/ft^3 | # Direction Component Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/direction-component-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | \|X\| | | 1 | \|Y\| | | 2 | \|Z\| | | 3 | \|YZ\| | | 4 | \|XZ\| | | 5 | \|XY\| | | 6 | \|XYZ\| | # Easing Direction Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/easing-direction-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Ease In | | 1 | Ease Out | | 2 | Ease In and Out | # Easing Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/easing-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Geometric (G0) | | 1 | Tangent (G1) | | 2 | Curvature (G2) | | 3 | Power | | 4 | Sinusoidal | | 5 | Circular | | 6 | Exponential | # Energy Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/energy-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | J | | 1 | N\*mm | | 2 | N\*cm | | 3 | N\*m | | 4 | N\*nmi | | 5 | kN\*mm | | 6 | kN\*cm | | 7 | kN\*m | | 8 | kN\*nmi | | 9 | Btu | | 10 | lbf\*in | | 11 | lbf\*ft | # Extend From Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/extend-from-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Start | | 1 | End | | 2 | Both | # Extension Type Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/extension-type-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Linear (G1) | | 1 | Curvature (G2) | | 2 | Natural (G-infinity) | # Extrapolation Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/extrapolation-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Linear | | 1 | Clamped | # FE Boundary Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/fe-boundary-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Nodes | | 1 | Edges | | 2 | Faces | # FE Coupling Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/fe-coupling-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Rigid | | 1 | Flexible | # FE Interior Region Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/fe-interior-region-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Beams | | 1 | Shells | | 2 | Cells | # File Compression Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/file-compression-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | None | | 1 | Fastest | | 2 | Balanced | | 3 | Smallest | # Filter Boundary Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/filter-boundary-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Dirichlet | | 1 | Neumann | | 2 | Neumann-Regular | # Force Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/force-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | N | | 1 | lbf | | 2 | kN | # Frequency Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/frequency-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Hz | | 1 | rad/ms | | 2 | rad/s | | 3 | rad/min | | 4 | rad/hr | | 5 | deg/ms | | 6 | deg/s | | 7 | deg/min | | 8 | deg/hr | # Geometric Order Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/geometric-order-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Linear | | 1 | Quadratic | # Grayscale Bits Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/grayscale-bits-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | 1 bit | | 1 | 8 bits | # Heat Flux Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/heat-flux-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | W/mm^2 | | 1 | W/cm^2 | | 2 | W/m^2 | | 3 | W/nmi^2 | | 4 | kW/mm^2 | | 5 | kW/cm^2 | | 6 | kW/m^2 | | 7 | kW/nmi^2 | | 8 | MW/mm^2 | | 9 | MW/cm^2 | | 10 | MW/m^2 | | 11 | MW/nmi^2 | | 12 | Btu/ms\*in^2 | | 13 | Btu/ms\*ft^2 | | 14 | Btu/s\*in^2 | | 15 | Btu/s\*ft^2 | | 16 | Btu/min\*in^2 | | 17 | Btu/min\*ft^2 | | 18 | Btu/hr\*in^2 | | 19 | Btu/hr\*ft^2 | # Implicit Lattice Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/implicit-lattice-rule ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Cube edge | | 1 | Cube vertex centroid face | | 2 | Cube central axis edge face | # Inside or Outside Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/inside-or-outside-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Inside | | 1 | Outside | # Interpolation Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/interpolation-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Linear | | 1 | Cubic | # Length Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/length-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | μm | | 1 | mm | | 2 | cm | | 3 | in | | 4 | ft | | 5 | m | | 6 | nmi | # Manufacturing Support Region Type Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/manufacturing-support-region-type-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | All Regions | | 1 | External Only | | 2 | Internal Only | # Mass Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/mass-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | g | | 1 | oz | | 2 | lbm | | 3 | kg | | 4 | ton | | 5 | tonne | # Mesh Sharpen Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/mesh-sharpen-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | None | | 1 | Curvature | # Message Type Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/message-type-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Warning | | 1 | Error | # Noise Distance Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/noise-distance-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Euclidean | | 1 | Manhattan | | 2 | Natural | # Noise Return Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/noise-return-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Cell Value | | 1 | Distance | | 2 | Distance2 | | 3 | Distance2 Add | | 4 | Distance2 Sub | | 5 | Distance2 Mul | | 6 | Distance2 Div | # Offset Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/offset-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | None | | 1 | Square | | 2 | Round | # Optimization Algorithm Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/optimization-algorithm-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Grid | | 1 | Global | | 2 | Local | | 3 | Smooth | # Optimization Constraint Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/optimization-constraint-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Less than | | 1 | Greater than | # Optimization Objective Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/optimization-objective-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Minimize | | 1 | Maximize | # Permutation Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/permutation-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | UVW | | 1 | UWV | | 2 | VUW | | 3 | VWU | | 4 | WUV | | 5 | WVU | # Point Cloud Extrapolation Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/point-cloud-extrapolation-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Nearest | | 1 | Linear | | 2 | Exponential | | 3 | None | # Point Cloud Interpolation Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/point-cloud-interpolation-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Barycentric | | 1 | Nearest | # Point Cloud Interpolation Enum (old) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/point-cloud-interpolation-enum-old ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Natural | | 1 | Linear | | 2 | Nearest | | 3 | Barycentric | # Power Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/power-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | W | | 1 | kW | | 2 | MW | | 3 | Btu/ms | | 4 | Btu/s | | 5 | Btu/min | | 6 | Btu/hr | | 7 | lbf\*in/ms | | 8 | lbf\*in/s | | 9 | lbf\*in/min | | 10 | lbf\*in/hr | | 11 | lbf\*ft/ms | | 12 | lbf\*ft/s | | 13 | lbf\*ft/min | | 14 | lbf\*ft/hr | # Pressure Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/pressure-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Pa | | 1 | kPa | | 2 | MPa | | 3 | GPa | | 4 | psi | | 5 | ksi | # Print Type Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/print-type-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Generic | | 1 | Renishaw | | 2 | EOS | # Selection Connectivity Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/selection-connectivity ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Any | | 1 | Floating | | 2 | Open | # Selection Containment Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/selection-containment ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Full | | 1 | Partial | # Selection Region Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/selection-region ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Inside | | 1 | Outside | | 2 | Boundary | # Shell Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/shell-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Inward | | 1 | Outward | | 2 | Center | # Specific Heat Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/specific-heat-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | J/g\*K | | 1 | J/kg\*K | | 2 | J/tonne\*K | | 3 | Btu/oz\*dF | | 4 | Btu/lbm\*dF | | 5 | Btu/ton\*dF | # Surface Lattice Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/surface-lattice-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Mesh Edges | | 1 | Vertex Centroid | | 2 | Dual | | 3 | Mesh Boundary | | 4 | Mesh Features | # Surface Mesh Shape Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/surface-mesh-shape-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Triangle | | 1 | Quad | | 2 | Quad-dominated | # Surface Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/surface-rule ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Surface edges | | 1 | Surface vertex centroid | | 2 | Surface dual | | 3 | Surface boundary | | 4 | Surface features | | 5 | Quad central axis face surface | | 6 | Tri prism surface | # Temperature Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/temperature-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | F | | 1 | C | | 2 | K | # Tensor Component Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/tensor-component-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | XX | | 1 | YY | | 2 | ZZ | | 3 | XZ | | 4 | YZ | | 5 | XY | # Thermal Conductivity Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/thermal-conductivity-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | W/mm\*K | | 1 | W/cm\*K | | 2 | W/m\*K | | 3 | W/nmi\*K | | 4 | kW/mm\*K | | 5 | kW/cm\*K | | 6 | kW/m\*K | | 7 | kW/nmi\*K | | 8 | MW/mm\*K | | 9 | MW/cm\*K | | 10 | MW/m\*K | | 11 | MW/nmi\*K | | 12 | Btu/ms*in*dF | | 13 | Btu/ms*ft*dF | | 14 | Btu/s*in*dF | | 15 | Btu/s*ft*dF | | 16 | Btu/min*in*dF | | 17 | Btu/min*ft*dF | | 18 | Btu/hr*in*dF | | 19 | Btu/hr*ft*dF | # Time Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/time-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | ms | | 1 | s | | 2 | min | | 3 | hr | # TPMS Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/tpms-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Gyroid | | 1 | Schwarz | | 2 | Diamond | | 3 | Lidinoid | | 4 | SplitP | | 5 | Neovius | # Turbulence Model Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/turbulence-model-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Spalart-Allmaras | | 1 | k-epsilon | | 2 | k-omega | | 3 | Menter's Shear Stress Transport | | 4 | Reynolds Stress Equation Model | # UV Position Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/uv-position-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | (0,0) | | 1 | (1,0) | | 2 | (1,1) | | 3 | (0,1) | # Vector Component Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/vector-component-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | X | | 1 | Y | | 2 | Z | # Volume Lattice Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/volume-lattice-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Mesh Edges | | 1 | Vertex Centroid | | 2 | Dual | # Volume Lattice Fill Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/volume-lattice-fill-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Centroid inside | | 1 | All inside | | 2 | All touching | # Volume Mesh Shape Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/volume-mesh-shape-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Tetrahedra | | 1 | Hybrid | # Volumetric Heat Generation Unit Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/volumetric-heat-generation-unit-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | W/mm^3 | | 1 | W/cm^3 | | 2 | W/m^3 | | 3 | W/nmi^3 | | 4 | kW/mm^3 | | 5 | kW/cm^3 | | 6 | kW/m^3 | | 7 | kW/nmi^3 | | 8 | MW/mm^3 | | 9 | MW/cm^3 | | 10 | MW/m^3 | | 11 | MW/nmi^3 | | 12 | Btu/ms\*in^3 | | 13 | Btu/ms\*ft^3 | | 14 | Btu/s\*in^3 | | 15 | Btu/s\*ft^3 | | 16 | Btu/min\*in^3 | | 17 | Btu/min\*ft^3 | | 18 | Btu/hr\*in^3 | | 19 | Btu/hr\*ft^3 | # Volumetric Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/volumetric-rule ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Simple cubic | | 1 | Body centered cubic | | 2 | Face centered cubic | | 3 | Column | | 4 | Columns | | 5 | Diamond | | 6 | Fluorite | | 7 | Octet | | 8 | Truncated cube | | 9 | Truncated octahedron | | 10 | Kelvin cell | | 11 | IsoTruss | | 12 | Re-entrant | | 13 | Weaire-Phelan | | 14 | Triangular honeycomb | | 15 | Triangular honeycomb rotated | | 16 | Hexagonal honeycomb | | 17 | Re-entrant honeycomb | | 18 | Square honeycomb rotated | | 19 | Square honeycomb | | 20 | Face centered cubic foam | | 21 | Body centered cubic foam | | 22 | Simple cubic foam | | 23 | Hex prism diamond | | 24 | Hex prism edge | | 25 | Hex prism vertex centroid | | 26 | Hex prism central axis edge | | 27 | Hex prism laves phase | | 28 | Tet oct vertex centroid | | 29 | Oct vertex centroid | # Voxel Grid Filter Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/voxel-grid-filter-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | MeanCurvature | | 1 | Laplacian | | 2 | Gaussian | | 3 | Median | | 4 | Mean | | 5 | Eikonal | | 6 | Dilate | # Voxel Grid Type Enum Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/enums/voxel-grid-type-enum ### Properties | Id for nTopCL | UI Label | | - | - | | 0 | Full grid | | 1 | Narrow band only | # Types Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types > **[1 Parameter Unit Cell](types/1-parameter-unit-cell)** > > A parametric unit cell that takes 1 parameter used in lattice generation workflows. > **[2 Parameter Unit Cell](types/2-parameter-unit-cell)** > > A parametric unit cell that takes 2 parameters used in lattice generation workflows. > **[2D Vector Field](types/2d-vector-field)** > > A 2d field of vector values, where a vector value is defined at every location in space. This object can have units. > **[Analysis File Data](types/analysis-file-data)** > > An object that represents an exported analysis result file. > **[Anisotropic Linear Elastic Property](types/anisotropic-linear-elastic-property)** > > Linear elastic properties for an anisotropic material. > **[Anisotropic Material](types/anisotropic-material)** > > A material with properties that vary in all directions. > **[Anisotropic Material Property](types/anisotropic-material-property)** > > Material properties for an anisotropic material. > **[Anisotropic Thermal Expansion Property](types/anisotropic-thermal-expansion-property)** > > Thermal expansion properties for an Anisotropic material. > **[Anisotropic Thermal Property](types/anisotropic-thermal-property)** > > An object with thermal properties for an anisotropic material. > **[Any](types/any)** > > Represents a type that can be anything > **[Arc](types/arc)** > > A portion of the circumference of a circle, defined on a plane. > **[Axis](types/axis)** > > An infinite line with a direction. This object can be used to rotate objects about. > **[Beam](types/beam)** > > A beam. > **[Bitmap](types/bitmap)** > > A digital image composed of an array of pixels. > **[Body Force](types/body-force)** > > A boundary condition that applies a force. > **[Bool](types/bool)** > > A boolean value of true or false. > **[Bool Field](types/bool-field)** > > A field of true or false boolean values, where a boolean value is defined at every location in space. > **[Boundary](types/boundary)** > > A select boundary of a Domain. > **[Boundary Condition](types/boundary-condition)** > > A boundary condition that can be used for a load case setup. > **[Boundary Force](types/boundary-force)** > > A boundary condition that applies a force. > **[Bounding Box](types/bounding-box)** > > An axis-aligned box that represents the minimal space that an object will take up. > **[Box](types/box)** > > A 3-dimensional box that can be skewed along its axes. > **[Buckling Result](types/buckling-result)** > > An object that contains data generated from a static buckling simulation. > **[CAD Body](types/cad-body)** > > A single body from a part, containing topological data such as faces, edges and vertices. > **[CAD Edge](types/cad-edge)** > > A topological edge of a CAD body. This object can be used to access the underlying curve object. > **[CAD Face](types/cad-face)** > > A topological face of a CAD body, with a UV parameterization. > **[CAD Vertex](types/cad-vertex)** > > A topological vertex of a CAD body. This object can be used to access the underlying point object. > **[CFD Analysis Result](types/cfd-analysis-result)** > > An object that contains data generated from a CFD simulation. > **[CFD Boundary](types/cfd-boundary)** > > An object with information about boundary regions from an FE Mesh selection. > **[CLF Arcam slice data](types/clf-arcam-slice-data)** > > An object that represents slices exported as an Arcam CLF file. > **[CLF slice data](types/clf-slice-data)** > > An object that represents slices exported as a CLF file. > **[CLI slice data](types/cli-slice-data)** > > An object that represents slices exported as a CLI file. > **[CLS slice data](types/cls-slice-data)** > > An object that represents slices exported as a CLS file. > **[Cell](types/cell)** > > Volume mesh element. > **[Cell Map](types/cell-map)** > > A cell map object for lattice generation workflows. > **[Choice](types/choice)** > > An object containing a set of named values that act as unique identifiers. > **[Circle (old)](types/circle-old)** > > A perfectly round 2-dimensional object, defined on a plane. > **[Closest point properties](types/closest-point-properties)** > > An object that contains data about a closest point query. > **[Color](types/color)** > > Color represented as RGBA values between 0 and 1. > **[Column](types/column)** > > An object for a column of tabular data that is often stored as part of a table in a text file or in a spreadsheet. > **[Command Output](types/command-output)** > > Represents the output of a command line shell execution including an exit status, output message, and error message. > **[Component](types/component)** > > A component of a part, containing a template part, an instance part, and a placement. > **[Cone](types/cone)** > > A perpendicular extrusion of a circle, tapered to a circle or a point. > **[Conformal Rule](types/conformal-rule)** > > Conformal Rule type. > **[Connector](types/connector)** > > An object with connections of translational, rotational, as well as other specified active degrees of freedom between the boundary regions of two distinct FE Meshes. > **[Convection Heat Flux](types/convection-heat-flux)** > > A boundary condition that applies a heat flux. > **[Curve](types/curve)** > > A Line, Arc, Spline, or Polycurve. > **[Curve (old)](types/curve-old)** > > A non-uniform rational basis spline (NURBS) curve. > **[Cylinder](types/cylinder)** > > A perpendicular extrusion of a circle. > **[Cylindrical Restraint](types/cylindrical-restraint)** > > A boundary condition that restrains displacement in the 3 cylindrical directions - Radial, Tangential and Axial. > **[Design Constraint](types/design-constraint)** > > A constraint used in topology optimization. > **[Design Objective](types/design-objective)** > > An objective used in topology optimization. > **[Design Response](types/design-response)** > > A design response used as either an objective or constraint in topology optimization > **[Dictionary](types/dictionary)** > > A mapping from keys to values. > **[FE Boundary](types/fe-boundary)** > > An object with information about boundary regions from an FE Mesh selection. > **[FE Domain](types/fe-domain)** > > An object with information about FE mesh with corresponding attributes assigned to mesh elements. > **[FE Mesh](types/fe-mesh)** > > A representation of a geometry made up of solids, beams, or shells for running simulations on. > **[FE Mesh File Data](types/fe-mesh-file-data)** > > An object that represents an exported FE mesh file. > **[FE Model](types/fe-model)** > > An object with information about all of the components and the connectivity information between them. > **[FE Point](types/fe-point)** > > An object with the location of a FE Point. > **[FE Region](types/fe-region)** > > An object with information about the mesh entity (solid, shell, or beam) from an FE mesh selection. > **[FE Set](types/fe-set)** > > A selected region or boundary. > **[Face Parameterization](types/face-parameterization)** > > A representation of the UV parameterization of a CAD face. > **[Field Optimization Result](types/field-optimization-result)** > > An object that contains data generated from a Field Optimization. > **[Floating Comment](types/floating-comment)** > > Internal object for floating comments. > **[Fluid Attribute](types/fluid-attribute)** > > An object with material assignment and fluid properties of selected interior regions (or the entirety) of a fluid domain. > **[Force](types/force)** > > A boundary condition that applies a force. > **[Frame](types/frame)** > > A local coordinate system. > **[Function Inputs](types/function-inputs)** > > A formal type used to represent the inputs to a function object > **[Graph](types/graph)** > > A collection of beams and vertices that interconnect to create a structure. This object has no thickness data connected to it. > **[Group](types/group)** > > A structure that can hold multiple objects of varying types. > **[Heat Flux](types/heat-flux)** > > A boundary condition that applies a heat flux. > **[Heat Generation](types/heat-generation)** > > A boundary condition that applies a heat generation. > **[Homogenization Result](types/homogenization-result)** > > An object that contains data from the output of a homogenization process. > **[Implicit Body](types/implicit-body)** > > A 3-dimensional Implicit geometry represented by a distance field in units of length. > **[Implicit Body File](types/implicit-body-file)** > > An object that represents the output of an exported implicit body file. > **[Implicit Lattice Rule](types/implicit-lattice-rule)** > > Implicit Lattice Rule type. > **[Integer](types/integer)** > > A unitless whole number. > **[Isotropic Fluid Property](types/isotropic-fluid-property)** > > Properties for an isotropic fluid. > **[Isotropic Linear Elastic Property](types/isotropic-linear-elastic-property)** > > Linear elastic properties for an isotropic material. > **[Isotropic Material](types/isotropic-material)** > > A material with properties that are consistent in all directions. > **[Isotropic Material Property](types/isotropic-material-property)** > > Linear elastic properties for an isotropic material. > **[Isotropic Porous Medium Property](types/isotropic-porous-medium-property)** > > Properties for an isotropic porous medium. > **[Isotropic Thermal Expansion Property](types/isotropic-thermal-expansion-property)** > > Thermal expansion properties for an isotropic material. > **[Isotropic Thermal Property](types/isotropic-thermal-property)** > > An object with thermal properties for an isotropic material. > **[JSON](types/json)** > > An object that contains a JSON. > **[JSON File Data](types/json-file-data)** > > JSON file data type. > **[Lattice](types/lattice)** > > An object that contains data for a periodic lattice structure. > **[Lattice File Data](types/lattice-file-data)** > > An object that represents an exported lattice file. > **[Line](types/line)** > > A line segment. > **[List Interface](types/list-interface)** > > List Interface type. > **[Map (1d,1d)](types/map-1d,1d)** > > A Map object. > **[Map (2d,1d)](types/map-2d,1d)** > > A Map object. > **[Map (3d,1d)](types/map-3d,1d)** > > A Map object. > **[Mass properties](types/mass-properties)** > > An object that contains data about the mass properties of a geometry. > **[Mass properties (old)](types/mass-properties-old)** > > Mass properties (old) type. > **[Material](types/material)** > > An isotropic, orthotropic, or anisotropic material. > **[Material File Data](types/material-file-data)** > > An object that represents an exported material file. > **[Mesh](types/mesh)** > > A collection of vertices, edges, and faces that defines a polyhedral object. > **[Mesh File Data](types/mesh-file-data)** > > An object that represents an exported mesh file. > **[Mesh Quality](types/mesh-quality)** > > An object with information about FE mesh quality. > **[Modal Result](types/modal-result)** > > An object with data generated from a modal simulation. > **[Model Load](types/model-load)** > > A boundary condition that applies a force. > **[Multi-Region Mesh](types/multi-region-mesh)** > > Mesh containing multiple distincly named regions. > **[Non-Parametric Unit Cell](types/non-parametric-unit-cell)** > > A non-parametric unit cell used in lattice generation workflows. > **[Orthotropic Linear Elastic Property](types/orthotropic-linear-elastic-property)** > > Linear elastic properties for an orthotropic material. > **[Orthotropic Material](types/orthotropic-material)** > > A material with properties that vary in three orthogonal axes. > **[Orthotropic Material Property](types/orthotropic-material-property)** > > Material properties for an orthotropic material. > **[Orthotropic Thermal Expansion Property](types/orthotropic-thermal-expansion-property)** > > Thermal expansion properties for an Orthotropic material. > **[Orthotropic Thermal Property](types/orthotropic-thermal-property)** > > An object with thermal properties for an orthotropic material. > **[Parameter](types/parameter)** > > A named object that holds a value, bounds, and metadata for use by evaluators in workflows such as Parameter Optimization. > **[Parameter Constraint](types/parameter-constraint)** > > A condition that limits the value of a Parameter in Parameter Optimization. > **[Parameter Constraint Group](types/parameter-constraint-group)** > > A collection of Parameter Constraints. > **[Parameter Group](types/parameter-group)** > > A collection of Parameters. > **[Parameter Objective](types/parameter-objective)** > > A goal specifying a Parameter to minimize or maximize in Parameter Optimization. > **[Parameter Optimization Result](types/parameter-optimization-result)** > > Data generated from a Parameter Optimization, including Parameter values and iteration history. > **[Parameterizable](types/parameterizable)** > > A type that can be used for optimizations. > **[Parametric FE Domain](types/parametric-fe-domain)** > > An object with information about FE mesh and corresponding attributes as functions of the design parameters. > **[Parametric FE Model](types/parametric-fe-model)** > > An object with information about Parametric FE Domains and the connectivity information between them. > **[Part](types/part)** > > Representation of a part from CAD. > **[Part File Data](types/part-file-data)** > > An object that represents an exported part file. > **[Path](types/path)** > > A string of characters that defines location of a file or folder. > **[Planar Image](types/planar-image)** > > A bitmap mapped to a plane and previewed in 3D space. > **[Plane](types/plane)** > > A parameterized two-dimensional surface that extends infinitely far. > **[Point](types/point)** > > A 3-dimensional point in space, represented by a vector in units of length. > **[Point Map File](types/point-map-file)** > > An object that represents the output of an exported point map file. > **[Point stack](types/point-stack)** > > A collection of sliced points, ordered by layer. > **[Polycurve](types/polycurve)** > > A set of connected Curves. > **[Polygon (old)](types/polygon-old)** > > A enclosed planar 2-dimensional object defined by a series of line segments. > **[Pressure](types/pressure)** > > A boundary condition that applies pressure. > **[Profile](types/profile)** > > An enclosed planar 2-dimensional object defined by series of curves. > **[Profile (old)](types/profile-old)** > > A 2-dimensional implicit geometry represented by a distance field in units of length. > **[Radiation Heat Flux](types/radiation-heat-flux)** > > A boundary condition that applies a heat flux. > **[Region](types/region)** > > A select region of a Domain. > **[Remote Force](types/remote-force)** > > A boundary condition that applies a force. > **[Remote Restraint](types/remote-restraint)** > > A boundary condition that restrains displacement. > **[Restraint](types/restraint)** > > A boundary condition that restraints displacement. > **[SLC slice data](types/slc-slice-data)** > > SLC slice data type. > **[SSL slice data](types/ssl-slice-data)** > > An object that represents slices exported as an SSL file. > **[Scalar](types/scalar)** > > A scalar value. This object can have units. > **[Scalar Field](types/scalar-field)** > > A field of scalar values, where a scalar value is defined at every location in space. This object can have units, and in some cases can represent a distance field. > **[Scalar Point Map](types/scalar-point-map)** > > A map that pairs 3-dimensional point locations to scalar values. > **[Selection Connectivity](types/selection-connectivity)** > > Selection Connectivity type. > **[Selection Containment](types/selection-containment)** > > Selection Containment type. > **[Selection Region](types/selection-region)** > > Selection Region type. > **[Slice](types/slice)** > > A single slice stack layer. > **[Slice Image Data](types/slice-image-data)** > > An object that represents an image slice data. > **[Slice Stack](types/slice-stack)** > > A collection of sliced contours ordered by layer. > **[Slice point data](types/slice-point-data)** > > An object that represents slices exported as point data file. > **[Solid Attribute](types/solid-attribute)** > > An object with material assignment and structural properties of selected interior regions (or the entirety) of a solid domain. > **[Sphere](types/sphere)** > > A perfectly round 3-dimensional object. > **[Spline](types/spline)** > > A non-uniform basis spline (B-spline) curve. > **[Static Structural Result](types/static-structural-result)** > > An object that contains data generated from a static structural simulation. > **[Static Thermal Result](types/static-thermal-result)** > > An object that contains data generated from a static thermal simulation. > **[Superelement](types/superelement)** > > Superelement > **[Superelement File Data](types/superelement-file-data)** > > An object that contains data generated from a DMIG file. > **[Superelement Geometry File Data](types/superelement-geometry-file-data)** > > An object that contains geometry generated from a FEM file. > **[Surface Plot](types/surface-plot)** > > A shaded view of an object. > **[Surface Rule](types/surface-rule)** > > Surface Rule type. > **[Table](types/table)** > > An object for column-oriented tabular data that is often stored as columns in a text file or in a spreadsheet. > **[Table File Data](types/table-file-data)** > > An object that represents an exported table file. > **[Temperature](types/temperature)** > > The absolute temperature of an object. If a temperature difference is intended, use a Scalar with units of Kelvin, Fahrenheit, or Celsius. > **[Temperature Field](types/temperature-field)** > > A field of temperature values, where an absolute temperature value is defined at every location in space. If a difference of temperatures at every point in space is desired, a Scalar Field with units of temperature can be used instead. > **[Temperature Point Map](types/temperature-point-map)** > > A map that pairs 3-dimensional point locations to temperature values. > **[Temperature Restraint](types/temperature-restraint)** > > An object with information about a temperature boundary condition. > **[Temporary Directory](types/temporary-directory)** > > A Temporary Directory. > **[Text](types/text)** > > A string of characters. > **[Text File](types/text-file)** > > An object that represents an exported text file. > **[Thermal Result](types/thermal-result)** > > A thermal result that can be used as an interface for thermal analysis result objects. > **[Thick Graph](types/thick-graph)** > > A collection of beams, vertices, and thickness data that interconnect to create a thickened structure. > **[Time Dependent Structural Result](types/time-dependent-structural-result)** > > An object that contains data imported from a explicit simulation. > **[Time Dependent Thermal Result](types/time-dependent-thermal-result)** > > An object that contains data generated from a static thermal simulation. > **[Topology Optimization Result](types/topology-optimization-result)** > > An object that contains data generated from a topology optimization. > **[Torus](types/torus)** > > A geometry created by revolving a circle about an axis. > **[Transformable](types/transformable)** > > An object that can be transformed in space. > **[Transformation](types/transformation)** > > A representation of how a 3-dimensional object is transformed in space. > **[Tuple](types/tuple)** > > A Tuple of Any objects. > **[Unit System](types/unit-system)** > > Represents a specific unit system. > **[Unknown Type](types/unknown-type)** > > nTop was not able to determine the proper type to use here. Some functionality will be unavailable as a result. In order to fix the issue, drag in a variable or block of the intended type. > **[Vector](types/vector)** > > A 3-dimensional scalar. This object has an x, y and z component, and can have units. > **[Vector Field](types/vector-field)** > > A field of vector values, where a vector value is defined at every location in space. This object can have units. > **[Vector Point Map](types/vector-point-map)** > > A map that pairs 3-dimensional point to vector values. > **[Velocity](types/velocity)** > > A boundary condition that applies a velocity. > **[Virtual Analysis File Data](types/virtual-analysis-file-data)** > > An object that represents an exported virtual analysis file. > **[Virtual Boundary](types/virtual-boundary)** > > An object that defines the location of a boundary condition on a Domain. > **[Virtual Domain](types/virtual-domain)** > > An object with information about a Virtual Domain with corresponding attributes assigned to it. > **[Virtual Model](types/virtual-model)** > > An object with information about all of the Virtual Domains and the connectivity information between them. > **[Virtual Region](types/virtual-region)** > > An object with information about a region of a Domain. > **[Volume Mesh](types/volume-mesh)** > > A collection of vertices, edges, and faces, and cells that defines a volume mesh. > **[Volumetric Rule](types/volumetric-rule)** > > Volumetric Rule type. > **[Voronoi Surface Lattice](types/voronoi-surface-lattice)** > > A Voronoi Surface Lattice. > **[Voronoi Volume Lattice](types/voronoi-volume-lattice)** > > A Voronoi Volume Lattice. > **[Voxel Grid](types/voxel-grid)** > > A distance field geometry discretized over a sparse three-dimensional grid. # 1 Parameter Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/1-parameter-unit-cell A parametric unit cell that takes 1 parameter used in lattice generation workflows. ### Properties | Name | Type | | - | - | | List | [1 Parameter Unit Cell List](../../block-documentation/types/1-parameter-unit-cell) | | Parameter 1 | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Graph Unit Cell](../../block-documentation/blocks/lattices/unit-cells/graph-unit-cell) | Lattices/Unit Cells | | [TPMS Unit Cell with Offset](../../block-documentation/blocks/lattices/unit-cells/tpms-unit-cell-with-offset) | Lattices/Unit Cells | | [Walled TPMS Unit Cell](../../block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell) | Lattices/Unit Cells | | [Orient Unit Cell](../../block-documentation/blocks/lattices/unit-cells/orient-unit-cell) | Lattices/Unit Cells | | [Custom Unit Cell](../../block-documentation/blocks/lattices/unit-cells/custom-unit-cell) | Lattices/Unit Cells | | [Import Unit Cell Rule](../../block-documentation/blocks/lattices/unit-cells/import-unit-cell-rule) | Lattices/Unit Cells | | [2D Unit Cell](../../block-documentation/blocks/rib-design/create/2d-unit-cell) | Rib Design/Create | # 2 Parameter Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/2-parameter-unit-cell A parametric unit cell that takes 2 parameters used in lattice generation workflows. ### Properties | Name | Type | | - | - | | List | [2 Parameter Unit Cell List](../../block-documentation/types/2-parameter-unit-cell) | | Parameter 1 | [Text](../../block-documentation/types/text) | | Parameter 2 | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Walled TPMS Unit Cell with Offset](../../block-documentation/blocks/lattices/unit-cells/walled-tpms-unit-cell-with-offset) | Lattices/Unit Cells | | [Orient Unit Cell](../../block-documentation/blocks/lattices/unit-cells/orient-unit-cell) | Lattices/Unit Cells | # 2D Vector Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/2d-vector-field A 2d field of vector values, where a vector value is defined at every location in space. This object can have units. ### Properties | Name | Type | | - | - | | Length | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [2D Vector Field List](../../block-documentation/types/2d-vector-field) | | Negative | [2D Vector Field](../../block-documentation/types/2d-vector-field) | | Unit Vector Field | [2D Vector Field](../../block-documentation/types/2d-vector-field) | | X | [Scalar Field](../../block-documentation/types/scalar-field) | | Y | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | | [Multiply](../../block-documentation/blocks/math/operations/multiply) | Math/Operations | | [Divide](../../block-documentation/blocks/math/operations/divide) | Math/Operations | | [Average](../../block-documentation/blocks/math/operations/average) | Math/Operations | | [Perpendicular Vector](../../block-documentation/blocks/math/vectors/perpendicular-vector) | Math/Vectors | | [2D Vector Field](../../block-documentation/blocks/math/vectors/2d-vector-field) | Math/Vectors | | [Mix](../../block-documentation/blocks/math/utilities/mix) | Math/Utilities | | [UV Field from Surface](../../block-documentation/blocks/utilities/conversion/uv-field-from-surface) | Utilities/Conversion | | [If-Else](../../block-documentation/blocks/beta/create/if-else) | Beta/Create | # Analysis File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/analysis-file-data An object that represents an exported analysis result file. ### Properties | Name | Type | | - | - | | List | [Analysis File Data List](../../block-documentation/types/analysis-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export CFD Analysis Result](../../block-documentation/blocks/fluids/exchange/export-cfd-analysis-result) | Fluids/Exchange | | [Export Static Analysis Result](../../block-documentation/blocks/design-analysis/export/export-static-analysis-result) | Design Analysis/Export | | [Export Modal Analysis Result](../../block-documentation/blocks/design-analysis/export/export-modal-analysis-result) | Design Analysis/Export | | [Export Buckling Analysis Result](../../block-documentation/blocks/design-analysis/export/export-buckling-analysis-result) | Design Analysis/Export | | [Export Thermal Analysis Result](../../block-documentation/blocks/design-analysis/export/export-thermal-analysis-result) | Design Analysis/Export | | [Export Time Dependent Thermal Analysis Result](../../block-documentation/blocks/design-analysis/export/export-time-dependent-thermal-analysis-result) | Design Analysis/Export | # Anisotropic Linear Elastic Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/anisotropic-linear-elastic-property Linear elastic properties for an anisotropic material. ### Properties | Name | Type | | - | - | | C11 | [Scalar Field](../../block-documentation/types/scalar-field) | | C12 | [Scalar Field](../../block-documentation/types/scalar-field) | | C13 | [Scalar Field](../../block-documentation/types/scalar-field) | | C14 | [Scalar Field](../../block-documentation/types/scalar-field) | | C15 | [Scalar Field](../../block-documentation/types/scalar-field) | | C16 | [Scalar Field](../../block-documentation/types/scalar-field) | | C22 | [Scalar Field](../../block-documentation/types/scalar-field) | | C23 | [Scalar Field](../../block-documentation/types/scalar-field) | | C24 | [Scalar Field](../../block-documentation/types/scalar-field) | | C25 | [Scalar Field](../../block-documentation/types/scalar-field) | | C26 | [Scalar Field](../../block-documentation/types/scalar-field) | | C33 | [Scalar Field](../../block-documentation/types/scalar-field) | | C34 | [Scalar Field](../../block-documentation/types/scalar-field) | | C35 | [Scalar Field](../../block-documentation/types/scalar-field) | | C36 | [Scalar Field](../../block-documentation/types/scalar-field) | | C44 | [Scalar Field](../../block-documentation/types/scalar-field) | | C45 | [Scalar Field](../../block-documentation/types/scalar-field) | | C46 | [Scalar Field](../../block-documentation/types/scalar-field) | | C55 | [Scalar Field](../../block-documentation/types/scalar-field) | | C56 | [Scalar Field](../../block-documentation/types/scalar-field) | | C66 | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Anisotropic Linear Elastic Property List](../../block-documentation/types/anisotropic-linear-elastic-property) | | S11 | [Scalar Field](../../block-documentation/types/scalar-field) | | S12 | [Scalar Field](../../block-documentation/types/scalar-field) | | S13 | [Scalar Field](../../block-documentation/types/scalar-field) | | S14 | [Scalar Field](../../block-documentation/types/scalar-field) | | S15 | [Scalar Field](../../block-documentation/types/scalar-field) | | S16 | [Scalar Field](../../block-documentation/types/scalar-field) | | S22 | [Scalar Field](../../block-documentation/types/scalar-field) | | S23 | [Scalar Field](../../block-documentation/types/scalar-field) | | S24 | [Scalar Field](../../block-documentation/types/scalar-field) | | S25 | [Scalar Field](../../block-documentation/types/scalar-field) | | S26 | [Scalar Field](../../block-documentation/types/scalar-field) | | S33 | [Scalar Field](../../block-documentation/types/scalar-field) | | S34 | [Scalar Field](../../block-documentation/types/scalar-field) | | S35 | [Scalar Field](../../block-documentation/types/scalar-field) | | S36 | [Scalar Field](../../block-documentation/types/scalar-field) | | S44 | [Scalar Field](../../block-documentation/types/scalar-field) | | S45 | [Scalar Field](../../block-documentation/types/scalar-field) | | S46 | [Scalar Field](../../block-documentation/types/scalar-field) | | S55 | [Scalar Field](../../block-documentation/types/scalar-field) | | S56 | [Scalar Field](../../block-documentation/types/scalar-field) | | S66 | [Scalar Field](../../block-documentation/types/scalar-field) | | Universal Anisotropy Index | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Anisotropic Stiffness Tensor](../../block-documentation/blocks/structures/material-attributes/anisotropic-stiffness-tensor) | Structures/Material Attributes | # Anisotropic Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/anisotropic-material A material with properties that vary in all directions. ### Properties | Name | Type | | - | - | | Density | [Scalar Field](../../block-documentation/types/scalar-field) | | Linear Elastic Property | [Anisotropic Linear Elastic Property](../../block-documentation/types/anisotropic-linear-elastic-property) | | List | [Anisotropic Material List](../../block-documentation/types/anisotropic-material) | | Thermal Expansion Property | [Anisotropic Thermal Expansion Property](../../block-documentation/types/anisotropic-thermal-expansion-property) | | Thermal Property | [Anisotropic Thermal Property](../../block-documentation/types/anisotropic-thermal-property) | ### Block Reference | Block Name | Location | | - | - | | [Anisotropic Material](../../block-documentation/blocks/structures/material-attributes/anisotropic-material) | Structures/Material Attributes | | [Transform Material](../../block-documentation/blocks/structures/utilities/transform-material) | Structures/Utilities | # Anisotropic Material Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/anisotropic-material-property Material properties for an anisotropic material. ### Properties | Name | Type | | - | - | | List | [Anisotropic Material Property List](../../block-documentation/types/anisotropic-material-property) | # Anisotropic Thermal Expansion Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/anisotropic-thermal-expansion-property Thermal expansion properties for an Anisotropic material. ### Properties | Name | Type | | - | - | | Alpha1 | [Scalar Field](../../block-documentation/types/scalar-field) | | Alpha2 | [Scalar Field](../../block-documentation/types/scalar-field) | | Alpha3 | [Scalar Field](../../block-documentation/types/scalar-field) | | Alpha4 | [Scalar Field](../../block-documentation/types/scalar-field) | | Alpha5 | [Scalar Field](../../block-documentation/types/scalar-field) | | Alpha6 | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Anisotropic Thermal Expansion Property List](../../block-documentation/types/anisotropic-thermal-expansion-property) | ### Block Reference | Block Name | Location | | - | - | | [Anisotropic Thermal Expansion Property](../../block-documentation/blocks/structures/material-attributes/anisotropic-thermal-expansion-property) | Structures/Material Attributes | # Anisotropic Thermal Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/anisotropic-thermal-property An object with thermal properties for an anisotropic material. ### Properties | Name | Type | | - | - | | K11 | [Scalar Field](../../block-documentation/types/scalar-field) | | K12 | [Scalar Field](../../block-documentation/types/scalar-field) | | K13 | [Scalar Field](../../block-documentation/types/scalar-field) | | K22 | [Scalar Field](../../block-documentation/types/scalar-field) | | K23 | [Scalar Field](../../block-documentation/types/scalar-field) | | K33 | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Anisotropic Thermal Property List](../../block-documentation/types/anisotropic-thermal-property) | | Specific Heat | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Anisotropic Thermal Property](../../block-documentation/blocks/structures/material-attributes/anisotropic-thermal-property) | Structures/Material Attributes | # Any Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/any Represents a type that can be anything ### Block Reference | Block Name | Location | | - | - | | [Await](../../block-documentation/blocks/utilities/system/await) | Utilities/System | | [Scale Object](../../block-documentation/blocks/utilities/transforms/scale-object) | Utilities/Transforms | | [Rotate Object](../../block-documentation/blocks/utilities/transforms/rotate-object) | Utilities/Transforms | | [Translate Object](../../block-documentation/blocks/utilities/transforms/translate-object) | Utilities/Transforms | | [Transform Object](../../block-documentation/blocks/utilities/transforms/transform-object) | Utilities/Transforms | | [Orient Object](../../block-documentation/blocks/utilities/transforms/orient-object) | Utilities/Transforms | | [If-Else](../../block-documentation/blocks/beta/create/if-else) | Beta/Create | # Arc Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/arc A portion of the circumference of a circle, defined on a plane. ### Properties | Name | Type | | - | - | | Angle | [Scalar](../../block-documentation/types/scalar) | | Arc Length Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Center | [Point](../../block-documentation/types/point) | | Closed | [Bool](../../block-documentation/types/bool) | | End Point | [Point](../../block-documentation/types/point) | | End Tangent | [Vector](../../block-documentation/types/vector) | | Length | [Scalar](../../block-documentation/types/scalar) | | List | [Arc List](../../block-documentation/types/arc) | | Name | [Text](../../block-documentation/types/text) | | Normal | [Vector](../../block-documentation/types/vector) | | Radius | [Scalar](../../block-documentation/types/scalar) | | Reversed Curve | [Arc](../../block-documentation/types/arc) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Start Point | [Point](../../block-documentation/types/point) | | Start Tangent | [Vector](../../block-documentation/types/vector) | ### Block Reference | Block Name | Location | | - | - | | [Arc](../../block-documentation/blocks/create/curves/arc) | Create/Curves | | [Arc by Tangent](../../block-documentation/blocks/create/curves/arc-by-tangent) | Create/Curves | | [Arc by Angle](../../block-documentation/blocks/create/curves/arc-by-angle) | Create/Curves | | [Arc Tangent to Curve](../../block-documentation/blocks/create/curves/arc-tangent-to-curve) | Create/Curves | # Axis Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/axis An infinite line with a direction. This object can be used to rotate objects about. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Direction | [Vector](../../block-documentation/types/vector) | | List | [Axis List](../../block-documentation/types/axis) | | Origin | [Point](../../block-documentation/types/point) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Axis](../../block-documentation/blocks/create/vectors/axis) | Create/Vectors | | [Axis from Transform](../../block-documentation/blocks/utilities/transforms/axis-from-transform) | Utilities/Transforms | # Beam Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/beam A beam. ### Properties | Name | Type | | - | - | | Direction | [Vector](../../block-documentation/types/vector) | | End Point | [Point](../../block-documentation/types/point) | | End Point Valency | [Integer](../../block-documentation/types/integer) | | End Radius | [Scalar](../../block-documentation/types/scalar) | | Length | [Scalar](../../block-documentation/types/scalar) | | Line Segment | [Line](../../block-documentation/types/line) | | List | [Beam List](../../block-documentation/types/beam) | | Start Point | [Point](../../block-documentation/types/point) | | Start Point Valency | [Integer](../../block-documentation/types/integer) | | Start Radius | [Scalar](../../block-documentation/types/scalar) | # Bitmap Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/bitmap A digital image composed of an array of pixels. ### Properties | Name | Type | | - | - | | Dot Pitch | [Scalar](../../block-documentation/types/scalar) | | Length | [Scalar](../../block-documentation/types/scalar) | | Length Count | [Integer](../../block-documentation/types/integer) | | Pixels | [Integer](../../block-documentation/types/integer) | | Width | [Scalar](../../block-documentation/types/scalar) | | Width Count | [Integer](../../block-documentation/types/integer) | | List | [Bitmap List](../../block-documentation/types/bitmap) | ### Block Reference | Block Name | Location | | - | - | | [Import Bitmap](../../block-documentation/blocks/utilities/exchange/import-bitmap) | Utilities/Exchange | # Body Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/body-force A boundary condition that applies a force. ### Properties | Name | Type | | - | - | | List | [Body Force List](../../block-documentation/types/body-force) | ### Block Reference | Block Name | Location | | - | - | | [Acceleration Load](../../block-documentation/blocks/structures/boundary-conditions/acceleration-load) | Structures/Boundary Conditions | | [Rotational Force](../../block-documentation/blocks/structures/boundary-conditions/rotational-force) | Structures/Boundary Conditions | # Bool Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/bool A boolean value of true or false. ### Properties | Name | Type | | - | - | | Field | [Bool Field](../../block-documentation/types/bool-field) | | Integer | [Integer](../../block-documentation/types/integer) | | List | [Bool List](../../block-documentation/types/bool) | | Text | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [And](../../block-documentation/blocks/math/logic/and) | Math/Logic | | [Or](../../block-documentation/blocks/math/logic/or) | Math/Logic | | [Xor](../../block-documentation/blocks/math/logic/xor) | Math/Logic | | [Not](../../block-documentation/blocks/math/logic/not) | Math/Logic | | [Less Than](../../block-documentation/blocks/math/logic/less-than) | Math/Logic | | [Greater Than](../../block-documentation/blocks/math/logic/greater-than) | Math/Logic | | [Less Than or Equal to](../../block-documentation/blocks/math/logic/less-than-or-equal-to) | Math/Logic | | [Greater Than or Equal to](../../block-documentation/blocks/math/logic/greater-than-or-equal-to) | Math/Logic | | [Not Equal](../../block-documentation/blocks/math/logic/not-equal) | Math/Logic | | [Equals](../../block-documentation/blocks/math/logic/equals) | Math/Logic | # Bool Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/bool-field A field of true or false boolean values, where a boolean value is defined at every location in space. ### Properties | Name | Type | | - | - | | List | [Bool Field List](../../block-documentation/types/bool-field) | ### Block Reference | Block Name | Location | | - | - | | [And](../../block-documentation/blocks/math/logic/and) | Math/Logic | | [Or](../../block-documentation/blocks/math/logic/or) | Math/Logic | | [Xor](../../block-documentation/blocks/math/logic/xor) | Math/Logic | | [Not](../../block-documentation/blocks/math/logic/not) | Math/Logic | | [Less Than](../../block-documentation/blocks/math/logic/less-than) | Math/Logic | | [Greater Than](../../block-documentation/blocks/math/logic/greater-than) | Math/Logic | | [Less Than or Equal to](../../block-documentation/blocks/math/logic/less-than-or-equal-to) | Math/Logic | | [Greater Than or Equal to](../../block-documentation/blocks/math/logic/greater-than-or-equal-to) | Math/Logic | | [Not Equal](../../block-documentation/blocks/math/logic/not-equal) | Math/Logic | | [Equals](../../block-documentation/blocks/math/logic/equals) | Math/Logic | # Boundary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/boundary A select boundary of a Domain. ### Properties | Name | Type | | - | - | | List | [Boundary List](../../block-documentation/types/boundary) | # Boundary Condition Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/boundary-condition A boundary condition that can be used for a load case setup. ### Properties | Name | Type | | - | - | | List | [Boundary Condition List](../../block-documentation/types/boundary-condition) | # Boundary Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/boundary-force A boundary condition that applies a force. ### Properties | Name | Type | | - | - | | List | [Boundary Force List](../../block-documentation/types/boundary-force) | ### Block Reference | Block Name | Location | | - | - | | [Edge Force](../../block-documentation/blocks/structures/boundary-conditions/edge-force) | Structures/Boundary Conditions | | [Surface Force](../../block-documentation/blocks/structures/boundary-conditions/surface-force) | Structures/Boundary Conditions | | [Bearing Force](../../block-documentation/blocks/structures/boundary-conditions/bearing-force) | Structures/Boundary Conditions | # Bounding Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/bounding-box An axis-aligned box that represents the minimal space that an object will take up. ### Properties | Name | Type | | - | - | | Box | [Box](../../block-documentation/types/box) | | Centroid | [Point](../../block-documentation/types/point) | | Diagonal | [Line](../../block-documentation/types/line) | | List | [Bounding Box List](../../block-documentation/types/bounding-box) | | Max Point | [Point](../../block-documentation/types/point) | | Min Point | [Point](../../block-documentation/types/point) | | Span | [Vector](../../block-documentation/types/vector) | ### Block Reference | Block Name | Location | | - | - | | [Bounding Box](../../block-documentation/blocks/create/primitives/bounding-box) | Create/Primitives | | [Bounding Box Union](../../block-documentation/blocks/modeling/utilities/bounding-box-union) | Modeling/Utilities | | [EOS M 270 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-270-build-volume) | Additive Manufacturing/Build Volumes | | [EOS M 280 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-280-build-volume) | Additive Manufacturing/Build Volumes | | [EOS M 290 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-290-build-volume) | Additive Manufacturing/Build Volumes | | [EOS M 300-4 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-300-4-build-volume) | Additive Manufacturing/Build Volumes | | [EOS M 400 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-build-volume) | Additive Manufacturing/Build Volumes | | [EOS M 400-4 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/eos-m-400-4-build-volume) | Additive Manufacturing/Build Volumes | | [Renishaw AM 250 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-250-build-volume) | Additive Manufacturing/Build Volumes | | [Renishaw AM 400 Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renishaw-am-400-build-volume) | Additive Manufacturing/Build Volumes | | [RenAM 500M Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500m-build-volume) | Additive Manufacturing/Build Volumes | | [RenAM 500Q Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500q-build-volume) | Additive Manufacturing/Build Volumes | | [RenAM 500S Build Volume](../../block-documentation/blocks/additive-manufacturing/build-volumes/renam-500s-build-volume) | Additive Manufacturing/Build Volumes | # Box Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/box A 3-dimensional box that can be skewed along its axes. ### Properties | Name | Type | | - | - | | Axis 1 | [Vector](../../block-documentation/types/vector) | | Axis 2 | [Vector](../../block-documentation/types/vector) | | Axis 3 | [Vector](../../block-documentation/types/vector) | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Centroid | [Point](../../block-documentation/types/point) | | List | [Box List](../../block-documentation/types/box) | | Max Point | [Point](../../block-documentation/types/point) | | Min Point | [Point](../../block-documentation/types/point) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Box](../../block-documentation/blocks/create/primitives/box) | Create/Primitives | | [Cube](../../block-documentation/blocks/create/primitives/cube) | Create/Primitives | | [Box from Corners](../../block-documentation/blocks/create/primitives/box-from-corners) | Create/Primitives | | [Skewed Box](../../block-documentation/blocks/create/primitives/skewed-box) | Create/Primitives | # Buckling Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/buckling-result An object that contains data generated from a static buckling simulation. ### Properties | Name | Type | | - | - | | Buckling Load Factor | [Scalar List](../../block-documentation/types/scalar) | | Displacement | [Vector Field List](../../block-documentation/types/vector-field) | | Dof Count | [Integer](../../block-documentation/types/integer) | | Element Count | [Integer](../../block-documentation/types/integer) | | List | [Buckling Result List](../../block-documentation/types/buckling-result) | | Mode Count | [Integer](../../block-documentation/types/integer) | | Node Count | [Integer](../../block-documentation/types/integer) | ### Block Reference | Block Name | Location | | - | - | | [Buckling Analysis](../../block-documentation/blocks/structures/analysis/buckling-analysis) | Structures/Analysis | | [Import Buckling Result](../../block-documentation/blocks/structures/exchange/import-buckling-result) | Structures/Exchange | # CAD Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cad-body A single body from a part, containing topological data such as faces, edges and vertices. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Color | [Color](../../block-documentation/types/color) | | Density | [Scalar](../../block-documentation/types/scalar) | | Edges | [CAD Edge List](../../block-documentation/types/cad-edge) | | Faces | [CAD Face List](../../block-documentation/types/cad-face) | | List | [CAD Body List](../../block-documentation/types/cad-body) | | Name | [Text](../../block-documentation/types/text) | | Part | [Part](../../block-documentation/types/part) | | Vertices | [CAD Vertex List](../../block-documentation/types/cad-vertex) | ### Block Reference | Block Name | Location | | - | - | | [Stitch Adjacent CAD Faces](../../block-documentation/blocks/modeling/utilities/stitch-adjacent-cad-faces) | Modeling/Utilities | | [Merge CAD Bodies](../../block-documentation/blocks/modeling/utilities/merge-cad-bodies) | Modeling/Utilities | | [CAD Body from Quad Mesh](../../block-documentation/blocks/utilities/conversion/cad-body-from-quad-mesh) | Utilities/Conversion | | [CAD Body from Implicit Body](../../block-documentation/blocks/beta/utilities/cad-body-from-implicit-body) | Beta/Utilities | # CAD Edge Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cad-edge A topological edge of a CAD body. This object can be used to access the underlying curve object. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Curve | [Curve](../../block-documentation/types/curve) | | List | [CAD Edge List](../../block-documentation/types/cad-edge) | | Parent | [CAD Body](../../block-documentation/types/cad-body) | # CAD Face Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cad-face A topological face of a CAD body, with a UV parameterization. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Color | [Color](../../block-documentation/types/color) | | List | [CAD Face List](../../block-documentation/types/cad-face) | | Name | [Text](../../block-documentation/types/text) | | Parent | [CAD Body](../../block-documentation/types/cad-body) | | Surface | [CAD Body](../../block-documentation/types/cad-body) | # CAD Vertex Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cad-vertex A topological vertex of a CAD body. This object can be used to access the underlying point object. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | List | [CAD Vertex List](../../block-documentation/types/cad-vertex) | | Parent | [CAD Body](../../block-documentation/types/cad-body) | | Point | [Point](../../block-documentation/types/point) | # Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cell Volume mesh element. ### Properties | Name | Type | | - | - | | Edges | [Line List](../../block-documentation/types/line) | | List | [Cell List](../../block-documentation/types/cell) | | Vertices | [Point List](../../block-documentation/types/point) | # Cell Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cell-map A cell map object for lattice generation workflows. ### Properties | Name | Type | | - | - | | Jacobian Determinant | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Cell Map List](../../block-documentation/types/cell-map) | | U | [Scalar Field](../../block-documentation/types/scalar-field) | | V | [Scalar Field](../../block-documentation/types/scalar-field) | | W | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Rectangular Cell Map](../../block-documentation/blocks/lattices/cell-maps/rectangular-cell-map) | Lattices/Cell Maps | | [Cylindrical Cell Map](../../block-documentation/blocks/lattices/cell-maps/cylindrical-cell-map) | Lattices/Cell Maps | | [Spherical Cell Map](../../block-documentation/blocks/lattices/cell-maps/spherical-cell-map) | Lattices/Cell Maps | | [Cell Map from CAD Face](../../block-documentation/blocks/lattices/cell-maps/cell-map-from-cad-face) | Lattices/Cell Maps | | [Cell Map between CAD Faces](../../block-documentation/blocks/lattices/cell-maps/cell-map-between-cad-faces) | Lattices/Cell Maps | | [Cell Map from Quad Mesh](../../block-documentation/blocks/lattices/cell-maps/cell-map-from-quad-mesh) | Lattices/Cell Maps | | [Trim Cell Map](../../block-documentation/blocks/lattices/utilities/trim-cell-map) | Lattices/Utilities | | [Warp Cell Map](../../block-documentation/blocks/lattices/utilities/warp-cell-map) | Lattices/Utilities | | [Warp Cell Map to Body](../../block-documentation/blocks/lattices/utilities/warp-cell-map-to-body) | Lattices/Utilities | # CFD Analysis Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cfd-analysis-result An object that contains data generated from a CFD simulation. ### Properties | Name | Type | | - | - | | Density | [Dictionary](../../block-documentation/types/dictionary) | | Force | [Dictionary](../../block-documentation/types/dictionary) | | List | [CFD Analysis Result List](../../block-documentation/types/cfd-analysis-result) | | Pressure | [Dictionary](../../block-documentation/types/dictionary) | | Temperature | [Dictionary](../../block-documentation/types/dictionary) | | Velocity | [Dictionary](../../block-documentation/types/dictionary) | ### Block Reference | Block Name | Location | | - | - | | [Flow Analysis](../../block-documentation/blocks/fluids/analysis/flow-analysis) | Fluids/Analysis | | [Import CFD Analysis Result](../../block-documentation/blocks/fluids/exchange/import-cfd-analysis-result) | Fluids/Exchange | | [Aircraft Flow Analysis](../../block-documentation/blocks/beta/fluids/aircraft-flow-analysis) | Beta/Fluids | # CFD Boundary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cfd-boundary An object with information about boundary regions from an FE Mesh selection. ### Properties | Name | Type | | - | - | | Fe Boundary | [FE Boundary](../../block-documentation/types/fe-boundary) | | List | [CFD Boundary List](../../block-documentation/types/cfd-boundary) | ### Block Reference | Block Name | Location | | - | - | | [CFD Boundary on FE Mesh](../../block-documentation/blocks/fluids/exchange/cfd-boundary-on-fe-mesh) | Fluids/Exchange | # Choice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/choice An object containing a set of named values that act as unique identifiers. ### Properties | Name | Type | | - | - | | Count | [Integer](../../block-documentation/types/integer) | | List | [Choice List](../../block-documentation/types/choice) | | Names | [Text List](../../block-documentation/types/text) | | Selected Index | [Integer](../../block-documentation/types/integer) | | Selected Name | [Text](../../block-documentation/types/text) | # Circle (old) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/circle-old A perfectly round 2-dimensional object, defined on a plane. ### Properties | Name | Type | | - | - | | Axis | [Axis](../../block-documentation/types/axis) | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Center | [Point](../../block-documentation/types/point) | | List | [Circle (old) List](../../block-documentation/types/circle-old) | | Normal | [Vector](../../block-documentation/types/vector) | | Plane | [Plane](../../block-documentation/types/plane) | | Profile | [Profile (old)](../../block-documentation/types/profile-old) | | Radius | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Circle](../../block-documentation/blocks/create/primitives/circle) | Create/Primitives | # CLF Arcam slice data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/clf-arcam-slice-data An object that represents slices exported as an Arcam CLF file. ### Properties | Name | Type | | - | - | | List | [CLF Arcam slice data List](../../block-documentation/types/clf-arcam-slice-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Slices to Arcam ABF](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-arcam-abf) | Manufacturing/Exchange | # CLF slice data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/clf-slice-data An object that represents slices exported as a CLF file. ### Properties | Name | Type | | - | - | | List | [CLF slice data List](../../block-documentation/types/clf-slice-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Slices to CLF](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-clf) | Manufacturing/Exchange | # CLI slice data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cli-slice-data An object that represents slices exported as a CLI file. ### Properties | Name | Type | | - | - | | List | [CLI slice data List](../../block-documentation/types/cli-slice-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Slices to CLI](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cli) | Manufacturing/Exchange | | [Export Slices to Renishaw](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-renishaw) | Manufacturing/Exchange | | [Export Slices to EOS](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-eos) | Manufacturing/Exchange | | [Export CLI Points](../../block-documentation/blocks/manufacturing/exchange/export-cli-points) | Manufacturing/Exchange | # Closest point properties Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/closest-point-properties An object that contains data about a closest point query. ### Properties | Name | Type | | - | - | | Distance | [Scalar](../../block-documentation/types/scalar) | | List | [Closest point properties List](../../block-documentation/types/closest-point-properties) | | Normal | [Vector](../../block-documentation/types/vector) | | Point | [Point](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [Closest Point](../../block-documentation/blocks/modeling/utilities/closest-point) | Modeling/Utilities | # CLS slice data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cls-slice-data An object that represents slices exported as a CLS file. ### Properties | Name | Type | | - | - | | List | [CLS slice data List](../../block-documentation/types/cls-slice-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Slices to CLS](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-cls) | Manufacturing/Exchange | # Color Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/color Color represented as RGBA values between 0 and 1. ### Properties | Name | Type | | - | - | | A | [Scalar](../../block-documentation/types/scalar) | | B | [Scalar](../../block-documentation/types/scalar) | | G | [Scalar](../../block-documentation/types/scalar) | | List | [Color List](../../block-documentation/types/color) | | R | [Scalar](../../block-documentation/types/scalar) | | Text | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Color](../../block-documentation/blocks/create/color/color) | Create/Color | # Column Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/column An object for a column of tabular data that is often stored as part of a table in a text file or in a spreadsheet. ### Properties | Name | Type | | - | - | | Header | [Text](../../block-documentation/types/text) | | List | [Column List](../../block-documentation/types/column) | | Rows | [Text List](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Column from Text](../../block-documentation/blocks/utilities/general/column-from-text) | Utilities/General | # Command Output Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/command-output Represents the output of a command line shell execution including an exit status, output message, and error message. ### Properties | Name | Type | | - | - | | Error | [Text](../../block-documentation/types/text) | | Exit Code | [Integer](../../block-documentation/types/integer) | | List | [Command Output List](../../block-documentation/types/command-output) | | Output | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Run Command](../../block-documentation/blocks/utilities/system/run-command) | Utilities/System | # Component Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/component A component of a part, containing a template part, an instance part, and a placement. ### Properties | Name | Type | | - | - | | Instance | [Part](../../block-documentation/types/part) | | List | [Component List](../../block-documentation/types/component) | | Name | [Text](../../block-documentation/types/text) | | Placement | [Transformation](../../block-documentation/types/transformation) | | Template | [Part](../../block-documentation/types/part) | # Cone Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cone A perpendicular extrusion of a circle, tapered to a circle or a point. ### Properties | Name | Type | | - | - | | Axis | [Axis](../../block-documentation/types/axis) | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | End Point | [Point](../../block-documentation/types/point) | | End Radius | [Scalar](../../block-documentation/types/scalar) | | List | [Cone List](../../block-documentation/types/cone) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Start Point | [Point](../../block-documentation/types/point) | | Start Radius | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Cone](../../block-documentation/blocks/create/primitives/cone) | Create/Primitives | # Conformal Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/conformal-rule ### Properties | Name | Type | | - | - | | List | [Conformal Rule List](../../block-documentation/types/conformal-rule) | | Name | [Text](../../block-documentation/types/text) | # Connector Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/connector An object with connections of translational, rotational, as well as other specified active degrees of freedom between the boundary regions of two distinct FE Meshes. ### Properties | Name | Type | | - | - | | Connector Count | [Integer](../../block-documentation/types/integer) | | Dependent Region | [FE Boundary](../../block-documentation/types/fe-boundary) | | Dependent Virtual Region | [Virtual Boundary](../../block-documentation/types/virtual-boundary) | | Independent Region | [FE Boundary](../../block-documentation/types/fe-boundary) | | Independent Virtual Region | [Virtual Boundary](../../block-documentation/types/virtual-boundary) | | List | [Connector List](../../block-documentation/types/connector) | ### Block Reference | Block Name | Location | | - | - | | [Tie Constraint](../../block-documentation/blocks/structures/model/tie-constraint) | Structures/Model | | [Structural Contact](../../block-documentation/blocks/structures/model/structural-contact) | Structures/Model | | [Thermal Bonded Contact](../../block-documentation/blocks/structures/model/thermal-bonded-contact) | Structures/Model | | [Cyclic Symmetry](../../block-documentation/blocks/structures/model/cyclic-symmetry) | Structures/Model | | [Rigid Connector](../../block-documentation/blocks/structures/model/rigid-connector) | Structures/Model | | [Spring](../../block-documentation/blocks/structures/model/spring) | Structures/Model | | [FE Lattice Connector](../../block-documentation/blocks/design-analysis/model-assembly/fe-lattice-connector) | Design Analysis/Model Assembly | # Convection Heat Flux Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/convection-heat-flux A boundary condition that applies a heat flux. ### Properties | Name | Type | | - | - | | List | [Convection Heat Flux List](../../block-documentation/types/convection-heat-flux) | ### Block Reference | Block Name | Location | | - | - | | [Convection Boundary Load](../../block-documentation/blocks/structures/boundary-conditions/convection-boundary-load) | Structures/Boundary Conditions | # Curve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/curve A Line, Arc, Spline, or Polycurve. ### Properties | Name | Type | | - | - | | Arc Length Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Closed | [Bool](../../block-documentation/types/bool) | | End Point | [Point](../../block-documentation/types/point) | | End Tangent | [Vector](../../block-documentation/types/vector) | | Length | [Scalar](../../block-documentation/types/scalar) | | List | [Curve List](../../block-documentation/types/curve) | | Name | [Text](../../block-documentation/types/text) | | Reversed Curve | [Curve](../../block-documentation/types/curve) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Start Point | [Point](../../block-documentation/types/point) | | Start Tangent | [Vector](../../block-documentation/types/vector) | ### Block Reference | Block Name | Location | | - | - | | [Mirror Curve](../../block-documentation/blocks/create/curves/mirror-curve) | Create/Curves | | [Project Curve to Plane](../../block-documentation/blocks/modeling/utilities/project-curve-to-plane) | Modeling/Utilities | | [Streamline](../../block-documentation/blocks/fluids/utilities/streamline) | Fluids/Utilities | # Curve (old) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/curve-old A non-uniform rational basis spline (NURBS) curve. ### Properties | Name | Type | | - | - | | Control Points | [Point List](../../block-documentation/types/point) | | Degree | [Integer](../../block-documentation/types/integer) | | Length | [Scalar](../../block-documentation/types/scalar) | | List | [Curve (old) List](../../block-documentation/types/curve-old) | # Cylinder Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cylinder A perpendicular extrusion of a circle. ### Properties | Name | Type | | - | - | | Axis | [Axis](../../block-documentation/types/axis) | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | End Point | [Point](../../block-documentation/types/point) | | List | [Cylinder List](../../block-documentation/types/cylinder) | | Radius | [Scalar](../../block-documentation/types/scalar) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Start Point | [Point](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [Cylinder](../../block-documentation/blocks/create/primitives/cylinder) | Create/Primitives | | [Cylinder from Line Segment](../../block-documentation/blocks/create/primitives/cylinder-from-line-segment) | Create/Primitives | # Cylindrical Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/cylindrical-restraint A boundary condition that restrains displacement in the 3 cylindrical directions - Radial, Tangential and Axial. ### Properties | Name | Type | | - | - | | Axis | [Axis](../../block-documentation/types/axis) | | Boundary | [FE Boundary](../../block-documentation/types/fe-boundary) | | List | [Cylindrical Restraint List](../../block-documentation/types/cylindrical-restraint) | | R | [Scalar](../../block-documentation/types/scalar) | | Theta | [Scalar](../../block-documentation/types/scalar) | | Z | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Cylindrical Restraint](../../block-documentation/blocks/structures/boundary-conditions/cylindrical-restraint) | Structures/Boundary Conditions | # Design Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/design-constraint A constraint used in topology optimization. ### Properties | Name | Type | | - | - | | List | [Design Constraint List](../../block-documentation/types/design-constraint) | ### Block Reference | Block Name | Location | | - | - | | [Design Response Constraint](../../block-documentation/blocks/optimization/constraints/design-response-constraint) | Optimization/Constraints | | [Passive Region Constraint](../../block-documentation/blocks/optimization/constraints/passive-region-constraint) | Optimization/Constraints | | [Planar Symmetry Constraint](../../block-documentation/blocks/optimization/constraints/planar-symmetry-constraint) | Optimization/Constraints | | [Overhang Constraint](../../block-documentation/blocks/optimization/constraints/overhang-constraint) | Optimization/Constraints | | [Extrusion Constraint](../../block-documentation/blocks/optimization/constraints/extrusion-constraint) | Optimization/Constraints | | [Volume Fraction Constraint](../../block-documentation/blocks/optimization/constraints/volume-fraction-constraint) | Optimization/Constraints | | [Stress Constraint](../../block-documentation/blocks/optimization/constraints/stress-constraint) | Optimization/Constraints | | [Displacement Constraint](../../block-documentation/blocks/optimization/constraints/displacement-constraint) | Optimization/Constraints | | [Natural Frequency Constraint](../../block-documentation/blocks/optimization/constraints/natural-frequency-constraint) | Optimization/Constraints | | [Min Feature Size Constraint](../../block-documentation/blocks/optimization/constraints/min-feature-size-constraint) | Optimization/Constraints | | [Max Feature Size Constraint](../../block-documentation/blocks/optimization/constraints/max-feature-size-constraint) | Optimization/Constraints | | [Demold Constraint](../../block-documentation/blocks/optimization/constraints/demold-constraint) | Optimization/Constraints | | [Remap Constraint](../../block-documentation/blocks/optimization/constraints/remap-constraint) | Optimization/Constraints | | [Pattern Repetition Constraint](../../block-documentation/blocks/optimization/constraints/pattern-repetition-constraint) | Optimization/Constraints | | [3-Axis Milling Constraint](../../block-documentation/blocks/optimization/constraints/3-axis-milling-constraint) | Optimization/Constraints | | [5-Axis Milling Constraint](../../block-documentation/blocks/optimization/constraints/5-axis-milling-constraint) | Optimization/Constraints | # Design Objective Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/design-objective An objective used in topology optimization. ### Properties | Name | Type | | - | - | | List | [Design Objective List](../../block-documentation/types/design-objective) | ### Block Reference | Block Name | Location | | - | - | | [Design Objective](../../block-documentation/blocks/optimization/responses/design-objective) | Optimization/Responses | # Design Response Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/design-response A design response used as either an objective or constraint in topology optimization ### Properties | Name | Type | | - | - | | List | [Design Response List](../../block-documentation/types/design-response) | ### Block Reference | Block Name | Location | | - | - | | [Structural Compliance Response](../../block-documentation/blocks/optimization/responses/structural-compliance-response) | Optimization/Responses | | [Volume Fraction Response](../../block-documentation/blocks/optimization/responses/volume-fraction-response) | Optimization/Responses | | [Stress Response](../../block-documentation/blocks/optimization/responses/stress-response) | Optimization/Responses | | [Displacement Response](../../block-documentation/blocks/optimization/responses/displacement-response) | Optimization/Responses | | [Natural Frequency Response](../../block-documentation/blocks/optimization/responses/natural-frequency-response) | Optimization/Responses | | [Mass Response](../../block-documentation/blocks/optimization/responses/mass-response) | Optimization/Responses | | [Center of Mass Response](../../block-documentation/blocks/optimization/responses/center-of-mass-response) | Optimization/Responses | | [Moment of Inertia Response](../../block-documentation/blocks/optimization/responses/moment-of-inertia-response) | Optimization/Responses | | [Reaction Force Response](../../block-documentation/blocks/optimization/responses/reaction-force-response) | Optimization/Responses | | [Combine Design Responses](../../block-documentation/blocks/optimization/responses/combine-design-responses) | Optimization/Responses | # Dictionary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/dictionary A mapping from keys to values. ### Properties | Name | Type | | - | - | | Keys | [Integer List](../../block-documentation/types/integer) | | List | [Dictionary List](../../block-documentation/types/dictionary) | | Values | [FE Point List](../../block-documentation/types/fe-point) | ### Block Reference | Block Name | Location | | - | - | | [Dictionary](../../block-documentation/blocks/utilities/general/dictionary) | Utilities/General | # Face Parameterization Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/face-parameterization A representation of the UV parameterization of a CAD face. ### Properties | Name | Type | | - | - | | List | [Face Parameterization List](../../block-documentation/types/face-parameterization) | ### Block Reference | Block Name | Location | | - | - | | [Reparameterize CAD Face](../../block-documentation/blocks/modeling/utilities/reparameterize-cad-face) | Modeling/Utilities | # FE Boundary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-boundary An object with information about boundary regions from an FE Mesh selection. ### Properties | Name | Type | | - | - | | Edge Count | [Integer](../../block-documentation/types/integer) | | Face Count | [Integer](../../block-documentation/types/integer) | | Fe Mesh | [FE Mesh](../../block-documentation/types/fe-mesh) | | List | [FE Boundary List](../../block-documentation/types/fe-boundary) | | Name | [Text](../../block-documentation/types/text) | | Node Count | [Integer](../../block-documentation/types/integer) | | Nodes | [Point List](../../block-documentation/types/point) | | Parent Mesh | [FE Mesh](../../block-documentation/types/fe-mesh) | ### Block Reference | Block Name | Location | | - | - | | [FE Boundary by Body](../../block-documentation/blocks/structures/utilities/fe-boundary-by-body) | Structures/Utilities | | [FE Boundary by Flood Fill](../../block-documentation/blocks/structures/utilities/fe-boundary-by-flood-fill) | Structures/Utilities | | [FE Boundary by CAD Face](../../block-documentation/blocks/design-analysis/selection-sets/fe-boundary-by-cad-face) | Design Analysis/Selection Sets | # FE Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-domain An object with information about FE mesh with corresponding attributes assigned to mesh elements. ### Properties | Name | Type | | - | - | | Attributes | [Solid Attribute List](../../block-documentation/types/solid-attribute) | | Element Count | [Integer](../../block-documentation/types/integer) | | Fe Mesh | [FE Mesh](../../block-documentation/types/fe-mesh) | | Fe Model | [FE Model](../../block-documentation/types/fe-model) | | List | [FE Domain List](../../block-documentation/types/fe-domain) | | Node Count | [Integer](../../block-documentation/types/integer) | | Parametric Fe Domain | [Parametric FE Domain](../../block-documentation/types/parametric-fe-domain) | ### Block Reference | Block Name | Location | | - | - | | [Solid Domain](../../block-documentation/blocks/structures/model/solid-domain) | Structures/Model | | [Lattice Domain](../../block-documentation/blocks/structures/model/lattice-domain) | Structures/Model | | [FE Solid Domain](../../block-documentation/blocks/design-analysis/model-assembly/fe-solid-domain) | Design Analysis/Model Assembly | # FE Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-mesh A representation of a geometry made up of solids, beams, or shells for running simulations on. ### Properties | Name | Type | | - | - | | Associated Geometries | [CAD Body List](../../block-documentation/types/cad-body) | | Beams | [Beam List](../../block-documentation/types/beam) | | Element Count | [Integer](../../block-documentation/types/integer) | | List | [FE Mesh List](../../block-documentation/types/fe-mesh) | | Node Count | [Integer](../../block-documentation/types/integer) | | Surface Mesh | [Mesh](../../block-documentation/types/mesh) | | Volume Mesh | [Volume Mesh](../../block-documentation/types/volume-mesh) | ### Block Reference | Block Name | Location | | - | - | | [FE Volume Mesh](../../block-documentation/blocks/structures/mesh/fe-volume-mesh) | Structures/Mesh | | [FE Lattice Mesh](../../block-documentation/blocks/structures/mesh/fe-lattice-mesh) | Structures/Mesh | | [FE Surface Mesh](../../block-documentation/blocks/structures/mesh/fe-surface-mesh) | Structures/Mesh | | [FE CAD Solid Mesh](../../block-documentation/blocks/structures/mesh/fe-cad-solid-mesh) | Structures/Mesh | | [FE Shell Mesh from CAD](../../block-documentation/blocks/structures/mesh/fe-shell-mesh-from-cad) | Structures/Mesh | | [Mirror FE Mesh](../../block-documentation/blocks/structures/mesh/mirror-fe-mesh) | Structures/Mesh | | [Merge FE Meshes](../../block-documentation/blocks/structures/mesh/merge-fe-meshes) | Structures/Mesh | | [Associate FE Mesh](../../block-documentation/blocks/structures/mesh/associate-fe-mesh) | Structures/Mesh | | [Import FE Mesh](../../block-documentation/blocks/structures/exchange/import-fe-mesh) | Structures/Exchange | | [FE Volume Mesh from Implicit](../../block-documentation/blocks/design-analysis/mesh-generation/fe-volume-mesh-from-implicit) | Design Analysis/Mesh Generation | | [FE Tetrahedral Mesh](../../block-documentation/blocks/design-analysis/mesh-generation/fe-tetrahedral-mesh) | Design Analysis/Mesh Generation | | [FE Robust Tetrahedral Mesh](../../block-documentation/blocks/design-analysis/mesh-generation/fe-robust-tetrahedral-mesh) | Design Analysis/Mesh Generation | | [FE Shell Mesh](../../block-documentation/blocks/design-analysis/mesh-generation/fe-shell-mesh) | Design Analysis/Mesh Generation | # FE Mesh File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-mesh-file-data An object that represents an exported FE mesh file. ### Properties | Name | Type | | - | - | | List | [FE Mesh File Data List](../../block-documentation/types/fe-mesh-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export FE Mesh](../../block-documentation/blocks/structures/exchange/export-fe-mesh) | Structures/Exchange | | [Export FE Model](../../block-documentation/blocks/structures/exchange/export-fe-model) | Structures/Exchange | | [Export Static Analysis](../../block-documentation/blocks/structures/exchange/export-static-analysis) | Structures/Exchange | | [Export Modal Analysis](../../block-documentation/blocks/structures/exchange/export-modal-analysis) | Structures/Exchange | | [Export Buckling Analysis](../../block-documentation/blocks/structures/exchange/export-buckling-analysis) | Structures/Exchange | | [Export Thermal Analysis](../../block-documentation/blocks/structures/exchange/export-thermal-analysis) | Structures/Exchange | | [Export FE Mesh to CFD](../../block-documentation/blocks/fluids/exchange/export-fe-mesh-to-cfd) | Fluids/Exchange | # FE Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-model An object with information about all of the components and the connectivity information between them. ### Properties | Name | Type | | - | - | | Connectors | [Connector List](../../block-documentation/types/connector) | | Element Count | [Integer](../../block-documentation/types/integer) | | Fe Domains | [FE Domain List](../../block-documentation/types/fe-domain) | | List | [FE Model List](../../block-documentation/types/fe-model) | | Node Count | [Integer](../../block-documentation/types/integer) | ### Block Reference | Block Name | Location | | - | - | | [Simulation Model](../../block-documentation/blocks/structures/model/simulation-model) | Structures/Model | | [FE Solid Model](../../block-documentation/blocks/design-analysis/model-assembly/fe-solid-model) | Design Analysis/Model Assembly | # FE Point Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-point An object with the location of a FE Point. ### Properties | Name | Type | | - | - | | Fe Boundary | [FE Boundary](../../block-documentation/types/fe-boundary) | | Fe Mesh | [FE Mesh](../../block-documentation/types/fe-mesh) | | Fe Region | [FE Region](../../block-documentation/types/fe-region) | | List | [FE Point List](../../block-documentation/types/fe-point) | | Point | [Point](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [FE Point](../../block-documentation/blocks/structures/mesh/fe-point) | Structures/Mesh | # FE Region Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-region An object with information about the mesh entity (solid, shell, or beam) from an FE mesh selection. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Element Count | [Integer](../../block-documentation/types/integer) | | Fe Mesh | [FE Mesh](../../block-documentation/types/fe-mesh) | | List | [FE Region List](../../block-documentation/types/fe-region) | | Name | [Text](../../block-documentation/types/text) | | Parent Mesh | [FE Mesh](../../block-documentation/types/fe-mesh) | ### Block Reference | Block Name | Location | | - | - | | [FE Region by Body](../../block-documentation/blocks/structures/utilities/fe-region-by-body) | Structures/Utilities | | [FE Region by CAD Body](../../block-documentation/blocks/design-analysis/selection-sets/fe-region-by-cad-body) | Design Analysis/Selection Sets | # FE Set Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fe-set A selected region or boundary. ### Properties | Name | Type | | - | - | | List | [FE Set List](../../block-documentation/types/fe-set) | # Field Optimization Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/field-optimization-result An object that contains data generated from a Field Optimization. ### Properties | Name | Type | | - | - | | Design Variable Count | [Integer](../../block-documentation/types/integer) | | Dof Count | [Integer](../../block-documentation/types/integer) | | Element Count | [Integer](../../block-documentation/types/integer) | | Iterations | [Integer](../../block-documentation/types/integer) | | List | [Field Optimization Result List](../../block-documentation/types/field-optimization-result) | | Load Case Count | [Integer](../../block-documentation/types/integer) | | Node Count | [Integer](../../block-documentation/types/integer) | | Optimized Model | [Parametric FE Model](../../block-documentation/types/parametric-fe-model) | | Saved Iterations | [Integer List](../../block-documentation/types/integer) | ### Block Reference | Block Name | Location | | - | - | | [Field Optimization](../../block-documentation/blocks/optimization/field-optimization/field-optimization) | Optimization/Field Optimization | # Floating Comment Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/floating-comment Internal object for floating comments. # Fluid Attribute Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/fluid-attribute An object with material assignment and fluid properties of selected interior regions (or the entirety) of a fluid domain. ### Properties | Name | Type | | - | - | | List | [Fluid Attribute List](../../block-documentation/types/fluid-attribute) | ### Block Reference | Block Name | Location | | - | - | | [Fluid Attribute](../../block-documentation/blocks/fluids/material-information/fluid-attribute) | Fluids/Material Information | # Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/force A boundary condition that applies a force. ### Properties | Name | Type | | - | - | | List | [Force List](../../block-documentation/types/force) | ### Block Reference | Block Name | Location | | - | - | | [Force](../../block-documentation/blocks/structures/boundary-conditions/force) | Structures/Boundary Conditions | # Frame Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/frame A local coordinate system. ### Properties | Name | Type | | - | - | | List | [Frame List](../../block-documentation/types/frame) | | Origin | [Point](../../block-documentation/types/point) | | Transform | [Transformation](../../block-documentation/types/transformation) | | X Axis | [Vector](../../block-documentation/types/vector) | | Xy Plane | [Plane](../../block-documentation/types/plane) | | Xz Plane | [Plane](../../block-documentation/types/plane) | | Y Axis | [Vector](../../block-documentation/types/vector) | | Yz Plane | [Plane](../../block-documentation/types/plane) | | Z Axis | [Vector](../../block-documentation/types/vector) | ### Block Reference | Block Name | Location | | - | - | | [Frame](../../block-documentation/blocks/create/vectors/frame) | Create/Vectors | | [Frame Along Curve](../../block-documentation/blocks/create/curves/frame-along-curve) | Create/Curves | # Function Inputs Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/function-inputs A formal type used to represent the inputs to a function object # Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/graph A collection of beams and vertices that interconnect to create a structure. This object has no thickness data connected to it. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Edge Count | [Integer](../../block-documentation/types/integer) | | Face Count | [Integer](../../block-documentation/types/integer) | | Faces As Mesh | [Mesh](../../block-documentation/types/mesh) | | Line Segments | [Line List](../../block-documentation/types/line) | | List | [Graph List](../../block-documentation/types/graph) | | Vertex Count | [Integer](../../block-documentation/types/integer) | | Vertex Valencies | [Integer List](../../block-documentation/types/integer) | | Vertices | [Point List](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [Collapse Vertices](../../block-documentation/blocks/modeling/utilities/collapse-vertices) | Modeling/Utilities | | [Merge Graphs](../../block-documentation/blocks/modeling/utilities/merge-graphs) | Modeling/Utilities | | [Trim Lattice](../../block-documentation/blocks/lattices/utilities/trim-lattice) | Lattices/Utilities | | [Collapse Vertices by Angle](../../block-documentation/blocks/lattices/utilities/collapse-vertices-by-angle) | Lattices/Utilities | | [Graph from Line Segments](../../block-documentation/blocks/lattices/utilities/graph-from-line-segments) | Lattices/Utilities | | [Graph from Mesh Faces](../../block-documentation/blocks/lattices/utilities/graph-from-mesh-faces) | Lattices/Utilities | | [Import Lattice Graph](../../block-documentation/blocks/utilities/exchange/import-lattice-graph) | Utilities/Exchange | | [Manufacturing Support Beams](../../block-documentation/blocks/beta/manufacturing/manufacturing-support-beams) | Beta/Manufacturing | | [Graph by Planar Projection](../../block-documentation/blocks/rib-design/create/graph-by-planar-projection) | Rib Design/Create | | [Graph by Swept Projection](../../block-documentation/blocks/rib-design/create/graph-by-swept-projection) | Rib Design/Create | | [Graph by Cylindrical Projection](../../block-documentation/blocks/rib-design/create/graph-by-cylindrical-projection) | Rib Design/Create | | [Graph on CAD Face](../../block-documentation/blocks/rib-design/create/graph-on-cad-face) | Rib Design/Create | | [Graph on Quad Mesh](../../block-documentation/blocks/rib-design/create/graph-on-quad-mesh) | Rib Design/Create | | [Voronoi Surface Graph](../../block-documentation/blocks/rib-design/create/voronoi-surface-graph) | Rib Design/Create | | [Relax Graph](../../block-documentation/blocks/rib-design/create/relax-graph) | Rib Design/Create | | [Simple Conformal Lattice from Face](../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-from-face) | Architected Materials/Latticing | | [Simple Conformal Lattice between Faces](../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-between-faces) | Architected Materials/Latticing | | [Tet Lattice from CAD Body](../../block-documentation/blocks/architected-materials/latticing/tet-lattice-from-cad-body) | Architected Materials/Latticing | | [Voronoi Surface Lattice from CAD Face](../../block-documentation/blocks/architected-materials/latticing/voronoi-surface-lattice-from-cad-face) | Architected Materials/Latticing | | [Conformal Branching Lattice](../../block-documentation/blocks/architected-materials/latticing/conformal-branching-lattice) | Architected Materials/Latticing | | [Surface Lattice from CAD Face](../../block-documentation/blocks/architected-materials/latticing/surface-lattice-from-cad-face) | Architected Materials/Latticing | | [Remove Any Beams](../../block-documentation/blocks/architected-materials/utilities/remove-any-beams) | Architected Materials/Utilities | | [Remove Floating Beams](../../block-documentation/blocks/architected-materials/utilities/remove-floating-beams) | Architected Materials/Utilities | | [Remove Open Beams](../../block-documentation/blocks/architected-materials/utilities/remove-open-beams) | Architected Materials/Utilities | # Group Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/group A structure that can hold multiple objects of varying types. ### Properties | Name | Type | | - | - | | List | [Group List](../../block-documentation/types/group) | # Heat Flux Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/heat-flux A boundary condition that applies a heat flux. ### Properties | Name | Type | | - | - | | List | [Heat Flux List](../../block-documentation/types/heat-flux) | ### Block Reference | Block Name | Location | | - | - | | [Surface Heat Flux](../../block-documentation/blocks/structures/boundary-conditions/surface-heat-flux) | Structures/Boundary Conditions | # Heat Generation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/heat-generation A boundary condition that applies a heat generation. ### Properties | Name | Type | | - | - | | List | [Heat Generation List](../../block-documentation/types/heat-generation) | ### Block Reference | Block Name | Location | | - | - | | [Volumetric Heat Generation](../../block-documentation/blocks/structures/boundary-conditions/volumetric-heat-generation) | Structures/Boundary Conditions | | [Heat Generation](../../block-documentation/blocks/structures/boundary-conditions/heat-generation) | Structures/Boundary Conditions | # Homogenization Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/homogenization-result An object that contains data from the output of a homogenization process. ### Properties | Name | Type | | - | - | | Dof Count | [Integer](../../block-documentation/types/integer) | | Element Count | [Integer](../../block-documentation/types/integer) | | List | [Homogenization Result List](../../block-documentation/types/homogenization-result) | | Material | [Anisotropic Material](../../block-documentation/types/anisotropic-material) | | Node Count | [Integer](../../block-documentation/types/integer) | | Relative Density | [Scalar](../../block-documentation/types/scalar) | | Zener Ratio | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Homogenize Unit Cell](../../block-documentation/blocks/structures/analysis/homogenize-unit-cell) | Structures/Analysis | # Implicit Body Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/implicit-body A 3-dimensional Implicit geometry represented by a distance field in units of length. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Inverted | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Implicit Body List](../../block-documentation/types/implicit-body) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Rounded Box](../../block-documentation/blocks/create/primitives/rounded-box) | Create/Primitives | | [Rounded Cylinder](../../block-documentation/blocks/create/primitives/rounded-cylinder) | Create/Primitives | | [Capsule](../../block-documentation/blocks/create/primitives/capsule) | Create/Primitives | | [Spline Distance Field](../../block-documentation/blocks/create/primitives/spline-distance-field) | Create/Primitives | | [Cubic Bezier Distance Field](../../block-documentation/blocks/create/primitives/cubic-bezier-distance-field) | Create/Primitives | | [Conic Distance Field](../../block-documentation/blocks/create/primitives/conic-distance-field) | Create/Primitives | | [Extrude Profile](../../block-documentation/blocks/modeling/operations/extrude-profile) | Modeling/Operations | | [Extruded Cut](../../block-documentation/blocks/modeling/operations/extruded-cut) | Modeling/Operations | | [Offset Body](../../block-documentation/blocks/modeling/operations/offset-body) | Modeling/Operations | | [Thicken Body](../../block-documentation/blocks/modeling/operations/thicken-body) | Modeling/Operations | | [Shell](../../block-documentation/blocks/modeling/operations/shell) | Modeling/Operations | | [Shear](../../block-documentation/blocks/modeling/operations/shear) | Modeling/Operations | | [Revolve Profile](../../block-documentation/blocks/modeling/operations/revolve-profile) | Modeling/Operations | | [Sweep along One Rail](../../block-documentation/blocks/modeling/operations/sweep-along-one-rail) | Modeling/Operations | | [Sweep along Two Rails](../../block-documentation/blocks/modeling/operations/sweep-along-two-rails) | Modeling/Operations | | [Sweep Profile](../../block-documentation/blocks/modeling/operations/sweep-profile) | Modeling/Operations | | [Twist](../../block-documentation/blocks/modeling/operations/twist) | Modeling/Operations | | [Array Body](../../block-documentation/blocks/modeling/operations/array-body) | Modeling/Operations | | [Polar Array Body](../../block-documentation/blocks/modeling/operations/polar-array-body) | Modeling/Operations | | [Mirror Body](../../block-documentation/blocks/modeling/operations/mirror-body) | Modeling/Operations | | [Conic Section Sweep](../../block-documentation/blocks/modeling/operations/conic-section-sweep) | Modeling/Operations | | [Conic Section Sweep by Tangent](../../block-documentation/blocks/modeling/operations/conic-section-sweep-by-tangent) | Modeling/Operations | | [Cubic Bezier Section Sweep](../../block-documentation/blocks/modeling/operations/cubic-bezier-section-sweep) | Modeling/Operations | | [Boolean Union](../../block-documentation/blocks/modeling/booleans/boolean-union) | Modeling/Booleans | | [Boolean Subtract](../../block-documentation/blocks/modeling/booleans/boolean-subtract) | Modeling/Booleans | | [Boolean Intersect](../../block-documentation/blocks/modeling/booleans/boolean-intersect) | Modeling/Booleans | | [Clearance](../../block-documentation/blocks/modeling/booleans/clearance) | Modeling/Booleans | | [Pipe Intersection](../../block-documentation/blocks/modeling/booleans/pipe-intersection) | Modeling/Booleans | | [Remap Cylindrical Body](../../block-documentation/blocks/modeling/remap/remap-cylindrical-body) | Modeling/Remap | | [Remap Spherical Body](../../block-documentation/blocks/modeling/remap/remap-spherical-body) | Modeling/Remap | | [Remap Scale Body](../../block-documentation/blocks/modeling/remap/remap-scale-body) | Modeling/Remap | | [Set Bounding Box](../../block-documentation/blocks/modeling/utilities/set-bounding-box) | Modeling/Utilities | | [Refine Bounding Box](../../block-documentation/blocks/modeling/utilities/refine-bounding-box) | Modeling/Utilities | | [Smoothen Body](../../block-documentation/blocks/modeling/utilities/smoothen-body) | Modeling/Utilities | | [Implicit Body from Field Optimization](../../block-documentation/blocks/optimization/field-optimization/implicit-body-from-field-optimization) | Optimization/Field Optimization | | [Implicit Body from Topology Optimization](../../block-documentation/blocks/optimization/post-processing/implicit-body-from-topology-optimization) | Optimization/Post-Processing | | [Construct Optimized Body](../../block-documentation/blocks/optimization/post-processing/construct-optimized-body) | Optimization/Post-Processing | | [Import Implicit Body](../../block-documentation/blocks/utilities/exchange/import-implicit-body) | Utilities/Exchange | | [Implicit Body from Mesh](../../block-documentation/blocks/utilities/conversion/implicit-body-from-mesh) | Utilities/Conversion | | [Implicit Body from Surface](../../block-documentation/blocks/utilities/conversion/implicit-body-from-surface) | Utilities/Conversion | | [Implicit Body from Surface Boundary](../../block-documentation/blocks/utilities/conversion/implicit-body-from-surface-boundary) | Utilities/Conversion | | [Implicit Body from CAD Body](../../block-documentation/blocks/utilities/conversion/implicit-body-from-cad-body) | Utilities/Conversion | | [Implicit Body from Voxel Grid](../../block-documentation/blocks/utilities/conversion/implicit-body-from-voxel-grid) | Utilities/Conversion | | [Set Body Name](../../block-documentation/blocks/beta/modeling/set-body-name) | Beta/Modeling | | [Blend Intersections](../../block-documentation/blocks/rib-design/modify/blend-intersections) | Rib Design/Modify | | [Shell with Reinforcement](../../block-documentation/blocks/additive-manufacturing/material-reduction/shell-with-reinforcement) | Additive Manufacturing/Material Reduction | | [Perforate from CAD Face](../../block-documentation/blocks/additive-manufacturing/material-reduction/perforate-from-cad-face) | Additive Manufacturing/Material Reduction | | [Infill Volume Lattice](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice) | Additive Manufacturing/Material Reduction | | [Infill Gyroid](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-gyroid) | Additive Manufacturing/Material Reduction | | [Merge Shell and Infill](../../block-documentation/blocks/additive-manufacturing/material-reduction/merge-shell-and-infill) | Additive Manufacturing/Material Reduction | | [Orient Body on Build Plane](../../block-documentation/blocks/additive-manufacturing/build-preparation/orient-body-on-build-plane) | Additive Manufacturing/Build Preparation | | [Infill Orthofoam Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-orthofoam-lattice) | Architected Materials/Latticing | | [Infill Tet Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-tet-lattice) | Architected Materials/Latticing | | [Infill Voronoi Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-voronoi-lattice) | Architected Materials/Latticing | | [Infill Delaunay Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-delaunay-lattice) | Architected Materials/Latticing | | [Infill Lattice between Faces](../../block-documentation/blocks/architected-materials/latticing/infill-lattice-between-faces) | Architected Materials/Latticing | | [Surface Roughness](../../block-documentation/blocks/architected-materials/texturing/surface-roughness) | Architected Materials/Texturing | | [Voronoi Emboss](../../block-documentation/blocks/architected-materials/texturing/voronoi-emboss) | Architected Materials/Texturing | | [Voronoi Deboss](../../block-documentation/blocks/architected-materials/texturing/voronoi-deboss) | Architected Materials/Texturing | | [Tessellate Body](../../block-documentation/blocks/architected-materials/texturing/tessellate-body) | Architected Materials/Texturing | | [Perforate Body](../../block-documentation/blocks/architected-materials/texturing/perforate-body) | Architected Materials/Texturing | | [Simplex Noise Deboss](../../block-documentation/blocks/architected-materials/texturing/simplex-noise-deboss) | Architected Materials/Texturing | | [Cellular Noise Deboss](../../block-documentation/blocks/architected-materials/texturing/cellular-noise-deboss) | Architected Materials/Texturing | | [Subtractive Lattice Texture](../../block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture) | Architected Materials/Texturing | | [Subtractive Lattice Texture Blended](../../block-documentation/blocks/architected-materials/texturing/subtractive-lattice-texture-blended) | Architected Materials/Texturing | | [Sphere Grid Deboss](../../block-documentation/blocks/architected-materials/texturing/sphere-grid-deboss) | Architected Materials/Texturing | | [Triangle Wave Texture](../../block-documentation/blocks/architected-materials/texturing/triangle-wave-texture) | Architected Materials/Texturing | | [Voronoi Bubbles ](../../block-documentation/blocks/architected-materials/texturing/voronoi-bubbles) | Architected Materials/Texturing | | [Conformal Foam](../../block-documentation/blocks/lightweighting/surface/conformal-foam) | Lightweighting/Surface | | [Honeycomb Ribbing](../../block-documentation/blocks/lightweighting/surface/honeycomb-ribbing) | Lightweighting/Surface | | [Structural Ribbing](../../block-documentation/blocks/lightweighting/surface/structural-ribbing) | Lightweighting/Surface | | [Voronoi Structural Ribbing](../../block-documentation/blocks/lightweighting/surface/voronoi-structural-ribbing) | Lightweighting/Surface | | [Shell and Gyroid](../../block-documentation/blocks/lightweighting/shelling/shell-and-gyroid) | Lightweighting/Shelling | | [Shell and Voronoi Lattice](../../block-documentation/blocks/lightweighting/shelling/shell-and-voronoi-lattice) | Lightweighting/Shelling | # Implicit Body File Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/implicit-body-file An object that represents the output of an exported implicit body file. ### Properties | Name | Type | | - | - | | List | [Implicit Body File List](../../block-documentation/types/implicit-body-file) | ### Block Reference | Block Name | Location | | - | - | | [Export Implicit Body](../../block-documentation/blocks/utilities/exchange/export-implicit-body) | Utilities/Exchange | # Implicit Lattice Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/implicit-lattice-rule ### Properties | Name | Type | | - | - | | List | [Implicit Lattice Rule List](../../block-documentation/types/implicit-lattice-rule) | | Name | [Text](../../block-documentation/types/text) | # Integer Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/integer A unitless whole number. ### Properties | Name | Type | | - | - | | List | [Integer List](../../block-documentation/types/integer) | | Negative | [Integer](../../block-documentation/types/integer) | | Scalar | [Scalar](../../block-documentation/types/scalar) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Text | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | | [Multiply](../../block-documentation/blocks/math/operations/multiply) | Math/Operations | | [Square](../../block-documentation/blocks/math/operations/square) | Math/Operations | | [Third Power](../../block-documentation/blocks/math/operations/third-power) | Math/Operations | | [Fourth Power](../../block-documentation/blocks/math/operations/fourth-power) | Math/Operations | | [Mod](../../block-documentation/blocks/math/operations/mod) | Math/Operations | | [Min](../../block-documentation/blocks/math/operations/min) | Math/Operations | | [Max](../../block-documentation/blocks/math/operations/max) | Math/Operations | # Isotropic Fluid Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/isotropic-fluid-property Properties for an isotropic fluid. ### Properties | Name | Type | | - | - | | Kinematic Viscosity | [Scalar](../../block-documentation/types/scalar) | | List | [Isotropic Fluid Property List](../../block-documentation/types/isotropic-fluid-property) | ### Block Reference | Block Name | Location | | - | - | | [Isotropic Fluid Property](../../block-documentation/blocks/fluids/material-information/isotropic-fluid-property) | Fluids/Material Information | # Isotropic Linear Elastic Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/isotropic-linear-elastic-property Linear elastic properties for an isotropic material. ### Properties | Name | Type | | - | - | | List | [Isotropic Linear Elastic Property List](../../block-documentation/types/isotropic-linear-elastic-property) | | Poisson's Ratio | [Scalar Field](../../block-documentation/types/scalar-field) | | Shear Modulus | [Scalar Field](../../block-documentation/types/scalar-field) | | Young's Modulus | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Isotropic Linear Elastic Property](../../block-documentation/blocks/structures/material-attributes/isotropic-linear-elastic-property) | Structures/Material Attributes | # Isotropic Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/isotropic-material A material with properties that are consistent in all directions. ### Properties | Name | Type | | - | - | | Density | [Scalar Field](../../block-documentation/types/scalar-field) | | Fluid Property | [Isotropic Fluid Property](../../block-documentation/types/isotropic-fluid-property) | | Linear Elastic Property | [Isotropic Linear Elastic Property](../../block-documentation/types/isotropic-linear-elastic-property) | | List | [Isotropic Material List](../../block-documentation/types/isotropic-material) | | Porous Medium Property | [Isotropic Porous Medium Property](../../block-documentation/types/isotropic-porous-medium-property) | | Thermal Expansion Property | [Isotropic Thermal Expansion Property](../../block-documentation/types/isotropic-thermal-expansion-property) | | Thermal Property | [Isotropic Thermal Property](../../block-documentation/types/isotropic-thermal-property) | ### Block Reference | Block Name | Location | | - | - | | [Isotropic Material](../../block-documentation/blocks/structures/material-attributes/isotropic-material) | Structures/Material Attributes | | [Air](../../block-documentation/blocks/fluids/material-information/air) | Fluids/Material Information | | [Water](../../block-documentation/blocks/fluids/material-information/water) | Fluids/Material Information | | [Al 6061-T6](../../block-documentation/blocks/design-analysis/sample-materials/al-6061-t6) | Design Analysis/Sample Materials | | [Al 7050-T7451](../../block-documentation/blocks/design-analysis/sample-materials/al-7050-t7451) | Design Analysis/Sample Materials | | [Al 7075-T6](../../block-documentation/blocks/design-analysis/sample-materials/al-7075-t6) | Design Analysis/Sample Materials | | [Al-Si-10Mg](../../block-documentation/blocks/design-analysis/sample-materials/al-si-10mg) | Design Analysis/Sample Materials | | [Inconel 625](../../block-documentation/blocks/design-analysis/sample-materials/inconel-625) | Design Analysis/Sample Materials | | [Inconel 718](../../block-documentation/blocks/design-analysis/sample-materials/inconel-718) | Design Analysis/Sample Materials | | [Ti-6Al-4V](../../block-documentation/blocks/design-analysis/sample-materials/ti-6al-4v) | Design Analysis/Sample Materials | | [Stainless Steel 316](../../block-documentation/blocks/design-analysis/sample-materials/stainless-steel-316) | Design Analysis/Sample Materials | # Isotropic Material Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/isotropic-material-property Linear elastic properties for an isotropic material. ### Properties | Name | Type | | - | - | | List | [Isotropic Material Property List](../../block-documentation/types/isotropic-material-property) | # Isotropic Porous Medium Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/isotropic-porous-medium-property Properties for an isotropic porous medium. ### Properties | Name | Type | | - | - | | Forchheimer | [Scalar](../../block-documentation/types/scalar) | | List | [Isotropic Porous Medium Property List](../../block-documentation/types/isotropic-porous-medium-property) | | Permeability | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Isotropic Porous Medium Property](../../block-documentation/blocks/fluids/material-information/isotropic-porous-medium-property) | Fluids/Material Information | # Isotropic Thermal Expansion Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/isotropic-thermal-expansion-property Thermal expansion properties for an isotropic material. ### Properties | Name | Type | | - | - | | Alpha | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Isotropic Thermal Expansion Property List](../../block-documentation/types/isotropic-thermal-expansion-property) | ### Block Reference | Block Name | Location | | - | - | | [Isotropic Thermal Expansion Property](../../block-documentation/blocks/structures/material-attributes/isotropic-thermal-expansion-property) | Structures/Material Attributes | # Isotropic Thermal Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/isotropic-thermal-property An object with thermal properties for an isotropic material. ### Properties | Name | Type | | - | - | | Conductivity | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Isotropic Thermal Property List](../../block-documentation/types/isotropic-thermal-property) | | Specific Heat | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Isotropic Thermal Property](../../block-documentation/blocks/structures/material-attributes/isotropic-thermal-property) | Structures/Material Attributes | # JSON Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/json An object that contains a JSON. ### Properties | Name | Type | | - | - | | Keys | [Text List](../../block-documentation/types/text) | | List | [JSON List](../../block-documentation/types/json) | ### Block Reference | Block Name | Location | | - | - | | [JSON From Dictionary](../../block-documentation/blocks/utilities/general/json-from-dictionary) | Utilities/General | | [JSON From Tuple](../../block-documentation/blocks/beta/create/json-from-tuple) | Beta/Create | # JSON File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/json-file-data JSON file data type. ### Properties | Name | Type | | - | - | | List | [JSON File Data List](../../block-documentation/types/json-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export JSON](../../block-documentation/blocks/utilities/general/export-json) | Utilities/General | # Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/lattice An object that contains data for a periodic lattice structure. ### Properties | Name | Type | | - | - | | Beams | [Beam List](../../block-documentation/types/beam) | | Implicit | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Lattice List](../../block-documentation/types/lattice) | | Thick Graph | [Thick Graph](../../block-documentation/types/thick-graph) | ### Block Reference | Block Name | Location | | - | - | | [Collapse Vertices](../../block-documentation/blocks/modeling/utilities/collapse-vertices) | Modeling/Utilities | | [Merge Graphs](../../block-documentation/blocks/modeling/utilities/merge-graphs) | Modeling/Utilities | | [Rectangular Volume Lattice](../../block-documentation/blocks/lattices/lattice/rectangular-volume-lattice) | Lattices/Lattice | | [Cylindrical Volume Lattice](../../block-documentation/blocks/lattices/lattice/cylindrical-volume-lattice) | Lattices/Lattice | | [Spherical Volume Lattice](../../block-documentation/blocks/lattices/lattice/spherical-volume-lattice) | Lattices/Lattice | | [Periodic Lattice](../../block-documentation/blocks/lattices/lattice/periodic-lattice) | Lattices/Lattice | | [Lattice from Surface Mesh](../../block-documentation/blocks/lattices/conformal/lattice-from-surface-mesh) | Lattices/Conformal | | [Lattice from Volume Mesh](../../block-documentation/blocks/lattices/conformal/lattice-from-volume-mesh) | Lattices/Conformal | | [Branched Lattice](../../block-documentation/blocks/lattices/stochastic/branched-lattice) | Lattices/Stochastic | | [Delaunay Lattice](../../block-documentation/blocks/lattices/stochastic/delaunay-lattice) | Lattices/Stochastic | | [Orthofoam Lattice](../../block-documentation/blocks/lattices/stochastic/orthofoam-lattice) | Lattices/Stochastic | | [Trim Lattice](../../block-documentation/blocks/lattices/utilities/trim-lattice) | Lattices/Utilities | | [Modify Lattice Thickness](../../block-documentation/blocks/lattices/utilities/modify-lattice-thickness) | Lattices/Utilities | | [Extrude Lattice](../../block-documentation/blocks/lattices/utilities/extrude-lattice) | Lattices/Utilities | | [Extend Open Lattice Beams](../../block-documentation/blocks/lattices/utilities/extend-open-lattice-beams) | Lattices/Utilities | | [Collapse Vertices by Angle](../../block-documentation/blocks/lattices/utilities/collapse-vertices-by-angle) | Lattices/Utilities | | [Lattice from Beams](../../block-documentation/blocks/lattices/utilities/lattice-from-beams) | Lattices/Utilities | | [Lattice from Graph](../../block-documentation/blocks/lattices/utilities/lattice-from-graph) | Lattices/Utilities | | [Filter Beams by Length](../../block-documentation/blocks/lattices/utilities/filter-beams-by-length) | Lattices/Utilities | | [Filter Beams by Angle](../../block-documentation/blocks/lattices/utilities/filter-beams-by-angle) | Lattices/Utilities | | [Filter Beams by Connectivity](../../block-documentation/blocks/lattices/utilities/filter-beams-by-connectivity) | Lattices/Utilities | | [Filter Beams by Containment](../../block-documentation/blocks/lattices/utilities/filter-beams-by-containment) | Lattices/Utilities | | [Filter Beams by Thickness](../../block-documentation/blocks/lattices/utilities/filter-beams-by-thickness) | Lattices/Utilities | | [Filter Beams](../../block-documentation/blocks/lattices/utilities/filter-beams) | Lattices/Utilities | | [Ribs from Graph](../../block-documentation/blocks/rib-design/create/ribs-from-graph) | Rib Design/Create | | [Infill Volume Lattice](../../block-documentation/blocks/additive-manufacturing/material-reduction/infill-volume-lattice) | Additive Manufacturing/Material Reduction | | [Infill Orthofoam Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-orthofoam-lattice) | Architected Materials/Latticing | | [Infill Tet Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-tet-lattice) | Architected Materials/Latticing | | [Infill Delaunay Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-delaunay-lattice) | Architected Materials/Latticing | | [Infill Lattice between Faces](../../block-documentation/blocks/architected-materials/latticing/infill-lattice-between-faces) | Architected Materials/Latticing | | [Simple Conformal Lattice from Face](../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-from-face) | Architected Materials/Latticing | | [Simple Conformal Lattice between Faces](../../block-documentation/blocks/architected-materials/latticing/simple-conformal-lattice-between-faces) | Architected Materials/Latticing | | [Tet Lattice from CAD Body](../../block-documentation/blocks/architected-materials/latticing/tet-lattice-from-cad-body) | Architected Materials/Latticing | | [Voronoi Surface Lattice from CAD Face](../../block-documentation/blocks/architected-materials/latticing/voronoi-surface-lattice-from-cad-face) | Architected Materials/Latticing | | [Conformal Branching Lattice](../../block-documentation/blocks/architected-materials/latticing/conformal-branching-lattice) | Architected Materials/Latticing | | [Surface Lattice from CAD Face](../../block-documentation/blocks/architected-materials/latticing/surface-lattice-from-cad-face) | Architected Materials/Latticing | | [Remove Any Beams](../../block-documentation/blocks/architected-materials/utilities/remove-any-beams) | Architected Materials/Utilities | | [Remove Floating Beams](../../block-documentation/blocks/architected-materials/utilities/remove-floating-beams) | Architected Materials/Utilities | | [Remove Open Beams](../../block-documentation/blocks/architected-materials/utilities/remove-open-beams) | Architected Materials/Utilities | | [Conformal Foam](../../block-documentation/blocks/lightweighting/surface/conformal-foam) | Lightweighting/Surface | | [Honeycomb Ribbing](../../block-documentation/blocks/lightweighting/surface/honeycomb-ribbing) | Lightweighting/Surface | | [Structural Ribbing](../../block-documentation/blocks/lightweighting/surface/structural-ribbing) | Lightweighting/Surface | | [Voronoi Structural Ribbing](../../block-documentation/blocks/lightweighting/surface/voronoi-structural-ribbing) | Lightweighting/Surface | # Lattice File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/lattice-file-data An object that represents an exported lattice file. ### Properties | Name | Type | | - | - | | List | [Lattice File Data List](../../block-documentation/types/lattice-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Lattice](../../block-documentation/blocks/utilities/exchange/export-lattice) | Utilities/Exchange | # Line Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/line A line segment. ### Properties | Name | Type | | - | - | | Arc Length Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Axis | [Axis](../../block-documentation/types/axis) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Center Point | [Point](../../block-documentation/types/point) | | Closed | [Bool](../../block-documentation/types/bool) | | Direction | [Vector](../../block-documentation/types/vector) | | End Point | [Point](../../block-documentation/types/point) | | End Tangent | [Vector](../../block-documentation/types/vector) | | Length | [Scalar](../../block-documentation/types/scalar) | | List | [Line List](../../block-documentation/types/line) | | Name | [Text](../../block-documentation/types/text) | | Reversed Curve | [Line](../../block-documentation/types/line) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Start Point | [Point](../../block-documentation/types/point) | | Start Tangent | [Vector](../../block-documentation/types/vector) | ### Block Reference | Block Name | Location | | - | - | | [Line](../../block-documentation/blocks/create/curves/line) | Create/Curves | | [Line by Direction](../../block-documentation/blocks/create/curves/line-by-direction) | Create/Curves | # List Interface Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/list-interface ### Properties | Name | Type | | - | - | | List | [List Interface List](../../block-documentation/types/list-interface) | | Reversed | [List Interface](../../block-documentation/types/list-interface) | | Size | [Integer](../../block-documentation/types/integer) | # Map (1d,1d) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/map-1d,1d A Map object. ### Properties | Name | Type | | - | - | | List | [Map (1d,1d) List](../../block-documentation/types/map-1d,1d) | ### Block Reference | Block Name | Location | | - | - | | [Map from Lists](../../block-documentation/blocks/utilities/general/map-from-lists) | Utilities/General | # Map (2d,1d) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/map-2d,1d A Map object. ### Properties | Name | Type | | - | - | | List | [Map (2d,1d) List](../../block-documentation/types/map-2d,1d) | ### Block Reference | Block Name | Location | | - | - | | [Map from Lists](../../block-documentation/blocks/utilities/general/map-from-lists) | Utilities/General | # Map (3d,1d) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/map-3d,1d A Map object. ### Properties | Name | Type | | - | - | | List | [Map (3d,1d) List](../../block-documentation/types/map-3d,1d) | ### Block Reference | Block Name | Location | | - | - | | [Map from Lists](../../block-documentation/blocks/utilities/general/map-from-lists) | Utilities/General | # Mass properties Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/mass-properties An object that contains data about the mass properties of a geometry. ### Properties | Name | Type | | - | - | | Center Of Gravity | [Point](../../block-documentation/types/point) | | List | [Mass properties List](../../block-documentation/types/mass-properties) | | Mass | [Scalar](../../block-documentation/types/scalar) | | Principal Frame | [Frame](../../block-documentation/types/frame) | | Principal Moments | [Vector](../../block-documentation/types/vector) | | Volume | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Mass Properties](../../block-documentation/blocks/modeling/evaluation/mass-properties) | Modeling/Evaluation | # Mass properties (old) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/mass-properties-old ### Properties | Name | Type | | - | - | | Area | [Scalar](../../block-documentation/types/scalar) | | Center Of Gravity | [Point](../../block-documentation/types/point) | | Inertia Tensor Xxxyxz | [Vector](../../block-documentation/types/vector) | | Inertia Tensor Yxyyyz | [Vector](../../block-documentation/types/vector) | | Inertia Tensor Zxzyzz | [Vector](../../block-documentation/types/vector) | | List | [Mass properties (old) List](../../block-documentation/types/mass-properties-old) | | Mass | [Scalar](../../block-documentation/types/scalar) | | Principal Frame | [Frame](../../block-documentation/types/frame) | | Principal Moments | [Vector](../../block-documentation/types/vector) | | Volume | [Scalar](../../block-documentation/types/scalar) | # Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/material An isotropic, orthotropic, or anisotropic material. ### Properties | Name | Type | | - | - | | List | [Material List](../../block-documentation/types/material) | # Material File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/material-file-data An object that represents an exported material file. ### Properties | Name | Type | | - | - | | List | [Material File Data List](../../block-documentation/types/material-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Material](../../block-documentation/blocks/structures/exchange/export-material) | Structures/Exchange | # Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/mesh A collection of vertices, edges, and faces that defines a polyhedral object. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Closed | [Bool](../../block-documentation/types/bool) | | Edge Manifold | [Bool](../../block-documentation/types/bool) | | Edges | [Line List](../../block-documentation/types/line) | | Face Count | [Integer](../../block-documentation/types/integer) | | List | [Mesh List](../../block-documentation/types/mesh) | | Oriented | [Bool](../../block-documentation/types/bool) | | Self-intersecting | [Bool](../../block-documentation/types/bool) | | Vertex Count | [Integer](../../block-documentation/types/integer) | | Vertex Manifold | [Bool](../../block-documentation/types/bool) | | Vertices | [Point List](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [Flip Mesh Normals](../../block-documentation/blocks/modeling/utilities/flip-mesh-normals) | Modeling/Utilities | | [Collapse Vertices](../../block-documentation/blocks/modeling/utilities/collapse-vertices) | Modeling/Utilities | | [Merge Graphs](../../block-documentation/blocks/modeling/utilities/merge-graphs) | Modeling/Utilities | | [Remove Mesh Faces by Body](../../block-documentation/blocks/modeling/utilities/remove-mesh-faces-by-body) | Modeling/Utilities | | [Filter Mesh by Flood Fill](../../block-documentation/blocks/modeling/utilities/filter-mesh-by-flood-fill) | Modeling/Utilities | | [Simplify Mesh by Amount](../../block-documentation/blocks/modeling/utilities/simplify-mesh-by-amount) | Modeling/Utilities | | [Simplify Mesh by Threshold](../../block-documentation/blocks/modeling/utilities/simplify-mesh-by-threshold) | Modeling/Utilities | | [Triangulate Mesh](../../block-documentation/blocks/modeling/utilities/triangulate-mesh) | Modeling/Utilities | | [Quadrangulate Mesh](../../block-documentation/blocks/modeling/utilities/quadrangulate-mesh) | Modeling/Utilities | | [Refine Mesh](../../block-documentation/blocks/modeling/utilities/refine-mesh) | Modeling/Utilities | | [Mesh Face from Points](../../block-documentation/blocks/modeling/utilities/mesh-face-from-points) | Modeling/Utilities | | [Remesh Surface](../../block-documentation/blocks/structures/mesh/remesh-surface) | Structures/Mesh | | [Parallel Remesh Surface](../../block-documentation/blocks/structures/mesh/parallel-remesh-surface) | Structures/Mesh | | [Remesh Surface with Cyclic Symmetry](../../block-documentation/blocks/structures/mesh/remesh-surface-with-cyclic-symmetry) | Structures/Mesh | | [Import Mesh](../../block-documentation/blocks/utilities/exchange/import-mesh) | Utilities/Exchange | | [Mesh from CAD Body](../../block-documentation/blocks/utilities/conversion/mesh-from-cad-body) | Utilities/Conversion | | [Mesh from Implicit Body](../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-body) | Utilities/Conversion | | [Mesh from Implicit by AT](../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-at) | Utilities/Conversion | | [Mesh from Implicit by DC](../../block-documentation/blocks/utilities/conversion/mesh-from-implicit-by-dc) | Utilities/Conversion | | [Mesh from Voxel Grid](../../block-documentation/blocks/utilities/conversion/mesh-from-voxel-grid) | Utilities/Conversion | | [Mesh from Implicit Body 2](../../block-documentation/blocks/beta/utilities/mesh-from-implicit-body-2) | Beta/Utilities | | [Add Draft](../../block-documentation/blocks/beta/manufacturing/add-draft) | Beta/Manufacturing | | [Align Mesh Normals](../../block-documentation/blocks/beta/shell-modeling/align-mesh-normals) | Beta/Shell Modeling | | [Clean Mesh Faces](../../block-documentation/blocks/beta/shell-modeling/clean-mesh-faces) | Beta/Shell Modeling | | [Merge and Weld Meshes](../../block-documentation/blocks/beta/shell-modeling/merge-and-weld-meshes) | Beta/Shell Modeling | | [Simple Remesh Body](../../block-documentation/blocks/architected-materials/utilities/simple-remesh-body) | Architected Materials/Utilities | | [Remesh CAD Face](../../block-documentation/blocks/architected-materials/utilities/remesh-cad-face) | Architected Materials/Utilities | # Mesh File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/mesh-file-data An object that represents an exported mesh file. ### Properties | Name | Type | | - | - | | List | [Mesh File Data List](../../block-documentation/types/mesh-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Mesh](../../block-documentation/blocks/utilities/exchange/export-mesh) | Utilities/Exchange | | [Export 3MF](../../block-documentation/blocks/utilities/exchange/export-3mf) | Utilities/Exchange | # Mesh Quality Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/mesh-quality An object with information about FE mesh quality. ### Properties | Name | Type | | - | - | | Intersecting Elements | [Integer](../../block-documentation/types/integer) | | List | [Mesh Quality List](../../block-documentation/types/mesh-quality) | | Mesh Quality Average | [Scalar](../../block-documentation/types/scalar) | | Mesh Quality Max | [Scalar](../../block-documentation/types/scalar) | | Mesh Quality Min | [Scalar](../../block-documentation/types/scalar) | | Orthogonality Average | [Scalar](../../block-documentation/types/scalar) | | Orthogonality Max | [Scalar](../../block-documentation/types/scalar) | | Orthogonality Min | [Scalar](../../block-documentation/types/scalar) | | Skewness Average | [Scalar](../../block-documentation/types/scalar) | | Skewness Max | [Scalar](../../block-documentation/types/scalar) | | Skewness Min | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Mesh Quality](../../block-documentation/blocks/structures/mesh/mesh-quality) | Structures/Mesh | # Modal Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/modal-result An object with data generated from a modal simulation. ### Properties | Name | Type | | - | - | | Displacement | [Vector Field List](../../block-documentation/types/vector-field) | | Dof Count | [Integer](../../block-documentation/types/integer) | | Eigenfrequencies | [Scalar List](../../block-documentation/types/scalar) | | Element Count | [Integer](../../block-documentation/types/integer) | | List | [Modal Result List](../../block-documentation/types/modal-result) | | Mode Count | [Integer](../../block-documentation/types/integer) | | Node Count | [Integer](../../block-documentation/types/integer) | ### Block Reference | Block Name | Location | | - | - | | [Modal Analysis](../../block-documentation/blocks/structures/analysis/modal-analysis) | Structures/Analysis | | [Import Modal Result](../../block-documentation/blocks/structures/exchange/import-modal-result) | Structures/Exchange | # Model Load Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/model-load A boundary condition that applies a force. ### Properties | Name | Type | | - | - | | List | [Model Load List](../../block-documentation/types/model-load) | ### Block Reference | Block Name | Location | | - | - | | [Initial Temperature](../../block-documentation/blocks/structures/boundary-conditions/initial-temperature) | Structures/Boundary Conditions | | [Applied Temperature Load](../../block-documentation/blocks/structures/boundary-conditions/applied-temperature-load) | Structures/Boundary Conditions | # Multi-Region Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/multi-region-mesh Mesh containing multiple distincly named regions. ### Properties | Name | Type | | - | - | | List | [Multi-Region Mesh List](../../block-documentation/types/multi-region-mesh) | | Mesh | [Mesh](../../block-documentation/types/mesh) | ### Block Reference | Block Name | Location | | - | - | | [Multi-Region Mesh from Implicit](../../block-documentation/blocks/utilities/conversion/multi-region-mesh-from-implicit) | Utilities/Conversion | # Non-Parametric Unit Cell Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/non-parametric-unit-cell A non-parametric unit cell used in lattice generation workflows. ### Properties | Name | Type | | - | - | | List | [Non-Parametric Unit Cell List](../../block-documentation/types/non-parametric-unit-cell) | ### Block Reference | Block Name | Location | | - | - | | [Orient Unit Cell](../../block-documentation/blocks/lattices/unit-cells/orient-unit-cell) | Lattices/Unit Cells | | [Custom Unit Cell](../../block-documentation/blocks/lattices/unit-cells/custom-unit-cell) | Lattices/Unit Cells | # Orthotropic Linear Elastic Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/orthotropic-linear-elastic-property Linear elastic properties for an orthotropic material. ### Properties | Name | Type | | - | - | | C11 | [Scalar Field](../../block-documentation/types/scalar-field) | | C12 | [Scalar Field](../../block-documentation/types/scalar-field) | | C13 | [Scalar Field](../../block-documentation/types/scalar-field) | | C22 | [Scalar Field](../../block-documentation/types/scalar-field) | | C23 | [Scalar Field](../../block-documentation/types/scalar-field) | | C33 | [Scalar Field](../../block-documentation/types/scalar-field) | | C44 | [Scalar Field](../../block-documentation/types/scalar-field) | | C55 | [Scalar Field](../../block-documentation/types/scalar-field) | | C66 | [Scalar Field](../../block-documentation/types/scalar-field) | | E1 | [Scalar Field](../../block-documentation/types/scalar-field) | | E2 | [Scalar Field](../../block-documentation/types/scalar-field) | | E3 | [Scalar Field](../../block-documentation/types/scalar-field) | | G12 | [Scalar Field](../../block-documentation/types/scalar-field) | | G13 | [Scalar Field](../../block-documentation/types/scalar-field) | | G23 | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Orthotropic Linear Elastic Property List](../../block-documentation/types/orthotropic-linear-elastic-property) | | Nu12 | [Scalar Field](../../block-documentation/types/scalar-field) | | Nu13 | [Scalar Field](../../block-documentation/types/scalar-field) | | Nu23 | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Orthotropic Linear Elastic Property](../../block-documentation/blocks/structures/material-attributes/orthotropic-linear-elastic-property) | Structures/Material Attributes | | [Orthotropic Stiffness Tensor](../../block-documentation/blocks/structures/material-attributes/orthotropic-stiffness-tensor) | Structures/Material Attributes | # Orthotropic Material Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/orthotropic-material A material with properties that vary in three orthogonal axes. ### Properties | Name | Type | | - | - | | Density | [Scalar Field](../../block-documentation/types/scalar-field) | | Linear Elastic Property | [Orthotropic Linear Elastic Property](../../block-documentation/types/orthotropic-linear-elastic-property) | | List | [Orthotropic Material List](../../block-documentation/types/orthotropic-material) | | Thermal Expansion Property | [Orthotropic Thermal Expansion Property](../../block-documentation/types/orthotropic-thermal-expansion-property) | | Thermal Property | [Orthotropic Thermal Property](../../block-documentation/types/orthotropic-thermal-property) | ### Block Reference | Block Name | Location | | - | - | | [Orthotropic Material](../../block-documentation/blocks/structures/material-attributes/orthotropic-material) | Structures/Material Attributes | # Orthotropic Material Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/orthotropic-material-property Material properties for an orthotropic material. ### Properties | Name | Type | | - | - | | List | [Orthotropic Material Property List](../../block-documentation/types/orthotropic-material-property) | # Orthotropic Thermal Expansion Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/orthotropic-thermal-expansion-property Thermal expansion properties for an Orthotropic material. ### Properties | Name | Type | | - | - | | Alpha1 | [Scalar Field](../../block-documentation/types/scalar-field) | | Alpha2 | [Scalar Field](../../block-documentation/types/scalar-field) | | Alpha3 | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Orthotropic Thermal Expansion Property List](../../block-documentation/types/orthotropic-thermal-expansion-property) | ### Block Reference | Block Name | Location | | - | - | | [Orthotropic Thermal Expansion Property](../../block-documentation/blocks/structures/material-attributes/orthotropic-thermal-expansion-property) | Structures/Material Attributes | # Orthotropic Thermal Property Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/orthotropic-thermal-property An object with thermal properties for an orthotropic material. ### Properties | Name | Type | | - | - | | K1 | [Scalar Field](../../block-documentation/types/scalar-field) | | K2 | [Scalar Field](../../block-documentation/types/scalar-field) | | K3 | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Orthotropic Thermal Property List](../../block-documentation/types/orthotropic-thermal-property) | | Specific Heat | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Orthotropic Thermal Property](../../block-documentation/blocks/structures/material-attributes/orthotropic-thermal-property) | Structures/Material Attributes | # Parameter Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parameter A named object that holds a value, bounds, and metadata for use by evaluators in workflows such as Parameter Optimization. ### Properties | Name | Type | | - | - | | Label | [Text](../../block-documentation/types/text) | | Value | [Implicit Body](../../block-documentation/types/implicit-body) | ### Block Reference | Block Name | Location | | - | - | | [Constant Parameter](../../block-documentation/blocks/parameter-optimization-beta/composition/constant-parameter) | Parameter Optimization \[Beta]/Composition | | [Dependent Parameter](../../block-documentation/blocks/parameter-optimization-beta/composition/dependent-parameter) | Parameter Optimization \[Beta]/Composition | | [Independent Parameter](../../block-documentation/blocks/parameter-optimization-beta/composition/independent-parameter) | Parameter Optimization \[Beta]/Composition | # Parameter Constraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parameter-constraint A condition that limits the value of a Parameter in Parameter Optimization. ### Block Reference | Block Name | Location | | - | - | | [Parameter Constraint](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint) | Parameter Optimization \[Beta]/Composition | # Parameter Constraint Group Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parameter-constraint-group A collection of Parameter Constraints. ### Block Reference | Block Name | Location | | - | - | | [Parameter Constraint Group](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-constraint-group) | Parameter Optimization \[Beta]/Composition | # Parameter Group Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parameter-group A collection of Parameters. ### Block Reference | Block Name | Location | | - | - | | [Parameter Group](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-group) | Parameter Optimization \[Beta]/Composition | | [Design Parameters from Optimization](../../block-documentation/blocks/parameter-optimization-beta/utilities/design-parameters-from-optimization) | Parameter Optimization \[Beta]/Utilities | | [Tracked Parameters from Optimization](../../block-documentation/blocks/parameter-optimization-beta/utilities/tracked-parameters-from-optimization) | Parameter Optimization \[Beta]/Utilities | # Parameter Objective Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parameter-objective A goal specifying a Parameter to minimize or maximize in Parameter Optimization. ### Block Reference | Block Name | Location | | - | - | | [Parameter Objective](../../block-documentation/blocks/parameter-optimization-beta/composition/parameter-objective) | Parameter Optimization \[Beta]/Composition | # Parameter Optimization Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parameter-optimization-result Data generated from a Parameter Optimization, including Parameter values and iteration history. ### Properties | Name | Type | | - | - | | Best Iteration | [Integer](../../block-documentation/types/integer) | | Iterations | [Integer](../../block-documentation/types/integer) | | Optimized Constraint Parameters | [Parameter Group](../../block-documentation/types/parameter-group) | | Optimized Design Parameters | [Parameter Group](../../block-documentation/types/parameter-group) | | Optimized Objective Parameter | [Parameter](../../block-documentation/types/parameter) | ### Block Reference | Block Name | Location | | - | - | | [Parameter Optimization](../../block-documentation/blocks/parameter-optimization-beta/optimization/parameter-optimization) | Parameter Optimization \[Beta]/Optimization | # Parameterizable Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parameterizable A type that can be used for optimizations. ### Properties | Name | Type | | - | - | | List | [Parameterizable List](../../block-documentation/types/parameterizable) | ### Block Reference | Block Name | Location | | - | - | | [Evaluate Parameter](../../block-documentation/blocks/parameter-optimization-beta/utilities/evaluate-parameter) | Parameter Optimization \[Beta]/Utilities | # Parametric FE Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parametric-fe-domain An object with information about FE mesh and corresponding attributes as functions of the design parameters. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Fe Domain | [FE Domain](../../block-documentation/types/fe-domain) | | List | [Parametric FE Domain List](../../block-documentation/types/parametric-fe-domain) | | Parameter Names | [Text List](../../block-documentation/types/text) | | Parametric Fe Model | [Parametric FE Model](../../block-documentation/types/parametric-fe-model) | ### Block Reference | Block Name | Location | | - | - | | [Parametric Voronoi Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-voronoi-domain) | Optimization/Field Optimization | | [Parametric Lattice Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-lattice-domain) | Optimization/Field Optimization | | [Parametric Shell Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-shell-domain) | Optimization/Field Optimization | | [Parametric Shell-Infill Domain](../../block-documentation/blocks/optimization/field-optimization/parametric-shell-infill-domain) | Optimization/Field Optimization | # Parametric FE Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/parametric-fe-model An object with information about Parametric FE Domains and the connectivity information between them. ### Properties | Name | Type | | - | - | | Connectors | [Connector List](../../block-documentation/types/connector) | | Fe Model | [FE Model](../../block-documentation/types/fe-model) | | List | [Parametric FE Model List](../../block-documentation/types/parametric-fe-model) | | Parametric Fe Domains | [Parametric FE Domain List](../../block-documentation/types/parametric-fe-domain) | ### Block Reference | Block Name | Location | | - | - | | [Parametric FE Model](../../block-documentation/blocks/optimization/field-optimization/parametric-fe-model) | Optimization/Field Optimization | # Part Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/part Representation of a part from CAD. ### Properties | Name | Type | | - | - | | Bodies | [CAD Body List](../../block-documentation/types/cad-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Components | [Component List](../../block-documentation/types/component) | | Curves | [Curve List](../../block-documentation/types/curve) | | List | [Part List](../../block-documentation/types/part) | | Name | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Import Part](../../block-documentation/blocks/utilities/exchange/import-part) | Utilities/Exchange | | [Simplified Body Representation](../../block-documentation/blocks/utilities/conversion/simplified-body-representation) | Utilities/Conversion | # Part File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/part-file-data An object that represents an exported part file. ### Properties | Name | Type | | - | - | | List | [Part File Data List](../../block-documentation/types/part-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Part](../../block-documentation/blocks/utilities/exchange/export-part) | Utilities/Exchange | # Path Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/path A string of characters that defines location of a file or folder. ### Properties | Name | Type | | - | - | | Text | [Text](../../block-documentation/types/text) | | List | [Path List](../../block-documentation/types/path) | ### Block Reference | Block Name | Location | | - | - | | [Remove Temporary Directory](../../block-documentation/blocks/utilities/system/remove-temporary-directory) | Utilities/System | # Planar Image Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/planar-image A bitmap mapped to a plane and previewed in 3D space. ### Properties | Name | Type | | - | - | | Alpha | [Scalar Field](../../block-documentation/types/scalar-field) | | Bitmap | [Bitmap](../../block-documentation/types/bitmap) | | Blue | [Scalar Field](../../block-documentation/types/scalar-field) | | Grayscale | [Scalar Field](../../block-documentation/types/scalar-field) | | Green | [Scalar Field](../../block-documentation/types/scalar-field) | | Hue | [Scalar Field](../../block-documentation/types/scalar-field) | | Rgb | [Vector Field](../../block-documentation/types/vector-field) | | Red | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Planar Image List](../../block-documentation/types/planar-image) | ### Block Reference | Block Name | Location | | - | - | | [Map Bitmap to Plane](../../block-documentation/blocks/utilities/transforms/map-bitmap-to-plane) | Utilities/Transforms | # Plane Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/plane A parameterized two-dimensional surface that extends infinitely far. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Frame | [Frame](../../block-documentation/types/frame) | | Inverted | [Plane](../../block-documentation/types/plane) | | List | [Plane List](../../block-documentation/types/plane) | | Normal | [Vector](../../block-documentation/types/vector) | | Origin | [Point](../../block-documentation/types/point) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Transform | [Transformation](../../block-documentation/types/transformation) | ### Block Reference | Block Name | Location | | - | - | | [Plane](../../block-documentation/blocks/create/vectors/plane) | Create/Vectors | | [Plane from Normal](../../block-documentation/blocks/create/vectors/plane-from-normal) | Create/Vectors | | [Offset Plane](../../block-documentation/blocks/create/vectors/offset-plane) | Create/Vectors | | [Centered Plane from Box Floor](../../block-documentation/blocks/additive-manufacturing/build-preparation/centered-plane-from-box-floor) | Additive Manufacturing/Build Preparation | | [Corner Plane from Box Floor](../../block-documentation/blocks/additive-manufacturing/build-preparation/corner-plane-from-box-floor) | Additive Manufacturing/Build Preparation | # Point Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/point A 3-dimensional point in space, represented by a vector in units of length. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Point List](../../block-documentation/types/point) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Vector | [Vector](../../block-documentation/types/vector) | | X | [Scalar](../../block-documentation/types/scalar) | | Y | [Scalar](../../block-documentation/types/scalar) | | Z | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Point](../../block-documentation/blocks/create/vectors/point) | Create/Vectors | | [Point between Points](../../block-documentation/blocks/create/vectors/point-between-points) | Create/Vectors | | [Point in Frame](../../block-documentation/blocks/create/vectors/point-in-frame) | Create/Vectors | | [Point along Curve](../../block-documentation/blocks/create/curves/point-along-curve) | Create/Curves | | [Ray Cast](../../block-documentation/blocks/modeling/utilities/ray-cast) | Modeling/Utilities | | [Evaluate Surface](../../block-documentation/blocks/modeling/utilities/evaluate-surface) | Modeling/Utilities | | [Average](../../block-documentation/blocks/math/operations/average) | Math/Operations | # Point Map File Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/point-map-file An object that represents the output of an exported point map file. ### Properties | Name | Type | | - | - | | List | [Point Map File List](../../block-documentation/types/point-map-file) | ### Block Reference | Block Name | Location | | - | - | | [Export Point Map](../../block-documentation/blocks/utilities/exchange/export-point-map) | Utilities/Exchange | # Point stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/point-stack A collection of sliced points, ordered by layer. ### Properties | Name | Type | | - | - | | Frame | [Frame](../../block-documentation/types/frame) | | List | [Point stack List](../../block-documentation/types/point-stack) | | Slice Count | [Integer](../../block-documentation/types/integer) | | Total Length | [Scalar](../../block-documentation/types/scalar) | # Polycurve Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/polycurve A set of connected Curves. ### Properties | Name | Type | | - | - | | Arc Length Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Closed | [Bool](../../block-documentation/types/bool) | | End Point | [Point](../../block-documentation/types/point) | | End Tangent | [Vector](../../block-documentation/types/vector) | | Length | [Scalar](../../block-documentation/types/scalar) | | List | [Polycurve List](../../block-documentation/types/polycurve) | | Name | [Text](../../block-documentation/types/text) | | Reversed Curve | [Polycurve](../../block-documentation/types/polycurve) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Segments | [Curve List](../../block-documentation/types/curve) | | Start Point | [Point](../../block-documentation/types/point) | | Start Tangent | [Vector](../../block-documentation/types/vector) | | Vertices | [Point List](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [Polyline](../../block-documentation/blocks/create/curves/polyline) | Create/Curves | | [Polycurve from Curves](../../block-documentation/blocks/create/curves/polycurve-from-curves) | Create/Curves | | [Fillet Curves](../../block-documentation/blocks/create/curves/fillet-curves) | Create/Curves | | [Fillet Polycurve Vertices](../../block-documentation/blocks/create/curves/fillet-polycurve-vertices) | Create/Curves | | [Bridge Curve](../../block-documentation/blocks/create/curves/bridge-curve) | Create/Curves | | [Extend Curve](../../block-documentation/blocks/create/curves/extend-curve) | Create/Curves | # Polygon (old) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/polygon-old A enclosed planar 2-dimensional object defined by a series of line segments. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Polygon (old) List](../../block-documentation/types/polygon-old) | | Normal | [Vector](../../block-documentation/types/vector) | | Profile | [Profile (old)](../../block-documentation/types/profile-old) | | Vertices | [Point List](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [Regular Polygon](../../block-documentation/blocks/create/primitives/regular-polygon) | Create/Primitives | | [Polygon from Points](../../block-documentation/blocks/create/curves/polygon-from-points) | Create/Curves | # Pressure Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/pressure A boundary condition that applies pressure. ### Properties | Name | Type | | - | - | | List | [Pressure List](../../block-documentation/types/pressure) | ### Block Reference | Block Name | Location | | - | - | | [Pressure](../../block-documentation/blocks/structures/boundary-conditions/pressure) | Structures/Boundary Conditions | # Profile Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/profile An enclosed planar 2-dimensional object defined by series of curves. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Distance To Extrusion | [Scalar Field](../../block-documentation/types/scalar-field) | | Distance To Region | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Profile List](../../block-documentation/types/profile) | | Plane | [Plane](../../block-documentation/types/plane) | | Polycurves | [Polycurve List](../../block-documentation/types/polycurve) | ### Block Reference | Block Name | Location | | - | - | | [Regular Polygon](../../block-documentation/blocks/create/primitives/regular-polygon) | Create/Primitives | | [Circle](../../block-documentation/blocks/create/primitives/circle) | Create/Primitives | | [Rectangle](../../block-documentation/blocks/create/primitives/rectangle) | Create/Primitives | | [Rectangle by Points](../../block-documentation/blocks/create/primitives/rectangle-by-points) | Create/Primitives | | [Slot](../../block-documentation/blocks/create/primitives/slot) | Create/Primitives | | [Slot by Points](../../block-documentation/blocks/create/primitives/slot-by-points) | Create/Primitives | | [Polygon from Points](../../block-documentation/blocks/create/curves/polygon-from-points) | Create/Curves | | [Profile from Curves](../../block-documentation/blocks/create/curves/profile-from-curves) | Create/Curves | | [Merge Profiles](../../block-documentation/blocks/create/curves/merge-profiles) | Create/Curves | | [Section Body](../../block-documentation/blocks/modeling/utilities/section-body) | Modeling/Utilities | # Profile (old) Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/profile-old A 2-dimensional implicit geometry represented by a distance field in units of length. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Profile (old) List](../../block-documentation/types/profile-old) | | Plane | [Plane](../../block-documentation/types/plane) | | Polygon | [Polygon (old)](../../block-documentation/types/polygon-old) | ### Block Reference | Block Name | Location | | - | - | | [Section Body](../../block-documentation/blocks/modeling/utilities/section-body) | Modeling/Utilities | # Radiation Heat Flux Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/radiation-heat-flux A boundary condition that applies a heat flux. ### Properties | Name | Type | | - | - | | List | [Radiation Heat Flux List](../../block-documentation/types/radiation-heat-flux) | ### Block Reference | Block Name | Location | | - | - | | [Radiation Boundary Load](../../block-documentation/blocks/structures/boundary-conditions/radiation-boundary-load) | Structures/Boundary Conditions | # Region Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/region A select region of a Domain. ### Properties | Name | Type | | - | - | | List | [Region List](../../block-documentation/types/region) | # Remote Force Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/remote-force A boundary condition that applies a force. ### Properties | Name | Type | | - | - | | List | [Remote Force List](../../block-documentation/types/remote-force) | ### Block Reference | Block Name | Location | | - | - | | [Point Force](../../block-documentation/blocks/structures/boundary-conditions/point-force) | Structures/Boundary Conditions | | [Point Moment](../../block-documentation/blocks/structures/boundary-conditions/point-moment) | Structures/Boundary Conditions | # Remote Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/remote-restraint A boundary condition that restrains displacement. ### Properties | Name | Type | | - | - | | Boundary | [FE Boundary](../../block-documentation/types/fe-boundary) | | Frame | [Frame](../../block-documentation/types/frame) | | List | [Remote Restraint List](../../block-documentation/types/remote-restraint) | | Point | [Point](../../block-documentation/types/point) | | Rx | [Scalar](../../block-documentation/types/scalar) | | Ry | [Scalar](../../block-documentation/types/scalar) | | Rz | [Scalar](../../block-documentation/types/scalar) | | Ux | [Scalar](../../block-documentation/types/scalar) | | Uy | [Scalar](../../block-documentation/types/scalar) | | Uz | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Point Restraint](../../block-documentation/blocks/structures/boundary-conditions/point-restraint) | Structures/Boundary Conditions | # Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/restraint A boundary condition that restraints displacement. ### Properties | Name | Type | | - | - | | Boundary | [FE Boundary](../../block-documentation/types/fe-boundary) | | Frame | [Frame](../../block-documentation/types/frame) | | List | [Restraint List](../../block-documentation/types/restraint) | | Rx | [Scalar](../../block-documentation/types/scalar) | | Ry | [Scalar](../../block-documentation/types/scalar) | | Rz | [Scalar](../../block-documentation/types/scalar) | | Ux | [Scalar](../../block-documentation/types/scalar) | | Uy | [Scalar](../../block-documentation/types/scalar) | | Uz | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Displacement Restraint](../../block-documentation/blocks/structures/boundary-conditions/displacement-restraint) | Structures/Boundary Conditions | | [FE Fixed Faces](../../block-documentation/blocks/design-analysis/restraints/fe-fixed-faces) | Design Analysis/Restraints | # Scalar Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/scalar A scalar value. This object can have units. ### Properties | Name | Type | | - | - | | Ceiling | [Integer](../../block-documentation/types/integer) | | Floor | [Integer](../../block-documentation/types/integer) | | List | [Scalar List](../../block-documentation/types/scalar) | | Negative | [Scalar](../../block-documentation/types/scalar) | | Round | [Integer](../../block-documentation/types/integer) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Temperature | [Temperature](../../block-documentation/types/temperature) | | Temperature Field | [Temperature Field](../../block-documentation/types/temperature-field) | ### Block Reference | Block Name | Location | | - | - | | [Evaluate Curvature](../../block-documentation/blocks/create/curves/evaluate-curvature) | Create/Curves | | [Surface Area](../../block-documentation/blocks/modeling/evaluation/surface-area) | Modeling/Evaluation | | [Volume Integral](../../block-documentation/blocks/modeling/evaluation/volume-integral) | Modeling/Evaluation | | [Surface Integral](../../block-documentation/blocks/modeling/evaluation/surface-integral) | Modeling/Evaluation | | [Curve Integral](../../block-documentation/blocks/modeling/evaluation/curve-integral) | Modeling/Evaluation | | [Evaluate Field](../../block-documentation/blocks/fields/utilities/evaluate-field) | Fields/Utilities | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | | [Multiply](../../block-documentation/blocks/math/operations/multiply) | Math/Operations | | [Divide](../../block-documentation/blocks/math/operations/divide) | Math/Operations | | [Pow](../../block-documentation/blocks/math/operations/pow) | Math/Operations | | [Square](../../block-documentation/blocks/math/operations/square) | Math/Operations | | [Third Power](../../block-documentation/blocks/math/operations/third-power) | Math/Operations | | [Fourth Power](../../block-documentation/blocks/math/operations/fourth-power) | Math/Operations | | [Exp](../../block-documentation/blocks/math/operations/exp) | Math/Operations | | [Sqrt](../../block-documentation/blocks/math/operations/sqrt) | Math/Operations | | [Third Root](../../block-documentation/blocks/math/operations/third-root) | Math/Operations | | [Fourth Root](../../block-documentation/blocks/math/operations/fourth-root) | Math/Operations | | [Nth Root](../../block-documentation/blocks/math/operations/nth-root) | Math/Operations | | [Log](../../block-documentation/blocks/math/operations/log) | Math/Operations | | [Mod](../../block-documentation/blocks/math/operations/mod) | Math/Operations | | [Min](../../block-documentation/blocks/math/operations/min) | Math/Operations | | [Max](../../block-documentation/blocks/math/operations/max) | Math/Operations | | [Average](../../block-documentation/blocks/math/operations/average) | Math/Operations | | [Abs](../../block-documentation/blocks/math/operations/abs) | Math/Operations | | [Sin](../../block-documentation/blocks/math/trigonometry/sin) | Math/Trigonometry | | [Cos](../../block-documentation/blocks/math/trigonometry/cos) | Math/Trigonometry | | [Tan](../../block-documentation/blocks/math/trigonometry/tan) | Math/Trigonometry | | [Asin](../../block-documentation/blocks/math/trigonometry/asin) | Math/Trigonometry | | [Acos](../../block-documentation/blocks/math/trigonometry/acos) | Math/Trigonometry | | [Atan](../../block-documentation/blocks/math/trigonometry/atan) | Math/Trigonometry | | [Atan2](../../block-documentation/blocks/math/trigonometry/atan2) | Math/Trigonometry | | [Angle between Vectors](../../block-documentation/blocks/math/vectors/angle-between-vectors) | Math/Vectors | | [Dot Product](../../block-documentation/blocks/math/vectors/dot-product) | Math/Vectors | | [Angle with Respect to Plane](../../block-documentation/blocks/math/vectors/angle-with-respect-to-plane) | Math/Vectors | | [e](../../block-documentation/blocks/math/constants/e) | Math/Constants | | [Gravity](../../block-documentation/blocks/math/constants/gravity) | Math/Constants | | [Phi](../../block-documentation/blocks/math/constants/phi) | Math/Constants | | [Pi](../../block-documentation/blocks/math/constants/pi) | Math/Constants | | [Linear Map](../../block-documentation/blocks/math/utilities/linear-map) | Math/Utilities | | [Clamp](../../block-documentation/blocks/math/utilities/clamp) | Math/Utilities | | [Ramp](../../block-documentation/blocks/math/utilities/ramp) | Math/Utilities | | [Mix](../../block-documentation/blocks/math/utilities/mix) | Math/Utilities | | [Transfer Function](../../block-documentation/blocks/math/utilities/transfer-function) | Math/Utilities | | [Ceiling](../../block-documentation/blocks/math/utilities/ceiling) | Math/Utilities | | [Floor](../../block-documentation/blocks/math/utilities/floor) | Math/Utilities | | [Round](../../block-documentation/blocks/math/utilities/round) | Math/Utilities | | [Flow Analysis Results on Boundary](../../block-documentation/blocks/fluids/utilities/flow-analysis-results-on-boundary) | Fluids/Utilities | | [Scalar from Text](../../block-documentation/blocks/utilities/conversion/scalar-from-text) | Utilities/Conversion | | [Evaluate Map](../../block-documentation/blocks/utilities/general/evaluate-map) | Utilities/General | | [Weight Savings](../../block-documentation/blocks/lightweighting/utilities/weight-savings) | Lightweighting/Utilities | # Scalar Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/scalar-field A field of scalar values, where a scalar value is defined at every location in space. This object can have units, and in some cases can represent a distance field. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Constant | [Scalar](../../block-documentation/types/scalar) | | List | [Scalar Field List](../../block-documentation/types/scalar-field) | | Negative | [Scalar Field](../../block-documentation/types/scalar-field) | | Normalized Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Temperature | [Temperature Field](../../block-documentation/types/temperature-field) | ### Block Reference | Block Name | Location | | - | - | | [Distance to Curve from Axis](../../block-documentation/blocks/modeling/evaluation/distance-to-curve-from-axis) | Modeling/Evaluation | | [Distance Along Direction](../../block-documentation/blocks/modeling/evaluation/distance-along-direction) | Modeling/Evaluation | | [Perpendicular Distance](../../block-documentation/blocks/modeling/evaluation/perpendicular-distance) | Modeling/Evaluation | | [Curvature](../../block-documentation/blocks/modeling/evaluation/curvature) | Modeling/Evaluation | | [Gaussian Curvature](../../block-documentation/blocks/modeling/evaluation/gaussian-curvature) | Modeling/Evaluation | | [Set Bounding Box](../../block-documentation/blocks/modeling/utilities/set-bounding-box) | Modeling/Utilities | | [Remap Field](../../block-documentation/blocks/fields/remap/remap-field) | Fields/Remap | | [Remap Cylindrical Field](../../block-documentation/blocks/fields/remap/remap-cylindrical-field) | Fields/Remap | | [Remap Spherical Field](../../block-documentation/blocks/fields/remap/remap-spherical-field) | Fields/Remap | | [Remap Scale Field](../../block-documentation/blocks/fields/remap/remap-scale-field) | Fields/Remap | | [Gyroid Field](../../block-documentation/blocks/fields/periodic/gyroid-field) | Fields/Periodic | | [Diamond Field](../../block-documentation/blocks/fields/periodic/diamond-field) | Fields/Periodic | | [Schwarz Field](../../block-documentation/blocks/fields/periodic/schwarz-field) | Fields/Periodic | | [Lidinoid Field](../../block-documentation/blocks/fields/periodic/lidinoid-field) | Fields/Periodic | | [SplitP Field](../../block-documentation/blocks/fields/periodic/splitp-field) | Fields/Periodic | | [Neovius Field](../../block-documentation/blocks/fields/periodic/neovius-field) | Fields/Periodic | | [Simplex Noise 3D](../../block-documentation/blocks/fields/noise/simplex-noise-3d) | Fields/Noise | | [Cellular Noise 3D](../../block-documentation/blocks/fields/noise/cellular-noise-3d) | Fields/Noise | | [Smoothen Field](../../block-documentation/blocks/fields/utilities/smoothen-field) | Fields/Utilities | | [Angle Field](../../block-documentation/blocks/fields/utilities/angle-field) | Fields/Utilities | | [Field from Mesh Thickness](../../block-documentation/blocks/fields/utilities/field-from-mesh-thickness) | Fields/Utilities | | [Field from Point Map](../../block-documentation/blocks/fields/utilities/field-from-point-map) | Fields/Utilities | | [Radial Basis Field from Point Map](../../block-documentation/blocks/fields/utilities/radial-basis-field-from-point-map) | Fields/Utilities | | [Two Body Field](../../block-documentation/blocks/fields/utilities/two-body-field) | Fields/Utilities | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | | [Multiply](../../block-documentation/blocks/math/operations/multiply) | Math/Operations | | [Divide](../../block-documentation/blocks/math/operations/divide) | Math/Operations | | [Pow](../../block-documentation/blocks/math/operations/pow) | Math/Operations | | [Square](../../block-documentation/blocks/math/operations/square) | Math/Operations | | [Third Power](../../block-documentation/blocks/math/operations/third-power) | Math/Operations | | [Fourth Power](../../block-documentation/blocks/math/operations/fourth-power) | Math/Operations | | [Exp](../../block-documentation/blocks/math/operations/exp) | Math/Operations | | [Sqrt](../../block-documentation/blocks/math/operations/sqrt) | Math/Operations | | [Third Root](../../block-documentation/blocks/math/operations/third-root) | Math/Operations | | [Fourth Root](../../block-documentation/blocks/math/operations/fourth-root) | Math/Operations | | [Nth Root](../../block-documentation/blocks/math/operations/nth-root) | Math/Operations | | [Log](../../block-documentation/blocks/math/operations/log) | Math/Operations | | [Mod](../../block-documentation/blocks/math/operations/mod) | Math/Operations | | [Min](../../block-documentation/blocks/math/operations/min) | Math/Operations | | [Max](../../block-documentation/blocks/math/operations/max) | Math/Operations | | [Average](../../block-documentation/blocks/math/operations/average) | Math/Operations | | [Abs](../../block-documentation/blocks/math/operations/abs) | Math/Operations | | [Sin](../../block-documentation/blocks/math/trigonometry/sin) | Math/Trigonometry | | [Cos](../../block-documentation/blocks/math/trigonometry/cos) | Math/Trigonometry | | [Tan](../../block-documentation/blocks/math/trigonometry/tan) | Math/Trigonometry | | [Asin](../../block-documentation/blocks/math/trigonometry/asin) | Math/Trigonometry | | [Acos](../../block-documentation/blocks/math/trigonometry/acos) | Math/Trigonometry | | [Atan](../../block-documentation/blocks/math/trigonometry/atan) | Math/Trigonometry | | [Atan2](../../block-documentation/blocks/math/trigonometry/atan2) | Math/Trigonometry | | [Angle between Vectors](../../block-documentation/blocks/math/vectors/angle-between-vectors) | Math/Vectors | | [Dot Product](../../block-documentation/blocks/math/vectors/dot-product) | Math/Vectors | | [Evaluate Expression](../../block-documentation/blocks/math/utilities/evaluate-expression) | Math/Utilities | | [Linear Map](../../block-documentation/blocks/math/utilities/linear-map) | Math/Utilities | | [Clamp](../../block-documentation/blocks/math/utilities/clamp) | Math/Utilities | | [Nan Fill](../../block-documentation/blocks/math/utilities/nan-fill) | Math/Utilities | | [Compare](../../block-documentation/blocks/math/utilities/compare) | Math/Utilities | | [Ramp](../../block-documentation/blocks/math/utilities/ramp) | Math/Utilities | | [Mix](../../block-documentation/blocks/math/utilities/mix) | Math/Utilities | | [Transfer Function](../../block-documentation/blocks/math/utilities/transfer-function) | Math/Utilities | | [Ceiling](../../block-documentation/blocks/math/utilities/ceiling) | Math/Utilities | | [Floor](../../block-documentation/blocks/math/utilities/floor) | Math/Utilities | | [Round](../../block-documentation/blocks/math/utilities/round) | Math/Utilities | | [Optimized Density Thickness Modifier](../../block-documentation/blocks/optimization/post-processing/optimized-density-thickness-modifier) | Optimization/Post-Processing | | [Evaluate Map](../../block-documentation/blocks/utilities/general/evaluate-map) | Utilities/General | | [If-Else](../../block-documentation/blocks/beta/create/if-else) | Beta/Create | | [Stress Thickness Modifier](../../block-documentation/blocks/design-analysis/fields/stress-thickness-modifier) | Design Analysis/Fields | | [Temperature Thickness Modifier](../../block-documentation/blocks/design-analysis/fields/temperature-thickness-modifier) | Design Analysis/Fields | | [Advanced Stress Thickness Modifier](../../block-documentation/blocks/design-analysis/fields/advanced-stress-thickness-modifier) | Design Analysis/Fields | # Scalar Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/scalar-point-map A map that pairs 3-dimensional point locations to scalar values. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | List | [Scalar Point Map List](../../block-documentation/types/scalar-point-map) | | Points | [Point List](../../block-documentation/types/point) | | Values | [Scalar List](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Lattice Pore Size](../../block-documentation/blocks/lattices/utilities/lattice-pore-size) | Lattices/Utilities | | [Point Map](../../block-documentation/blocks/fields/utilities/point-map) | Fields/Utilities | | [Import Scalar Point Map](../../block-documentation/blocks/fields/utilities/import-scalar-point-map) | Fields/Utilities | | [Filter Points by Volume](../../block-documentation/blocks/fields/utilities/filter-points-by-volume) | Fields/Utilities | | [Von Mises Stress Point Map](../../block-documentation/blocks/structures/exchange/von-mises-stress-point-map) | Structures/Exchange | | [Temperature Point Map](../../block-documentation/blocks/structures/exchange/temperature-point-map) | Structures/Exchange | | [Density Point Map](../../block-documentation/blocks/structures/exchange/density-point-map) | Structures/Exchange | | [Pressure Point Map](../../block-documentation/blocks/structures/exchange/pressure-point-map) | Structures/Exchange | | [Topology Optimization Density Point Map](../../block-documentation/blocks/optimization/exchange/topology-optimization-density-point-map) | Optimization/Exchange | # Selection Connectivity Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/selection-connectivity ### Properties | Name | Type | | - | - | | List | [Selection Connectivity List](../../block-documentation/types/selection-connectivity) | | Name | [Text](../../block-documentation/types/text) | # Selection Containment Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/selection-containment ### Properties | Name | Type | | - | - | | List | [Selection Containment List](../../block-documentation/types/selection-containment) | | Name | [Text](../../block-documentation/types/text) | # Selection Region Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/selection-region ### Properties | Name | Type | | - | - | | List | [Selection Region List](../../block-documentation/types/selection-region) | | Name | [Text](../../block-documentation/types/text) | # SLC slice data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/slc-slice-data ### Properties | Name | Type | | - | - | | List | [SLC slice data List](../../block-documentation/types/slc-slice-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Slices to SLC](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-slc) | Manufacturing/Exchange | # Slice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/slice A single slice stack layer. ### Properties | Name | Type | | - | - | | Closed Curves | [Polycurve List](../../block-documentation/types/polycurve) | | Cross Sectional Area | [Scalar](../../block-documentation/types/scalar) | | Hatches | [Line List](../../block-documentation/types/line) | | List | [Slice List](../../block-documentation/types/slice) | | Open Curves | [Polycurve List](../../block-documentation/types/polycurve) | | Points | [Point List](../../block-documentation/types/point) | | Total Length | [Scalar](../../block-documentation/types/scalar) | | Z Height | [Scalar](../../block-documentation/types/scalar) | # Slice Image Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/slice-image-data An object that represents an image slice data. ### Properties | Name | Type | | - | - | | List | [Slice Image Data List](../../block-documentation/types/slice-image-data) | ### Block Reference | Block Name | Location | | - | - | | [Slice Body to B\&W Image Stack](../../block-documentation/blocks/manufacturing/exchange/slice-body-to-bw-image-stack) | Manufacturing/Exchange | # Slice point data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/slice-point-data An object that represents slices exported as point data file. ### Properties | Name | Type | | - | - | | List | [Slice point data List](../../block-documentation/types/slice-point-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Slices to Point Data](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-point-data) | Manufacturing/Exchange | # Slice Stack Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/slice-stack A collection of sliced contours ordered by layer. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Frame | [Frame](../../block-documentation/types/frame) | | List | [Slice Stack List](../../block-documentation/types/slice-stack) | | Slice Count | [Integer](../../block-documentation/types/integer) | | Slices | [Slice List](../../block-documentation/types/slice) | | Total Length | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Slice Body](../../block-documentation/blocks/manufacturing/slicing/slice-body) | Manufacturing/Slicing | | [Slice Body by Marching Squares](../../block-documentation/blocks/manufacturing/slicing/slice-body-by-marching-squares) | Manufacturing/Slicing | | [Slice Graph](../../block-documentation/blocks/manufacturing/slicing/slice-graph) | Manufacturing/Slicing | | [Slice Mesh](../../block-documentation/blocks/manufacturing/slicing/slice-mesh) | Manufacturing/Slicing | | [Offset Slice Stack](../../block-documentation/blocks/manufacturing/slicing/offset-slice-stack) | Manufacturing/Slicing | | [Trim Slice Stack](../../block-documentation/blocks/manufacturing/slicing/trim-slice-stack) | Manufacturing/Slicing | | [Simplify Slice Stack](../../block-documentation/blocks/manufacturing/slicing/simplify-slice-stack) | Manufacturing/Slicing | | [Hatch](../../block-documentation/blocks/manufacturing/slicing/hatch) | Manufacturing/Slicing | | [Hatch with Stripes](../../block-documentation/blocks/manufacturing/slicing/hatch-with-stripes) | Manufacturing/Slicing | | [Hatch with Islands](../../block-documentation/blocks/manufacturing/slicing/hatch-with-islands) | Manufacturing/Slicing | | [Merge Slice Stacks](../../block-documentation/blocks/manufacturing/slicing/merge-slice-stacks) | Manufacturing/Slicing | | [Slice Stack Boolean Union](../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-union) | Manufacturing/Slicing | | [Slice Stack Boolean Subtract](../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-subtract) | Manufacturing/Slicing | | [Slice Stack Boolean Intersect](../../block-documentation/blocks/manufacturing/slicing/slice-stack-boolean-intersect) | Manufacturing/Slicing | | [Import Slice Stack](../../block-documentation/blocks/manufacturing/exchange/import-slice-stack) | Manufacturing/Exchange | | [Slice on Build Plane](../../block-documentation/blocks/additive-manufacturing/build-preparation/slice-on-build-plane) | Additive Manufacturing/Build Preparation | | [Offset and Checkerboard Slices](../../block-documentation/blocks/additive-manufacturing/build-preparation/offset-and-checkerboard-slices) | Additive Manufacturing/Build Preparation | # Solid Attribute Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/solid-attribute An object with material assignment and structural properties of selected interior regions (or the entirety) of a solid domain. ### Properties | Name | Type | | - | - | | List | [Solid Attribute List](../../block-documentation/types/solid-attribute) | ### Block Reference | Block Name | Location | | - | - | | [Solid Attribute](../../block-documentation/blocks/structures/material-attributes/solid-attribute) | Structures/Material Attributes | | [Beam Attribute](../../block-documentation/blocks/structures/material-attributes/beam-attribute) | Structures/Material Attributes | | [Shell Attribute](../../block-documentation/blocks/structures/material-attributes/shell-attribute) | Structures/Material Attributes | | [Point Attribute](../../block-documentation/blocks/structures/material-attributes/point-attribute) | Structures/Material Attributes | # Sphere Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/sphere A perfectly round 3-dimensional object. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Center | [Point](../../block-documentation/types/point) | | List | [Sphere List](../../block-documentation/types/sphere) | | Radius | [Scalar](../../block-documentation/types/scalar) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Sphere](../../block-documentation/blocks/create/primitives/sphere) | Create/Primitives | # Spline Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/spline A non-uniform basis spline (B-spline) curve. ### Properties | Name | Type | | - | - | | Arc Length Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Closed | [Bool](../../block-documentation/types/bool) | | Control Points | [Point List](../../block-documentation/types/point) | | Degree | [Integer](../../block-documentation/types/integer) | | End Point | [Point](../../block-documentation/types/point) | | End Tangent | [Vector](../../block-documentation/types/vector) | | Length | [Scalar](../../block-documentation/types/scalar) | | List | [Spline List](../../block-documentation/types/spline) | | Name | [Text](../../block-documentation/types/text) | | Reversed Curve | [Spline](../../block-documentation/types/spline) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Start Point | [Point](../../block-documentation/types/point) | | Start Tangent | [Vector](../../block-documentation/types/vector) | ### Block Reference | Block Name | Location | | - | - | | [Spline by Control Points](../../block-documentation/blocks/create/curves/spline-by-control-points) | Create/Curves | | [Spline through Points](../../block-documentation/blocks/create/curves/spline-through-points) | Create/Curves | | [Spline by Tangents](../../block-documentation/blocks/create/curves/spline-by-tangents) | Create/Curves | | [Conic by Points](../../block-documentation/blocks/create/curves/conic-by-points) | Create/Curves | | [Conic by Tangents](../../block-documentation/blocks/create/curves/conic-by-tangents) | Create/Curves | # SSL slice data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/ssl-slice-data An object that represents slices exported as an SSL file. ### Properties | Name | Type | | - | - | | List | [SSL slice data List](../../block-documentation/types/ssl-slice-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Slices to SSL](../../block-documentation/blocks/manufacturing/exchange/export-slices-to-ssl) | Manufacturing/Exchange | # Static Structural Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/static-structural-result An object that contains data generated from a static structural simulation. ### Properties | Name | Type | | - | - | | Displacement | [Vector Field](../../block-documentation/types/vector-field) | | Dof Count | [Integer](../../block-documentation/types/integer) | | E11 Component Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | E12 Component Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | E13 Component Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | E22 Component Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | E23 Component Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | E33 Component Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | Element Count | [Integer](../../block-documentation/types/integer) | | List | [Static Structural Result List](../../block-documentation/types/static-structural-result) | | Max Principal Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | Max Principal Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | Mid Principal Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | Mid Principal Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | Min Principal Strain | [Scalar Field](../../block-documentation/types/scalar-field) | | Min Principal Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | Node Count | [Integer](../../block-documentation/types/integer) | | Reaction Force | [Vector Field](../../block-documentation/types/vector-field) | | S11 Component Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | S12 Component Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | S13 Component Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | S22 Component Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | S23 Component Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | S33 Component Stress | [Scalar Field](../../block-documentation/types/scalar-field) | | Von Mises Stress | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Static Analysis](../../block-documentation/blocks/structures/analysis/static-analysis) | Structures/Analysis | | [Import Static Structural Result](../../block-documentation/blocks/structures/exchange/import-static-structural-result) | Structures/Exchange | | [Static Analysis with Inertia Relief](../../block-documentation/blocks/beta/simulation/static-analysis-with-inertia-relief) | Beta/Simulation | # Static Thermal Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/static-thermal-result An object that contains data generated from a static thermal simulation. ### Properties | Name | Type | | - | - | | Dof Count | [Integer](../../block-documentation/types/integer) | | Element Count | [Integer](../../block-documentation/types/integer) | | Heat Flux | [Vector Field](../../block-documentation/types/vector-field) | | Iteration Count | [Integer](../../block-documentation/types/integer) | | List | [Static Thermal Result List](../../block-documentation/types/static-thermal-result) | | Node Count | [Integer](../../block-documentation/types/integer) | | Temperature | [Scalar Field](../../block-documentation/types/scalar-field) | | Thermal Reaction Flux | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Thermal Analysis](../../block-documentation/blocks/structures/analysis/thermal-analysis) | Structures/Analysis | | [Nonlinear Thermal Analysis](../../block-documentation/blocks/structures/analysis/nonlinear-thermal-analysis) | Structures/Analysis | | [Import Static Thermal Result](../../block-documentation/blocks/structures/exchange/import-static-thermal-result) | Structures/Exchange | # Superelement Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/superelement Superelement ### Properties | Name | Type | | - | - | | Domain | [FE Domain](../../block-documentation/types/fe-domain) | | List | [Superelement List](../../block-documentation/types/superelement) | | Node Count | [Integer](../../block-documentation/types/integer) | | Points | [Dictionary](../../block-documentation/types/dictionary) | ### Block Reference | Block Name | Location | | - | - | | [Import Superelement](../../block-documentation/blocks/structures/exchange/import-superelement) | Structures/Exchange | # Superelement File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/superelement-file-data An object that contains data generated from a DMIG file. ### Properties | Name | Type | | - | - | | List | [Superelement File Data List](../../block-documentation/types/superelement-file-data) | # Superelement Geometry File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/superelement-geometry-file-data An object that contains geometry generated from a FEM file. ### Properties | Name | Type | | - | - | | List | [Superelement Geometry File Data List](../../block-documentation/types/superelement-geometry-file-data) | # Surface Plot Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/surface-plot A shaded view of an object. ### Properties | Name | Type | | - | - | | List | [Surface Plot List](../../block-documentation/types/surface-plot) | ### Block Reference | Block Name | Location | | - | - | | [Surface Plot](../../block-documentation/blocks/beta/utilities/surface-plot) | Beta/Utilities | # Surface Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/surface-rule ### Properties | Name | Type | | - | - | | List | [Surface Rule List](../../block-documentation/types/surface-rule) | | Name | [Text](../../block-documentation/types/text) | # Table Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/table An object for column-oriented tabular data that is often stored as columns in a text file or in a spreadsheet. ### Properties | Name | Type | | - | - | | Column Count | [Integer](../../block-documentation/types/integer) | | Columns | [Column List](../../block-documentation/types/column) | | Headers | [Text List](../../block-documentation/types/text) | | List | [Table List](../../block-documentation/types/table) | | Row Count | [Integer](../../block-documentation/types/integer) | ### Block Reference | Block Name | Location | | - | - | | [Extract Optimization History](../../block-documentation/blocks/parameter-optimization-beta/utilities/extract-optimization-history) | Parameter Optimization \[Beta]/Utilities | | [Import Table](../../block-documentation/blocks/utilities/exchange/import-table) | Utilities/Exchange | | [Table from Columns](../../block-documentation/blocks/utilities/general/table-from-columns) | Utilities/General | | [Cartesian Product](../../block-documentation/blocks/utilities/general/cartesian-product) | Utilities/General | # Table File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/table-file-data An object that represents an exported table file. ### Properties | Name | Type | | - | - | | List | [Table File Data List](../../block-documentation/types/table-file-data) | ### Block Reference | Block Name | Location | | - | - | | [Export Table](../../block-documentation/blocks/utilities/exchange/export-table) | Utilities/Exchange | # Temperature Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/temperature The absolute temperature of an object. If a temperature difference is intended, use a Scalar with units of Kelvin, Fahrenheit, or Celsius. ### Properties | Name | Type | | - | - | | Field | [Temperature Field](../../block-documentation/types/temperature-field) | | List | [Temperature List](../../block-documentation/types/temperature) | | Relative Temperature | [Scalar](../../block-documentation/types/scalar) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | # Temperature Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/temperature-field A field of temperature values, where an absolute temperature value is defined at every location in space. If a difference of temperatures at every point in space is desired, a Scalar Field with units of temperature can be used instead. ### Properties | Name | Type | | - | - | | List | [Temperature Field List](../../block-documentation/types/temperature-field) | | Relative Temperature | [Scalar Field](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Field from Point Map](../../block-documentation/blocks/fields/utilities/field-from-point-map) | Fields/Utilities | | [Radial Basis Field from Point Map](../../block-documentation/blocks/fields/utilities/radial-basis-field-from-point-map) | Fields/Utilities | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | # Temperature Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/temperature-point-map A map that pairs 3-dimensional point locations to temperature values. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | List | [Temperature Point Map List](../../block-documentation/types/temperature-point-map) | | Points | [Point List](../../block-documentation/types/point) | | Values | [Temperature List](../../block-documentation/types/temperature) | ### Block Reference | Block Name | Location | | - | - | | [Point Map](../../block-documentation/blocks/fields/utilities/point-map) | Fields/Utilities | | [Temperature Point Map](../../block-documentation/blocks/structures/exchange/temperature-point-map) | Structures/Exchange | # Temperature Restraint Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/temperature-restraint An object with information about a temperature boundary condition. ### Properties | Name | Type | | - | - | | Boundary | [FE Boundary](../../block-documentation/types/fe-boundary) | | List | [Temperature Restraint List](../../block-documentation/types/temperature-restraint) | | Temperature | [Temperature Field](../../block-documentation/types/temperature-field) | ### Block Reference | Block Name | Location | | - | - | | [Temperature Restraint](../../block-documentation/blocks/structures/boundary-conditions/temperature-restraint) | Structures/Boundary Conditions | # Temporary Directory Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/temporary-directory A Temporary Directory. ### Properties | Name | Type | | - | - | | List | [Temporary Directory List](../../block-documentation/types/temporary-directory) | | Path | [Path](../../block-documentation/types/path) | ### Block Reference | Block Name | Location | | - | - | | [Temporary Directory](../../block-documentation/blocks/utilities/system/temporary-directory) | Utilities/System | # Text Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/text A string of characters. ### Properties | Name | Type | | - | - | | Length | [Integer](../../block-documentation/types/integer) | | List | [Text List](../../block-documentation/types/text) | | Path | [Path](../../block-documentation/types/path) | ### Block Reference | Block Name | Location | | - | - | | [Text from Scalar](../../block-documentation/blocks/utilities/conversion/text-from-scalar) | Utilities/Conversion | | [Concatenate Text](../../block-documentation/blocks/utilities/general/concatenate-text) | Utilities/General | | [Tab](../../block-documentation/blocks/utilities/general/tab) | Utilities/General | | [Get Environment Variable](../../block-documentation/blocks/utilities/system/get-environment-variable) | Utilities/System | # Text File Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/text-file An object that represents an exported text file. ### Properties | Name | Type | | - | - | | List | [Text File List](../../block-documentation/types/text-file) | ### Block Reference | Block Name | Location | | - | - | | [Export Topology Optimization History](../../block-documentation/blocks/optimization/exchange/export-topology-optimization-history) | Optimization/Exchange | | [Export Text](../../block-documentation/blocks/utilities/exchange/export-text) | Utilities/Exchange | # Thermal Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/thermal-result A thermal result that can be used as an interface for thermal analysis result objects. ### Properties | Name | Type | | - | - | | List | [Thermal Result List](../../block-documentation/types/thermal-result) | # Thick Graph Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/thick-graph A collection of beams, vertices, and thickness data that interconnect to create a thickened structure. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Graph | [Graph](../../block-documentation/types/graph) | | List | [Thick Graph List](../../block-documentation/types/thick-graph) | ### Block Reference | Block Name | Location | | - | - | | [Import Thick Lattice Graph](../../block-documentation/blocks/utilities/exchange/import-thick-lattice-graph) | Utilities/Exchange | # Time Dependent Structural Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/time-dependent-structural-result An object that contains data imported from a explicit simulation. ### Properties | Name | Type | | - | - | | Acceleration | [Vector Field List](../../block-documentation/types/vector-field) | | Displacement | [Vector Field List](../../block-documentation/types/vector-field) | | E11 Component Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | E12 Component Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | E13 Component Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | E22 Component Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | E23 Component Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | E33 Component Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | List | [Time Dependent Structural Result List](../../block-documentation/types/time-dependent-structural-result) | | Max Principal Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | Max Principal Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | Mid Principal Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | Mid Principal Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | Min Principal Strain | [Scalar Field List](../../block-documentation/types/scalar-field) | | Min Principal Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | Reaction Force | [Vector Field List](../../block-documentation/types/vector-field) | | S11 Component Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | S12 Component Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | S13 Component Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | S22 Component Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | S23 Component Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | S33 Component Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | | Velocity | [Vector Field List](../../block-documentation/types/vector-field) | | Von Mises Stress | [Scalar Field List](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Import Time Dependent Structural Result](../../block-documentation/blocks/structures/exchange/import-time-dependent-structural-result) | Structures/Exchange | # Time Dependent Thermal Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/time-dependent-thermal-result An object that contains data generated from a static thermal simulation. ### Properties | Name | Type | | - | - | | Dof Count | [Integer](../../block-documentation/types/integer) | | Element Count | [Integer](../../block-documentation/types/integer) | | Heat Flux | [Vector Field List](../../block-documentation/types/vector-field) | | Iteration Count | [Integer](../../block-documentation/types/integer) | | List | [Time Dependent Thermal Result List](../../block-documentation/types/time-dependent-thermal-result) | | Node Count | [Integer](../../block-documentation/types/integer) | | Saved Iterations | [Integer List](../../block-documentation/types/integer) | | Saved Timesteps | [Scalar List](../../block-documentation/types/scalar) | | Temperature | [Scalar Field List](../../block-documentation/types/scalar-field) | | Thermal Reaction Flux | [Scalar Field List](../../block-documentation/types/scalar-field) | ### Block Reference | Block Name | Location | | - | - | | [Transient Thermal Analysis](../../block-documentation/blocks/structures/analysis/transient-thermal-analysis) | Structures/Analysis | | [Import Time Dependent Thermal Result](../../block-documentation/blocks/structures/exchange/import-time-dependent-thermal-result) | Structures/Exchange | # Topology Optimization Result Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/topology-optimization-result An object that contains data generated from a topology optimization. ### Properties | Name | Type | | - | - | | Density | [Scalar Field](../../block-documentation/types/scalar-field) | | Design Variable Count | [Integer](../../block-documentation/types/integer) | | Dof Count | [Integer](../../block-documentation/types/integer) | | Element Count | [Integer](../../block-documentation/types/integer) | | Iterations | [Integer](../../block-documentation/types/integer) | | List | [Topology Optimization Result List](../../block-documentation/types/topology-optimization-result) | | Load Case Count | [Integer](../../block-documentation/types/integer) | | Node Count | [Integer](../../block-documentation/types/integer) | | Saved Iterations | [Integer List](../../block-documentation/types/integer) | ### Block Reference | Block Name | Location | | - | - | | [Topology Optimization](../../block-documentation/blocks/optimization/optimization/topology-optimization) | Optimization/Optimization | | [Single Body Topology Optimization](../../block-documentation/blocks/optimization/optimization/single-body-topology-optimization) | Optimization/Optimization | | [Import Topology Optimization Result](../../block-documentation/blocks/optimization/exchange/import-topology-optimization-result) | Optimization/Exchange | # Torus Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/torus A geometry created by revolving a circle about an axis. ### Properties | Name | Type | | - | - | | Axis | [Axis](../../block-documentation/types/axis) | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | Center Point | [Point](../../block-documentation/types/point) | | Direction | [Vector](../../block-documentation/types/vector) | | List | [Torus List](../../block-documentation/types/torus) | | Radius | [Scalar](../../block-documentation/types/scalar) | | Scalar Field | [Scalar Field](../../block-documentation/types/scalar-field) | | Tube Radius | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Torus](../../block-documentation/blocks/create/primitives/torus) | Create/Primitives | # Transformable Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/transformable An object that can be transformed in space. ### Properties | Name | Type | | - | - | | List | [Transformable List](../../block-documentation/types/transformable) | # Transformation Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/transformation A representation of how a 3-dimensional object is transformed in space. ### Properties | Name | Type | | - | - | | List | [Transformation List](../../block-documentation/types/transformation) | ### Block Reference | Block Name | Location | | - | - | | [Rotation Transform](../../block-documentation/blocks/utilities/transforms/rotation-transform) | Utilities/Transforms | | [Translation Transform](../../block-documentation/blocks/utilities/transforms/translation-transform) | Utilities/Transforms | | [Combine Transforms](../../block-documentation/blocks/utilities/transforms/combine-transforms) | Utilities/Transforms | | [Invert Transform](../../block-documentation/blocks/utilities/transforms/invert-transform) | Utilities/Transforms | | [Minimum Height Orientation](../../block-documentation/blocks/additive-manufacturing/build-preparation/minimum-height-orientation) | Additive Manufacturing/Build Preparation | # Tuple Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/tuple A Tuple of Any objects. # Unit System Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/unit-system Represents a specific unit system. ### Properties | Name | Type | | - | - | | List | [Unit System List](../../block-documentation/types/unit-system) | ### Block Reference | Block Name | Location | | - | - | | [Unit System](../../block-documentation/blocks/structures/exchange/unit-system) | Structures/Exchange | # Unknown Type Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/unknown-type nTop was not able to determine the proper type to use here. Some functionality will be unavailable as a result. In order to fix the issue, drag in a variable or block of the intended type. # Vector Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/vector A 3-dimensional scalar. This object has an x, y and z component, and can have units. ### Properties | Name | Type | | - | - | | Field | [Vector Field](../../block-documentation/types/vector-field) | | Length | [Scalar](../../block-documentation/types/scalar) | | List | [Vector List](../../block-documentation/types/vector) | | Negative | [Vector](../../block-documentation/types/vector) | | Point | [Point](../../block-documentation/types/point) | | Unit Vector | [Vector](../../block-documentation/types/vector) | | X | [Scalar](../../block-documentation/types/scalar) | | Y | [Scalar](../../block-documentation/types/scalar) | | Z | [Scalar](../../block-documentation/types/scalar) | ### Block Reference | Block Name | Location | | - | - | | [Vector](../../block-documentation/blocks/create/vectors/vector) | Create/Vectors | | [Evaluate Field](../../block-documentation/blocks/fields/utilities/evaluate-field) | Fields/Utilities | | [Evaluate Field Gradient](../../block-documentation/blocks/fields/utilities/evaluate-field-gradient) | Fields/Utilities | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | | [Multiply](../../block-documentation/blocks/math/operations/multiply) | Math/Operations | | [Divide](../../block-documentation/blocks/math/operations/divide) | Math/Operations | | [Average](../../block-documentation/blocks/math/operations/average) | Math/Operations | | [Perpendicular Vector](../../block-documentation/blocks/math/vectors/perpendicular-vector) | Math/Vectors | | [Cross Product](../../block-documentation/blocks/math/vectors/cross-product) | Math/Vectors | # Vector Field Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/vector-field A field of vector values, where a vector value is defined at every location in space. This object can have units. ### Properties | Name | Type | | - | - | | Length | [Scalar Field](../../block-documentation/types/scalar-field) | | List | [Vector Field List](../../block-documentation/types/vector-field) | | Negative | [Vector Field](../../block-documentation/types/vector-field) | | Unit Vector Field | [Vector Field](../../block-documentation/types/vector-field) | | X | [Scalar Field](../../block-documentation/types/scalar-field) | | Xy | [2D Vector Field](../../block-documentation/types/2d-vector-field) | | Y | [Scalar Field](../../block-documentation/types/scalar-field) | | Yz | [2D Vector Field](../../block-documentation/types/2d-vector-field) | | Z | [Scalar Field](../../block-documentation/types/scalar-field) | | Zx | [2D Vector Field](../../block-documentation/types/2d-vector-field) | ### Block Reference | Block Name | Location | | - | - | | [Field from Point Map](../../block-documentation/blocks/fields/utilities/field-from-point-map) | Fields/Utilities | | [Radial Basis Field from Point Map](../../block-documentation/blocks/fields/utilities/radial-basis-field-from-point-map) | Fields/Utilities | | [Add](../../block-documentation/blocks/math/operations/add) | Math/Operations | | [Subtract](../../block-documentation/blocks/math/operations/subtract) | Math/Operations | | [Multiply](../../block-documentation/blocks/math/operations/multiply) | Math/Operations | | [Divide](../../block-documentation/blocks/math/operations/divide) | Math/Operations | | [Average](../../block-documentation/blocks/math/operations/average) | Math/Operations | | [Perpendicular Vector](../../block-documentation/blocks/math/vectors/perpendicular-vector) | Math/Vectors | | [Vector Field from Components](../../block-documentation/blocks/math/vectors/vector-field-from-components) | Math/Vectors | | [Vector Field from Gradient](../../block-documentation/blocks/math/vectors/vector-field-from-gradient) | Math/Vectors | | [Cross Product](../../block-documentation/blocks/math/vectors/cross-product) | Math/Vectors | | [Mix](../../block-documentation/blocks/math/utilities/mix) | Math/Utilities | | [UV Field from Surface](../../block-documentation/blocks/utilities/conversion/uv-field-from-surface) | Utilities/Conversion | | [If-Else](../../block-documentation/blocks/beta/create/if-else) | Beta/Create | | [Displacement Vector Modifier](../../block-documentation/blocks/design-analysis/fields/displacement-vector-modifier) | Design Analysis/Fields | # Vector Point Map Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/vector-point-map A map that pairs 3-dimensional point to vector values. ### Properties | Name | Type | | - | - | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | List | [Vector Point Map List](../../block-documentation/types/vector-point-map) | | Points | [Point List](../../block-documentation/types/point) | | Values | [Vector List](../../block-documentation/types/vector) | ### Block Reference | Block Name | Location | | - | - | | [Point Map](../../block-documentation/blocks/fields/utilities/point-map) | Fields/Utilities | | [Import Vector Point Map](../../block-documentation/blocks/fields/utilities/import-vector-point-map) | Fields/Utilities | | [Filter Points by Volume](../../block-documentation/blocks/fields/utilities/filter-points-by-volume) | Fields/Utilities | | [Displacement Point Map](../../block-documentation/blocks/structures/exchange/displacement-point-map) | Structures/Exchange | | [Heat Flux Point Map](../../block-documentation/blocks/structures/exchange/heat-flux-point-map) | Structures/Exchange | | [Velocity Point Map](../../block-documentation/blocks/structures/exchange/velocity-point-map) | Structures/Exchange | # Velocity Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/velocity A boundary condition that applies a velocity. ### Properties | Name | Type | | - | - | | List | [Velocity List](../../block-documentation/types/velocity) | ### Block Reference | Block Name | Location | | - | - | | [Velocity](../../block-documentation/blocks/structures/boundary-conditions/velocity) | Structures/Boundary Conditions | # Virtual Analysis File Data Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/virtual-analysis-file-data An object that represents an exported virtual analysis file. ### Properties | Name | Type | | - | - | | List | [Virtual Analysis File Data List](../../block-documentation/types/virtual-analysis-file-data) | # Virtual Boundary Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/virtual-boundary An object that defines the location of a boundary condition on a Domain. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Virtual Boundary List](../../block-documentation/types/virtual-boundary) | | Name | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Virtual Boundary by Body](../../block-documentation/blocks/structures/utilities/virtual-boundary-by-body) | Structures/Utilities | # Virtual Domain Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/virtual-domain An object with information about a Virtual Domain with corresponding attributes assigned to it. ### Properties | Name | Type | | - | - | | Attributes | [Solid Attribute List](../../block-documentation/types/solid-attribute) | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Virtual Domain List](../../block-documentation/types/virtual-domain) | | Virtual Model | [Virtual Model](../../block-documentation/types/virtual-model) | ### Block Reference | Block Name | Location | | - | - | | [Solid Domain](../../block-documentation/blocks/structures/model/solid-domain) | Structures/Model | | [Fluid Domain](../../block-documentation/blocks/fluids/model/fluid-domain) | Fluids/Model | # Virtual Model Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/virtual-model An object with information about all of the Virtual Domains and the connectivity information between them. ### Properties | Name | Type | | - | - | | Connectors | [Connector List](../../block-documentation/types/connector) | | List | [Virtual Model List](../../block-documentation/types/virtual-model) | | Virtual Domains | [Virtual Domain List](../../block-documentation/types/virtual-domain) | ### Block Reference | Block Name | Location | | - | - | | [Simulation Model](../../block-documentation/blocks/structures/model/simulation-model) | Structures/Model | # Virtual Region Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/virtual-region An object with information about a region of a Domain. ### Properties | Name | Type | | - | - | | Body | [Implicit Body](../../block-documentation/types/implicit-body) | | List | [Virtual Region List](../../block-documentation/types/virtual-region) | | Name | [Text](../../block-documentation/types/text) | ### Block Reference | Block Name | Location | | - | - | | [Virtual Region by Body](../../block-documentation/blocks/structures/utilities/virtual-region-by-body) | Structures/Utilities | # Volume Mesh Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/volume-mesh A collection of vertices, edges, and faces, and cells that defines a volume mesh. ### Properties | Name | Type | | - | - | | Cell Count | [Integer](../../block-documentation/types/integer) | | Edges | [Line List](../../block-documentation/types/line) | | List | [Volume Mesh List](../../block-documentation/types/volume-mesh) | | Surface | [Mesh](../../block-documentation/types/mesh) | | Vertex Count | [Integer](../../block-documentation/types/integer) | | Vertices | [Point List](../../block-documentation/types/point) | ### Block Reference | Block Name | Location | | - | - | | [Volume Mesh](../../block-documentation/blocks/structures/mesh/volume-mesh) | Structures/Mesh | | [Robust Tetrahedral Mesh](../../block-documentation/blocks/structures/mesh/robust-tetrahedral-mesh) | Structures/Mesh | | [Delaunay Volume Mesh](../../block-documentation/blocks/structures/mesh/delaunay-volume-mesh) | Structures/Mesh | | [Boundary Layer Mesh](../../block-documentation/blocks/structures/mesh/boundary-layer-mesh) | Structures/Mesh | # Volumetric Rule Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/volumetric-rule ### Properties | Name | Type | | - | - | | List | [Volumetric Rule List](../../block-documentation/types/volumetric-rule) | | Name | [Text](../../block-documentation/types/text) | # Voronoi Surface Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/voronoi-surface-lattice A Voronoi Surface Lattice. ### Properties | Name | Type | | - | - | | Implicit | [Implicit Body](../../block-documentation/types/implicit-body) | | Lattice | [Lattice](../../block-documentation/types/lattice) | | List | [Voronoi Surface Lattice List](../../block-documentation/types/voronoi-surface-lattice) | | Voronoi Surface Patches | [Mesh List](../../block-documentation/types/mesh) | ### Block Reference | Block Name | Location | | - | - | | [Voronoi Surface Lattice](../../block-documentation/blocks/lattices/stochastic/voronoi-surface-lattice) | Lattices/Stochastic | # Voronoi Volume Lattice Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/voronoi-volume-lattice A Voronoi Volume Lattice. ### Properties | Name | Type | | - | - | | Cell Diameters | [Scalar Point Map](../../block-documentation/types/scalar-point-map) | | Implicit | [Implicit Body](../../block-documentation/types/implicit-body) | | Lattice | [Lattice](../../block-documentation/types/lattice) | | List | [Voronoi Volume Lattice List](../../block-documentation/types/voronoi-volume-lattice) | | Voronoi Cells | [Cell List](../../block-documentation/types/cell) | ### Block Reference | Block Name | Location | | - | - | | [Voronoi Volume Lattice](../../block-documentation/blocks/lattices/stochastic/voronoi-volume-lattice) | Lattices/Stochastic | | [Trim Lattice](../../block-documentation/blocks/lattices/utilities/trim-lattice) | Lattices/Utilities | | [Modify Lattice Thickness](../../block-documentation/blocks/lattices/utilities/modify-lattice-thickness) | Lattices/Utilities | | [Extend Open Lattice Beams](../../block-documentation/blocks/lattices/utilities/extend-open-lattice-beams) | Lattices/Utilities | | [Infill Voronoi Lattice](../../block-documentation/blocks/architected-materials/latticing/infill-voronoi-lattice) | Architected Materials/Latticing | # Voxel Grid Source: https://docs.ntop.com/Product-Documentation/ntop/block-documentation/types/voxel-grid A distance field geometry discretized over a sparse three-dimensional grid. ### Properties | Name | Type | | - | - | | Active Voxel Count | [Integer](../../block-documentation/types/integer) | | Bounding Box | [Bounding Box](../../block-documentation/types/bounding-box) | | List | [Voxel Grid List](../../block-documentation/types/voxel-grid) | | X Size | [Integer](../../block-documentation/types/integer) | | Y Size | [Integer](../../block-documentation/types/integer) | | Z Size | [Integer](../../block-documentation/types/integer) | ### Block Reference | Block Name | Location | | - | - | | [Offset Voxel Grid](../../block-documentation/blocks/modeling/utilities/offset-voxel-grid) | Modeling/Utilities | | [Smoothen Voxel Grid](../../block-documentation/blocks/modeling/utilities/smoothen-voxel-grid) | Modeling/Utilities | | [Import Voxel Grid](../../block-documentation/blocks/utilities/exchange/import-voxel-grid) | Utilities/Exchange | | [Voxel Grid from Mesh](../../block-documentation/blocks/utilities/conversion/voxel-grid-from-mesh) | Utilities/Conversion | | [Voxel Grid from Implicit Body](../../block-documentation/blocks/utilities/conversion/voxel-grid-from-implicit-body) | Utilities/Conversion | | [Manufacturing Support Volume](../../block-documentation/blocks/manufacturing/utilities/manufacturing-support-volume) | Manufacturing/Utilities | # Error Documentation Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation #### Error Documentation Documentation about common errors and how to correct them. *** > **[Axis Error](./error-documentation/axis_error)** > **[Boundary Error](./error-documentation/boundary_error)** > **[CSV Format](./error-documentation/csv_format)** > **[Canceled](./error-documentation/canceled)** > **[Connector Error](./error-documentation/connector)** > **[Empty Part](./error-documentation/empty_part)** > **[Export](./error-documentation/export)** > **[File Not Found](./error-documentation/file_not_found)** > **[File Open](./error-documentation/file_open)** > **[File Unsupported](./error-documentation/file_unsupported)** > **[File Write](./error-documentation/file_write)** > **[Incorrect Units](./error-documentation/incorrect_units)** > **[Invalid Block Error](./error-documentation/invalid_block_error)** > **[Invalid Number of Points](./error-documentation/invalid_number_of_points)** > **[Invalid Type](./error-documentation/invalid_type)** > **[Invalid Units](./error-documentation/invalid_units)** > **[Invalid Value](./error-documentation/invalid_value)** > **[Lattice Error](./error-documentation/lattice_error)** > **[List Item Error](./error-documentation/list_item_error)** > **[List Length Error](./error-documentation/list_length_error)** > **[Mesh Error](./error-documentation/mesh_error)** > **[Mesh Reference Error](./error-documentation/mesh_reference_error)** > **[Out of Range](./error-documentation/out_of_range)** > **[Plugin](./error-documentation/plugin)** > **[Rigid Motion Error](./error-documentation/rigid_motion_error)** > **[Security Error](./error-documentation/security)** > **[Tolerance Error](./error-documentation/tolerance)** > **[Unit Mismatch](./error-documentation/unit_mismatch)** > **[Unknown Error](./error-documentation/unknown_error)** > **[Volume Mesh Error](./error-documentation/volume_mesh_error)** > **[Wrong File Type](./error-documentation/file_type)** # Axis Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/axis_error ## The given X axis and Y axis were found to be parallel. Please adjust one of these two inputs so that they are not parallel ### About the error **Issue:** Frame or Plane can’t be created when both the axes are parallel. **Applies to:** * Frame * Plane **Cause:** * The X and Y axes are parallel. **Solution:** * Update the values of X and Y axes to create a plane or a frame. *** ## Axis length cannot be less than 0 ### About the error **Issue:** An axis length of zero isn’t possible. **Applies to:** * Torus * Frame * Plane **Cause:** * An axis length of zero was used. **Solution:** * Enter an axis length that is larger than zero. *** # Boundary Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/boundary_error ## An FE Boundary or FE Region, at position # of the boundary condition list, references an FE Mesh that is not used in the model assembly. Please verify that all boundary conditions and regions reference the same FE Mesh as that used in the FE Model ### About the error **Issue:** One of the FE Boundary or FE Regions is referencing a mesh that isn’t in the FE Model. **Applies to:** * FE Model **Cause:** * The mesh being referenced needs to be a part of the FE Model in order to analyze the part correctly. **Solution:** * Change the mesh that is being referenced or add it to the FE Model. *** ## Pressure can only be applied to boundary entities with faces ### About the error **Issue:** Pressure can’t be applied to edges or nodes. **Applies to:** * FE Boundary by Body * FE Boundary by Floodfill * FE Region by Floodfill **Cause:** * Trying to apply pressure to edges or nodes. **Solution:** * Change the boundary entity to faces. *** # Canceled Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/canceled ## User canceled ### About the error **Issue:** The block was canceled before it could finish running. **Cause:** * The block operation was canceled. **Solution:** * Run the block again by using the Rebuild block icon. * Run the block again by pressing enter in an input. *** # Connector Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/connector ## Some component have not been connected to any other components ### About the error **Issue:** It occurs when one of the FE components listed in the FE model is not connected properly. **Applies to:** Tie Constraint **Cause:** There are more components in the model that need to be connected. **Solution:** Check if all the components are connected using the correct constraint blocks. *** # CSV Format Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/csv_format ## CSV file has wrong number of columns ### About the error **Issue:** The CSV file does not have the expected number of columns on every row. **Applies to:** * Import Points * Import Scalar Point Map * Import Vector Point Map **Cause:** * The CSV file contains one or more rows with the wrong number of values. The number of values on each row must equal the number of columns. **Solution:** * Check the specified file has the correct number of comma-separated values on every row. * Points are imported from rows of three values (x, y, z). * Scalar point maps are imported from rows of four values (x, y, z, s). * Vector point maps are imported from rows of six values (x, y, z, u, v, w). *** # Empty Part Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/empty_part ## Empty Part ### About the error **Issue:** Cannot translate any data from the imported CAD file. **Applies to:** * Import Part **Cause:** * The application found no bodies, components, or curves in the imported CAD file. This could be due to the file not containing any of these elements (for example, a CAD file could contain only sketch data). Curves in native SolidWorks files (SLDPRT) will not import. If the SLDPRT file contains only curves and no other geometry, you will get this error. **Solution:** * Make sure the CAD file contains solid geometry. * Make sure the CAD file is in a supported format. *** # Export Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/export ## Export ### About the error **Issue:** Failed to export Part data to the specified file path. **Applies to:** * Export Part **Cause:** * Error generating or writing CAD data. This may be due to an internal error when generating the file data or may be due to having insufficient permissions to write to the specified file path. **Solution:** * Verify you have permission to write to the specified file path. *** # File Not Found Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/file_not_found ## File not found: \<redacted\> ### About the error **Issue:** Occurs when the software is not able to locate the file in the user mentioned file path. **Applies to:** * Import Blocks **Cause:** * File not located in the path **Solution:** * Check the path to see if the file is present. * See if the file has been renamed. *** # File Open Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/file_open ## File Open ### About the error **Issue:** Failed to open the specified file. **Cause:** * nTop encountered an error when attempting to read from the specified input file. This can happen when the path does not exist on the current machine (for example, when running a notebook created on a different machine) or when you do not have permission to read the specified file. **Solution:** * Verify the file exists and that you have permission to read it. *** # Wrong File Type Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/file_type ## Wrong File Type ### About the error **Issue:** File is wrong type for import block. **Applies to:** * Import Part * Import Lattice Graph * Import Thick Lattice Graph * Import Mesh * Import FE Mesh * Import Static Structural Result * Import Modal Result * Import Buckling Result * Import Static Thermal Result * Import Topology Optimization Result * Import CFD Analysis Result * Import Time Dependent Structural Result * Import Time Dependent Thermal Result * Import Voxel Grid **Cause:** * The file exists but is of the wrong type for the particular block. For example, trying to load a .txt or .pdf file in the Import Part block would result in this error. **Solution:** * Make sure the file is of a supported type for the particular block. For a list of formats supported by the current release of nTop, see [Import and Export](/file_types/import_export). *** # File Unsupported Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/file_unsupported ## File Unsupported ### About the error **Issue:** The specified file is not supported. This can happen when the authoring CAD system is newer than what nTop supports or when it is non-commercial. **Applies to:** * Import Part **Cause:** * There are two reasons this error may occur when loading a native CAD file format. * nTop does not yet support the version of the CAD system that produced the file. * The file was authored in a non-commercial version of one of our supported CAD systems, e.g., SOLIDWORKS Education Edition. **Solution:** * Export the file from your CAD system in an earlier, supported version of the native CAD file format, if available. * Export the file from your CAD system as a Parasolid model (`.x_t` or `.x_b`) instead. * Export the file from your CAD system as a STEP model (`.step` or `.stp`) instead. * For a list of formats supported by this release of nTop, see [Import and Export](/file_types/import_export). *** # File Write Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/file_write ## File Write ### About the error **Issue:** Failed to write the file. **Cause:** * The software failed to write to the specified file. **Solution:** * Verify the file exists and that you have permission to write to it. *** # Incorrect Units Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/incorrect_units ## Invalid units in input ### About the error **Issue:** The units entered into the block are unsupported. The block can’t run with unsupported unit types. **Cause:** * An unsupported unit type was entered in the block. **Solution:** * Type in a supported unit type in the input. *Ex. ‘Radius’ requires units of Length, but received units of Mass. Please input a value with the correct units.* *** # Invalid Block Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/invalid_block_error ## Invalid Block Error ### About the error **Issue:** The function block referenced in the nTop file was not found in this version of software. **Applies to:** * Blocks or types that are no longer available in the current version of software either because of a permissions mismatch or becaues of a deprecated blocks that have been retired. **Solution:** * Please ensure you have the correct software version and permissions to run the nTop file. * Open the file in a prior version of the software to see if any blocks were marked with a deprecation warning. If so,please update the notebook to use the latest versions of the affected blocks before reopening in a newer version of the software. * If the error persists, please contact nTop Support by visiting support.ntop.com with the error messages and contents in the block's Information panel. *** # Invalid Number of Points Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/invalid_number_of_points ## Require at least two control points ### About the error **Issue:** A curve can’t be created with just one point. **Applies to:** * Curve from Control Points * Curve through Points **Cause:** * Only one point was used to create the curve. **Solution:** * Add at least one more point to create the curve. *** # Invalid Type Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/invalid_type ## Invalid input type ### About the error **Issue:** A value with an incompatible type was placed into an input, preventing the block from running. **Cause:** * An unsupported block type was entered. **Solution:** * Input a supported unit type. *Ex. ‘Radius’ requires a Scalar Field, but received a Mesh. Input a value with the correct type.* *** # Invalid Units Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/invalid_units ## Invalid units in input ### About the error **Issue:** The units entered into the block are unsupported, preventing the block from running. **Cause:** * An unsupported unit type was entered in the block. **Solution:** * Type in a supported unit type in the input. *Ex. 'Radius’ requires units of Length, but received units of Mass. Please input a value with the correct units.* *** # Invalid Value Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/invalid_value ## Blend radius must be non-negative ### About the error **Issue:** The blend radius can’t be negative. That would create invalid geometry. **Applies to:** * Boolean Union * Boolean Subtract * Boolean Intersect **Cause:** * A negative blend value **Solution:** * Use a positive blend radius. *** ## Feature size must be greater than 0 ### About the error **Issue:** The block can’t run if the feature size is zero or less. **Applies to:** * Mesh from Implicit Body V 1.0.0 **Cause:** * The feature size is zero or less. **Solution:** * Enter a feature size that is greater than zero. *** ## The input mesh must be a quad mesh. Please use the Quadrangulate mesh block to convert ### About the error **Issue:** Occurs when you are converting a mesh into a CAD Body. For this conversion to work, the input mesh needs to be a quad mesh. **Applies to:** * CAD Body from Quad Mesh. **Cause:** * A triangular mesh was used in the CAD Body from Mesh block. **Solution:** * Remove the triangular mesh from the input and convert it into a quad mesh using the Quadrangulate Mesh block. You may need to refine your quad mesh further to get optimal results. Review the process on how to create a CAD body [here](https://support.ntopology.com/hc/en-us/articles/360048784874). Make sure you are aware of the limitations of converting a mesh into a CAD body. This process is meant for topology optimized parts and not lattices. * Related support articles for more information: * [Quadrangulate mesh fails when meshing my lattice](https://support.ntopology.com/hc/en-us/articles/1500000013521) * [What are the limitations of exporting lattice structures to CAD?](https://support.ntopology.com/hc/en-us/articles/360059299613) *** ## Cannot create a Voronoi lattice with \< 4 points ### About the error **Issue:** The mathematical Voronoi formula can’t be applied if there are less than four points. **Applies to:** * Surface Voronoi * Volume Voronoi **Cause:** * Having less than four points. **Solution:** * Add more points to your Point List. *** *** ## R/G/B/A value must be between 0 and 1 ### About the error **Issue:** The color channel value must be between 0 and 1, inclusive. **Applies to:** * Color **Cause:** * A color channel value that is negative or greater than 1 will cause this error. * One common mistake is to enter color values in the range 0-255 without normalizing to 0-1. **Solution:** * Ensure color channel values are between 0 and 1, inclusive. * If working with color values in the range 0-255, normalize by dividing by 255. *** # Lattice Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/lattice_error ## Only cubic unit cells are currently supported ### About the error **Issue:** The unit cell imported wasn’t cubic. **Applies to:** * Import Element Pro Rule **Cause:** * An imported unit cell that isn’t cubic. **Solution:** * Edit the unit cell in Element Pro to create a cubic unit cell. *** ## Lattice rule is incompatible with mesh tessellation ### About the error **Issue:** The polyhedron built from the face is inconsistent with the lattice rule. **Applies to:** * Import Element Pro Rule **Cause:** * The unit cell of the surface lattice rule cannot map to one or more faces on the mesh. **Solution:** * If the lattice rule uses cubic unit cells, quadrangulate the mesh before generating the surface lattice. * Update the lattice rule to a cubic unit cell or a different one in case the lattice rule is custom or polyhedron type, as we can't use it to generate a surface lattice. *** # List Item Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/list_item_error ## Invalid list item at index ### About the error **Issue:** Your list has an error at the index indicated. Using a list as an input into another Block can lead to errors if the values used in the list are incorrect. **Applies to:** * Any block that can accept a list type as input. * Common examples include: * Using an invalid item in an Implicit Body List, then using it as a Body input for a Mesh from Implicit Body. This results in errors when using the Mesh from Implicit Body as an input into other Blocks. **Cause:** * The values used in a list item are incorrect, causing a block to fail when it builds. * Using a list as an input into another Block can lead to errors if the values used in the list are incorrect. **Solution:** * In the error message, note the index number of the list item causing the error. Use the index to identify the list item causing the error. All nTop lists begin at index 0. Please use the Error Documentation pages to troubleshoot. *** # List Length Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/list_length_error ## Input list length mismatch ### About the error **Issue:** When two lists of different lengths are input into a block. The block can't run because it is trying to match the two lists together. **Applies to:** * Any block that accepts two or more list inputs * Common examples include: * Math blocks (ex. Add, Subtract, Divide, Multiply and Pow) * Evaluate Field * Evaluate Field Gradient **Cause:** * Lengths of lists are not equal. * Unintentional lists of (1) are used with another list input. Open up the input block's properties to check if it is a list type. It will have (#) in the block name. **Solution:** * Ensure that the list length of both the operands are the same. * If you do have an unintentional list of (1), open up the block properties and drag out the chip that has \[0] in the name (typically beneath all other properties). Drag this into the Notebook or directly into another block input. *** # Mesh Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/mesh_error ## The input mesh has disjoint components. This is currently unsupported. Please use split mesh to disconnect the mesh, and then convert each separately ### About the error **Issue:** Sometimes meshes have parts that aren’t physically connected or parts that intersect within themselves. These can be intentional or unintentional and are called disjoint components. The CAD Body from Quad Mesh workflow doesn’t support disjointed mesh components. The mesh needs to be connected to every part in it without self-intersections. Using Merge Meshes won’t fix this issue if they are physically connected because it causes self-intersections. It is best to use Boolean Union to join any bodies together before the mesh step. To run the workflow, the mesh needs to be split up into separate parts. Even if your mesh block isn’t a list, it may have multiple components. If you want every mesh component converted into a CAD body, you need to run the workflow for each component separately. **Applies to:** * CAD Body from Quad Mesh * Quadrangulate Mesh **Cause:** * A mesh with multiple components (can be large or small disjointed parts) used to create a CAD Body. Disjointed components aren’t supported in this workflow. * A mesh with self-intersections. **Solution:** * Use the Split Mesh block on the disjointed mesh to separate the components. Open up the Properties panel of the Split Mesh block to extract the mesh components. * Use the Boolean Union block before converting the body to a mesh if it has multiple components that are physically connected, causing self-intersections. This only works when the parts are physically connected. ![Disjoint Mesh Example 1](https://storage.googleapis.com/files-learn/static/images/error_doc/disjoint_mesh_ex1.jpg) *** ## A manifold mesh is expected; the surface mesh that you provided is not manifold. Please visit support.nTopology.com for techniques to generate a manifold mesh ### About the error **Issue:** The input mesh is non-manifold. Non-manifold is defined as geometry where at least one edge does not have exactly two faces merging with it, meaning that it cannot exist in the physical world. **Applies to:** * CAD Body from Quad Mesh * Quadrangulate Mesh * Mesh export * Refine Mesh **Cause:** A mesh can be non-manifold for many reasons. The list below shows the most common occurrences: * An edge is connected to more or less than two faces (including internal faces) * Separate regions are connected through a single vertex * The mesh has loose geometry (discontinuous) * Mesh elements have plane normals pointing in opposite directions for adjacent faces. **Solution:** * To check if your mesh is manifold or not, click on the info (?) panel and go to Properties. Inspect the values of Edge Manifold and Vertex Manifold properties. If either of them are False, then it is not manifold and if both are True, then it is. * Cleaning or refining the mesh. Some blocks that can help clean meshes are Remesh Surface, Refine Mesh, Simplify Mesh by Threshold, Simplify Mesh by Amount. * Editing the Adaptivity and Feature Size of a Remesh block. * If your mesh is still non-manifold after trying these steps, you may have to go back to your original part in a different program and try cleaning it up. Sending it to another program like Magics for cleaning up may also be necessary. * Clean up the mesh in a different program * If you are trying to create a Quad Mesh using the Quadrangulate Mesh block, you want to use one of the refinement blocks mentioned above. Inputting a Mesh from Implicit Body or Mesh from CAD Body block will most likely cause an error when used without a refinement step. *** ## No mesh entities were found ### About the error **Issue:** When creating a boundary or region, input selection didn’t find any mesh entities. **Applies to:** * FE Boundary by Flood Fill * FE Boundary by Body * FE Region by Body **Cause:** * The input parameters weren’t able to find mesh entities to create a boundary or region from. At least one mesh entity is required to create a boundary or region. **Solution:** * Adjust the origin, angle, direction, or body position to select mesh entities. *** ## Cannot generate mesh with the selected inputs, try switching Shape ### About the error **Issue:** The mesh can’t build due to the limitations set by the inputs. **Applies to:** * Volume Mesh **Cause:** * The input values can’t be built due to the shape of the mesh **Solution:** * Change the mesh shape * Edit the inputs *** ## Surface meshing errors occurred ### About the error **Issue:** The mesh wasn’t able to build properly. **Applies to:** * Remesh Surface **Cause:** * The original mesh is non-manifold, has artifacts, or intersections * The input values created a mesh that couldn’t build **Solution:** * Refine the mesh before using the Remesh Surface block. * Edit the input values. *** ## The mesh produced is expected to contain faces. The Feature size you provided results in no faces and creates an empty mesh. Please adjust the feature size to a smaller value ### About the error **Issue:** Occurs when converting an Implicit Body into a mesh. When the feature size is larger than the largest details in the Implicit body, it won’t be able to create a mesh. **Applies to:** * Mesh from Implicit Body * Converting an Implicit Body into a mesh **Cause:** * Using a feature size that is larger than the largest detail in the Implicit Body. **Solution:** * Adjust the feature size to be smaller than the details of the Implicit Body. *** # Mesh Reference Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/mesh_reference_error ## An FE Boundary or FE Region, at position 1 of the boundary condition list, references an FE Mesh that is not used in the model assembly. Please verify that all boundary conditions and regions reference the same FE Mesh used in the FE Model ### About the error **Issue:** One of the FE Boundary or FE Regions is referencing a mesh that isn’t in the FE Model. **Applies to:** * FE Model **Cause:** * The mesh referenced needs to be a part of the FE Model to analyze the part correctly. **Solution:** * Check the mesh that is being referenced or add the correct mesh to the FE Model. *** ## A mesh referenced in fe connector list at position 0 does not match any mesh used in model ### About the error **Issue:** One of the FE Boundary or FE Regions is referencing a mesh that isn’t in the FE Model. **Applies to:** * Tie Constraint **Cause:** * The mesh referenced needs to be a part of the FE Model to analyze the part correctly. **Solution:** * Check the mesh that is being referenced or add the correct mesh to the FE Model. *** ## An FE Boundary or FE Region, at position 3 of the boundary condition list, references an FE Mesh that is not used in the model assembly. Please verify that all boundary conditions and regions reference the same FE Mesh as that used in the FE Model ### About the error **Issue:** One of the FE Boundary or FE Regions is referencing a mesh that isn’t in the FE Model. **Applies to:** * FE Model **Cause:** * The mesh referenced needs to be a part of the FE Model to analyze the part correctly. **Solution:** * Check the mesh that is being referenced or add the correct mesh to the FE Model. *** # Out of Range Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/out_of_range ## Element access index out of bounds ## Index out of range ### About the error **Issue:** An invalid input was put in the Index field. This index doesn’t fit within the range of the list, so there is no value for it. **Applies to:** * List Element **Cause:** * The Input value for Index is negative. * The Input value for Index is more than the last index. **Solution:** * Check the number of elements in the list and update the value of the index to get the value. *Ex. The value 5 in input ‘Index’ is out of range. Please provide a value between 1 and 3.* *** # Plugin Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/plugin ## Library Missing ### About the error **Issue:** The nTop application was not able to locate its CAD interoperability libraries. **Applies to:** * Import Part * Export Part **Cause:** * The libraries are missing from disk. This could be caused by inadvertant deletion or an aggressive anti-virus. **Solution:** * Try reinstalling the application or contact support through support.ntopology.com. *** # Rigid Motion Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/rigid_motion_error ## The model was found to have rigid motion. Please check for proper restraints ### About the error **Issue:** Occurs when there is no displacement restraint set up or if the problem setup is wrong. **Applies to:** * Static Analysis * Buckling Analysis * Modal Analysis * Topology Optimization **Cause:** * The displacement restraints are not defined or are over defined. **Solution:** * Isolate the Displacement restraints to check if they have been set up correctly and run the simulation again. *** # Security Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/security ## Security Error ### About the error **Issue:** The block failed to run due to security settings. **Applies to:** * Run Command Block **Solution:** The solution depends on the Run Command Permission Setting (found in Settings > Data). Based on your current permission setting, follow the instructions below: * “Prompt per File” setting: Close and reopen the file, and you will be prompted to trust the file again. * “Prompt per Block” setting: Click on the green “Rebuild” icon on the block, and you will be prompted again to trust the block. * “Disallow All” setting: Change your settings to one of the other two options, and then close and reopen nTop. Read more about **Run Command Permission Settings** [here](/_user_interface/_settings/run_command). *** # Tolerance Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/tolerance ## No mesh entities were found within the given tolerance to the implicit body. Please try either increasing the tolerance or using a different body ### About the error **Issue:** This error occurs when you create a boundary or region, and your input selection doesn’t find any mesh entities. **Applies to:** * FE Boundary by Flood Fill * FE Boundary by Body * FE Region by Body **Cause:** * The input parameters couldn’t find mesh entities to create a boundary or region. You need at least one mesh entity to create a boundary or region. **Solution:** * Check and adjust the origin, angle, direction, or body position to select mesh entities. *** # Unit Mismatch Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/unit_mismatch ## Incompatible units in input ### About the error | Related Error Messages | | :- | | Incompatible units in input positions 3 and 4 | | Incompatible units in input positions 0 and 2 | **Issue:** The inputs within the block have mismatching units. Depending on the input, the units need to be the same as other inputs in the block. **Cause:** * Inputs within the same block have different units. * Inputs don’t have any assigned units and were expecting units. * One input has one unit defined but the other is undefined. **Solution:** * Type in the correct unit in the input. *Ex. The units in inputs ‘In Min’ (Length) and ‘Out Min’ (Mass) do not match. Ensure that both input units match to run this block.* | Example | Reason | | :- | :- | | ![Unit Mismatch](https://storage.googleapis.com/files-learn/static/images/error_doc/unit_mismatch_ex1.jpg) | INCOMPATIBLE UNITS:No units assigned in In min or In max. Theyneed to match the Field units. Field units areautomatically chosen based on the Field Type. | | ![Unit Mismatch](https://storage.googleapis.com/files-learn/static/images/error_doc/unit_mismatch_ex2.jpg) | INCOMPATIBLE UNITS:The units in In min and In max don’t matchthe Field units. They need to match the Field Units. | *** # Unknown Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/unknown_error ## Unknown Error ### About the error **Issue:** An error occurred, but we aren’t sure what is causing it. **Cause:** * We aren’t sure. **Solution:** * Email Support ([support@ntopology.com](mailto:support@ntopology.com)) with the Error code and they will help you troubleshoot what is causing the issue. *** # Volume Mesh Error Source: https://docs.ntop.com/Product-Documentation/ntop/error-documentation/volume_mesh_error ## Volume meshing errors occurred. See the log panel for a detailed summary. Repair the input mesh or consider using the Tetrahedral Mesh block ### About the error **Issue:** Occurs when converting a surface mesh into a solid mesh. When doing this conversion, the Volume Mesh block works best with simple parts, and the Robust Tetrahedral Mesh block works best for everything else. If this error occurred when using the Robust Tetrahedral Mesh block, the best fix is to clean up the mesh. **Applies to:** * Volume Mesh * Robust Tetrahedral Mesh **Cause:** * A complex shape has been used in the Volume Mesh block. * The mesh needs to be cleaned before it can convert into a solid mesh. **Solution:** * Use the Tetrahedral Mesh block instead of the Volume Mesh block. * Check to see if the mesh needs to be cleaned by opening up the Properties panel. Look for the self-intersecting, manifold, and oriented properties. Ideally, the mesh should be: * Self-intersecting: False * Manifold: True * Oriented: True * Methods for cleaning up the mesh include: Remesh Surface, Refine Mesh, Simplify Mesh, and Filter Mesh. Read more about cleaning and refining meshes [here](https://support.ntopology.com/hc/en-us/articles/360061372374). * Open up the log panel (chevron at the bottom of the screen) and scroll up in it to see if any detailed error messages appeared. Address the concerns noted in the log panel. *** # File Types Source: https://docs.ntop.com/Product-Documentation/ntop/file_types > [!NOTE] > > All nTop files are saved as "\*.ntop" files. You can open .ntop files as a Notebook or as a custom block inside of nTop. ### Review the following pages to see what data you can import and export using nTop ### > **[Import and Export](./file_types/import_export)** > **[FE Data Export](./file_types/export_fe)** # FE Data Export Source: https://docs.ntop.com/Product-Documentation/ntop/file_types/export_fe ## A Note on Sets The FE Sets (e.g., FE Boundary and FE Region) created in nTop can be made of up nodes, elements, edges, or faces, but only certain target formats support all of these. In general, the Abaqus .inp format is very robust and well-supported and even works well when translated into other tools including ANSYS Workbench using the "External Model" system. If applicable, this format is generally recommended when communicating FE data for mechanical applications. You can only export one FE Mesh at a time when exporting it with FE Sets. ## FE Volume Mesh (Linear & Quadratic) | Feature | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | FE Volume Mesh | X | X | X | X | X | X | X | | FE Volume Mesh + Node set | X | | | X | X | X | | | FE Volume Mesh + Edge set | | | | | | | | | FE Volume Mesh + Face set | X | | | | | | | | FE Volume Mesh + Element set | X | X | | X | X | X | | ## FE Surface Mesh (Linear & Quadratic) | Feature | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | FE Surface Mesh | X | X | X | X | X | X | | | FE Surface Mesh + Node set | X | | | X | X | X | | | FE Surface Mesh + Edge set | | | | | | | | | FE Surface Mesh + Face set | X | | | | | | | | FE Surface Mesh + Element set | X | X | | X | X | X | | ## FE Lattice Mesh (Linear) | Feature | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | FE Lattice Mesh | X | X | | X | X | X | | | FE Lattice Mesh + Node set | X | X | | X | X | X | | | FE Lattice Mesh + Edge set | | | | | | | | | FE Lattice Mesh + Element set | X | X | | X | X | X | | ## FE Lattice Mesh (Quadratic) | Feature | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | FE Lattice Mesh | X | X | | | X | X | | | FE Lattice Mesh + Node set | X | X | | | X | X | | | FE Lattice Mesh + Edge set | | | | | | | | | FE Lattice Mesh + Element set | X | X | | | X | X | | ## Material Properties | Property | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | Isotropic Elastic Property | X | X | X | X | | | | | Isotropic Thermal Property | X | X | X | | | | | | Isotropic Thermal Expansion Property | X | X | X | | | | | | Orthotropic Elastic Property | X | X | | | | | | | Orthotropic Thermal Property | X | X | | | | | | | Orthotropic Thermal Expansion Property | | | | | | | | | Density | X | X | X | X | | | | | Beam Thickness | X | X | | X | | | | | Shell Thickness | X | X | X | X | | | | | Multiple Attributes | X | X | X | X | | | | ## Connectors | Connector Type | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | Solid - Solid | X | X | X | | X | X | | | Solid - Shell | X | X | X | | X | X | | | Solid - Beam | X | X | X | | X | X | | | Shell - Solid | X | X | X | | X | X | | | Shell - Shell | X | X | X | | X | X | | | Shell - Beam | X | X | X | | X | X | | | Beam - Solid | X | X | X | | X | X | | | Beam - Shell | X | X | X | | X | X | | | Beam - Beam | X | X | X | | X | X | | ## Loading Boundary Conditions | Condition | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | Force (Solid Nodes) | X | X | X | | X | X | | | Force (Solid Edges) | | | | | | | | | Force (Solid Faces) | X | X | X | | | | | | Force (Shell Nodes) | X | X | X | | X | X | | | Force (Shell Edges) | | | | | | | | | Force (Shell Faces) | X | X | X | | | | | | Force (Beam Nodes) | X | X | | | X | X | | | Force (Beam Edges) | | | | | | | | | Pressure (Solid Faces) | X | X | X | X | X | X | | | Pressure (Shell Faces) | X | X | X | X | X | X | | | Remote Force | X | X | X | | | | | | Remote Moment | X | X | X | | X | | | | Displacement Restraint | X | X | X | X | X | X | | | Acceleration Load | X | X | | | | | | ## Thermal Boundary Conditions | Condition | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | - | - | - | - | - | - | - | - | | Temperature Restraint | X | X | X | | X | X | | | Heat Flux | X | X | X | | X | X | | | Heat Generation | X | X | X | | | | | | Radiation Boundary Load | X | | | | | | | | Convection Boundary Load | X | X | X | | X | X | | | Initial Temperature | | | | | | | | | Applied Temperature | | | | | | | | # Import and Export Source: https://docs.ntop.com/Product-Documentation/ntop/file_types/import_export nTop can import and export a wide variety of file types. The file types supported by the installed version of nTop are listed below. For a list of file types supported by the latest release of nTop see this [help center article](https://support.ntop.com/hc/articles/360048249514). ## CAD Geometry Parasolid formats tend to yield the most dependable results. CAD and STEP inputs of single-part or multi-body files are also typically robust. CAD Assembly files can be directly imported into nTop. ##### Import | File Type | File Extension | Versions | | - | - | - | | ACIS | \*.sat, \*.sab | R1 - 2025 1.0 | | CATIA V5 | \*.CATPart, \*.CATProduct | V5 R8 - V6 R2025 | | Pro/E or Creo | \*.prt, \*.prt., \*.asm | 16 - Creo 11.0 | | Autodesk Inventor | \*.ipt (V6 - V2025), \*.iam (V11 - V2025) | V6 - 2025 | | Siemens NX | \*.prt | 11 - NX 2412 | | Parasolid | \*.x\_t, \*.x\_b | 9.0 - 38.0.163 | | SolidWorks | \*.sldprt, \*.sldasm | 98 - 2025 | | STEP | \*.step, \*.stp | AP 203, AP 214, and AP 242 | ##### Export | File Type | File Extension | | - | - | | Parasolid | \*.x\_t, \*.x\_b | | STEP 242 | \*.step | | IGES | \*.iges, \*.igs | ## Mesh Geometry ##### Import | File Type | File Extension | | - | - | | STL | \*.stl, \*.stla, \*.stlb | | OBJ | \*.obj | | Standard Polygon File Format | \*.ply | | 3MF | \*.3mf | | Object File Format | \*.off | ##### Export | File Type | File Extension | | - | - | | STL | \*.stl, \*.stla, \*.stlb | | OBJ | \*.obj | | Standard Polygon File Format | \*.ply | | 3MF | \*.3mf | ## Implicit Geometry ##### Import & Export | File Type | File Extension | | - | - | | nTop Implicit File | \*.implicit | ## Finite Element (FE) Data ##### FE Mesh ##### Import | File Type | File Extension | Notes | | - | - | - | | Abaqus | \*.inp | The format supports node, element, face, and edge sets. | | ANSYS Mechanical | \*.cdb | Format only supports node and element sets. | | ANSYS Fluent | \*.msh | Only mesh export is currently supported. | | LS-DYNA | \*.k | | | Nastran | \*.bdf, \*.dat, \*.nas | | | Patran | \*.pat | | | CGNS CFD Data File | \*.cgns | | | Universal File Format | .unv | | ##### Export | File Type | File Extension | | - | - | | Abaqus Input File | \*.inp | | ANSYS Mechanical Input File | \*.cdb | | Nastran Bulk Data File | \*.bdf, \*.dat, \*.nas | | LS-DYNA Input File | \*.k | | Universal File Format | \*.unv | | Patran Neutral File | \*.pat | | ANSYS Fluent Mesh | \*.msh | | CGNS CFD Data File | \*.cgns | | Paraview Legacy File Format | \*.vtk | To see a full overview of what data is supported for export, go [here](/file_types/export_fe). ##### FE Results ##### Import | Result Type | File Type | File Extension | | - | - | - | | Static Structural, Modal, Buckling, and Time-Dependent Structural Result | Ansys Structural Result | \*.rst | | Static Structural, Modal, Buckling, and Time-Dependent Structural Result | NASTRAN Output File | \*.op2 | | Static Thermal Result and Time-Dependent Thermal Result | Ansys Thermal Result | \*.rth | | Static Thermal Result and Time-Dependent Thermal Result | NASTRAN Output File | \*.op2 | | CFD Analysis Results | CGNS CFD Data File | \*.cgns | | CFD Analysis Results | Fluent Case File | \*.cas | | CFD Analysis Results | Fluent Compressed Case File | \*.cas.gz | | CFD Analysis Results | Ensight Case File | \*.case | | CFD Analysis Results | Ensight Case File | \*.encas | | CFD Analysis Results | Paraview Legacy File Format | \*.vtk | | CFD Analysis Results | VTK UnstructuredGrid File | \*.vtu | | CFD Analysis Results | VTK ImageData File | \*.vti | | CFD Analysis Results | Hierarchical Data Format Version 5 | \*.h5 | | Topology Optimization Result | NASTRAN Output File | \*.op2 | ##### Export | Result Type | File Type | File Extension | | - | - | - | | CFD Analysis Result | VTK ImageData File | \*.vti | To see a full overview of what data is supported for export, go [here](/file_types/export_fe). ## Lattice Structure ##### Import & Export | File Type | File Extension | | - | - | | Lattice Graph Interchange Module | \*.ltcx | | 3MF | \*.3mf | ## Point Data, Vector, and Scalar Point Map ##### Import & Export | File Type | File Extension | | - | - | | Comma Separated Values | \*.csv | ## Voxel Grid ##### Import & Export | File Type | File Extension | | - | - | | VDB | \*.vdb | ## Slicing for Additive Manufacturing ##### Import | File Type | File Extension | | - | - | | Common Layer Interface | \*.cli | ##### Export | File Type | File Extension | | - | - | | Common Layer Interface | \*.cli | | Common Layer File | \*.clf | | Renishaw CLI | \*.cli | | Renishaw RenExposure (Point Data) | \*.cli | | EOS CLI | \*.cli | | Arcam ABF | \*.abf | | Stratasys Layer | \*.ssl | | Concept Laser v4 | \*.cls | | 3D Systems | \*.slc | | B\&W Image Stack | \*.png | ## Bitmap ##### Import | File Type | File Extension | | - | - | | PNG | \*.png | ## Table ##### Import and Export | File Type | File Extension | | - | - | | CSV | \*.csv | # Release Notes Source: https://docs.ntop.com/Product-Documentation/ntop/release-notes *** #### Release Notes Learn about the latest and greatest features as well as new improvements for every release. [Version 6.3](./release-notes/version-6.3) [Previous releases](/help-articles/whats-new) > **[Version 6.3](./release-notes/version-6.3)** > **[Version 6.2](./release-notes/version-6.2)** > **[Version 6.1](./release-notes/version-6.1)** > **[Version 6.0](./release-notes/version-6.0)** > **[Version 5.54](./release-notes/version-5.54)** > **[Version 5.53](./release-notes/version-5.53)** > **[Version 5.52](./release-notes/version-5.52)** > **[Version 5.51](./release-notes/version-5.51)** > **[Version 5.50](./release-notes/version-5.50)** > **[Version 5.49](./release-notes/version-5.49)** > **[Version 5.48](./release-notes/version-5.48)** > **[Version 5.47](./release-notes/version-5.47)** > **[Version 5.46](./release-notes/version-5.46)** > **[Version 5.45](./release-notes/version-5.45)** > **[Version 5.44](./release-notes/version-5.44)** > **[Version 5.43](./release-notes/version-5.43)** > **[Version 5.42](./release-notes/version-5.42)** > **[Version 5.41](./release-notes/version-5.41)** > **[Version 5.40](./release-notes/version-5.40)** > **[Version 5.39](./release-notes/version-5.39)** > **[Version 5.38](./release-notes/version-5.38)** > **[Version 5.37](./release-notes/version-5.37)** > **[Version 5.36](./release-notes/version-5.36)** > **[Version 5.35](./release-notes/version-5.35)** > **[Version 5.34](./release-notes/version-5.34)** > **[Version 5.33](./release-notes/version-5.33)** > **[Version 5.32](./release-notes/version-5.32)** > **[Version 5.31](./release-notes/version-5.31)** > **[Version 5.30](./release-notes/version-5.30)** > **[Version 5.29](./release-notes/version-5.29)** > **[Version 5.28](./release-notes/version-5.28)** > **[Version 5.27](./release-notes/version-5.27)** > **[Version 5.26](./release-notes/version-5.26)** > **[Version 5.25](./release-notes/version-5.25)** > **[Version 5.24](./release-notes/version-5.24)** > **[Version 5.23](./release-notes/version-5.23)** > **[Version 5.22](./release-notes/version-5.22)** > **[Version 5.21](./release-notes/version-5.21)** > **[Version 5.20](./release-notes/version-5.20)** > **[Version 5.19](./release-notes/version-5.19)** > **[Version 5.18](./release-notes/version-5.18)** > **[version 5.17](./release-notes/version-5.17)** > **[Version 5.16](./release-notes/version-5.16)** > **[Version 5.15](./release-notes/version-5.15)** > **[Version 5.14](./release-notes/version-5.14)** > **[Version 5.13](./release-notes/version-5.13)** > **[Version 5.12](./release-notes/version-5.12)** > **[Version 5.11](./release-notes/version-5.11)** > **[Version 5.10](./release-notes/version-5.10)** > **[Version 5.9](./release-notes/version-5.9)** > **[Version 5.8](./release-notes/version-5.8)** > **[Version 5.7](./release-notes/version-5.7)** > **[Version 5.6](./release-notes/version-5.6)** > **[Version 5.5](./release-notes/version-5.5)** > **[Version 5.4](./release-notes/version-5.4)** > **[Version 5.3](./release-notes/version-5.3)** > **[Version 5.2](./release-notes/version-5.2)** > **[Version 5.1](./release-notes/version-5.1)** > **[Version 5.0](./release-notes/version-5.0)** > **[Version 4.26](./release-notes/version-4.26)** > **[Version 4.25](./release-notes/version-4.25)** > **[Version 4.24](./release-notes/version-4.24)** > **[Version 4.23](./release-notes/version-4.23)** > **[Version 4.22](./release-notes/version-4.22)** > **[Version 4.21](./release-notes/version-4.21)** > **[Version 4.20](./release-notes/version-4.20)** > **[Version 4.19](./release-notes/version-4.19)** > **[Version 4.18](./release-notes/version-4.18)** > **[Version 4.17](./release-notes/version-4.17)** > **[Version 4.16](./release-notes/version-4.16)** > **[Version 4.15](./release-notes/version-4.15)** > **[Version 4.14](./release-notes/version-4.14)** > **[Version 4.13](./release-notes/version-4.13)** > **[Version 4.12](./release-notes/version-4.12)** > **[Version 4.11](./release-notes/version-4.11)** > **[Version 4.10](./release-notes/version-4.10)** > **[Version 4.9](./release-notes/version-4.9)** > **[Version 4.8](./release-notes/version-4.8)** > **[Version 4.7](./release-notes/version-4.7)** > **[Version 4.6](./release-notes/version-4.6)** > **[Version 4.5](./release-notes/version-4.5)** > **[Version 4.4](./release-notes/version-4.4)** > **[Version 4.3](./release-notes/version-4.3)** > **[Version 4.2](./release-notes/version-4.2)** > **[Version 4.1](./release-notes/version-4.1)** > **[Version 4.0](./release-notes/version-4.0)** > **[Version 3.45](./release-notes/version-3.45)** > **[Version 3.44](./release-notes/version-3.44)** > **[Version 3.43](./release-notes/version-3.43)** > **[Version 3.42](./release-notes/version-3.42)** > **[Version 3.41](./release-notes/version-3.41)** > **[Version 3.40](./release-notes/version-3.40)** > **[Version 3.39](./release-notes/version-3.39)** > **[Version 3.38](./release-notes/version-3.38)** > **[Version 3.37](./release-notes/version-3.37)** > **[Version 3.36](./release-notes/version-3.36)** > **[Version 3.35](./release-notes/version-3.35)** > **[Version 3.34](./release-notes/version-3.34)** > **[Version 3.33](./release-notes/version-3.33)** > **[Version 3.32](./release-notes/version-3.32)** > **[Version 3.31](./release-notes/version-3.31)** > **[Version 3.30](./release-notes/version-3.30)** > **[Version 3.29](./release-notes/version-3.29)** > **[Version 3.28](./release-notes/version-3.28)** > **[Version 3.27](./release-notes/version-3.27)** > **[Version 3.26](./release-notes/version-3.26)** > **[Version 3.25](./release-notes/version-3.25)** > **[Version 3.24](./release-notes/version-3.24)** > **[Version 3.23](./release-notes/version-3.23)** > **[Version 3.22](./release-notes/version-3.22)** > **[Version 3.21](./release-notes/version-3.21)** > **[Version 3.20](./release-notes/version-3.20)** > **[Version 3.19](./release-notes/version-3.19)** > **[Version 3.18](./release-notes/version-3.18)** > **[Version 3.17](./release-notes/version-3.17)** > **[Version 3.16](./release-notes/version-3.16)** > **[Version 3.15](./release-notes/version-3.15)** > **[Version 3.14](./release-notes/version-3.14)** > **[Version 3.13](./release-notes/version-3.13)** > **[Version 3.12](./release-notes/version-3.12)** > **[Version 3.11](./release-notes/version-3.11)** > **[Version 3.10](./release-notes/version-3.10)** > **[Version 3.9](./release-notes/version-3.9)** > **[Version 3.8](./release-notes/version-3.8)** > **[Version 3.7](./release-notes/version-3.7)** > **[Version 3.6](./release-notes/version-3.6)** > **[Version 3.5](./release-notes/version-3.5)** > **[Version 3.4](./release-notes/version-3.4)** > **[Version 3.3](./release-notes/version-3.3)** > **[Version 3.2](./release-notes/version-3.2)** > **[Version 3.1](./release-notes/version-3.1)** > **[Version 3.0](./release-notes/version-3.0)** > **[Version 2.31](./release-notes/version-2.31)** > **[Version 2.30](./release-notes/version-2.30)** > **[Version 2.29](./release-notes/version-2.29)** > **[Version 2.28](./release-notes/version-2.28)** > **[Version 2.27](./release-notes/version-2.27)** > **[Version 2.26](./release-notes/version-2.26)** > **[Version 2.25](./release-notes/version-2.25)** > **[Version 2.24](./release-notes/version-2.24)** > **[Version 2.23](./release-notes/version-2.23)** > **[Version 2.22](./release-notes/version-2.22)** > **[Version 2.20](./release-notes/version-2.20)** > **[Version 2.19](./release-notes/version-2.19)** > **[Version 2.18](./release-notes/version-2.18)** > **[Version 2.17](./release-notes/version-2.17)** > **[Version 2.16](./release-notes/version-2.16)** > **[Version 2.15](./release-notes/version-2.15)** > **[Version 2.14](./release-notes/version-2.14)** > **[Version 2.13](./release-notes/version-2.13)** > **[Version 2.12](./release-notes/version-2.12)** > **[Version 2.11](./release-notes/version-2.11)** > **[Version 2.10](./release-notes/version-2.10)** > **[Version 2.9](./release-notes/version-2.9)** > **[Version 2.8](./release-notes/version-2.8)** > **[Version 2.7](./release-notes/version-2.7)** > **[Version 2.6](./release-notes/version-2.6)** > **[Version 2.5](./release-notes/version-2.5)** > **[Version 2.4](./release-notes/version-2.4)** > **[Version 2.3](./release-notes/version-2.3)** > **[Version 2.2](./release-notes/version-2.2)** > **[Version 2.1](./release-notes/version-2.1)** > **[Version 2.0](./release-notes/version-2.0)** > **[Version 1.14](./release-notes/version-1.14)** > **[Version 1.13](./release-notes/version-1.13)** > **[Version 1.12](./release-notes/version-1.12)** > **[Version 1.11](./release-notes/version-1.11)** > **[Version 1.10](./release-notes/version-1.10)** > **[Version 1.9](./release-notes/version-1.9)** > **[Version 1.8](./release-notes/version-1.8)** > **[Version 1.7](./release-notes/version-1.7)** > **[Version 1.6](./release-notes/version-1.6)** > **[Version 1.5](./release-notes/version-1.5)** > **[Version 1.4](./release-notes/version-1.4)** > **[Version 1.3](./release-notes/version-1.3)** > **[Version 1.2](./release-notes/version-1.2)** > **[Version 1.1](./release-notes/version-1.1)** # Changelog Source: https://docs.ntop.com/Product-Documentation/ntop/release-notes/version-5.46 Product updates and announcements **Version 5.46** nTop 5.46 is here! This release features three new blocks for curve generation. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. ## Bridge Curve * The **Bridge Curve** block creates a smooth spline connection between two curves with controllable continuity (G0, G1, or G2). It allows you to precisely define junction points along each input curve using arc-length distances and provides an option to trim and merge the results into a single unified Polycurve. * **Common uses:** * Generating continuous, high-order curvature profiles for wings or ducting inlets. * Location: Create > Curves * Curve 1: First curve. * Curve 2: Second curve. * Distance 1: Arc length from the start point along Curve 1 to the junction. * Distance 2: Arc length from the start point along Curve 2 to the junction. * Continuity 1: Smoothness of the resulting curve at the Curve 1 junction. The higher the order, the smoother the transition. * Continuity 2: Smoothness of the resulting curve at the Curve 2 junction. The higher the order, the smoother the transition. * Tangent Scale 1: Scale factor applied to the tangent vector of the bridge curve at the Curve 1 junction. * Tangent Scale 2: Scale factor applied to the tangent vector of the bridge curve at the Curve 2 junction. * Flip 1: If checked, Distance 1 will be calculated from the end point of Curve 1 and the tangent direction of the bridge curve at this point will be reversed. * Flip 2: If checked, Distance 2 will be calculated from the end point of Curve 2 and the tangent direction of the bridge curve at this point will be reversed. * Merge With Inputs: If checked, trim the inputs and join the three resulting curves into a Polycurve. ![Bridge Curve](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/bridge_curve.webp) ## Intersection Points * The **Intersection Points** block returns a list of all points where a specific Curve crosses the boundary of an Implicit Body. * **Common uses:** * Placing features and components precisely at intersections, creating construction geometry * Location: Create > Curves * Curve: Curve to intersect with the body. * Body: Body to intersect with the curve. * Min. Feature Size: Optional value to specify the approximate size of the smallest feature(s) on the implicit body to be detected along the curve. If not specified, a value is chosen based on the input curve. ![Intersection Points](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/intersection_points.webp) ## Trim Curve * The **Trim Curve** block segments a curve based on its intersections with an Implicit Body. It splits the curve into one or more segments, allowing you to isolate only the portions of the path relevant to your design. * **Common uses:** * Creating construction geometry, controlling the termination of sweep rails. * Location: Create > Curves * Curve: Curve to trim. * Body: Body to trim the curve with. * Invert: When true, returns portions of the curve inside the body instead of outside. * Min. Feature Size: Optional value to specify the approximate size of the smallest feature(s) on the implicit body to be detected along the curve. If not specified, a value is chosen based on the input curve. ![Trim Curve](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/trim_curve.webp) ## Usage Improvements * We have added a reversed property to all curve types to allow for better control over curve direction. ![Reversed](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/reversed_curve.webp) * We have added a "Show Orientation" attribute to curve types to visualize curve directionality when selected. This attribute can be toggled off in the right side panel. ![Show Orientation](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/show_orientation.webp) * You can now reorder blocks within the notebook via drag-and-drop and perform multi-selection interactions, such as Shift+Click for range selection. To support this change, block inputs can not be selected at the same time as parent blocks. ![Multi-Select](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/multi_select.gif) ## Block Updates * We have updated our nTop Fluids solver, which now independently calculates Bernoulli energy balances and flow parameters for physically separate fluid domains, ensuring mass conservation and correct convergence in CHT or porous-region setups. # Changelog Source: https://docs.ntop.com/Product-Documentation/ntop/release-notes/version-5.54 Product updates and announcements **Version 5.54** nTop 5.54 is here! This release adds multi-select support for editing display attributes, plus stability improvements and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. ## Usage Improvements * You can now select multiple objects at once and edit shared display attributes, such as color, transparency, and visibility, together in the Display Panel. Attributes that differ across the selection are shown as indeterminate until you set them. ## Bug Fixes * We fixed an issue where the **Table from Columns Product** block could cause nTop to unexpectedly exit. * We fixed an issue with **Static Analysis** that could incorrectly detect rigid body motion when using point restraints. * We fixed an issue where axes in the **Display Grid** could render with visual artifacts. # Changelog Source: https://docs.ntop.com/Product-Documentation/ntop/release-notes/version-6.0 Product updates and announcements **Version 6.0** nTop 6.0 is here! This major release refreshes the UI with new Shiny Plastic and Brushed Metal display styles, and adds a new set of Shell Modeling blocks for generating, cleaning, and repairing surface meshes. Read more about the new blocks below. We've also introduced nTop Assistant for onboarding and in-context support without leaving nTop. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. ## Visual Design Update * We've updated the UI. Colors, buttons, menus, modals, and viewport styling have all been refreshed for a modern feel. ![The updated nTop interface](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/visual-design-update-1.png)
![Updated nTop UI detail](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/visual-design-update-2.png) ![Updated nTop UI detail](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/visual-design-update-3.png)
## Shading Update * We've added two new display styles: Shiny Plastic and Brushed Metal. We've also updated the color palette with more saturation, contrast, and a new distribution of default colors, giving nTop a fresh feel along with more visual clarity for understanding and presenting your designs. * To select a display style, select an object and navigate to the right side panel, where you'll find a dropdown for choosing between Diffuse, Shiny Plastic, and Brushed Metal. ![Shiny Plastic and Brushed Metal display styles](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/shading-update.png) ![Display style dropdown in the right side panel](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/shading-update-2.png) ## Sweep along Two Rails * The **Sweep along Two Rails** block sweeps a profile or field along two rail curves and a spine curve. The two rail curves fully define the scale and in-plane rotation of the swept section, while the spine curve controls the alignment of the swept section, preserving its relative orientation with respect to the spine tangent. * Use case: Wings, ducts, channels, ribs. * Location: Modeling > Operations * Profile: Profile to sweep along the rails. * Spine: Spine curve to define section plane orientation. * Rail 1: First rail curve to sweep along. * Rail 2: Second rail curve to sweep along. * Caps: If checked, closes the swept body with planar caps at the start and end of the spine. * Output: Implicit Body ![Sweep along Two Rails block sweeping a profile along two rail curves](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/sweep-along-two-rails.png) ## Meshes from Profiles * The **Meshes from Profiles** block generates a list of conforming meshes from an input list of profiles. Each mesh is a separate object, but has coincident nodes at their intersections, which is what makes them conforming. * Use case: Structural analysis with shell elements. * Location: Beta > Shell Modeling * Profiles: Pre-computed planar profiles to mesh. Each profile produces one mesh in the output list. * Max. Edge Length: Maximum triangle edge length in the output meshes. Pass 0 for no size constraint. * Feature Tolerance: Controls the tolerance for resolving shared intersection vertices and sampling curved profile boundaries. Defaults to 10% of Max. Edge Length when set, otherwise 1% of the profiles' bounding box diagonal. * Output: Mesh List ![Meshes from Profiles block generating conforming meshes](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/mesh-from-profiles.png) ## Align Mesh Normals * The **Align Mesh Normals** block sweeps across a mesh and ensures that all element normals are consistently oriented. * Use case: Generating and exporting surface meshes. * Location: Beta > Shell Modeling * Mesh: Mesh whose face normals will be reoriented. * Output: Mesh ## Boundary Nodes from Open Mesh * The **Boundary Nodes from Open Mesh** block extracts all vertices lying on free edges of an open surface mesh. This collects nodes from all edges that are shared by only one face in the mesh. If the mesh is closed, it returns an empty list. * Use case: Static analysis on connected components. * Location: Beta > Shell Modeling * Mesh: Open surface mesh to extract free-edge vertices from. * Output: Point List ![Boundary Nodes from Open Mesh block extracting free-edge vertices](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/boundary-nodes-from-open-mesh.png) ## Boundary Polycurves from Open Mesh * The **Boundary Polycurves from Open Mesh** block extracts and chains together all free edges from an open surface mesh, returning each loop as a polycurve. If the mesh is closed, it returns an empty list. * Use case: Static analysis of connected components. * Location: Beta > Shell Modeling * Mesh: Open surface mesh to extract boundary loops from. * Output: Polycurve List ![Boundary Polycurves from Open Mesh block extracting boundary loops](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/boundary-polycurves-from-open-mesh.png) ## Merge and Weld Meshes * The **Merge and Weld Meshes** block joins Mesh objects together and collapses vertices that fall within a set distance of one another. * Use case: Static analysis of connected components. * Location: Beta > Shell Modeling * Meshes: Meshes to merge. * Distance Threshold: Vertices within this distance threshold will be merged together into one vertex. If not provided, meshes are concatenated without any vertex welding. * Output: Mesh ## Clean Mesh Faces * The **Clean Mesh Faces** block removes degenerate faces below a given area and small disconnected components from a surface mesh. Faces are first filtered by area, then edge-connected components with fewer faces than the minimum are removed. * Location: Beta > Shell Modeling * Mesh: Surface mesh to clean. * Min Face Area: Remove faces whose area is strictly below this value. Disabled when 0. * Min Component Faces: Remove edge-connected components with fewer faces than this count. Disabled when 0 or 1. * Output: Mesh ![Clean Mesh Faces block removing degenerate faces from a mesh](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/clean-mesh-faces.png) ## nTop Assistant * We've released **nTop Assistant**, which puts onboarding and support right inside your nTop session, so you don't have to switch to your browser. ![nTop Assistant icon in the toolbar](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/ntop-assistant.png) * nTop Assistant opens to two tabs: **Onboarding**, a five-screen walkthrough of the features we most want new users to see, and **Assistant**, the same nTop Docs Assistant available on our website. * Ask a question, attach a file, or take a screenshot of what you're working on to get answers in context. You can also pin the Assistant window on top of your other windows while you work. * *Note: nTop Assistant runs separately from nTop and does not have direct access to your open notebook. Download it from [app.ntop.com](https://app.ntop.com).* ![nTop Assistant window with Onboarding and Assistant tabs](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/ntop-assistant-2.png) ## Block Updates * We've added a new overload for the **Remesh Surface** block that gives more options to preserve geometry through the remesh process. The new *Preserved Lines* input ensures that specified edges survive remeshing, and the new *Preserved Region* input preserves edges and faces that occur within a specified body. * Location: Structures > Mesh * Preserved Lines (new): A list of polycurves whose edges will be recovered in the output mesh. Each polycurve is sampled at the target edge length, and the resulting edges are guaranteed to appear in the remeshed output. * Preserved Region (new): An implicit body defining the region to preserve. Edges and faces of the input mesh that lie within the body are kept intact. * Output: Mesh ![Remesh Surface block preserving lines and regions during remeshing](https://storage.googleapis.com/files-learn/static/ReleaseImages/6.0/remesh-surface.png) # Changelog Source: https://docs.ntop.com/Product-Documentation/ntop/release-notes/version-6.1 Product updates and announcements **Version 6.1** nTop 6.1 is here! This is a lighter release with stability improvements for nTop Fluids and some UI polish. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. ## Usage Improvements * We made minor spacing and chip outline polish for variable blocks. ## Bug Fixes * We fixed an issue in **nTop Fluids** where simulations on fluid and solid meshes with a degenerate coarse mesh level could silently produce incorrect velocity results instead of properly converging or diverging. * We fixed an issue in **nTop Fluids** where density near certain mesh boundaries was calculated incorrectly during heat transfer simulations using wall functions. * We fixed an issue in **nTop Fluids** where regions with boundary conditions were reported to fail during voxelization. * We fixed an issue where the body would shift in the viewport when a block's Angle input field was selected while scrubbing. # Using nTop Automate Source: https://docs.ntop.com/Product-Documentation/ntop/using-ntopcl #### Using nTop Automate **nTop Automate** is a **command line interface** that executes nTop Notebooks without a graphical user interface (GUI). #### License If you are logged in as a nTop cloud license user on the GUI application, nTop Automate will use the cached credential to verify the license. Alternatively, you can [use nTop Automate to verify your license](/using-ntopcl/commands.html#login-using-ntopcl). #### nTop Automate In the installation folder of nTop, **ntopcl.exe** file is available as shown below. For your convenience, the default installation path is “C:\Program Files\nTopology\nTopology” unless specified at the time of installation. Windows Powershell or Command Prompt can run the ntopcl.exe process. If your nTop is installed in a default location, use the following commands. ```bash theme={null} "c:\Program Files\nTopology\nTopology\ntopcl.exe" ``` Powershell requires '&' and a space followed by the nTop Automate path to be able to run it like Command Prompt. ```bash theme={null} & "c:\Program Files\nTopology\nTopology\ntopcl.exe" ``` You can also run nTop Automate by simply typing **ntopcl** in any folder if you added the installation folder to system PATH during the installation process. ![nTop Automate on PATH](https://storage.googleapis.com/files-learn/static/images/using-ntopcl/intro-path.png) #### nTop Automate on Command Prompt ![nTop Automate on Command Prompt](https://storage.googleapis.com/files-learn/static/images/using-ntopcl/intro-cmd.png) #### nTop Automate on Powershell ![nTop Automate on Powershell](https://storage.googleapis.com/files-learn/static/images/using-ntopcl/intro-powershell.png) > **[Getting Started](./using-ntopcl/getting-started)** > **[Commands](./using-ntopcl/commands)** > **[Input](./using-ntopcl/notebook-inputs)** > **[Output](./using-ntopcl/notebook-outputs)** > **[Logging](./using-ntopcl/logging)** > **[Advanced Examples](./using-ntopcl/advanced-examples)** # Advanced Examples Source: https://docs.ntop.com/Product-Documentation/ntop/using-ntopcl/advanced-examples #### nTop Automate in Python scripts [How to run your nTop notebook using nTop Automate in Python scripts](https://support.ntopology.com/hc/en-us/articles/360052703693) #### nTop Automate in Matlab scripts [How to run your nTop notebook using nTop Automate in Matlab scripts](https://support.ntopology.com/hc/en-us/articles/360052729833) #### nTop Automate in ModeFrontier projects [How to use nTop Automate in ModeFrontier's Design of Experiment (DOE) workflows](https://support.ntopology.com/hc/en-us/articles/360052078394) # Commands Source: https://docs.ntop.com/Product-Documentation/ntop/using-ntopcl/commands #### nTop Automate Key Commands ##### Login via Cloud or Named User License ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -u [email] -w [password] ``` ##### Login via proxy server ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -u [email] -w [password] --loginproxy [your proxy address]:[port] ``` ##### Login via FlexNet Publisher (FNP) Floating License ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" --license [PORT@HOSTNAME] ``` ##### Login via local license ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" --license [Path to .lic file] ``` ##### Saving a log file of the nTop Automate execution ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" --logfile=[.log file] [rest of the command] ``` ##### Passing input variables in the command line directly ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -i 5.0mm -i "C:\Outputs\geometry.stl" [nTop Notebook Path] ``` ##### Generating the input and output JSON templates ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -t [nTop Notebook Path] ``` ##### Passing input variables from a JSON file ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -j inputs.json [nTop Notebook Path] ``` ##### Collecting the output data as a JSON file ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -j inputs.json -o output.json [nTop Notebook Path] ``` ##### Collecting the output data with detailed properties ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -j inputs.json -o output.json -p [nTop Notebook Path] ``` ##### Overwriting the Notebook after the nTop Automate execution ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" --save [rest of the command] ``` ##### Enabling Trust Settings for nTop Automate ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" --trustnotebook [nTop Notebook Path] ``` # Getting Started Source: https://docs.ntop.com/Product-Documentation/ntop/using-ntopcl/getting-started #### Creating a Notebook for nTop Automate Prepare your notebook as if you are [creating a custom block](/_using-notebooks/creating-a-custom-block.html#creating-custom-blocks). The notebook shown as an example here is designed to create a box geometry, calculate surface area and export the geometry as a STL file. The Input variables such as dimensions and output file path can be passed through the execution command. The output section can contain any metadata like surface area. [Download this example](https://ntopology.box.com/s/6x5vbjet9d1ozna2hnvr9fd8cthje181) for your reference. Alternatively, you can [find this tutorial](https://support.ntopology.com/hc/en-us/articles/360052833053-Preparing-nTop-Notebook-for-nTop-Command-Line) on our support site. #### Running a Notebook using nTop Automate Execute your notebook with the input variables in a command prompt window. **-i** followed by a single space and the variable will replace the default variable in the notebook. In this example, there are 4 input variables: Output directory, Length, Width, and Height as shown below. These variables can be passed along with the execution command in the same order as in the notebook. Check out more options around [nTop Automate Input](/using-ntopcl/notebook-inputs). ![Preparing nTop Notebook for nTop Automate](https://storage.googleapis.com/files-learn/static/images/using-ntopcl/ntop-notebook-inline.png) After the execution of the below command, you will be able to find “box.stl” and “surface.txt” in the folder. ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -i "C:\nTopCLI_101\CLI-numtext" -i 7mm -i 7mm -i 7mm SampleFile.ntop ``` #### Obtaining the output from a notebook The output section can be used to export the output as a json file by adding **-o** followed by a single space and the output file name. ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -i "C:\Platform\nTopCLI_101\CLI-numtext" -i 7mm -i 2mm -i 2mm -o output.json SampleFile.ntop ``` After the execution of the above command, you will be able to find “box.stl” and “surface.txt”, as well as “output.json” in the folder. Learn more on [nTop Automate Output](/using-ntopcl/notebook-outputs). # Logging Source: https://docs.ntop.com/Product-Documentation/ntop/using-ntopcl/logging #### Verbosity Level More informative messages about the runtime of your notebook can be controlled using the **--verbosity** **(-v)** flag, followed by a single space and the verbosity level you require. By default, the program will run with a verbosity level of 1 if it is not specified. Verbosity levels are as follows: * 0 - Errors only * 1 - Errors and Warnings (Default Value) * 2 - Errors, Warnings, and Runtime Information ##### Example Usage ```bash theme={null} ntopcl -v 2 SampleFile.ntop ``` or ```bash theme={null} ntopcl --verbosity 2 SampleFile.ntop ``` #### Log File The contents that are logged in the command prompt can be output to a log file by using the **--logfile** flag, optionally followed by = and a path where you want the logs to be saved. If no path is supplied, it will save the logs to the working directory as 'ntopcl.log'. ##### Example Usage ```bash theme={null} ntopcl --logfile=LogFile.txt SampleFile.ntop ``` # Input Source: https://docs.ntop.com/Product-Documentation/ntop/using-ntopcl/notebook-inputs #### Input Directly in the Command Line Input variables can be entered directly in the command line with the **-i** flag. The -i flag should be provided once for each notebook input, and inputs should be provided in the order in which they appear in the notebook. ##### Example Usage ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -i "C:\nTopCLI_101\CLI-numtext" -i 7mm -i 7mm -i 7mm SampleFile.ntop ``` ##### Supported Types There is support for just two types directly in the command line:
  • Scalar (with or without units)
  • Text
  • Use the JSON option for support for more types. #### Input From a JSON File The input can also be processed with a JSON file containing the input values. Use the **-j** flag with the path to your JSON file that contains the inputs. ##### Example Usage ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -j inputs.json SampleFile.ntop ``` The JSON file must contain a dictionary entry with the key `inputs`, pointing to an array of the individual notebook inputs. The basic structure of an individual input is as follows: ```json theme={null} { "description: string, "name": string, "type": string, "value": type, "units": string } ``` Note that `description` is optional and `units` may be required, optional, or ignored depending on the type (see [Supported Types](#supported-types-1) Supported Types for type specific information). All other fields are required. ##### An example of a valid JSON file ```json theme={null} { "description": "", "inputs": [ { "description": "", "name": "Output directory", "type": "text", "value": "C:\\CLI-numtext\\" }, { "description": "", "name": "Length", "type": "real", "units": "mm", "value": 7.0 }, { "description": "", "name": "Width", "type": "real", "units": "mm", "value": 2.0 }, { "description": "", "name": "Height", "type": "real", "units": "mm", "value": 2.0 } ], "title": "Surface Area of Box" } ``` ##### Creating a JSON template You can compose your own JSON file in your favorite code editor. Alternatively, use the **--template (-t)** flag to create input and output template files in JSON that you can modify and pass back in. These files will write to your current directory. ##### Example Usage ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" --template SampleFile.ntop ``` or ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -t SampleFile.ntop ``` ##### Supported Types nTop can load boolean, integer, scalar, text, file path, vector, point, and enum input types from a JSON file. | Variable Type | Comment | Example | | - | - | - | | Boolean | Each value should be `true` or `false`, not enclosed in quotes. | `{"name": "Rotate Y to Z", "type": "bool", "value": true}` | | Scalar | Each value can be an integer or a float, and units are optional. | `{"name": "Scalar_0", "type": "scalar", "value": 5, "units": "mm"}` | | Integer | Each value must be an integer, without units. | `{"name": "Number of points", "type": "integer", "value": 6}` | | Text | Each value should be a string. | `{"name": "Text_0", "type": "text", "value": "d:\\auto"}` | | File Path | Each value should be a valid file path, as a string. Note that paths require double slashes due to JSON string rules. | `{"name": "Path", "type": "file_path", "value": "C:\\Outputs\\geometry.stl"}` | | Point | Each value should be an array of integers or floats. | `{"name": "Center", "type": "point", "value": [1, 1, 1], "units": "mm"}` | | Vector | Each value should be an array of integers or floats. Units are optional (some vectors actually require units, and if not provided, the notebook will not run). | `{"name": "Scale", "type": "vector", "value": [1, 1, 1], "units": "mm"}` | | Enum | Enums refer to any input types selected from a dropdown menu in a block input in nTopology. Each value should be an integer representing the enum's desired id. You can find the id of your enum [here](../block-documentation/enums). | `{"name": "Lattice Type", "type": "enum", "value": 0}` | #### JSON with input arrays for iterative execution There is also an option to provide an array of values, allowing the user to specify multiple sets of inputs, so that the notebook runs once for each set. This provides a particular advantage when the notebook takes a long time to load -- this way, it need only be loaded once by nTop, and then it can be run many times. For this option, each input would look like: ```json theme={null} { "name": string, "type": string, "values": array, "units": string } ``` In that case, an example of valid JSON looks like: ```json theme={null} { "inputs": [ { "name": "Resolution", "type": "scalar", "values": [2.5, 3.1], "units": "mm" }, { "name": "Path", "type": "file_path", "values": ["d:\\auto", "d:\\auto"] } ] } ``` Note that the inputs can be in any order, but each one must be uniquely identified by its name. If two inputs have the same name the behavior is undefined. Also note that when nTop is run with multiple sets of inputs (i.e. with `values`), each input must contain the same number of values, with the exception that any inputs that are to remain constant for each run can be specified just once. For example, the following input data is valid, and in this case, the notebook is built three times, with a different value for Path and Position on each run, but the same value for Scale and Rotation: ```json theme={null} { "inputs": [ { "name": "Scale", "type": "vector", "values": [[0.003, 0.003, 0.003]], "units": "m" }, { "name": "Path", "type": "file_path", "values": ["C:\\Outputs\\output1.stl", "C:\\Outputs\\output2.stl", "C:\\Outputs\\output3.stl"] }, { "name": "Rotation", "type": "vector", "values": [[1, 1, 1]] }, { "name": "Position", "type": "point", "values": [[0, 0, 0], [4, 5, 6], [8, 9, 7]], "units": "mm" } ] } ``` # Output Source: https://docs.ntop.com/Product-Documentation/ntop/using-ntopcl/notebook-outputs #### Notebook Output Use the **-o** flag with an argument of a file path to print data about the notebook output to the specified file in JSON format. ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -j inputs.json -o output.json myNotebook.ntop ``` An example of the output for surface area, run without the properties flag: ```json theme={null} [ { "components": [], "name": "SurfaceArea", "type": "real", "value": { "isFinite": true, "units": { "length": 2 }, "val": 6.338634060263063e-05 } } ] ``` #### Notebook Output with Properties You can optionally use the **-p** flag to include data about the properties of the output, in addition to the standard output. A usage example: ```bash theme={null} "C:/Program Files/nTopology/nTopology/ntopcl.exe" -j inputs.json -o output.json -p myNotebook.ntop ``` The format of the output is an array of JSON objects, with one object for each time the notebook is run (notebooks will run once per set of inputs provided when the -j flag is used). Each object has keys name, type, value, components and if the -p flag was used, properties (keys are not in any guaranteed order). Value is an object representing the serialized value of the output, or null when that is not available. If the output is a list or group, components will contain an array of items in the group of the same format as the outer output, with the exception that the name key will not be there. Properties contains an array of property objects, each with keys name, type, and value, as shown below. When a property's serialized value is not available, null is printed instead. ```json theme={null} [ { "components": [], "name": "SurfaceArea", "properties": [ { "name": "negative", "type": "real", "value": { "isFinite": true, "units": { "length": 2 }, "val": -6.338634060263063e-05 } }, { "name": "scalar field", "type": "real_field", "value": { "expression": "", "units": { "length": 2 } } }, { "name": "text", "type": "text", "value": { "string": "0.000063" } } ], "type": "real", "value": { "isFinite": true, "units": { "length": 2 }, "val": 6.338634060263063e-05 } } ] ``` # Welcome to nTop! Source: https://docs.ntop.com/Product-Documentation/ntop/welcome ### [What's new in 6.3?](./release-notes/version-6.3) #### About nTop nTop was founded in 2015 to give engineering teams a better way to explore the design space for complex, high-performance products. With nTop, engineers encode design intent as parametric workflows: parameters, constraints, and performance requirements expressed as executable logic rather than static geometry. Those workflows generate and evaluate thousands of configurations, connecting to existing simulation tools without manual preprocessing, and running across available compute without requiring an engineer to intervene at every step. At the core is implicit modeling, a geometry representation that is mathematically stable across the full design space. Parametric updates propagate without failures, Boolean operations succeed at scale, and models remain stable when parameters are pushed far from their starting point — which means workflows can run unattended, at the scale exploration actually demands. nTop is used across aerospace and defense, turbomachinery, marine, automotive, and industrial applications. It is designed to work alongside existing CAD, CAE, and PLM tools, connecting to the simulation environments and analysis pipelines engineering teams already depend on, and supporting the AI and agentic workflows increasingly being built on top of them.
    ![](https://storage.googleapis.com/files-learn/static/images/about/aircraft-sweep-top.gif) ![](https://storage.googleapis.com/files-learn/static/images/about/aircraft-sweep.gif)
    # Parametric Torx screw Source: https://docs.ntop.com/community/packages/Cortex78/parametric-torx-screw AI context for Parametric Torx screw. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/parametric-torx-screw). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary A parametric Torx screw with list-driven batch placement, tangent-plane flush against a reference body, and paired detailed-screw and filled-mould outputs for Boolean subtraction. ## Package Details | Field | Value | | - | - | | **ID** | `parametric-torx-screw` | | **Type** | Block | | **Author** | Cortex78 | | **Version** | 2.0.0 | | **nTop Version** | 6.1 | | **Domain** | Mechanical | | **Application** | Geometry | | **Complexity** | Intermediate | | **Tags** | `torx`, `fasteners`, `parametric`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Claude Opus 5 \[Extra].** One configured Torx call returns N detailed screws and N filled cutting moulds, in insertion-point order, for any mix of series, sizes and drives. Placement is list-driven: a batch of insertion points, axes, tangent references and clocking angles, with optional tangent-plane flush against a reference body. The package ships the compact V2 assembly, its two list extractors, a ready-to-open wired example, and the example's implicit input. ![Parametric Torx screw](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/Cortex78/cover.png) ## Start here 1. Download the package folder and keep every file together, including `nT-0008-Ex.implicit`. 2. Open [Torx\_Example.ntop](Torx_Example.ntop). It already connects one configured Torx call to both extractors and to native Boolean Subtract blocks. 3. If nTop asks for the implicit input, select the supplied `nT-0008-Ex.implicit` beside the notebook. 4. Configure **Torx** once, then read the two lists through **Torx Screws** and **Torx Outer Moulds**. Do not wire the paired container straight into a Boolean block. 5. To use the screw in an existing notebook, import [Torx.ntop](Torx.ntop) and replace the old call, reconnecting its inputs and outputs. Recorded native build: **nTop 6.1.0-rc commit-050d0c7cdc8e412c3a35298bc5a89dc8a6da864d**, referred to as build 42926. The catalogue version field cannot encode a release-candidate build, so `ntopVersion` reads `6.1`. Compatibility with a public nTop release has not been re-tested. The compact assembly carries a **new custom-block UUID**. It is not an in-place update of the frozen V2 definition: importing it and reconnecting is the supported path, and the supplied example already references the compact version. In `Torx_Example.ntop` the `Diff_` block reads `e_DIRTY` on open. That is deliberate: its driving multi-region mesh from implicit is set to manual run mode so the file opens cheaply. Run it when you want the result. ## The interface `Torx.ntop` exposes eighteen inputs. | Input | Type | Notes | | - | - | - | | Drive family | choice | Internal Torx, or the tamper-resistant derivative with a sourced post. | | Screw series | choice | Cylindrical ISO 14579:2011, Pan ISO 14583:2011, Countersunk ISO 14581:2013. | | Metric size | choice | Series and size combinations from the source tables. | | Drive size | choice | Automatic, or an explicit T size. | | Length | list\ | One value for the batch, or one per insertion point. | | Override shank, Shank radius | bool, list\ | A custom radius no longer carries a standard metric thread designation. | | Override Torx, Torx radius | bool, list\ | Independent of the shank scaling. | | Insertion Point | list\ | The batch. Every list input broadcasts against it. | | Axis | list\ | No fallback for a zero axis; it is refused rather than guessed. | | Tangent Reference | list\ | Must not be parallel to the axis. | | Clocking Angle | list\ | | | Placement mode | choice | Surface placement takes the tangent-plane normal at the original point; explicit placement uses the untilted axis. | | **Reference Body** | **implicit** | The host the screws are placed against. This is what `nT-0008-Ex.implicit` feeds in the example. | | Tilt X, Tilt Y | list\ | Applied before flush; flush follows the final tilted axis. | | Flush | list\ | One flag for the batch or one per point. Default false preserves V1 placement. | The output is a paired container: N detailed bodies followed by N moulds. nTop exposes one notebook output and the measured compiler refused the list-valued aggregate forms, which is why the two extractors exist rather than a second output. ## Flush With **Flush** true the screw moves inward along its final tilted axis until the highest point of its outer head envelope touches the tangent plane at the original insertion point. Tilt and clocking are unchanged, and both the real screw and its mould receive the same translation. Cylindrical heads use their circular top-edge round, pan heads their spherical crown including the transition to the outer edge, and countersunk heads their flat top rim, whose untilted datum is already flush so the shift is zero until tilted. This is tangent-plane flush. A curved host can locally rise above or fall below that plane, so the option does not guarantee full burial beneath the actual curved surface. Input points are not projected or snapped, screw length is unchanged, and enabling flush moves the tip deeper into the host. ## Files * [Torx.ntop](Torx.ntop): the compact V2 assembly, complete screw and filled outer-mould geometry. * [Torx\_Screws.ntop](Torx_Screws.ntop): detailed screw list extractor. * [Torx\_Outer\_Moulds.ntop](Torx_Outer_Moulds.ntop): outer mould list extractor. * [Torx\_Example.ntop](Torx_Example.ntop): the wired example, with the two extractors and Boolean consumers. * [nT-0008-Ex.implicit](nT-0008-Ex.implicit): the reference body the example reads. ## What is verified Recorded in the source project, on the assembly this package ships: | Check | Result | | - | - | | Mould | 54 native field and Boolean checks across all three series and both drive families. | | Flush | 25 cases agree with a separately sampled 20,001-station head profile within 4.62e-13 m. Perpendicular and backward active directions reject. | | Extractors | Six pairing and two Boolean checks; four empty and odd-list guards reject. | | Full-wrapper integration | 96 field checks and 12 plane-placement checks across 12 screws, all three series, mixed flush flags. Largest contact residual at about 5.3 m world coordinates was 0.063 micrometre. | | Size and speed | 1,367,456 bytes against the frozen V2's 2,796,456, a 51.1% reduction. Median conversion 8.7 s against 50.0 s; median default execution 4.7 s against 7.5 s. | These are construction checks, not manufacturing tolerances. The moulds carry no fit clearance: they are exact declared CAD forms, not a tapped-hole specification. Inherited source-contour and thread-detail limitations still apply, and no manufacturing-conformity claim is made. ## License and credits MIT. See [LICENSE](LICENSE). The standards themselves are not redistributed. *** ## Source [https://community.ntop.com/#/detail/parametric-torx-screw](https://community.ntop.com/#/detail/parametric-torx-screw) ## Download [Download parametric-torx-screw.ntop](https://github.com/nTopology/Utilities-community/releases/download/parametric-torx-screw-v2.0.0/parametric-torx-screw.ntop) # Array Vectors Source: https://docs.ntop.com/community/packages/DaveMakesStuff/array-vectors AI context for Array Vectors. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/array-vectors). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Use this block in conjunction with the "Translate Object" or "Translation Transform" blocks to create a three-dimensional array of any object. ## Package Details | Field | Value | | - | - | | **ID** | `array-vectors` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `vector`, `array`, `object`, `any object`, `grid` | | **License** | MIT | | **Verified** | No | *** Use this block in conjunction with the "Translate Object" or "Translation Transform" blocks to create a three-dimensional array of any object. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/array-vectors/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Open a "Translate Object" or "Translation Transform" block and input the object you wish to array. 3. Input array parameters into "Array Vector" block 4. Drag and drop "Array Vector" block into above "Translate Object" or "Translation Transform" block ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Count` | Scalar Body | Determines the number of items across three dimensions | | `Spacing` | Scalar Body | Determines the spacing of items across three dimensions | | `Center` | Bool | Option to center arrayed objects around origin | | `Output Vectors` | Vector List | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/array-vectors](https://community.ntop.com/#/detail/array-vectors) ## Download [Download array-vectors.ntop](https://github.com/nTopology/Utilities-community/releases/download/array-vectors-v0.1.0/array-vectors.ntop) # Catenary Spline From Line Source: https://docs.ntop.com/community/packages/DaveMakesStuff/catenary-spline-from-line AI context for Catenary Spline From Line. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/catenary-spline-from-line). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a "sagging" spline from a line using "Length Factor" input to modify amount of sag. ## Package Details | Field | Value | | - | - | | **ID** | `catenary-spline-from-line` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `line`, `spline`, `catenary` | | **License** | MIT | | **Verified** | No | *** Create a "sagging" spline from a line using "Length Factor" input to modify amount of sag. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/catenary-spline-from-line/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input line and Length Factor 3. Adjust "Count" value to minimize computation time ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Line` | Line | Line to create catenary spline from | | `Length` | Scalar Value | Controls amount of sag | | `Count` | Integer Value | Number of points used to plot spline. Larger values will improve resolution but require more computation time. | | `Output Spline` | Spline | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/catenary-spline-from-line](https://community.ntop.com/#/detail/catenary-spline-from-line) ## Download [Download catenary-spline-from-line.ntop](https://github.com/nTopology/Utilities-community/releases/download/catenary-spline-from-line-v0.1.0/catenary-spline-from-line.ntop) # Conformal Vector Field Source: https://docs.ntop.com/community/packages/DaveMakesStuff/conformal-vector-field AI context for Conformal Vector Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/conformal-vector-field). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a vector field that is conformal to the surface of an input body with option to align with plane or direction ## Package Details | Field | Value | | - | - | | **ID** | `conformal-vector-field` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `vector`, `vector field`, `conformal` | | **License** | MIT | | **Verified** | No | *** Create a vector field that is conformal to the surface of an input body with option to align with plane or direction ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/conformal-vector-field/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input the body and reference plane to use when generating conformal vector field 3. Select whether to align vector field with the normal or plane of above Reference Plane input. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Body` | Implicit Body | Body to use to create conformal field | | `Reference Plane` | Plane | Reference geometry for aligning vector field | | `Align with` | Choice | Select whether to align vector field with the normal or plane of above Reference Plane input. | | `Output Vector Field` | Vector Field | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/conformal-vector-field](https://community.ntop.com/#/detail/conformal-vector-field) ## Download [Download conformal-vector-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/conformal-vector-field-v0.1.0/conformal-vector-field.ntop) # Cracked Mud Texture Source: https://docs.ntop.com/community/packages/DaveMakesStuff/cracked-mud-texture AI context for Cracked Mud Texture. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cracked-mud-texture). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a complex "cracked mud" texture using multiple cellular noise functions. ## Package Details | Field | Value | | - | - | | **ID** | `cracked-mud-texture` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Application** | Texture | | **Complexity** | Intermediate | | **Tags** | `texture`, `crack`, `cracks`, `cellular noise` | | **License** | MIT | | **Verified** | No | *** Create a complex "cracked mud" texture using multiple cellular noise functions. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/cracked-mud-texture/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input body to texture 3. Modify parameters to achieve desired crack pattern 4. Use a "Surface Roughness" block to add final texture as needed ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Body` | Implicit Body | Body to texture | | `1 Crack Dist Function` | Bool | Distance function for large primary cracks | | `1 Crack Width` | Scalar Value | Width of large primary cracks | | `1 Crack Depth` | Scalar Value | Depth of large primary cracks | | `1 Crack Frequency` | Scalar Value | Frequency of large primary cracks | | `2 Crack Dist Function` | Bool | Distance function for small secondary cracks | | `2 Crack Start Width` | Scalar Value | Width at start of small secondary cracks. Set to zero for no secondary cracks | | `2 Crack Start Depth` | Scalar Value | Depth at start of small secondary cracks. Set to zero for no secondary cracks | | `2 Crack Variety` | Integer Value | Number of different secondary crack patterns to use when filling in cells between primary cracks. Higher numbers create more diverse crack patterns | | `2 Crack Freq Min` | Scalar Value | Minimum frequency to use when generating the range of small secondary crack patterns | | `2 Crack Freq Max` | Scalar Value | Maximum frequency to use when generating the range of small secondary crack patterns | | `2 Crack Reach` | Scalar Value | Distance that secondary cracks reach in to the cells formed by the primary cracks. | | `1 Crack Width` | Scalar Value | Width of large primary cracks. | | `Random Seed` | Integer Value | Random Seed for generating crack pattern | | `Textured Body Output` | Implicit Body | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/cracked-mud-texture](https://community.ntop.com/#/detail/cracked-mud-texture) ## Download [Download cracked-mud-texture.ntop](https://github.com/nTopology/Utilities-community/releases/download/cracked-mud-texture-v0.1.0/cracked-mud-texture.ntop) # Delaunay Lines from Points on Surface Source: https://docs.ntop.com/community/packages/DaveMakesStuff/delaunay-lines-from-points-on-surface AI context for Delaunay Lines from Points on Surface. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/delaunay-lines-from-points-on-surface). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a network of Delaunay lines from points on a surface with option to output full network or boundary only. ## Package Details | Field | Value | | - | - | | **ID** | `delaunay-lines-from-points-on-surface` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.26+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `mesh`, `graph`, `delaunay`, `points` | | **License** | MIT | | **Verified** | No | *** Create a network of Delaunay lines from points on a surface with an option to output full network or boundary only. This block is useful in situations that require more control over the generation of Delaunay lines than would be possible with a mesh or re-mesh block. Best results are achieved using the "Spatial Weighting" option in the "Random Points on Mesh" block to generate input points. This block is essentially outputting the dual of the "Voronoi Surface Lattice" block. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/delaunay-lines-from-points-on-surface/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.26+. 2. Input a "Mesh Surface" and a list of "Points" positioned on that surface 3. Select whether to output the full network or boundary lines only. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | Points | Point list | Points to use when generating Daluanay lines | | Mesh Surface | Mesh | Surface on which to generate Delaunay lines | | Output | Choice | Select full network or boundary lines only | | Delaunay Lines | Line list | Main output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/delaunay-lines-from-points-on-surface](https://community.ntop.com/#/detail/delaunay-lines-from-points-on-surface) ## Download [Download delaunay-lines-from-points-on-surface.ntop](https://github.com/nTopology/Utilities-community/releases/download/delaunay-lines-from-points-on-surface-v0.1.0/delaunay-lines-from-points-on-surface.ntop) # Filter Beams by Direction Source: https://docs.ntop.com/community/packages/DaveMakesStuff/filter-beams-by-direction AI context for Filter Beams by Direction. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-beams-by-direction). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Filter lattice beams by direction using a scalar field. ## Package Details | Field | Value | | - | - | | **ID** | `filter-beams-by-direction` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `lattice`, `graph`, `direction`, `beams`, `filter` | | **License** | MIT | | **Verified** | No | *** Filter lattice beams by direction using a scalar field. Select whether to filter for beams that are either parallel or perpendicular to the field gradient. The "Extent" input determines how much the selected beams adhere to the "parallel" or "perpendicular" criteria. An "Extent" value of 1 return beams that meet the criteria exactly, while a value of 0 returns all beams. A warning is given if no beams meet the criteria. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/filter-beams-by-direction/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input lattice and apply selection criteria ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Lattice` | Lattice | Lattice to evaluate | | `Direction Field` | Scalar Field | The gradient of this field is used to filter beams | | `Filter for` | Choice | Select to filter beams parallel or perpendicular to field gradient | | `Extent` | Scalar Value | Scalar value between 0 and 1 to determine how strictly selected beams adhere to "Filter for" criteria | | `Filtered Lattice` | Lattice | Main Result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-beams-by-direction](https://community.ntop.com/#/detail/filter-beams-by-direction) ## Download [Download filter-beams-by-direction.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-beams-by-direction-v0.1.0/filter-beams-by-direction.ntop) # Four Fischer Koch TPMS Custom Unit Cells Source: https://docs.ntop.com/community/packages/DaveMakesStuff/four-fischer-koch-tpms-custom-unit-cells AI context for Four Fischer Koch TPMS Custom Unit Cells. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/four-fischer-koch-tpms-custom-unit-cells). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Generate a Custom Unit Cell from Fischer Koch C, CY, S or Y TPMS fields with options to bias the field or select wall output. ## Package Details | Field | Value | | - | - | | **ID** | `four-fischer-koch-tpms-custom-unit-cells` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `TPMS`, `minimal surface`, `custom unit cell`, `periodic lattice` | | **License** | MIT | | **Verified** | No | *** Generate a Custom Unit Cell from Fischer Koch C, CY, S or Y TPMS fields with options to bias the field or select wall output. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/four-fischer-koch-tpms-custom-unit-cells/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Select which TPMS field to use when generating custom block 3. input desired offset or wall thickness values ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Fischer Koch` | Choice | Select from Fischer Koch C, CY, S or Y TPMS fields | | `Offset` | Scalar value | Amount to offset the field | | `Wall` | Bool | Check to generate a walled surface | | `Wall Thickness` | Scalar value | Thickness of wall | | `Custom Unit Cell` | Custom Unit Cell | Main output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/four-fischer-koch-tpms-custom-unit-cells](https://community.ntop.com/#/detail/four-fischer-koch-tpms-custom-unit-cells) ## Download [Download four-fischer-koch-tpms-custom-unit-cells.ntop](https://github.com/nTopology/Utilities-community/releases/download/four-fischer-koch-tpms-custom-unit-cells-v0.1.0/four-fischer-koch-tpms-custom-unit-cells.ntop) # Four Fischer Koch TPMS Fields Source: https://docs.ntop.com/community/packages/DaveMakesStuff/four-fischer-koch-tpms-fields AI context for Four Fischer Koch TPMS Fields. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/four-fischer-koch-tpms-fields). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary A set of four TPMS fields discovered by Werner Fischer and Elke Koch ## Package Details | Field | Value | | - | - | | **ID** | `four-fischer-koch-tpms-fields` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `TPMS`, `Minimal Surface`, `Fischer-Koch`, `scalar field` | | **License** | MIT | | **Verified** | No | *** A set of four TPMS fields discovered by Werner Fischer and Elke Koch ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/four-fischer-koch-tpms-fields/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input desired cell size 3. Select which Fischer-Koch field to generate (CS, CY, S, or Y) ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Cell Size` | Scalar value | Determines cell size of TPMS | | `Fischer Koch` | Choice | Select which Fischer-Koch field to generate (CS, CY, S, or Y) | | `Output` | Scalar Field | Output scalar TPMS field | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/four-fischer-koch-tpms-fields](https://community.ntop.com/#/detail/four-fischer-koch-tpms-fields) ## Download [Download four-fischer-koch-tpms-fields.ntop](https://github.com/nTopology/Utilities-community/releases/download/four-fischer-koch-tpms-fields-v0.1.0/four-fischer-koch-tpms-fields.ntop) # Frenet Vector Fields from Spline Source: https://docs.ntop.com/community/packages/DaveMakesStuff/frenet-vector-fields-from-spline AI context for Frenet Vector Fields from Spline. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/frenet-vector-fields-from-spline). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a vector field from the tangent, normal or binormal vectors of a spline. ## Package Details | Field | Value | | - | - | | **ID** | `frenet-vector-fields-from-spline` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `vector. vector field`, `spline`, `normal`, `binormal`, `tangent` | | **License** | MIT | | **Verified** | No | *** Create a vector field from the tangent, normal or binormal vectors of a spline. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/frenet-vector-fields-from-spline/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input spline 3. Select which vector field to generate (tangent, normal or binormal) ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Spline` | Spline | Input spline | | `Field` | Choice | Select which vector field to generate (tangent, normal or binormal) | | `Vector Field Output` | Vector Field | Output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/frenet-vector-fields-from-spline](https://community.ntop.com/#/detail/frenet-vector-fields-from-spline) ## Download [Download frenet-vector-fields-from-spline.ntop](https://github.com/nTopology/Utilities-community/releases/download/frenet-vector-fields-from-spline-v0.1.0/frenet-vector-fields-from-spline.ntop) # Goldberg Polyhedron Generator Source: https://docs.ntop.com/community/packages/DaveMakesStuff/goldberg-polyhedron-generator AI context for Goldberg Polyhedron Generator. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/goldberg-polyhedron-generator). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Generate a Goldberg polyhedron using inputs m and n to modify the number and orientation of faces. ## Package Details | Field | Value | | - | - | | **ID** | `goldberg-polyhedron-generator` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.26+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `graph`, `polyhedra`, `polyhedron`, `Goldberg`, `hexagon`, `pentagon`, `icosahedron`, `sphere` | | **License** | MIT | | **Verified** | No | *** Generate a Goldberg polyhedron using inputs m and n to modify the number and orientation of faces. [Watch the Tutorial Video](https://youtu.be/fglKoqLZsY0) To create a mesh, drag and drop the graph vertices into the "Delaunay Volume Mesh" block. To create an implicit, drag and drop the mesh into the “Implicit Body from Mesh” block. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/goldberg-polyhedron-generator/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.26+. 2. Input values for radius, m, and n variables. 3. Select "Icosahedral" or "spherical" output ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Radius` | Scalar value | Radius of polyhedron | | `m` | Integer value | Defines the number and orientation of faces | | `n` | Integer value | Defines the number and orientation of faces | | `Cage Type` | Choice | Select "Icosahedral" or "spherical" output | | `Goldberg Polyhedron` | Graph | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/goldberg-polyhedron-generator](https://community.ntop.com/#/detail/goldberg-polyhedron-generator) ## Download [Download goldberg-polyhedron-generator.ntop](https://github.com/nTopology/Utilities-community/releases/download/goldberg-polyhedron-generator-v0.1.0/goldberg-polyhedron-generator.ntop) # Graph Adjacency List Source: https://docs.ntop.com/community/packages/DaveMakesStuff/graph-adjacency-list AI context for Graph Adjacency List. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/graph-adjacency-list). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Creates an indexed text list of adjacent vertices for each vertex within a graph. ## Package Details | Field | Value | | - | - | | **ID** | `graph-adjacency-list` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `graph`, `adjacent`, `connected`, `neighbor`, `index` | | **License** | MIT | | **Verified** | No | *** Creates an indexed text list of adjacent vertices for each vertex within a graph. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/graph-adjacency-list/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input graph to use ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Graph` | Graph | Graph to use to generate adjacency list | | `Adjacency List` | Text List | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/graph-adjacency-list](https://community.ntop.com/#/detail/graph-adjacency-list) ## Download [Download graph-adjacency-list.ntop](https://github.com/nTopology/Utilities-community/releases/download/graph-adjacency-list-v0.1.0/graph-adjacency-list.ntop) # Hilbert Curve Generator Source: https://docs.ntop.com/community/packages/DaveMakesStuff/hilbert-curve-generator AI context for Hilbert Curve Generator. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/hilbert-curve-generator). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a Hilbert Curve polycurve of up to eight iterations. ## Package Details | Field | Value | | - | - | | **ID** | `hilbert-curve-generator` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `Hilbert`, `Hilbert curve`, `polycurve`, `space-filling curve`, `SFC` | | **License** | MIT | | **Verified** | No | *** Create a Hilbert Curve polycurve of up to eight iterations. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/hilbert-curve-generator/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input the edge length of the square that will contain the Hilbert Curve 3. Select iterations from 1 to 8 ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Edge Length` | Scalar value | Edge length of the square that will contain the Hilbert Curve | | `Iterations` | Choice | Select iterations from 1 to 8 | | `Output` | Polycurve | Output Hilbert Curve | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/hilbert-curve-generator](https://community.ntop.com/#/detail/hilbert-curve-generator) ## Download [Download hilbert-curve-generator.ntop](https://github.com/nTopology/Utilities-community/releases/download/hilbert-curve-generator-v0.1.0/hilbert-curve-generator.ntop) # Map Coordinate Fields to Spline Source: https://docs.ntop.com/community/packages/DaveMakesStuff/map-coordinate-fields-to-spline AI context for Map Coordinate Fields to Spline. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/map-coordinate-fields-to-spline). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Four blocks for mapping X and Y coordinate fields onto a spline. ## Package Details | Field | Value | | - | - | | **ID** | `map-coordinate-fields-to-spline` | | **Type** | Bundle | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Advanced | | **Tags** | `spline`, `scalar field`, `coordinate field`, `mapping`, `Frenet`, `remapping` | | **License** | MIT | | **Verified** | No | *** Four blocks for mapping X and Y coordinate fields onto a spline. Mapping coordinate fields is part of the workflow of mapping an implicit body to a spline. This bundle includes four blocks that employ different functions for mapping X and Y coordinate fields onto a spline: “Frenet”, “Reference Body, “Reference Direction,” and “Tangent Angle.” Also included is a “Visualize Coordinate Mapping Functions” notebook to allow users to experiment and visualize how different functions work with different splines. [Watch the Tutorial Video](https://youtu.be/lX0xD7rSzwg) ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/map-coordinate-fields-to-spline/`. ## Usage [Watch the Tutorial Video](https://youtu.be/lX0xD7rSzwg) ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Spline` | Spline | Spline to map to | | `Smoothen` | Bool | An option to smooth the output field to reduce artifacts | | `X and Y Coordinate Fields` | Scalar Field List | Scalar list contains X and Y fields respectively | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/map-coordinate-fields-to-spline](https://community.ntop.com/#/detail/map-coordinate-fields-to-spline) ## Download [Download map-coordinate-fields-to-spline.ntop](https://github.com/nTopology/Utilities-community/releases/download/map-coordinate-fields-to-spline-v0.1.0/map-coordinate-fields-to-spline.ntop) # Mesh N-gon Source: https://docs.ntop.com/community/packages/DaveMakesStuff/mesh-n-gon AI context for Mesh N-gon. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/mesh-n-gon). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a surface mesh with n sides ## Package Details | Field | Value | | - | - | | **ID** | `mesh-n-gon` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Application** | Mesh | | **Complexity** | Beginner | | **Tags** | `mesh`, `radius`, `triangle`, `square`, `pentagon`, `hexagon`, `circle`, `n-gon` | | **License** | MIT | | **Verified** | No | *** Create a surface mesh with n sides. Input a large n value to approximate a circle. The block is helpful to use with the "Random Points on Mesh" block to create random points on a defined surface. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/mesh-n-gon/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Connect your input geometry / fields to the exposed inlets. 3. Tune parameters. Export via the standard nTop exporters. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Plane` | Plane | Plane on which to orient mesh | | `Sides` | Scalar | Number of sides | | `Radius` | Scalar | Radius of n-gon | | `Rotate` | Scalar | Rotate the mesh around its center point | | `Mesh n-gon` | Mesh | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/mesh-n-gon](https://community.ntop.com/#/detail/mesh-n-gon) ## Download [Download mesh-n-gon.ntop](https://github.com/nTopology/Utilities-community/releases/download/mesh-n-gon-v0.1.0/mesh-n-gon.ntop) # Minkowski Distance Source: https://docs.ntop.com/community/packages/DaveMakesStuff/minkowski-distance AI context for Minkowski Distance. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/minkowski-distance). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Calculate the Minkowski distance from a scalar field. ## Package Details | Field | Value | | - | - | | **ID** | `minkowski-distance` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `minkowski`, `Manhattan`, `Euclidean`, `Chebyshev`, `distance` | | **License** | MIT | | **Verified** | No | *** Calculate the Minkowski distance of a scalar field. P=1 returns Manhattan distance, P=2 returns Euclidean distance, P=10+ returns Chebyshev distance. When visualizing the distance from a point, the "unit ball" is an octahedron, sphere and cube respectively. P\<1 generates a concave star-like shape. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/minkowski-distance/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input a unitless scalar field ad apply a P value. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Field` | Scalar Field | Field to modify | | `P` | Scalar Value | Modifies the Minkowski output | | `Minkowski Field` | Scalar Field | Output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/minkowski-distance](https://community.ntop.com/#/detail/minkowski-distance) ## Download [Download minkowski-distance.ntop](https://github.com/nTopology/Utilities-community/releases/download/minkowski-distance-v0.1.0/minkowski-distance.ntop) # Non Linear Twist to Implicit Source: https://docs.ntop.com/community/packages/DaveMakesStuff/non-linear-twist-to-implicit AI context for Non Linear Twist to Implicit. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/non-linear-twist-to-implicit). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Add a field-driven variable twist to an implicit around the z axis ## Package Details | Field | Value | | - | - | | **ID** | `non-linear-twist-to-implicit` | | **Type** | Bundle | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `implicit`, `twist`, `rotation`, `spiral`, `helix`, `field driven` | | **License** | MIT | | **Verified** | No | *** Add a field-driven variable twist to an implicit around the z axis [Watch the Tutorial Video](https://youtu.be/JQYW8jneh4E) ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/non-linear-twist-to-implicit/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input implicit body to apply twist to. 3. Input scalar field (in degrees) to drive twist along z axis 4. Tune parameters. Export via the standard nTop exporters. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | Implicit | Implicit Body | Required. | | Rotation Field | Scalar Field (in degrees) | Required. | | Output | Implicit Body | Main result. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/non-linear-twist-to-implicit](https://community.ntop.com/#/detail/non-linear-twist-to-implicit) ## Download [Download non-linear-twist-to-implicit.ntop](https://github.com/nTopology/Utilities-community/releases/download/non-linear-twist-to-implicit-v0.1.0/non-linear-twist-to-implicit.ntop) # Order Points Using Hilbert Curve Source: https://docs.ntop.com/community/packages/DaveMakesStuff/order-points-using-hilbert-curve AI context for Order Points Using Hilbert Curve. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/order-points-using-hilbert-curve). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Orders a list of points on the XY plane according to position along a Hilbert Curve. ## Package Details | Field | Value | | - | - | | **ID** | `order-points-using-hilbert-curve` | | **Type** | Notebook | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `point`, `point list`, `Hilbert Curve`, `SFC`, `Space-filling curve`, `sort points` | | **License** | MIT | | **Verified** | No | *** Orders a list of points on the XY plane according to position along a Hilbert Curve. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/order-points-using-hilbert-curve/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input points to be ordered 3. Select number of Hilbert Curve iterations 4. Use the "Polycurve" block to visualize how output points are ordered and adjust iterations as needed. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Points` | Point List | Points to be ordered | | `Iterations` | Choice | Select number of iterations to perform on Hilbert Curve from 1 to 8. | | `Ordered Points` | Point List | Output point list | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/order-points-using-hilbert-curve](https://community.ntop.com/#/detail/order-points-using-hilbert-curve) ## Download [Download order-points-using-hilbert-curve.ntop](https://github.com/nTopology/Utilities-community/releases/download/order-points-using-hilbert-curve-v0.1.0/order-points-using-hilbert-curve.ntop) # Pipe Fittings from Graph Source: https://docs.ntop.com/community/packages/DaveMakesStuff/pipe-fittings-from-graph AI context for Pipe Fittings from Graph. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/pipe-fittings-from-graph). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Add aesthetic "pipe fittings" to a graph. ## Package Details | Field | Value | | - | - | | **ID** | `pipe-fittings-from-graph` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Application** | Novelty | | **Complexity** | Intermediate | | **Tags** | `graph`, `lattice`, `pipe`, `aesthetic`, `novelty` | | **License** | MIT | | **Verified** | No | *** Add aesthetic "pipe fittings" to a graph. To remove bolts set "Bolt Diameter" to 0. Adjusting "Edge Correction" corrects inaccuracies in the orientation of bolts that sometimes occurs at shape edges. This is a novelty application for education and learning purposes. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/pipe-fittings-from-graph/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Select graph to modify 3. Define parameters to modify graph ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Graph` | Graph | Graph to modify | | `Tube Diameter` | Scalar Value | Diameter of main tubes | | `Sleeve Length` | Scalar Value | Length of sleeve extending from vertex | | `Sleeve Diameter` | Scalar Value | Diameter of sleeve | | `Bolt From Center` | Scalar Value | Distance of bolts from vertex | | `Bolt Diameter` | Scalar Value | Diameter of bolts. Input "0" for no bolts | | `Edge Correction` | Scalar Value | Corrects inaccuracies in the orientation of bolts that sometimes occurs at shape edges. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/pipe-fittings-from-graph](https://community.ntop.com/#/detail/pipe-fittings-from-graph) ## Download [Download pipe-fittings-from-graph.ntop](https://github.com/nTopology/Utilities-community/releases/download/pipe-fittings-from-graph-v0.1.0/pipe-fittings-from-graph.ntop) # Point at Intersection of Two Lines Source: https://docs.ntop.com/community/packages/DaveMakesStuff/point-at-intersection-of-two-lines AI context for Point at Intersection of Two Lines. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/point-at-intersection-of-two-lines). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a point at the intersection of two lines on the same plane. ## Package Details | Field | Value | | - | - | | **ID** | `point-at-intersection-of-two-lines` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `line`, `point`, `intersection` | | **License** | MIT | | **Verified** | No | *** Create a point at the intersection of two lines on the same plane. If the lines do not intersect, a warning is given and the block outputs an approximation of the intersection point between the two lines. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/point-at-intersection-of-two-lines/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input two lines on the same plane ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Line 1` | Line | First line to evaluate | | `Line 2` | Line | Second line to evaluate | | `Point at Intersection` | Point | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/point-at-intersection-of-two-lines](https://community.ntop.com/#/detail/point-at-intersection-of-two-lines) ## Download [Download point-at-intersection-of-two-lines.ntop](https://github.com/nTopology/Utilities-community/releases/download/point-at-intersection-of-two-lines-v0.1.0/point-at-intersection-of-two-lines.ntop) # Point Index Field From Graph Source: https://docs.ntop.com/community/packages/DaveMakesStuff/point-index-field-from-graph AI context for Point Index Field From Graph. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/point-index-field-from-graph). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a scalar field of the index values of nearest vertices in a graph. ## Package Details | Field | Value | | - | - | | **ID** | `point-index-field-from-graph` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `index field`, `scalar field`, `point index`, `vertex index` | | **License** | MIT | | **Verified** | No | *** Create a scalar field of the index values of nearest vertices in a graph. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/point-index-field-from-graph/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input graph to use to generate point index field ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Graph` | Graph | Graph to use to generate point index field | | `Point Index Field` | Scalar Field | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/point-index-field-from-graph](https://community.ntop.com/#/detail/point-index-field-from-graph) ## Download [Download point-index-field-from-graph.ntop](https://github.com/nTopology/Utilities-community/releases/download/point-index-field-from-graph-v0.1.0/point-index-field-from-graph.ntop) # Point List To and From Coordinate Text String Source: https://docs.ntop.com/community/packages/DaveMakesStuff/point-list-to-and-from-coordinate-text-string AI context for Point List To and From Coordinate Text String. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/point-list-to-and-from-coordinate-text-string). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary A pair of blocks to convert between a Point List and an xyz Coordinate Text String ## Package Details | Field | Value | | - | - | | **ID** | `point-list-to-and-from-coordinate-text-string` | | **Type** | Bundle | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `point`, `point list`, `coordinate text string`, `point coordinates` | | **License** | MIT | | **Verified** | No | *** A pair of blocks to convert between a Point List and an xyz Coordinate Text String. These blocks can be used in conjunction with the "Text List" overload in the "Concatenate Text" block to merge multiple point lists. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/point-list-to-and-from-coordinate-text-string/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Select the appropriate block to convert "Point List from Text String" or "Point List to Text String" 3. Add inputs as appropriate ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Point List` | Point List | Required | | `Text String` | Text | Required | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/point-list-to-and-from-coordinate-text-string](https://community.ntop.com/#/detail/point-list-to-and-from-coordinate-text-string) ## Download [Download point-list-to-and-from-coordinate-text-string.ntop](https://github.com/nTopology/Utilities-community/releases/download/point-list-to-and-from-coordinate-text-string-v0.1.0/point-list-to-and-from-coordinate-text-string.ntop) # Radial Sine Field Source: https://docs.ntop.com/community/packages/DaveMakesStuff/radial-sine-field AI context for Radial Sine Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/radial-sine-field). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Generate a radial sine field by defining the number of periods and the axis around which the field rotates. ## Package Details | Field | Value | | - | - | | **ID** | `radial-sine-field` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.26+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `sine`, `radial`, `field` | | **License** | MIT | | **Verified** | No | *** Generate a radial sine field by defining the number of periods and the axis around which the field rotates. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/radial-sine-field/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.26+. 2. Input the number of periods and the axis around which the field will rotate ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Period` | Integer Variable | Number of periods | | `Axis` | Vector | axis around which the field rotates | | `Radial Sine Field` | Field | Main output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/radial-sine-field](https://community.ntop.com/#/detail/radial-sine-field) ## Download [Download radial-sine-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/radial-sine-field-v0.1.0/radial-sine-field.ntop) # Regular Polyhedron Generator Source: https://docs.ntop.com/community/packages/DaveMakesStuff/regular-polyhedron-generator AI context for Regular Polyhedron Generator. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/regular-polyhedron-generator). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Generate the five platonic polyhedra (tetrahedron, cube, octahedron, icosahedron, dodecahedron) with options to create uniform truncated, rectified, omnitruncated or custom versions. ## Package Details | Field | Value | | - | - | | **ID** | `regular-polyhedron-generator` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.26+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `tetrahedron`, `octahedron`, `icosahedron`, `dodecahedron`, `platonic`, `Archimedean`, `polyhedra`, `polyhedron` | | **License** | MIT | | **Verified** | No | *** Generate the five platonic polyhedra (tetrahedron, cube, octahedron, icosahedron, dodecahedron) with options to create uniform truncated, rectified, omnitruncated or custom versions. [Watch the Tutorial Video](https://youtu.be/fglKoqLZsY0) To create a mesh, drag and drop the graph vertices into the "Delaunay Volume Mesh" block. To create an implicit, drag and drop the mesh into the “Implicit Body from Mesh” block. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/regular-polyhedron-generator/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.26+. 2. Select base Platonic polyhedron and radius 3. Select modifications to be performed ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Base Polyhedron` | Choice | Select base polyhedron (tetrahedron, cube, octahedron, icosahedron, dodecahedron) | | `Radius` | Scalar Value | Radius of polyhedron | | `Modify` | Choice | Select from a series of geometric modifications to be performed on the base polyhedron (uniform truncated, rectified, omnitruncated or custom) | | `u` | Scalar Value | An input value to use when "Custom" is selected as a "Modify" choice | | `v` | Scalar Value | An input value to use when "Custom" is selected as a "Modify" choice | | `Regular Polyhedron` | Graph | Main output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/regular-polyhedron-generator](https://community.ntop.com/#/detail/regular-polyhedron-generator) ## Download [Download regular-polyhedron-generator.ntop](https://github.com/nTopology/Utilities-community/releases/download/regular-polyhedron-generator-v0.1.0/regular-polyhedron-generator.ntop) # Rotate Vector Field with Axis Field Source: https://docs.ntop.com/community/packages/DaveMakesStuff/rotate-vector-field-with-axis-field AI context for Rotate Vector Field with Axis Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/rotate-vector-field-with-axis-field). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Rotate local vectors in a vector field around local vectors in an "axis" vector field. ## Package Details | Field | Value | | - | - | | **ID** | `rotate-vector-field-with-axis-field` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `vector`, `vector field`, `rotate`, `axis`, `Rodrigues Rotation` | | **License** | MIT | | **Verified** | No | *** Rotate local vectors in a vector field around local vectors in an "axis" vector field. Define the amount of rotate with an scalar field in degrees. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/rotate-vector-field-with-axis-field/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input appropriate vector and scalar fields ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Field to Rotate` | Vector Field | The field to rotate | | `Axis Field` | Vector Field | The vectors in this field will serve as local axis around which to rotate that the above field | | `Angle` | Scalar Field | Defines the amount of local rotation | | `Rotated Field` | Vector Field | Output field | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/rotate-vector-field-with-axis-field](https://community.ntop.com/#/detail/rotate-vector-field-with-axis-field) ## Download [Download rotate-vector-field-with-axis-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/rotate-vector-field-with-axis-field-v0.1.0/rotate-vector-field-with-axis-field.ntop) # Sawtooth Field Source: https://docs.ntop.com/community/packages/DaveMakesStuff/sawtooth-field AI context for Sawtooth Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/sawtooth-field). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a sawtooth waveform by defining the period length and direction ## Package Details | Field | Value | | - | - | | **ID** | `sawtooth-field` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.26+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `sawtooth`, `wave`, `field` | | **License** | MIT | | **Verified** | No | *** Create a sawtooth waveform by defining the period length and direction. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/sawtooth-field/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.26+. 2. Input period length and direction ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Period Length` | Scalar value | The length of the period | | `Direction` | Vector | The direction of the sawtooth waveform | | `Sawtooth Field` | Scalar Field | Main output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/sawtooth-field](https://community.ntop.com/#/detail/sawtooth-field) ## Download [Download sawtooth-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/sawtooth-field-v0.1.0/sawtooth-field.ntop) # Single Direction Streamlines Source: https://docs.ntop.com/community/packages/DaveMakesStuff/single-direction-streamlines AI context for Single Direction Streamlines. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/single-direction-streamlines). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create streamlines in one direction by trimming at seed points ## Package Details | Field | Value | | - | - | | **ID** | `single-direction-streamlines` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 5.47 | | **Domain** | Simulation | | **Application** | streamlines | | **Complexity** | Intermediate | | **Tags** | `streamline`, `seed points`, `vector field`, `domain`, `simulation`, `terminal speed`, `curves`, `trim` | | **License** | MIT | | **Verified** | No | *** Create streamlines in one direction by trimming at seed points. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/single-direction-streamlines/`. ## Usage 1. Open the provided `.ntop` file in nTop 5.47. 2. Input vector field, domain and seed points 3. Tune parameters. Export via the standard nTop exporters. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Vector Field` | Vector Field | Vector field to apply to streamlines | | `Domain` | Implicit Body | Domain for streamline generation | | `Tolerance` | Scalar Value | Optional input for generating streamlines | | `Terminal Speed` | Scalar Value | Optional input for generating streamlines | | `Invert` | Bool | Option to return opposite section of streamlines | | `Trimmed Streamlines` | Curves | Main result | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/single-direction-streamlines](https://community.ntop.com/#/detail/single-direction-streamlines) ## Download [Download single-direction-streamlines.ntop](https://github.com/nTopology/Utilities-community/releases/download/single-direction-streamlines-v0.1.0/single-direction-streamlines.ntop) # Snub Polyhedron Generator Source: https://docs.ntop.com/community/packages/DaveMakesStuff/snub-polyhedron-generator AI context for Snub Polyhedron Generator. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/snub-polyhedron-generator). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Generate a Snub Cuboctahedron or Snub Icosidodecahedron with an option to select right or left chirality. ## Package Details | Field | Value | | - | - | | **ID** | `snub-polyhedron-generator` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.26+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `polyhedra`, `polyhedron`, `snub`, `Cuboctahedron`, `Icosidodecahedron` | | **License** | MIT | | **Verified** | No | *** Generate a Snub Cuboctahedron or Snub Icosidodecahedron with an option to select right or left chirality. [Watch the Tutorial Video](https://youtu.be/fglKoqLZsY0) To create a mesh, drag and drop the graph vertices into the "Delaunay Volume Mesh" block. To create an implicit, drag and drop the mesh into the “Implicit Body from Mesh” block. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/snub-polyhedron-generator/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.26+. 2. Select shape, chirality and radius ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Shape` | Choice | Select Snub Shape | | `Chirality` | Choice | Select right or left orientation | | `Radius` | Scalar value | Radius of polyhedron | | `Snub Polyhedron` | Graph | Main output | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/snub-polyhedron-generator](https://community.ntop.com/#/detail/snub-polyhedron-generator) ## Download [Download snub-polyhedron-generator.ntop](https://github.com/nTopology/Utilities-community/releases/download/snub-polyhedron-generator-v0.1.0/snub-polyhedron-generator.ntop) # Strange Attractor Generator Source: https://docs.ntop.com/community/packages/DaveMakesStuff/strange-attractor-generator AI context for Strange Attractor Generator. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/strange-attractor-generator). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Select from fifty-two "Strange Attractor" vector fields to generate visually interesting and mathematically intriguing curves. ## Package Details | Field | Value | | - | - | | **ID** | `strange-attractor-generator` | | **Type** | Notebook | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Application** | Artistic | | **Complexity** | Intermediate | | **Tags** | `strange attractor`, `attractor`, `vector field`, `streamline`, `math art`, `chaotic system`, `fractal`, `art` | | **License** | MIT | | **Verified** | No | *** Select from fifty-two "Strange Attractor" vector fields to generate visually interesting and mathematically intriguing curves. [Watch the Tutorial Video](https://youtu.be/KwzIOCl7qi0) ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/strange-attractor-generator/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Select a vector field and drag and drop to the "Selected Field" variable 3. Modify the field input parameters and input points to create interesting "strange attractor" designs. 4. Thicken the curves and export as is or export the vector field blocks to include in your own notebooks and custom blocks. 5. Refer to tutorial video for more details and demos. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | Input Parameters | Scalar Values | Required. | | Strange Attractor | Implicit Body | Main result. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/strange-attractor-generator](https://community.ntop.com/#/detail/strange-attractor-generator) ## Download [Download strange-attractor-generator.ntop](https://github.com/nTopology/Utilities-community/releases/download/strange-attractor-generator-v0.1.0/strange-attractor-generator.ntop) # Subdivide Graph Source: https://docs.ntop.com/community/packages/DaveMakesStuff/subdivide-graph AI context for Subdivide Graph. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/subdivide-graph). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Subdivide graph segments. ## Package Details | Field | Value | | - | - | | **ID** | `subdivide-graph` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `graph`, `lattice`, `subdivide`, `line` | | **License** | MIT | | **Verified** | No | *** Subdivide graph segments. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/subdivide-graph/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input graph to subdivide 3. Select number of times to subdivide (1 to 3) ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Graph to Subdivide` | Graph | Graph to subdivide | | `Number of Subdivisions` | Choice | Select 1, 2 or 3 | | `Subdivided Graph` | Graph | Output graph | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/subdivide-graph](https://community.ntop.com/#/detail/subdivide-graph) ## Download [Download subdivide-graph.ntop](https://github.com/nTopology/Utilities-community/releases/download/subdivide-graph-v0.1.0/subdivide-graph.ntop) # Substrate Growth Source: https://docs.ntop.com/community/packages/DaveMakesStuff/substrate-growth AI context for Substrate Growth. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/substrate-growth). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary A bundle of blocks for generating recursive growth patterns along an input graph. ## Package Details | Field | Value | | - | - | | **ID** | `substrate-growth` | | **Type** | Bundle | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.26+ | | **Domain** | Geometry | | **Complexity** | Advanced | | **Tags** | `graph`, `growth`, `recursive`, `organic`, `biomimicry` | | **License** | MIT | | **Verified** | No | *** A bundle of blocks for generating recursive growth patterns along an input graph. [Watch the Tutorial Video](https://youtu.be/68-ACunKmus) ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/substrate-growth/`. ## Usage Refer to [this tutorial](https://youtu.be/68-ACunKmus) for detailed instructions. ## Inputs & outputs | Name | Type | Notes | | - | - | - | This project involves multiple blocks with inputs and outputs. Refer to [this tutorial](https://youtu.be/68-ACunKmus) for more information. ## License MIT. *** ## Source [https://community.ntop.com/#/detail/substrate-growth](https://community.ntop.com/#/detail/substrate-growth) ## Download [Download substrate-growth.ntop](https://github.com/nTopology/Utilities-community/releases/download/substrate-growth-v0.1.0/substrate-growth.ntop) # Trim Curve at Point Source: https://docs.ntop.com/community/packages/DaveMakesStuff/trim-curve-at-point AI context for Trim Curve at Point. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/trim-curve-at-point). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Trim a curve at a point ## Package Details | Field | Value | | - | - | | **ID** | `trim-curve-at-point` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 5.47 | | **Domain** | Geometry | | **Application** | Curve | | **Complexity** | Beginner | | **Tags** | `curve`, `spline`, `line`, `trim`, `split`, `cut` | | **License** | MIT | | **Verified** | No | *** Trim a curve at a point with option to select which side to keep. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/trim-curve-at-point/`. ## Usage 1. Open the provided `.ntop` file in nTop 5.47. 2. Input curve and point ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Curve` | Curve | The curve to trim | | `Point` | Point | The point at which to trim the curve | | `Invert` | Bool | An option to return curve section on other side of point | | `Output` | Curve | Trimmed curve | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/trim-curve-at-point](https://community.ntop.com/#/detail/trim-curve-at-point) ## Download [Download trim-curve-at-point.ntop](https://github.com/nTopology/Utilities-community/releases/download/trim-curve-at-point-v0.1.0/trim-curve-at-point.ntop) # Unique Values in Scalar List Source: https://docs.ntop.com/community/packages/DaveMakesStuff/unique-values-in-scalar-list AI context for Unique Values in Scalar List. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/unique-values-in-scalar-list). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Lists the unique values from a scalar list in ascending order. ## Package Details | Field | Value | | - | - | | **ID** | `unique-values-in-scalar-list` | | **Type** | Block | | **Author** | DaveMakesStuff | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `list`, `scalar list`, `unique values` | | **License** | MIT | | **Verified** | No | *** Lists the unique values from a scalar list in ascending order. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/DaveMakesStuff/unique-values-in-scalar-list/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Input scalar list ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Scalar List` | Scalar List | Input list | | `Unique Values` | Scalar List | A list of unique values from the input list in ascending order | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/unique-values-in-scalar-list](https://community.ntop.com/#/detail/unique-values-in-scalar-list) ## Download [Download unique-values-in-scalar-list.ntop](https://github.com/nTopology/Utilities-community/releases/download/unique-values-in-scalar-list-v0.1.0/unique-values-in-scalar-list.ntop) # Intact.Simulation for nTop Source: https://docs.ntop.com/community/packages/IntactSimulation/intact-simulation-for-ntop AI context for Intact.Simulation for nTop. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/intact-simulation-for-ntop). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary No-preprocessing FEA connector that simulates complex implicit geometry directly in nTop without meshing, geometry cleanup, or model simplification. ## Package Details | Field | Value | | - | - | | **ID** | `intact-simulation-for-ntop` | | **Type** | Connector | | **Author** | Intact Solutions | | **Version** | 2.0.1 | | **nTop Version** | 5.48+ | | **Domain** | Simulation | | **Application** | FEA/CFD | | **Complexity** | Intermediate | | **Tags** | `fea`, `structural`, `thermal`, `modal`, `implicit`, `meshless`, `simulation` | | **License** | Proprietary | | **Verified** | No | *** The Intact.Simulation for nTop connector brings no-preprocessing FEA directly into the nTop design environment. It is built to analyze complex implicit geometry without requiring FEA meshing, geometry cleanup, or model simplification. ## Key capabilities * Directly simulates implicits without conversion to a surface mesh. * Supports structural, thermal, and modal analysis for designs that are difficult to prepare with traditional FEA. * Enables both quick design checks and higher-fidelity evaluations as the design matures. * Supports automated design studies and DOE-style exploration through fast, repeatable analysis setup. * Works naturally with nTop's field-driven design workflows, helping users evaluate and iterate on lightweighting concepts. * Can connect with nTop fluid results for fluid-structure interaction studies for aero structures and heat exchangers. ## Installation Run the provided installer: ``` intact-simulation-for-ntop-installer-2.0.1-37.exe ``` Example files are included in the installer and can be found at: ``` %APPDATA%\Local\Programs\Intact.Simulation for nTop\Getting Started ``` See the [Getting Started](https://intact-solutions.com/intact_docs/IntactnTop_manual.html#getting-started) page for examples and more information. ## Licensing * **Trial license:** Visit the [Intact.Simulation for nTop page](https://www.intact-solutions.com/purchase_trial/ntop) to submit a trial request. * **Purchase a license:** Use the pricing section on the same page to complete a transaction online. * **Custom or enterprise licensing:** [Contact the Intact sales team](https://intact-solutions.com/intact_docs/contact.html) for custom licensing, enterprise needs, or additional questions. ## License Proprietary - license granted via installer. *** ## Source [https://community.ntop.com/#/detail/intact-simulation-for-ntop](https://community.ntop.com/#/detail/intact-simulation-for-ntop) ## Download [Download intact-simulation-for-ntop.ntop](https://github.com/nTopology/Utilities-community/releases/download/intact-simulation-for-ntop-v2.0.1/intact-simulation-for-ntop.ntop) # Sileom Simulate Source: https://docs.ntop.com/community/packages/Sileom/sileom-simulate AI context for Sileom Simulate. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/sileom-simulate). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary GPU-accelerated, meshless static structural analysis connector that runs high-performance FEA directly inside your nTop workflow. ## Package Details | Field | Value | | - | - | | **ID** | `sileom-simulate` | | **Type** | Connector | | **Author** | Sileom | | **Version** | 2026.2.0 | | **nTop Version** | 5.48+ | | **Domain** | Simulation | | **Application** | Structural Analysis | | **Complexity** | Intermediate | | **Tags** | `simulation`, `structural`, `gpu`, `meshless`, `fea`, `solver`, `static` | | **License** | Proprietary | | **Verified** | No | *** Sileom Simulate brings high-performance, GPU-accelerated, meshless static structural analysis directly into your nTop workflow. No external mesh preparation required. The solver works natively on nTop implicit geometry. ## Installation Run the provided installer, which handles licensing automatically: ``` sileom-simulate-installer-2026-r2.msi ``` The installer sets up the connector interface and executable. No additional configuration is needed after installation. ## Example files | File | Description | Tutorial | | - | - | - | | `sim-ribs-beam.ntop` | Ribs and beam structural example | [Watch on YouTube](https://youtu.be/Uv0FQn_jPR8?si=Z-B9mKpuMp-EjarN) | | `slm-example.ntop` | General Sileom Simulate walkthrough | [Watch on YouTube](https://youtu.be/-FJxraNbpVQ?si=lMgJ10GmfoSvMzvm) | Open either file in nTop 5.48+ to follow along with the corresponding tutorial video. ## Licensing Licensing is handled during installation. For non-standard licensing options contact [contact@sileom.com](mailto:contact@sileom.com). ## Support For support requests email [support@sileom.com](mailto:support@sileom.com). ## License Proprietary — license granted via installer. *** ## Source [https://community.ntop.com/#/detail/sileom-simulate](https://community.ntop.com/#/detail/sileom-simulate) ## Download [Download sileom-simulate.ntop](https://github.com/nTopology/Utilities-community/releases/download/sileom-simulate-v2026.2.0/sileom-simulate.ntop) # nTop–AVL Aerodynamic Integration Source: https://docs.ntop.com/community/packages/TianxiangGu/ntop-avl-integration AI context for nTop–AVL Aerodynamic Integration. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/ntop-avl-integration). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Automate vortex-lattice aerodynamic analysis of a conventional UAV by driving AVL directly from nTop geometry parameters — outputs CL, CD, stability derivatives, static margin, and trim deflections in a single run. ## Package Details | Field | Value | | - | - | | **ID** | `ntop-avl-integration` | | **Type** | Bundle | | **Author** | TianxiangGu | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Aerospace | | **Application** | Analysis | | **Complexity** | Advanced | | **Tags** | `avl`, `vortex lattice`, `aerodynamics`, `uav`, `stability`, `wing`, `trim`, `static margin` | | **License** | MIT | | **Verified** | No | *** Automate vortex-lattice aerodynamic analysis of a conventional UAV by driving [AVL (Athena Vortex Lattice)](https://web.mit.edu/drela/Public/web/avl/) directly from nTop geometry parameters. The included nTop notebook passes wing, tail, and flight-condition parameters to a Python orchestrator that generates AVL input files, runs the solver, and returns aerodynamic coefficients and stability derivatives back to nTop — all in a single evaluation. ## Prerequisites * **nTop 4.12+** * **AVL 3.52** — `avl352.exe` must be on your system `PATH` * **Python 3.8+** — uses the standard library only (no extra packages required) ## Workflow 1. Open `Cool-1V1.1.2.ntop` in nTop. 2. Set your wing geometry, tail sizing, CG location, and flight condition variables inside the notebook. 3. nTop calls `AVL_prototype.py` as an external process, passing all parameters as command-line arguments. 4. The script generates `Conventional_UAV.avl`, a `.mass` file, and a run-command script, then invokes `avl352.exe`. 5. AVL runs four analyses (base trim, roll, pitch, yaw) and writes `.ft` / `.st` output files. 6. The script parses those files and prints a single CSV line that nTop reads back as output variables. ## Inputs | Parameter | Description | | - | - | | `wing_area` | Wing reference area (m²) | | `wing_ar` | Wing aspect ratio | | `wing_taper` | Wing taper ratio | | `wing_sweep_c4` | Quarter-chord sweep angle (degrees) | | `z_wing` | Wing vertical position (m) | | `aileron_y_start_frac` / `_y_end_frac` | Aileron span extent as fraction of semi-span | | `aileron_chord_frac` | Aileron chord as fraction of local chord | | `hstab_area` / `_ar` / `_taper` | Horizontal stabilizer geometry | | `z_htail` | Horizontal tail vertical position (m) | | `hstab_incidence` | Horizontal stabilizer incidence angle (degrees) | | `elevator_y_start_frac` / `_y_end_frac` / `_chord_frac` | Elevator sizing | | `vstab_area` / `_ar` / `_taper` | Vertical stabilizer geometry | | `z_vtail` | Vertical tail root height (m) | | `rudder_z_start_frac` / `_z_end_frac` / `_chord_frac` | Rudder sizing | | `tail_moment_arm` | Distance from wing LE to tail LE (m) | | `x_cg` / `y_cg` / `z_cg` | Centre of gravity location (m) | | `mach` | Freestream Mach number | | `alpha` | Angle of attack (degrees) | | `roll_rate` / `pitch_rate` / `yaw_rate` | Body rates (deg/s, optional) | | `mass` / `ixx` / `iyy` / `izz` | Mass properties (kg, kg·m²) | ## Outputs | Output | Description | | - | - | | `CL` | Lift coefficient | | `CD` | Drag coefficient | | `Cm` | Pitching-moment coefficient | | `Cma` | Pitch-moment-per-alpha derivative (stability) | | `Cmq` | Pitch-damping derivative | | `Cnb` | Yaw-moment-per-sideslip derivative | | `Clb` | Roll-moment-per-sideslip (dihedral effect) | | `Clp` | Roll-damping derivative | | `static_margin` | Static margin (% MAC) | | `elev_trim` | Elevator deflection at trim (degrees) | | `ail_req` | Aileron deflection for roll maneuver (degrees) | | `elev_req` | Elevator deflection for pitch maneuver (degrees) | | `rud_req` | Rudder deflection for yaw maneuver (degrees) | ## Files | File | Description | | - | - | | `Cool-1V1.1.2.ntop` | nTop notebook with the full integration workflow | | `AVL_prototype.py` | Python orchestrator — generates AVL inputs, runs AVL, parses outputs | | `Conventional_UAV.avl` | Sample AVL geometry file (auto-generated on each run) | | `sd7062.txt` | Selig SD7062 airfoil coordinates used for the main wing | | `nTop_AVL_Integration.pdf` | Full integration guide with methodology, worked example, and parameter reference | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/ntop-avl-integration](https://community.ntop.com/#/detail/ntop-avl-integration) ## Download [Download ntop-avl-integration.ntop](https://github.com/nTopology/Utilities-community/releases/download/ntop-avl-integration-v0.1.0/ntop-avl-integration.ntop) # Points or Frames based on Curvature Source: https://docs.ntop.com/community/packages/ajayprasad97/points-or-frames-based-on-curvature AI context for Points or Frames based on Curvature. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/points-or-frames-based-on-curvature). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Distribute points and frames non-uniformly along a spline, packing more into high-curvature regions and fewer into flat sections. ## Package Details | Field | Value | | - | - | | **ID** | `points-or-frames-based-on-curvature` | | **Type** | Block | | **Author** | ajayprasad97 | | **Version** | 0.1.0 | | **nTop Version** | 5.47 | | **Domain** | Geometry | | **Application** | Curve | | **Complexity** | Intermediate | | **Tags** | `curvature`, `spline`, `points`, `frames`, `arc length`, `sweep` | | **License** | MIT | | **Verified** | No | *** Generates a set of points (and matching reference frames) distributed non-uniformly along a spline, packing more points into high-curvature regions and fewer into flat/straight regions. ## Why not just space points evenly? Evenly-spaced points either waste density on straight sections or under-resolve sharp bends. This block instead builds a curvature-weighted arc-length reparameterization, so point density tracks local geometric complexity. ## How it works 1. Sample curvature densely along the curve (step size = `Increment`). 2. Convert curvature into a weight list (higher curvature → higher weight, with a floor so flat regions still get some density). 3. Build a running total of the weights — a discrete integral. 4. Normalize that into a monotonic 0→1 curve — effectively a CDF (cumulative distribution function) over arc length, weighted by curvature. 5. Pick `Target Points` evenly-spaced levels in that 0→1 range. 6. For each level, invert the CDF to find the actual arc-length distance it corresponds to. 7. Evaluate the curve at each resulting distance to get the final point/frame outputs. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ajayprasad97/points-or-frames-based-on-curvature/`. ## Usage 1. Open the provided `.ntop` file in nTop 5.47+. 2. Input a spline. 3. Set `Target Points` to the total number of points/frames to generate. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Spline` | Spline | The curve to distribute points along. Any degree, open or closed. | | `Target Points` | Integer | Total number of output points/frames. Distributed non-uniformly by curvature, not spread evenly. Default: 50. | | `Point` | Point List | Output points, dense at high curvature. | | `Frame` | Frame List | Local coordinate frames at those same points, useful for sweeps, cross-sections, or lattice orientation. | ## Tuning * `Increment`: controls sampling resolution of the underlying curvature scan. Smaller = more accurate but slower. Should scale with curve length rather than staying a fixed absolute value. * The internal weight ramp (currently 0.2 → 1.0) controls how aggressively curvature pulls in extra points vs. how much minimum density flat sections retain. Raise the floor for more even coverage; lower it for more aggressive clustering at bends. ## Known limitations * Very short or near-straight curves may need a smaller `Increment` to resolve curvature accurately. * Cumulative sum is computed with an O(n²) custom block, fine at the \~400-500 sample counts used by default; revisit if curvature sampling resolution grows much finer. ## License MIT. *** ## Source [https://community.ntop.com/#/detail/points-or-frames-based-on-curvature](https://community.ntop.com/#/detail/points-or-frames-based-on-curvature) ## Download [Download points-or-frames-based-on-curvature.ntop](https://github.com/nTopology/Utilities-community/releases/download/points-or-frames-based-on-curvature-v0.1.0/points-or-frames-based-on-curvature.ntop) # A-12 R33: independent lofts and cockpit study Source: https://docs.ntop.com/community/packages/bradrothenberg/a12-cockpit-lofts-r33 AI context for A-12 R33: independent lofts and cockpit study. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/a12-cockpit-lofts-r33). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore independent section surfaces, fair guides, and an integrated cockpit in an editable native A-12 appearance study. ## Package Details | Field | Value | | - | - | | **ID** | `a12-cockpit-lofts-r33` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Explore independent section surfaces, fair guides, and an integrated cockpit in an editable native A-12 appearance study. ![A-12 R33: independent lofts and cockpit study](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) The R33 graph retains the cockpit study and continuous loft construction. The front-view reference target remains unresolved. It does not establish production dimensions or aerodynamic performance. ## Installation and use 1. Download the package files and keep them together. 2. Open `a12-cockpit-lofts-r33.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Section guide, surface, and cockpit controls | | Output | Native fuselage, nacelle, wing and cockpit geometry | Named scalar controls include `Wingspan`, `Scale factor`, `Body width multiplier`, `Body height multiplier`, `Chine width multiplier`, `Conic section rho`, `Lower body width multiplier`, `Wing thickness multiplier`, `Edge thickness to span`, `Nacelle radius multiplier`, `Nacelle half spacing to span`, `Inlet wall to span`. Some are computed values; inspect their upstream construction before changing them. ## Files * [a12-cockpit-lofts-r33.ntop](a12-cockpit-lofts-r33.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/a12) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/a12-cockpit-lofts-r33](https://community.ntop.com/#/detail/a12-cockpit-lofts-r33) ## Download [Download a12-cockpit-lofts-r33.ntop](https://github.com/nTopology/Utilities-community/releases/download/a12-cockpit-lofts-r33-v0.1.0/a12-cockpit-lofts-r33.ntop) # Aircraft bulkheads E: conformal pockets and hat passages Source: https://docs.ntop.com/community/packages/bradrothenberg/aircraft-bulkheads-revision-e AI context for Aircraft bulkheads E: conformal pockets and hat passages. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/aircraft-bulkheads-revision-e). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore twelve native station parts with conformal pockets, floor blends, and revised passages for hat longerons. ## Package Details | Field | Value | | - | - | | **ID** | `aircraft-bulkheads-revision-e` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.1 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Explore twelve native station parts with conformal pockets, floor blends, and revised passages for hat longerons. ![Aircraft bulkheads E: conformal pockets and hat passages](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) Revision E includes the forward primary at FS 4000 mm, aft primary at FS 5400 mm, and ten adjacent frames. Each primary has 28 conformal pockets on each face and R6.35 floor blends. Separate station notebooks retain editable inputs and implicit outputs. Earlier Revision D buckling results do not qualify Revision E. The full aircraft assembly and source reference geometry are outside this station-part package. ## Installation and use 1. Download the package files and keep them together. 2. Open `forward-primary-bulkhead.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.1.0-rc 42926**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Promoted axial thickness and local pocket controls | | Output | Twelve independent native implicit station parts | Named scalar controls include `Axial thickness`, `Residual web`, `Perimeter edge break`, `Low X face`, `Plan corner radius`, `Rolling ball radius`. Some are computed values; inspect their upstream construction before changing them. ## Files * [aft-primary-bulkhead.ntop](aft-primary-bulkhead.ntop) * [f01-frame.ntop](f01-frame.ntop) * [f02-frame.ntop](f02-frame.ntop) * [f03-frame.ntop](f03-frame.ntop) * [f04-frame.ntop](f04-frame.ntop) * [f05-frame.ntop](f05-frame.ntop) * [f07-frame.ntop](f07-frame.ntop) * [f09-frame.ntop](f09-frame.ntop) * [f10-frame.ntop](f10-frame.ntop) * [f11-frame.ntop](f11-frame.ntop) * [f12-frame.ntop](f12-frame.ntop) * [forward-primary-bulkhead.ntop](forward-primary-bulkhead.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/aircraft-bulkheads-revision-e](https://community.ntop.com/#/detail/aircraft-bulkheads-revision-e) ## Download [Download aircraft-bulkheads-revision-e.ntop](https://github.com/nTopology/Utilities-community/releases/download/aircraft-bulkheads-revision-e-v0.1.0/aircraft-bulkheads-revision-e.ntop) # B52 fuselage R7: fair nose and cockpit loft Source: https://docs.ntop.com/community/packages/bradrothenberg/b52-fuselage-r7 AI context for B52 fuselage R7: fair nose and cockpit loft. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/b52-fuselage-r7). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Study an editable native fuselage with a fair nose blend and accepted cockpit loft, derived from the GPL-2.0 B-52F artist model. ## Package Details | Field | Value | | - | - | | **ID** | `b52-fuselage-r7` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | GPL-2.0 | | **Verified** | No | *** **Built with Astra.** Study an editable native fuselage with a fair nose blend and accepted cockpit loft, derived from the GPL-2.0 B-52F artist model. ![B52 fuselage R7: fair nose and cockpit loft](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) R7 refines the underside nose transition and preserves the accepted cockpit. Reference agreement concerns an artist model, not production aircraft geometry. Source credit: Lee Elliott and Nguyen Tri Toan Phuc, FGMEMBERS/B-52F. ## Installation and use 1. Download the package files and keep them together. 2. Open `b52-fuselage-r7.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Fitted guide curves and conic shape controls | | Output | Native fuselage and cockpit surfaces | Named scalar controls include `Fuselage length`. Some are computed values; inspect their upstream construction before changing them. ## Files * [b52-fuselage-r7.ntop](b52-fuselage-r7.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/b52) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License and attribution GPL-2.0. See [LICENSE](LICENSE). Derived from the [FGMEMBERS/B-52F artist model](https://github.com/FGMEMBERS/B-52F), by Lee Elliott and Nguyen Tri Toan Phuc. The complete corresponding source, fitted controls, upstream artist file, and numerical evaluator are in the linked source folder. *** ## Source [https://community.ntop.com/#/detail/b52-fuselage-r7](https://community.ntop.com/#/detail/b52-fuselage-r7) ## Download [Download b52-fuselage-r7.ntop](https://github.com/nTopology/Utilities-community/releases/download/b52-fuselage-r7-v0.1.0/b52-fuselage-r7.ntop) # Civil research aircraft: Revision G and design studies Source: https://docs.ntop.com/community/packages/bradrothenberg/civil-research-aircraft-rev-g AI context for Civil research aircraft: Revision G and design studies. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/civil-research-aircraft-rev-g). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore the Revision G native aircraft assembly, editable lug joints and station parts, and eight reports tracing the structural geometry and analysis studies. ## Package Details | Field | Value | | - | - | | **ID** | `civil-research-aircraft-rev-g` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.1 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `aircraft`, `notebook-api`, `assembly`, `bulkheads`, `lug-joints`, `structural-study`, `astra` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** An editable civilian research-aircraft structure with Revision G as the primary delivery. The bundle contains 74 native notebooks and eight engineering reports. It includes the complete saved assemblies, separate station parts, hat longerons, forked spars, cover splices, and nominal pin hardware. ![Revision G native structure](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) ## Start here 1. Download the complete package folder. Keep `reports/assets/`, `references/`, and `evidence/` with the notebooks. 2. Open [the report catalogue](reports/index.html), then read [the Revision G review](reports/revision-g-lug-attachments.html). 3. Open [civil-research-aircraft-rev-g.ntop](civil-research-aircraft-rev-g.ntop) in licensed nTop **6.1.0-rc build 42926**. Save a working copy before editing. 4. Expand the relevant structural section to inspect or edit a part. Use the separate joint and frame notebooks for alternate presentations. 5. Rebuild and verify both mating parts after a joint change. Save a separate assembly revision and check its embedded part definitions. The minimum-version field cannot specify this custom build. Compatibility with a public nTop release has not been re-tested. The application is not included. The saved aircraft reference includes two airfoil file inputs. Their workstation paths now point to the supplied `references/` files. If nTop requests a file after relocation, select the matching local DAT file. The matching CSV tables are also supplied. The earlier source helper can generate the CSV beside its DAT input; keep a writable working copy. Opening these public copies has not been re-tested in nTop. ## Revision G The assembly uses upper and lower integral bulkhead eyes, forked spar roots, eight nominal pins, and a separate cover-splice load path. The 14 changed structural part notebooks and the pin family are included. Assembly, forward-joint, aft-joint, and frame-only presentations preserve their saved visibility states. The recorded source checks report 1,997 geometry probes passed, 174 embedded assembly definitions, and 128 GUI variables with `e_OK` states. These establish the stated geometry and graph checks. They do not establish structural capacity. The local fork stress screens fail, and the complete Revision G aircraft analysis remains open. No new Revision G STEP is claimed. ## Inputs and outputs | Item | Editable data | Result and limit | | - | - | - | | Revision G assembly | Embedded part definitions, placements, and visibility groups | Complete saved structural assembly with the aircraft reference | | Revision G primaries and spars | Native variables within each complete part expression | Finished bulkhead eyes and matching forked roots; joint interfaces are nominal | | Pin family | Pin diameter input | Nominal pin body; changing it alone does not resize mating bores | | Earlier D/E/F assemblies | Frame thickness, primary thickness, and residual-web controls | Earlier geometry revisions with their own recorded checks | | Section studies | I, flat, and hat section dimensions | Native section coupons for the earlier buckling comparison | Parts already use aircraft world coordinates. Do not apply a second placement. Imported custom blocks are embedded snapshots. Saving a standalone part does not update its assembly. A changed interface requires coordinated edits and an explicit assembly refresh. ## Reports * [Revision G: local lug attachments](reports/revision-g-lug-attachments.html): Primary review. Integral bulkhead eyes, forked spar roots, nominal pins, native checks, and failed local fork stress screens. * [Revision F: pad-to-flange ribs](reports/revision-f-design.html): Earlier installed structure with pad support ties, native geometry checks, and independent STEP mass results. * [Revision E: hat longerons](reports/revision-e-design.html): Earlier hat longerons, conformal station parts, and revised primary passages. * [Revision D: modular fitted structure](reports/revision-d-design.html): Earlier modular assembly, pocket corrections, part input contracts, and fit checks. * [Edge-aligned comparison: sizing audit](reports/edge-aligned-sizing-audit.html): Measured spar directions, corrected coupling-mass accounting, and unresolved sizing assumptions. * [Wing-root trade](reports/wing-root-trade.html): Recorded layout, station, gauge, mass, and sensitivity comparisons. Failed primary stress screens remain visible. * [Cranked-wing review](reports/cranked-wing-review.html): Earlier spar route comparisons and their local load-path implications. * [Buckling and thin sections](reports/buckling-review.html): Earlier assumed-load study with editable I, flat, and hat section coupons. ## Native model catalogue The filenames identify each revision. Candidate C and the edge-aligned model are separate comparison assemblies. Earlier D/E/F assemblies remain separate from Revision G. ### Revision G assembly * [civil-research-aircraft-rev-g.ntop](civil-research-aircraft-rev-g.ntop) ### Revision G parts and presentations * [rev-g-aft-lug-joint.ntop](rev-g-aft-lug-joint.ntop) * [rev-g-c-aft.ntop](rev-g-c-aft.ntop) * [rev-g-c-fwd.ntop](rev-g-c-fwd.ntop) * [rev-g-forward-lug-joint.ntop](rev-g-forward-lug-joint.ntop) * [rev-g-frames-g.ntop](rev-g-frames-g.ntop) * [rev-g-p-front-spar.ntop](rev-g-p-front-spar.ntop) * [rev-g-p-lower-inner-splice.ntop](rev-g-p-lower-inner-splice.ntop) * [rev-g-p-lower-outer-splice.ntop](rev-g-p-lower-outer-splice.ntop) * [rev-g-p-rear-spar.ntop](rev-g-p-rear-spar.ntop) * [rev-g-p-upper-inner-splice.ntop](rev-g-p-upper-inner-splice.ntop) * [rev-g-p-upper-outer-splice.ntop](rev-g-p-upper-outer-splice.ntop) * [rev-g-s-front-spar.ntop](rev-g-s-front-spar.ntop) * [rev-g-s-lower-inner-splice.ntop](rev-g-s-lower-inner-splice.ntop) * [rev-g-s-lower-outer-splice.ntop](rev-g-s-lower-outer-splice.ntop) * [rev-g-s-rear-spar.ntop](rev-g-s-rear-spar.ntop) * [rev-g-s-upper-inner-splice.ntop](rev-g-s-upper-inner-splice.ntop) * [rev-g-s-upper-outer-splice.ntop](rev-g-s-upper-outer-splice.ntop) * [rev-g-root-pin.ntop](rev-g-root-pin.ntop) ### Revision F * [rev-f-aircraft-structure.ntop](rev-f-aircraft-structure.ntop) * [rev-f-forward-primary-bulkhead.ntop](rev-f-forward-primary-bulkhead.ntop) * [rev-f-aft-primary-bulkhead.ntop](rev-f-aft-primary-bulkhead.ntop) * [rev-f-f01-frame.ntop](rev-f-f01-frame.ntop) * [rev-f-f02-frame.ntop](rev-f-f02-frame.ntop) * [rev-f-f03-frame.ntop](rev-f-f03-frame.ntop) * [rev-f-f04-frame.ntop](rev-f-f04-frame.ntop) * [rev-f-f05-frame.ntop](rev-f-f05-frame.ntop) * [rev-f-f07-frame.ntop](rev-f-f07-frame.ntop) * [rev-f-f09-frame.ntop](rev-f-f09-frame.ntop) * [rev-f-f10-frame.ntop](rev-f-f10-frame.ntop) * [rev-f-f11-frame.ntop](rev-f-f11-frame.ntop) * [rev-f-f12-frame.ntop](rev-f-f12-frame.ntop) ### Revision E * [rev-e-aircraft-structure.ntop](rev-e-aircraft-structure.ntop) * [rev-e-forward-primary-bulkhead.ntop](rev-e-forward-primary-bulkhead.ntop) * [rev-e-aft-primary-bulkhead.ntop](rev-e-aft-primary-bulkhead.ntop) * [rev-e-f01-frame.ntop](rev-e-f01-frame.ntop) * [rev-e-f02-frame.ntop](rev-e-f02-frame.ntop) * [rev-e-f03-frame.ntop](rev-e-f03-frame.ntop) * [rev-e-f04-frame.ntop](rev-e-f04-frame.ntop) * [rev-e-f05-frame.ntop](rev-e-f05-frame.ntop) * [rev-e-f07-frame.ntop](rev-e-f07-frame.ntop) * [rev-e-f09-frame.ntop](rev-e-f09-frame.ntop) * [rev-e-f10-frame.ntop](rev-e-f10-frame.ntop) * [rev-e-f11-frame.ntop](rev-e-f11-frame.ntop) * [rev-e-f12-frame.ntop](rev-e-f12-frame.ntop) ### Revision D * [rev-d-aircraft-structure.ntop](rev-d-aircraft-structure.ntop) * [rev-d-forward-primary-bulkhead.ntop](rev-d-forward-primary-bulkhead.ntop) * [rev-d-aft-primary-bulkhead.ntop](rev-d-aft-primary-bulkhead.ntop) * [rev-d-f01-frame.ntop](rev-d-f01-frame.ntop) * [rev-d-f02-frame.ntop](rev-d-f02-frame.ntop) * [rev-d-f03-frame.ntop](rev-d-f03-frame.ntop) * [rev-d-f04-frame.ntop](rev-d-f04-frame.ntop) * [rev-d-f05-frame.ntop](rev-d-f05-frame.ntop) * [rev-d-f07-frame.ntop](rev-d-f07-frame.ntop) * [rev-d-f09-frame.ntop](rev-d-f09-frame.ntop) * [rev-d-f10-frame.ntop](rev-d-f10-frame.ntop) * [rev-d-f11-frame.ntop](rev-d-f11-frame.ntop) * [rev-d-f12-frame.ntop](rev-d-f12-frame.ntop) ### Edge-aligned comparison * [edge-aligned-aircraft-c.ntop](edge-aligned-aircraft-c.ntop) * [edge-aligned-c-fwd.ntop](edge-aligned-c-fwd.ntop) * [edge-aligned-c-aft.ntop](edge-aligned-c-aft.ntop) ### Candidate C comparison * [candidate-c-aircraft-c.ntop](candidate-c-aircraft-c.ntop) ### Hat longerons * [hat-longerons-l01-longeron-path.ntop](hat-longerons-l01-longeron-path.ntop) * [hat-longerons-l02-longeron-path.ntop](hat-longerons-l02-longeron-path.ntop) * [hat-longerons-l03-longeron-path.ntop](hat-longerons-l03-longeron-path.ntop) * [hat-longerons-l04-longeron-path.ntop](hat-longerons-l04-longeron-path.ntop) * [hat-longerons-l05-longeron-path.ntop](hat-longerons-l05-longeron-path.ntop) * [hat-longerons-l06-longeron-path.ntop](hat-longerons-l06-longeron-path.ntop) * [hat-longerons-l07-longeron-path.ntop](hat-longerons-l07-longeron-path.ntop) * [hat-longerons-l08-longeron-path.ntop](hat-longerons-l08-longeron-path.ntop) ### Buckling section studies * [buckling-thin-sections-study.ntop](buckling-thin-sections-study.ntop) * [buckling-i-section-generator.ntop](buckling-i-section-generator.ntop) * [buckling-flat-section-generator.ntop](buckling-flat-section-generator.ntop) * [buckling-hat-section-generator.ntop](buckling-hat-section-generator.ntop) ## Scope of this package This is a native-model and report handoff. It includes recorded numerical summaries and source workflow notes. It does not include the original execution harness, rebuild scripts, STEP exports, raw meshes, solver work directories, or reference photographs and sketches. Report links to omitted scripts or STEP files lead here. The original reports identify those operations and their original revision scope. The HTML reports use the adjacent asset folder and work offline. They retain the recorded calculations, native views, engineering limits, and failed studies. Source reference images and screenshots containing workstation paths are omitted. Native family colors are retained; report highlights use nTop blue. ## Publication checks See [publication-checks.json](publication-checks.json) for source and published hashes, exact native function preservation, portable airfoil paths, and report-image provenance. The final [source validation record](evidence/rev-g-final-validation.json) describes the original native run. Its hashes refer to the source files before publication changes. Other evidence files also retain their original revision and sample scope. New checks are offline packaging checks. No new native execution, geometry certification, load validation, or weight optimization is claimed. Earlier structural failures remain part of the review. ## License and credits MIT for Brad Rothenberg's original model and report work. See [LICENSE](LICENSE). Built with Astra. The aircraft source retains its embedded custom-block attribution, including the bounded triangular-prism method credited to [Inigo Quilez](https://iquilezles.org/articles/distfunctions/). The NACA 64A010 and PW1211 coordinate tables retain their profile names. See the [UIUC Airfoil Coordinates Database](https://m-selig.ae.illinois.edu/ads/coord_database.html) for airfoil reference data. The package license does not replace third-party rights or attribution. *** ## Source [https://community.ntop.com/#/detail/civil-research-aircraft-rev-g](https://community.ntop.com/#/detail/civil-research-aircraft-rev-g) ## Download [Download civil-research-aircraft-rev-g.ntop](https://github.com/nTopology/Utilities-community/releases/download/civil-research-aircraft-rev-g-v0.1.0/civil-research-aircraft-rev-g.ntop) # DDG(X) concept: native exterior loft study Source: https://docs.ntop.com/community/packages/bradrothenberg/ddgx-concept-exterior AI context for DDG(X) concept: native exterior loft study. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/ddgx-concept-exterior). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore a normalized public-concept exterior through an editable hull loft, superstructure, and display features. ## Package Details | Field | Value | | - | - | | **ID** | `ddgx-concept-exterior` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Explore a normalized public-concept exterior through an editable hull loft, superstructure, and display features. ![DDG(X) concept: native exterior loft study](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) This is the earlier bundled exterior snapshot. Its dimensions are inferred from public visual context. It is distinct from the later construction-control package and does not establish production geometry. ## Installation and use 1. Download the package files and keep them together. 2. Open `ddgx-concept-exterior.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Hull guide and superstructure shape controls | | Output | Native hull and exterior component bodies | Named scalar controls include `Normalized hull length`, `Aft hangar block height`, `Aft hangar block base height`, `Aft upper deckhouse height`, `Aft upper deckhouse base height`, `Forward deckhouse height`, `Forward deckhouse base height`, `Forward bridge height`, `Forward bridge base height`, `Integrated mast tower height`, `Integrated mast tower base height`, `Forward uptake height`. Some are computed values; inspect their upstream construction before changing them. ## Files * [ddgx-concept-exterior.ntop](ddgx-concept-exterior.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/ddgx) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/ddgx-concept-exterior](https://community.ntop.com/#/detail/ddgx-concept-exterior) ## Download [Download ddgx-concept-exterior.ntop](https://github.com/nTopology/Utilities-community/releases/download/ddgx-concept-exterior-v0.1.0/ddgx-concept-exterior.ntop) # DDG(X) construction: guide-driven attachments Source: https://docs.ntop.com/community/packages/bradrothenberg/ddgx-construction-controls AI context for DDG(X) construction: guide-driven attachments. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/ddgx-construction-controls). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore independent hull and bridge controls with deck-driven attachments in a native ship construction study. ## Package Details | Field | Value | | - | - | | **ID** | `ddgx-construction-controls` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Explore independent hull and bridge controls with deck-driven attachments in a native ship construction study. ![DDG(X) construction: guide-driven attachments](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) This later construction master seats the uptake and other attachments on their intended supports. Recorded checks contain 465 attachment/support samples across ten versions. These contact checks do not establish joint strength or production readiness. ## Installation and use 1. Download the package files and keep them together. 2. Open `ddgx-construction-controls.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Hull, beam, bridge and section controls | | Output | Hull, structure, superstructure and supported exterior details | Named scalar controls include `Length factor`, `Beam factor`, `Bridge assembly factor`, `Section y / L`, `Normalized hull length`, `Aft hangar block height`, `Aft hangar block base height`, `Aft upper deckhouse height`, `Aft upper deckhouse base height`, `Forward deckhouse height`, `Forward deckhouse base height`, `Forward bridge height`. Some are computed values; inspect their upstream construction before changing them. ## Files * [ddgx-construction-controls.ntop](ddgx-construction-controls.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/ddgx-construction-controls](https://community.ntop.com/#/detail/ddgx-construction-controls) ## Download [Download ddgx-construction-controls.ntop](https://github.com/nTopology/Utilities-community/releases/download/ddgx-construction-controls-v0.1.0/ddgx-construction-controls.ntop) # F-16 R6: fair airfoils and finite trailing edges Source: https://docs.ntop.com/community/packages/bradrothenberg/f16-fair-airfoils-r6 AI context for F-16 R6: fair airfoils and finite trailing edges. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/f16-fair-airfoils-r6). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Inspect the R6 aircraft appearance study with fair airfoils, revised aft-fuselage guides, and finite trailing edges. ## Package Details | Field | Value | | - | - | | **ID** | `f16-fair-airfoils-r6` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Inspect the R6 aircraft appearance study with fair airfoils, revised aft-fuselage guides, and finite trailing edges. ![F-16 R6: fair airfoils and finite trailing edges](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) The saved graph preserves R6 geometry and editable controls. Earlier cross-CAD comparisons use R3 and must not be treated as R6 measurements. Replay does not repeat the original fitting process. ## Installation and use 1. Download the package files and keep them together. 2. Open `f16-fair-airfoils-r6.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Saved native guide and airfoil controls | | Output | Editable aircraft exterior and component geometry | Named scalar controls include `Wingspan`, `Scale factor`, `Fuselage width multiplier`, `Fuselage height multiplier`, `Canopy height multiplier`, `Wing thickness multiplier`, `Trailing edge thickness at 32 ft`, `Normalized trailing edge thickness`, `Wing tip chord multiplier`, `Wing tip twist slope`, `Tail thickness multiplier`, `Fin thickness multiplier`. Some are computed values; inspect their upstream construction before changing them. ## Files * [f16-fair-airfoils-r6.ntop](f16-fair-airfoils-r6.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/f16) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/f16-fair-airfoils-r6](https://community.ntop.com/#/detail/f16-fair-airfoils-r6) ## Download [Download f16-fair-airfoils-r6.ntop](https://github.com/nTopology/Utilities-community/releases/download/f16-fair-airfoils-r6-v0.1.0/f16-fair-airfoils-r6.ntop) # F-Cat: continuous tail and cargo-pod fairing Source: https://docs.ntop.com/community/packages/bradrothenberg/fcat-tail-and-cargo-pod AI context for F-Cat: continuous tail and cargo-pod fairing. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fcat-tail-and-cargo-pod). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Inspect an editable twin-boom aircraft with a continuous bent tail, cargo-pod fairing, chine, wheels, and a separate meshing presentation. ## Package Details | Field | Value | | - | - | | **ID** | `fcat-tail-and-cargo-pod` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Inspect an editable twin-boom aircraft with a continuous bent tail, cargo-pod fairing, chine, wheels, and a separate meshing presentation. ![F-Cat: continuous tail and cargo-pod fairing](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) The geometry snapshot preserves the continuous tail and pod study. The linked aerodynamic results are recorded solver studies. Opening or replaying the model does not rerun them. ## Installation and use 1. Download the package files and keep them together. 2. Open `fcat-tail-and-cargo-pod.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. Export destinations use filenames instead of source-workstation paths. Set your own output folder before enabling or running an export. Geometry inputs do not require external files. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Native wing, pod, and continuous-tail controls | | Output | Aircraft geometry and a separate meshing notebook | Named scalar controls include `Wingspan`, `Wing area`, `Wing area with units`, `Wing taper ratio`, `Longitudinal scale`, `Cargo pod width multiplier`, `Cargo pod height multiplier`, `Pod chine height fraction`, `Pod chine tangent strength`, `Cargo pod lower conic rho`, `Boom lateral station`, `Boom cross section multiplier`. Some are computed values; inspect their upstream construction before changing them. ## Files * [fcat-tail-and-cargo-pod.ntop](fcat-tail-and-cargo-pod.ntop) * [meshing.ntop](meshing.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/fcat) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/fcat-tail-and-cargo-pod](https://community.ntop.com/#/detail/fcat-tail-and-cargo-pod) ## Download [Download fcat-tail-and-cargo-pod.ntop](https://github.com/nTopology/Utilities-community/releases/download/fcat-tail-and-cargo-pod-v0.1.0/fcat-tail-and-cargo-pod.ntop) # Fury RC: finite trailing-edge geometry Source: https://docs.ntop.com/community/packages/bradrothenberg/fury-rc-finite-edges AI context for Fury RC: finite trailing-edge geometry. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fury-rc-finite-edges). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Inspect the native Fury RC appearance study with finite trailing edges, editable loft guides, and retained mesh-readiness lessons. ## Package Details | Field | Value | | - | - | | **ID** | `fury-rc-finite-edges` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Inspect the native Fury RC appearance study with finite trailing edges, editable loft guides, and retained mesh-readiness lessons. ![Fury RC: finite trailing-edge geometry](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) The primary notebook has 0.5 inch full trailing-edge thickness on the wing, horizontal tail, and fin. Meshing and exports remain paused. Earlier appearance and layout notebooks are included with explicit earlier filenames. The linked algorithmic builder reconstructs the earlier baseline. Recorded mesh defects remain unresolved. ## Installation and use 1. Download the package files and keep them together. 2. Open `fury-rc-finite-edges.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. Export destinations use filenames instead of source-workstation paths. Set your own output folder before enabling or running an export. Geometry inputs do not require external files. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Native guide splines and shape controls | | Output | Finite-edge RC exterior; earlier appearance and layout views | Named scalar controls include `RC wingspan`, `RC scale factor`, `Fuselage width multiplier`, `Fuselage height multiplier`, `Inlet lower depth multiplier`, `Upper conic rho adjustment`, `Inlet lip forward projection`, `Inlet lip thickness`, `Inlet lip center gap`, `Gap splitter start station`, `Gap splitter aft station`, `Gap splitter inlet-roof offset`. Some are computed values; inspect their upstream construction before changing them. ## Files * [fury-rc-finite-edges.ntop](fury-rc-finite-edges.ntop) * [earlier-appearance.ntop](earlier-appearance.ntop) * [earlier-internal-layout.ntop](earlier-internal-layout.ntop) * [earlier-gear-illustration.ntop](earlier-gear-illustration.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/fury) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/fury-rc-finite-edges](https://community.ntop.com/#/detail/fury-rc-finite-edges) ## Download [Download fury-rc-finite-edges.ntop](https://github.com/nTopology/Utilities-community/releases/download/fury-rc-finite-edges-v0.1.0/fury-rc-finite-edges.ntop) # Inline-six Astra: gears, belts, and service routes Source: https://docs.ntop.com/community/packages/bradrothenberg/inline-six-astra AI context for Inline-six Astra: gears, belts, and service routes. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/inline-six-astra). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Inspect a native inline-six assembly with involute gears, nominal fasteners, belts, spline routes, and mechanism checks. ## Package Details | Field | Value | | - | - | | **ID** | `inline-six-astra` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Mechanical | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Inspect a native inline-six assembly with involute gears, nominal fasteners, belts, spline routes, and mechanism checks. ![Inline-six Astra: gears, belts, and service routes](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) The main and inspection presentations retain the editable construction graph. Nominal hardware and kinematic checks do not qualify a running engine. ## Installation and use 1. Download the package files and keep them together. 2. Open `inline-six-astra.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Named mechanism and component controls | | Output | Separate engine bodies and an inspection presentation | Named scalar controls include `Bore`, `Stroke`, `Cylinder pitch`, `Connecting rod centers`, `Compression height`, `Crank angle`, `Deck height`, `Intake valve diameter`, `Exhaust valve diameter`, `Valve inclination`, `Gear module`, `Gear pressure angle`. Some are computed values; inspect their upstream construction before changing them. ## Files * [inline-six-astra.ntop](inline-six-astra.ntop) * [inspection.ntop](inspection.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/i6-astra) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/inline-six-astra](https://community.ntop.com/#/detail/inline-six-astra) ## Download [Download inline-six-astra.ntop](https://github.com/nTopology/Utilities-community/releases/download/inline-six-astra-v0.1.0/inline-six-astra.ntop) # Inline-six engine: editable mechanism study Source: https://docs.ntop.com/community/packages/bradrothenberg/inline-six-engine AI context for Inline-six engine: editable mechanism study. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/inline-six-engine). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore slider-crank kinematics, cam-driven valves, and analytic helical springs in an editable native inline-six engine. ## Package Details | Field | Value | | - | - | | **ID** | `inline-six-engine` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Mechanical | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Explore slider-crank kinematics, cam-driven valves, and analytic helical springs in an editable native inline-six engine. ![Inline-six engine: editable mechanism study](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) The original engine demonstrates a complete API recorder and a parametric mechanical assembly. The report retains recorded mechanism checks. ## Installation and use 1. Download the package files and keep them together. 2. Open `inline-six-engine.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. Export destinations use filenames instead of source-workstation paths. Set your own output folder before enabling or running an export. Geometry inputs do not require external files. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Crank position and engine dimensions | | Output | Crankshaft, rods, pistons, cams, valves, springs, block and covers | Named scalar controls include `Bore`, `Stroke`, `Rod Length`, `Bore Pitch`, `Compression Height`, `Piston Length`, `Piston Clearance`, `Crown Thickness`, `Piston Wall`, `Dish Depth`, `Dish Sphere Radius`, `Top Land`. Some are computed values; inspect their upstream construction before changing them. ## Files * [inline-six-engine.ntop](inline-six-engine.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/i6) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/inline-six-engine](https://community.ntop.com/#/detail/inline-six-engine) ## Download [Download inline-six-engine.ntop](https://github.com/nTopology/Utilities-community/releases/download/inline-six-engine-v0.1.0/inline-six-engine.ntop) # Jet20: editable small turbojet assembly Source: https://docs.ntop.com/community/packages/bradrothenberg/jet20-engine-study AI context for Jet20: editable small turbojet assembly. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/jet20-engine-study). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore an editable compressor, combustor, turbine, housings, nominal fasteners, and service routes around a conditional 20 lbf sizing target. ## Package Details | Field | Value | | - | - | | **ID** | `jet20-engine-study` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.0 | | **Domain** | Mechanical | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Explore an editable compressor, combustor, turbine, housings, nominal fasteners, and service routes around a conditional 20 lbf sizing target. ![Jet20: editable small turbojet assembly](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.jpg) This package contains assembled, inspection, and exploded presentations. The 20 lbf value is a conditional sizing target, not measured engine thrust. ## Installation and use 1. Download the package files and keep them together. 2. Open `jet20-engine-study.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.0.0-rc 42594**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Named component dimensions and assembly controls | | Output | Compressor, combustor, turbine, housings and service-route bodies | Named scalar controls include `Compressor exit radius`, `Compressor eye radius`, `Compressor eye hub radius`, `Compressor exit width`, `Turbine tip radius`, `Turbine hub radius`, `Turbine mean radius`, `Case radius`, `Case length`, `Shaft radius`, `Nozzle exit radius`, `Case wall`. Some are computed values; inspect their upstream construction before changing them. ## Files * [jet20-engine-study.ntop](jet20-engine-study.ntop) * [inspection.ntop](inspection.ntop) * [exploded.ntop](exploded.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/jet20) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/jet20-engine-study](https://community.ntop.com/#/detail/jet20-engine-study) ## Download [Download jet20-engine-study.ntop](https://github.com/nTopology/Utilities-community/releases/download/jet20-engine-study-v0.1.0/jet20-engine-study.ntop) # Marine R5: return-loop propeller and drive Source: https://docs.ntop.com/community/packages/bradrothenberg/marine-return-loop-propeller-r5 AI context for Marine R5: return-loop propeller and drive. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/marine-return-loop-propeller-r5). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Inspect continuous leading-edge return loops, independent root trims, a finished aft shoulder, and separate ogive and drive components. ## Package Details | Field | Value | | - | - | | **ID** | `marine-return-loop-propeller-r5` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.1 | | **Domain** | Mechanical | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Inspect continuous leading-edge return loops, independent root trims, a finished aft shoulder, and separate ogive and drive components. ![Marine R5: return-loop propeller and drive](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) R5 retains physical leading-edge identity through the return and applies a finishing cut after the blade/barrel blend. The saved-graph orientation check covers seven trim cases with 121 stations each. The drive is a custom nominal interface. Marine performance and production fit are not qualified by these geometry checks. ## Installation and use 1. Download the package files and keep them together. The community download serves the full native notebook from public Git LFS storage. If cloning with Git, run `git lfs pull` to retrieve the model. 2. Open `marine-return-loop-propeller-r5.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.1.0-rc 42926**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. Export destinations use filenames instead of source-workstation paths. Set your own output folder before enabling or running an export. Geometry inputs do not require external files. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Forward root twist trim; Aft root twist trim; nominal drive dimensions | | Output | Marine screw, ogive, cartridge, reference shaft and retention hardware | Named scalar controls include `Forward root twist trim`, `Aft root twist trim`, `CHECK Cartridge wall`, `CHECK Cartridge spline opening`, `CHECK Ogive wall`, `CHECK Ogive cavity`, `CHECK Barrel material`, `CHECK Open barrel bore`, `CHECK Foil inside station 12 x 0.4`, `CHECK Foil outside station 12 x 0.4`, `CHECK Foil inside station 12 x -0.4`, `CHECK Foil outside station 12 x -0.4`. Some are computed values; inspect their upstream construction before changing them. ## Files * [marine-return-loop-propeller-r5.ntop](marine-return-loop-propeller-r5.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/marine-return-loop-propeller-r5](https://community.ntop.com/#/detail/marine-return-loop-propeller-r5) ## Download [Download marine-return-loop-propeller-r5.ntop](https://github.com/nTopology/Utilities-community/releases/download/marine-return-loop-propeller-r5-v0.1.0/marine-return-loop-propeller-r5.ntop) # nTop AeroDeck Generator Source: https://docs.ntop.com/community/packages/bradrothenberg/ntop-aero-avl AI context for nTop AeroDeck Generator. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/ntop-aero-avl). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Production-ready Python pipeline that ingests nTop panel geometry CSV exports and generates aerodynamic decks using AVL and XFOIL, with PDF reports and JSON output for downstream 6-DOF simulation. ## Package Details | Field | Value | | - | - | | **ID** | `ntop-aero-avl` | | **Type** | Bundle | | **Author** | bradrothenberg | | **Version** | 0.1.0 | | **nTop Version** | 4.26.4 | | **Domain** | Aerospace | | **Application** | Analysis | | **Complexity** | Advanced | | **Tags** | `avl`, `xfoil`, `vortex lattice`, `aerodynamics`, `aero deck`, `6-dof`, `stability`, `python` | | **License** | MIT | | **Verified** | No | *** A production-ready Python pipeline that ingests nTop panel geometry exports and automatically generates comprehensive aerodynamic decks using AVL and XFOIL, with both human-readable reports and machine-readable output files for downstream 6-DOF simulation. \> **Source repository:** \> **[https://github.com/bradrothenberg/nTopAero\_AVL](https://github.com/bradrothenberg/nTopAero_AVL)** ## Features * **Automated Pipeline** — Load nTop CSV exports → Generate AVL input → Run analysis → Create aero deck * **Comprehensive Validation** — Geometry validation with detailed error/warning reporting * **AVL + XFOIL Integration** — Automated execution with batch processing and cached airfoil polars * **PDF Reports** — Auto-generated reports covering static/dynamic stability, control effectiveness, and dynamic modes * **6-DOF Ready Output** — Machine-readable JSON aerodeck for downstream simulation * **Flexible Configuration** — YAML-based configuration for all analysis parameters ## Requirements * Python 3.9+ * [AVL](https://web.mit.edu/drela/Public/web/avl/) (Mark Drela, MIT) * [XFOIL](https://web.mit.edu/drela/Public/web/xfoil/) (optional, for airfoil polars) ## Installation ```bash theme={null} git clone https://github.com/bradrothenberg/nTopAero_AVL cd ntop-aerodeck pip install -e . ``` ## nTop Export Requirements Export your aircraft geometry from nTop as the following CSV files: | File | Description | | - | - | | `mass.csv` | Mass, CG, and inertia tensor | | `LEpts.csv` | Leading edge panel points (x, y, z) | | `TEpts.csv` | Trailing edge panel points (x, y, z) | | `WINGLETpts.csv` | *(Optional)* Winglet geometry points | | `ELEVONpts.csv` | *(Optional)* Control surface hinge line points | ## Quick Start ```bash theme={null} # Full pipeline — AVL + XFOIL + spanwise loads for FEA aerodeck build /path/to/ntop_export/ --verbose # Custom load factor (default: 6g) aerodeck build /path/to/ntop_export/ -g 4.0 --verbose # AVL only (no XFOIL) aerodeck generate /path/to/ntop_export/ -v # Validate geometry without running analysis aerodeck validate /path/to/ntop_export/ ``` ## Output Files | File | Description | | - | - | | `{name}.avl` | AVL geometry input (human-readable) | | `{name}.mass` | AVL mass file | | `{name}_aerodeck.json` | Full aero deck for 6-DOF simulation | | `{name}_aerodeck.pdf` | Comprehensive analysis report | | `avl_outputs/` | Raw AVL text outputs | | `polars/*.csv` | Cached XFOIL airfoil polars | ## PDF Report Contents * Summary: metadata, reference geometry, mass properties * Static stability derivatives (CL\_α, Cm\_α, Cn\_β, neutral point) * Dynamic stability derivatives (CL\_q, Cm\_q, Cl\_p, Cn\_r, …) * Roll-yaw coupling characteristics * Dynamic modes (Dutch roll, spiral, roll subsidence) * Control effectiveness and trim requirements * Elevon forces and hinge loading ## License MIT — see the [source repository](https://github.com/bradrothenberg/nTopAero_AVL) for details. ## Authors Brad Rothenberg ## Acknowledgments AVL and XFOIL by Mark Drela (MIT). *** ## Source [https://community.ntop.com/#/detail/ntop-aero-avl](https://community.ntop.com/#/detail/ntop-aero-avl) ## Download [Download ntop-aero-avl.ntop](https://github.com/nTopology/Utilities-community/releases/download/ntop-aero-avl-v0.1.0/ntop-aero-avl.ntop) # Eight-inch propeller and retained spinner Source: https://docs.ntop.com/community/packages/bradrothenberg/propeller-eight-inch AI context for Eight-inch propeller and retained spinner. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/propeller-eight-inch). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore an editable propeller assembly with a separate spinner, motor reference, and nominal retention hardware. ## Package Details | Field | Value | | - | - | | **ID** | `propeller-eight-inch` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.1 | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `parametric`, `modeling`, `geometry`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Explore an editable propeller assembly with a separate spinner, motor reference, and nominal retention hardware. ![Eight-inch propeller and retained spinner](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) The package includes the assembled propeller and a separate spinner notebook. The nominal retention geometry is a modeling example, not a released manufacturing drawing or safe-speed qualification. ## Installation and use 1. Download the package files and keep them together. 2. Open `propeller-eight-inch.ntop` in the matching licensed nTop build. 3. Save a working copy before editing. Expand the relevant section and change one control at a time. 4. Inspect the rebuilt bodies and block states before accepting the changed model. Recorded native build: **6.1.0-rc 42926**. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. The application and license are not included. Export destinations use filenames instead of source-workstation paths. Set your own output folder before enabling or running an export. Geometry inputs do not require external files. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Native blade, hub, spinner and retention dimensions | | Output | Propeller, spinner, reference motor and retention bodies | Named scalar controls include `Diameter - design record`, `Geometric pitch - design record`, `Hub diameter - design record`, `Hub thickness - design record`, `Bore diameter - design record`, `CHECK Spinner shell`, `CHECK Spinner cavity`, `CHECK Spinner nose`, `CHECK Spinner rear opening`, `CHECK Adapter wall`, `CHECK Adapter upper wall`, `CHECK Screw material`. Some are computed values; inspect their upstream construction before changing them. ## Files * [propeller-eight-inch.ntop](propeller-eight-inch.ntop) * [spinner.ntop](spinner.ntop) ## Evidence and source Publication checks are offline: native-container round trips, export-path changes, collapsed presentation, dependency inspection, and binary payload preservation. These checks do not constitute new native execution. See [publication-checks.json](publication-checks.json). The [source, usage notes, and recorded report](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/propellers) retain the original construction and verification scope. Download the public source checkout to view reports with their local assets. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/propeller-eight-inch](https://community.ntop.com/#/detail/propeller-eight-inch) ## Download [Download propeller-eight-inch.ntop](https://github.com/nTopology/Utilities-community/releases/download/propeller-eight-inch-v0.1.0/propeller-eight-inch.ntop) # Sheet metal with implicit geometry: models, tools and forming Source: https://docs.ntop.com/community/packages/bradrothenberg/sheet-metal-implicit-workflow AI context for Sheet metal with implicit geometry: models, tools and forming. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/sheet-metal-implicit-workflow). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Three editable notebooks, a guided HTML report, forming GIFs and bend/draft demos comparing implicit modeling with B-rep CAD. Includes clearly scoped external FE and unloading diagnostics. ## Package Details | Field | Value | | - | - | | **ID** | `sheet-metal-implicit-workflow` | | **Type** | Bundle | | **Author** | bradrothenberg | | **Version** | 0.1.0 | | **nTop Version** | 6.1+ | | **Domain** | Mechanical | | **Application** | Sheet metal geometry and forming studies | | **Complexity** | Advanced | | **Tags** | `sheet-metal`, `implicit-modeling`, `forming`, `springback`, `tooling`, `notebook-api` | | **License** | MIT | | **Verified** | No | *** Build a reusable sheet-metal geometry workflow in nTop, then distinguish geometric intent from computed forming behavior. This community edition compares implicit and B-rep approaches using three editable notebooks, an offline HTML report, three GIFs, two interactive engineering demos, exact notebook block references, and recorded external OpenRadioss evidence. **Start here:** download [sheet-metal-workflow.zip](sheet-metal-workflow.zip), extract it, and open `report.html`. Keep its adjacent folders. The report uses nTop blue, works offline and includes play/still controls, charts and sources. GitHub shows HTML source rather than running the report. **Compatibility:** the native file headers record development version **6.1.0**. The catalog's 6.1+ value reflects this header; public-build compatibility is unverified. No prerelease executable is included. The HTML demos do not require nTop. ## Why this workflow Implicit geometry is useful for repeated profiles, spatially varying features, Boolean combinations and generating related geometry from shared definitions. Conventional B-rep sheet-metal CAD remains a strong choice for bend tables, standard flat patterns, drawings and familiar downstream CAD/CAM exchange. Both can be parametric and automated; this study is not a timed performance comparison. ## Example GIFs ### Target geometry and translucent tools — prescribed motion ![Corrugation geometry study](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/media/corrugated-tools.gif) The sheet follows an authored mapping. This is a geometry/release-envelope illustration, not material-flow simulation or qualified die design. ![Drafted housing geometry study](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/media/housing-tools.gif) The housing has provisional 3-degree draft. Constant target thickness and visually separated tools do not establish a feasible draw or production clearance. ### Actual external FE motion — diagnostic result ![OpenRadioss corrugation result](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/media/corrugated-fe.gif) The sheet moves from computed nodal coordinates. Corrugated-r5 has 13.99 mm mean Y-edge draw-in and 17.62% maximum computed thinning. Material strain coverage and mesh/density sensitivity remain unresolved, so these are diagnostic values. ## Installation and use 1. Extract the download and open `report.html` in a modern browser. 2. Read [notebook-walkthrough.md](notebook-walkthrough.md), then open a copy of one of the `.ntop` files in `models/` in a compatible nTop build. 3. Expand Inputs, Calculations, Construction and Checks. The walkthrough gives exact saved block labels; Expressions contains generated intermediate arithmetic. 4. Use the browser bend/K-factor and draft/release demos to understand the relationships. They are analytic illustrations, not nTop execution or FE predictions. 5. Inspect `recipes/` and `evidence/` for graph definitions, hashes, mesh checks and numerical results. Changing a notebook invalidates the recorded baseline comparison until reevaluated. | Demo | Key inputs | Saved outputs / scope | | - | - | - | | Enclosure | Thickness, Inside bend radius, K factor, envelope, seam gap, root radius | `Formed enclosure`, `Flat enclosure blank`; beveled miter edges need preparation | | Corrugated shield | Thickness, Inside bend radius, tangent lengths, length, holes | `Final Corrugated mounting shield`; five waves with analytic bends | | Stepped housing | Thickness, step rises, floor radius, bead dimensions | `Final Stepped drawn housing`; 3-degree draft is a compiled meridian choice | | External FE evidence | Recorded material, contact, mesh and release setup | Draw-in, thinning and elastoplastic unloading diagnostics; not an nTop solid or production qualification | ## Important results and limits Three forming cases and three settled unloading cases are summarized in the report. Crossmember inertia and housing contact checks fail; all forming cases exceed the source hardening-table strain range. All unloading cases pass the selected settling screens but show additional plastic strain, so this package does not claim elastic-only springback, certified blanks or compensated production dies. Only three of the six complex geometry families were simulated. These are previously recorded runs, not new simulations for this publication. The archive does not contain the full FE solver environment. Public manufacturer families inspired the original study geometry; no supplier CAD or source photographs are redistributed. See [source ledger](evidence/source-ledger.json), the report's primary references, and [notebook index](evidence/notebook-index.json). The enclosure corner image was regenerated without desktop automation: nTop Automate exported a local mesh at a 0.01 mm setting, then PyVista/VTK rendered it offscreen. The source notebook is unchanged. This is a render of native exported geometry, not an nTop viewport screenshot; [capture provenance](evidence/corner-render.json) records its hashes and settings. ## License MIT for the original study files, report, figures and code in this package; see [license.txt](license.txt). Linked third-party documentation and the nTop/OpenRadioss applications retain their own licenses. No supplier endorsement or manufacturing release is implied. *** ## Source [https://community.ntop.com/#/detail/sheet-metal-implicit-workflow](https://community.ntop.com/#/detail/sheet-metal-implicit-workflow) ## Download [Download sheet-metal-implicit-workflow.ntop](https://github.com/nTopology/Utilities-community/releases/download/sheet-metal-implicit-workflow-v0.1.0/sheet-metal-implicit-workflow.ntop) # Two-rail propeller studies: twenty editable graphs Source: https://docs.ntop.com/community/packages/bradrothenberg/two-rail-propeller-studies AI context for Two-rail propeller studies: twenty editable graphs. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/two-rail-propeller-studies). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Explore ten original blade forms and ten airfoil candidates through complete saved Notebook API recipes, including scimitar, twisted, petal, and closed-loop studies. ## Package Details | Field | Value | | - | - | | **ID** | `two-rail-propeller-studies` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 6.1 | | **Domain** | Geometry | | **Application** | Geometry | | **Complexity** | Advanced | | **Tags** | `notebook-api`, `two-rail`, `sweep`, `airfoil`, `propeller`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** **Built with Astra.** Ten original blade forms and ten later airfoil candidates demonstrate two-rail sweeps, changing section frames, and closed loops. ![Recorded native three-petal airfoil study](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/bradrothenberg/cover.png) This bundle distributes complete saved graphs in [studies.json](studies.json). It omits the large native caches and raw meshes. Replaying a graph creates the native editable model. It does not rerun the original design search or certify aerodynamic performance. ## Installation and use Use a licensed nTop **6.1.0-rc build 42926** with the Notebook API. The catalogue version field cannot encode the custom build number. Public release compatibility has not been re-tested. Download `studies.json` and save it in your working folder. Open an empty, task-owned nTop notebook. Set `folder` and `case_id` in the Python Console code below. Choose a new output folder for each replay. ```python theme={null} from pathlib import Path import json folder = Path(r"C:/path/to/your/download") case_id = "airfoil_07_three_petal" data = json.loads((folder / "studies.json").read_text()) case = next(c for c in data["cases"] if c["id"] == case_id) out = folder / (case_id + "-replay") if out.exists(): raise RuntimeError("Choose a new output folder; preserve earlier work") if notebook.list_variables() or any(notebook.list_blocks(s["id"]) for s in notebook.list_sections()): raise RuntimeError("Use an empty task-owned notebook") out.mkdir() def resolve(value): if isinstance(value, dict): return {k: resolve(v) for k, v in value.items()} if isinstance(value, list): return [resolve(v) for v in value] if isinstance(value, str) and value.startswith("repo://"): return str(out / value.rsplit("/", 1)[-1]) return value recipe_path = out / "recipe.json" recipe_path.write_text(json.dumps(resolve(case["recipe"]))) notebook.import_recipe(str(recipe_path)) notebook.export_as_recipe(str(out / "readback.json")) notebook.save_notebook_as(str(out / "model-working.ntop")) ``` Wait for the import and save to finish. Inspect native block states, the saved readback, and the geometry. Preserve the working save and collapse authored blocks and sections in a separate final copy. The import does not preserve the original viewport presentation. ## Inputs and outputs | Direction | Contents | | - | - | | Input | Case ID and the saved rail, section, and frame controls | | Output | Native editable blade graph, working notebook, and recipe readback | ## Cases | Case ID | Profile | Study | | - | - | - | | `elliptical_01_scimitar` | Elliptical section | Scimitar | | `elliptical_02_gull_wing` | Elliptical section | Gull wing | | `elliptical_03_scalloped` | Elliptical section | Scalloped | | `elliptical_04_high_twist` | Elliptical section | High twist | | `elliptical_05_round_mobius` | Elliptical section | Round Mobius | | `elliptical_06_elliptical_mobius` | Elliptical section | Elliptical Mobius | | `elliptical_07_three_petal` | Elliptical section | Three-petal screw | | `elliptical_08_four_petal` | Elliptical section | Four-petal screw | | `elliptical_09_three_loop` | Elliptical section | Three-loop toroidal | | `elliptical_10_folded_loop` | Elliptical section | Folded-loop propeller | | `airfoil_01_scimitar` | NACA 0015 | Scimitar | | `airfoil_02_gull_wing` | NACA 0015 | Gull wing | | `airfoil_03_scalloped` | NACA 0015 | Scalloped | | `airfoil_04_high_twist` | NACA 0015 | High twist | | `airfoil_05_round_mobius` | NACA-derived symmetric ribbon; NACA 0030 supports | Round Mobius | | `airfoil_06_elliptical_mobius` | NACA-derived symmetric ribbon; NACA 0030 supports | Elliptical Mobius | | `airfoil_07_three_petal` | NACA 0015 | Three-petal screw | | `airfoil_08_four_petal` | NACA 0015 | Four-petal screw | | `airfoil_09_three_loop` | NACA 0015 | Three-loop toroidal | | `airfoil_10_folded_loop` | NACA-derived fore-aft symmetric ribbon | Folded Mobius propeller | ## Evidence and limits The [publication checks](publication-checks.json) verify all twenty complete recipes offline. Recorded mesh values refer to their earlier native source revisions. No new native execution is claimed. Modified Mobius sections remain labeled; the folded Mobius retains visible edge ripples and is a topology study. These models are not accepted aerodynamic optima. The [audited source collection](https://github.com/bradrothenberg/ntop-api-share/tree/92f13bc0a873aacba62526ee43e9e6895ef051f8/demos/propellers) includes the native gallery, recorded measurements, replay tooling, and CFD plan. ## License MIT. See [LICENSE](LICENSE). This license covers the original example models, saved recipes, and supporting material in this package. *** ## Source [https://community.ntop.com/#/detail/two-rail-propeller-studies](https://community.ntop.com/#/detail/two-rail-propeller-studies) ## Download [Download two-rail-propeller-studies.ntop](https://github.com/nTopology/Utilities-community/releases/download/two-rail-propeller-studies-v0.1.0/two-rail-propeller-studies.ntop) # Wings with Aileron Source: https://docs.ntop.com/community/packages/harrykeaten-design/wings-with-aileron AI context for Wings with Aileron. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/wings-with-aileron). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Parametric wing block with integrated aileron geometry, ready for aerodynamic and structural workflows in nTop. ## Package Details | Field | Value | | - | - | | **ID** | `wings-with-aileron` | | **Type** | Notebook | | **Author** | harrykeaten-design | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Intermediate | | **Tags** | `wing`, `aileron`, `control surface`, `aerospace`, `parametric`, `uav`, `airfoil`, `flight` | | **License** | MIT | | **Verified** | No | *** Parametric wing block with integrated aileron geometry, ready for aerodynamic and structural workflows in nTop. See `how-to-make-ailerons-for-a-wing-block.pdf` for a full walkthrough. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/harrykeaten-design/wings-with-aileron/`. ## Usage 1. Open `wings-with-aileron.ntop` in nTop 4.12+. 2. Set the wing parameters (span, root chord, taper ratio, quarter chord angle, dihedral). 3. Define the aileron spanwise extents and chord depth factor. 4. Set hinge radius, deflection angles, and tolerance. 5. Use the output implicit body list in your downstream design or simulation workflow. Refer to `how-to-make-ailerons-for-a-wing-block.pdf` for detailed steps and examples. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | Root Point | Point | Origin point for the wing | | Units | Unit Length | Unit system selection | | Wing Span | Scalar | Total wing span | | Quarter Chord Angle | Scalar | Sweep angle at quarter chord | | Taper Ratio | Scalar | Tip chord / root chord | | Root Chord Length | Scalar | Chord length at the root | | Dihedral Angle | Scalar | Wing dihedral angle | | Factor of Start of Aileron | Scalar | Spanwise start of aileron as fraction of half-span | | Factor of End of Aileron | Scalar | Spanwise end of aileron as fraction of half-span | | Chord Depth for Aileron Factor | Scalar | Chordwise depth of the aileron as fraction of chord | | Hinge Radius Aileron | Scalar | Radius of the hinge cylinder | | Deflection Right Aileron | Scalar | Rotation angle for right aileron | | Deflection Left Aileron | Scalar | Rotation angle for left aileron | | Aileron Tolerance | Scalar | Gap tolerance between aileron and wing | | TE Offset | Scalar | Trailing edge offset distance | | **Ailerons + Wings w Cut** | List of Implicit Bodies | Main result — mirrored wing pair with ailerons and hinge cutouts | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/wings-with-aileron](https://community.ntop.com/#/detail/wings-with-aileron) ## Download [Download wings-with-aileron.ntop](https://github.com/nTopology/Utilities-community/releases/download/wings-with-aileron-v0.1.0/wings-with-aileron.ntop) # CSV Airfoil SDF Source: https://docs.ntop.com/community/packages/jeffh1505/csv-airfoil-sdf AI context for CSV Airfoil SDF. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/csv-airfoil-sdf). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Import airfoil coordinate data from a CSV file and generate a smooth signed-distance-field (SDF) implicit body ready for use in nTop workflows. ## Package Details | Field | Value | | - | - | | **ID** | `csv-airfoil-sdf` | | **Type** | Notebook | | **Author** | jeffh1505 | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Intermediate | | **Tags** | `airfoil`, `csv`, `sdf`, `implicit`, `aerospace`, `wing`, `naca`, `profile` | | **License** | MIT | | **Verified** | No | *** Import airfoil coordinate data from a CSV file and generate a smooth signed-distance-field (SDF) implicit body ready for use in nTop workflows. See the included `csv-airfoil-support-article.pdf` for a detailed walkthrough. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/jeffh1505/csv-airfoil-sdf/`. ## Usage 1. Open `csv-airfoil-sdf.ntop` in nTop 4.12+. 2. Import your airfoil CSV coordinates as a list of points and connect to the `Input Airfoil CSV` input. 3. Set the `Root Point` to position the profile in your workspace. 4. Use the output `Airfoil Profile` directly in your nTop design workflow. Refer to `CSV Airfoil Support Article.pdf` for full details and examples. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | Root Point | Point | Origin point for the airfoil profile | | Input Airfoil CSV | List of Points | Airfoil coordinate points imported from CSV | | **Airfoil Profile** | Profile | Main result — airfoil profile ready for use in nTop workflows | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/csv-airfoil-sdf](https://community.ntop.com/#/detail/csv-airfoil-sdf) ## Download [Download csv-airfoil-sdf.ntop](https://github.com/nTopology/Utilities-community/releases/download/csv-airfoil-sdf-v0.1.0/csv-airfoil-sdf.ntop) # Brake Caliper Topology Optimization Workflow Source: https://docs.ntop.com/community/packages/matthewmuellernTop/brake-caliper-topology-optimization AI context for Brake Caliper Topology Optimization Workflow. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/brake-caliper-topology-optimization). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary End-to-end brake caliper workflow: CAD import, FE meshing and boundaries, static analysis, stress- and volume-constrained topology optimization, smoothing, validation analysis and export. ## Package Details | Field | Value | | - | - | | **ID** | `brake-caliper-topology-optimization` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 6.1+ | | **Domain** | Optimization | | **Application** | Simulation | | **Complexity** | Advanced | | **Tags** | `brake-caliper`, `topology-opt`, `fea`, `static-analysis`, `lightweighting`, `motorsport`, `workflow` | | **License** | MIT | | **Verified** | No | *** A complete topology optimization workflow for a brake caliper, built in nTop. It runs from imported CAD to a smoothed, validated and exportable part. ![Optimized caliper colored by von Mises stress, inside its design space](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/matthewmuellernTop/cover.png) ## Installation Download `brake-caliper-topology-optimization.ntop` from the community site, or clone this repo: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/matthewmuellernTop/brake-caliper-topology-optimization/`. The caliper CAD is embedded in the notebook, so no external files are needed. ## Workflow The notebook is organized into these sections, in order: | Section | What it does | | - | - | | Model Importation | Embedded caliper CAD: design space, pistons, pads, screws and fluid passages | | Load surfaces / From CAD Faces to Body | Selects the CAD faces used for loads and supports, and converts the bodies to implicits | | Meshing | Surface and volume meshing for the FE model | | FE Boundaries / Loads and constraints | Boundaries from CAD faces, plus loads and restraints on the pistons, pads and screws | | Static Analysis | Baseline static analysis of the design space | | Objectives, Constraints and Model | Optimization objective, stress constraint and volume-fraction constraint | | Topology Optimization | Runs the optimization | | Smoothening and post processing | Smooths the result and restores the fluid passages and interfaces | | Validation | Remeshes the smoothed part and reruns a static analysis (von Mises stress) | | Field Driven Design / Exporting | Post-processing and export of the final part | ## Usage 1. Open `brake-caliper-topology-optimization.ntop` in nTop 6.1 or later. It was prepared with nTop 6.1.2. 2. Save a working copy. 3. Review the loads and constraints and the optimization constraints for your use case, then run the topology optimization. 4. Check the validation analysis before using the result. 5. To export, set the export **File Path** to a local folder. ## Notes The export **File Path** is intentionally blank in this copy. The notebook is byte-identical to the shared source and was not re-evaluated in nTop for this submission. Review the loads, constraints and material for your own caliper before relying on the results. ## License MIT. See [LICENSE](LICENSE). *** ## Source [https://community.ntop.com/#/detail/brake-caliper-topology-optimization](https://community.ntop.com/#/detail/brake-caliper-topology-optimization) ## Download [Download brake-caliper-topology-optimization.ntop](https://github.com/nTopology/Utilities-community/releases/download/brake-caliper-topology-optimization-v1.0.0/brake-caliper-topology-optimization.ntop) # Electric Ducted Fan Blended Wing Body Source: https://docs.ntop.com/community/packages/matthewmuellernTop/electric-ducted-fan-blended-wing-body AI context for Electric Ducted Fan Blended Wing Body. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/electric-ducted-fan-blended-wing-body). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Vlad the Inhaler is an aircraft that was designed, built, and flown by nTop's 2026 summer interns ## Package Details | Field | Value | | - | - | | **ID** | `electric-ducted-fan-blended-wing-body` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 5.54 | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `Aircraft`, `DFAM`, `FlowAnalysis`, `BlendedWingBody` | | **License** | MIT | | **Verified** | No | *** Vlad the Inhaler is an aircraft that was designed, built, and flown by nTop's 2026 summer interns ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/matthewmuellernTop/electric-ducted-fan-blended-wing-body/`. ## Usage 1. Open the provided `.ntop` file in nTop 5.54. 2. Connect your input geometry / fields to the exposed inlets. 3. Tune parameters. Export via the standard nTop exporters. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `input_1` | Body | Required. | | `output_1` | Implicit Body | Main result. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/electric-ducted-fan-blended-wing-body](https://community.ntop.com/#/detail/electric-ducted-fan-blended-wing-body) ## Download [Download electric-ducted-fan-blended-wing-body.ntop](https://github.com/nTopology/Utilities-community/releases/download/electric-ducted-fan-blended-wing-body-v0.1.0/electric-ducted-fan-blended-wing-body.ntop) # FSAE Aero Package Source: https://docs.ntop.com/community/packages/matthewmuellernTop/fsae-aero-package AI context for FSAE Aero Package. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fsae-aero-package). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Parametric Formula SAE aero package: front wing and endplates, rear wing and endplates, body and mounts, and wheels, with NACA airfoil sections and a downforce/drag/L-D results table. ## Package Details | Field | Value | | - | - | | **ID** | `fsae-aero-package` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 6.1+ | | **Domain** | Aerospace | | **Application** | Geometry | | **Complexity** | Intermediate | | **Tags** | `fsae`, `motorsport`, `aerodynamics`, `wing`, `airfoil`, `fuselage`, `flow-analysis` | | **License** | MIT | | **Verified** | No | *** A parametric aerodynamic package for a Formula SAE car, built in nTop. The notebook models the front wing and endplates, the rear wing and endplates, the body and mounts, and the wheels as separate sections, and assembles them into a whole-car body for flow analysis. ![FSAE aero package with external-flow streamlines](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/matthewmuellernTop/cover.png) ## Installation Download `fsae-aero-package.ntop` from the community site, or clone this repo: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/matthewmuellernTop/fsae-aero-package/`. The notebook is self-contained: it has no external file dependencies, such as CAD, CSV airfoils or meshes. ## Usage 1. Open `fsae-aero-package.ntop` in nTop 6.1 or later. It was prepared with nTop 6.1.2. 2. Save a working copy. 3. Edit the wing sections. The airfoils are NACA 4-digit sections (2412, 4412 and 6412 are used in the notebook). 4. Edit the body using the fuselage-from-rails controls: Top, Side and Bottom rails, Top/Bottom Rho, and Tip/Rear Close Blend Radius. 5. Use the **Wings only** or **Whole car** body for flow analysis. The notebook's results table lists downforce, drag and L/D by part. ## Notebook layout | Section | What it contains | | - | - | | Front wing and endplates | Multi-element front wing built from NACA 4-digit profiles, with endplates | | Rear wing and endplates | Rear wing elements, endplates and mounts | | Body and mounts | Fuselage built from Top, Side and Bottom rails, with Top/Bottom Rho and Tip/Rear Close Blend Radius controls | | Wheels | Wheel bodies for the whole-car configuration | | Wings only / Whole car | Combined bodies for analysing the wings alone or the complete car | | Results table | Part, Downforce (N), Drag (N) and L/D | ## Notes This publication copy is byte-identical to the shared source notebook. It was not reopened or re-evaluated in nTop for this submission. Flow results depend on your own analysis settings and are not a validated design claim. ## License MIT. See [LICENSE](LICENSE). *** ## Source [https://community.ntop.com/#/detail/fsae-aero-package](https://community.ntop.com/#/detail/fsae-aero-package) ## Download [Download fsae-aero-package.ntop](https://github.com/nTopology/Utilities-community/releases/download/fsae-aero-package-v1.0.0/fsae-aero-package.ntop) # FSAE Motor Cooling Sleeve: Gyroid CHT Source: https://docs.ntop.com/community/packages/matthewmuellernTop/fsae-cooling-sleeve-gyroid-cht AI context for FSAE Motor Cooling Sleeve: Gyroid CHT. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fsae-cooling-sleeve-gyroid-cht). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Parametric gyroid-lattice water jacket for an FSAE EV motor stator, with a conjugate heat transfer (CHT) analysis reporting pressure drop, bore temperature and coolant outlet temperature. ## Package Details | Field | Value | | - | - | | **ID** | `fsae-cooling-sleeve-gyroid-cht` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 6.1+ | | **Domain** | Thermal | | **Application** | Simulation | | **Complexity** | Advanced | | **Tags** | `fsae`, `motor-cooling`, `gyroid`, `tpms`, `cht`, `heat-transfer`, `flow-analysis`, `doe` | | **License** | MIT | | **Verified** | No | *** A parametric water-cooling sleeve for a Formula SAE EV motor, built in nTop. A walled gyroid lattice fills the coolant annulus around the stator. The notebook runs a conjugate heat transfer (CHT) analysis to check pressure drop and stator bore temperature. ![Coolant streamlines through the gyroid jacket, colored by temperature](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/matthewmuellernTop/cover.png) ## Installation Download `fsae-cooling-sleeve-gyroid-cht.ntop` from the community site, or clone this repo: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/matthewmuellernTop/fsae-cooling-sleeve-gyroid-cht/`. The notebook has no external file dependencies. ## Usage 1. Open `fsae-cooling-sleeve-gyroid-cht.ntop` in nTop 6.1 or later. It was prepared with nTop 6.1.2. 2. Save a working copy. 3. Set the motor and coolant inputs: Bore Radius, Active Length, Heat Load, Coolant Flow Rate and Coolant Inlet Temp. 4. Shape the jacket: Channel Depth, Gyroid Cell Size, wall thicknesses, Plenum Height and port size. 5. Set **Cell Size** (the LBM grid), then run **Gyroid CHT Analysis**. Use 2 mm for DoE screening and 1 mm for final checks. ## Defaults | Input | Default basis | | - | - | | Bore Radius / Active Length | Typical FSAE EV inboard PMSM: 120 mm stator, 150 mm stack | | Heat Load | About 1.5 kW continuous, for an approximately 80 kW motor, applied as uniform flux on the stator bore | | Coolant Flow Rate | 8 L/min water (typical FSAE pump) | | Coolant Inlet Temp | 40 °C radiator-out | | Port Radius | Ø12 mm ports (typical -8 AN / 1/2" fitting) | | Gyroid Cell Size | 43 mm, which gives 10 cells around the mid-channel circumference | | Channel Depth | 16 mm (8 LBM cells across at 2 mm) | The gyroid sheet thickness is tied to 1.5 × the LBM cell size so that the sheet always resolves. The sleeve material is 6061 aluminum. The coolant is a custom water material with thermal properties, because CHT needs k and cp on the fluid. ## Outputs | Output | Notes | | - | - | | Cooling Sleeve | Solid 6061 sleeve: blank minus coolant volume | | Coolant Body | Fluid volume: annular jacket minus lattice, plus ports | | Pressure Drop | Inlet minus outlet pressure | | Bore Temperature | Time-averaged stator bore temperature (lower is better) | | Coolant Outlet Temperature | Average temperature at the outlet face | | DoE Outputs | `[Pressure Drop (Pa), Bore Temperature (K), Coolant Outlet Temperature (K)]` for nTop Automate | ## Notes This copy was saved without analysis results, so run **Gyroid CHT Analysis** yourself to get the pressure and temperature outputs. The notebook is byte-identical to the shared source and was not re-evaluated in nTop for this submission. Treat the results as exploratory screening unless you run the analysis at the finer cell size. ## License MIT. See [LICENSE](LICENSE). *** ## Source [https://community.ntop.com/#/detail/fsae-cooling-sleeve-gyroid-cht](https://community.ntop.com/#/detail/fsae-cooling-sleeve-gyroid-cht) ## Download [Download fsae-cooling-sleeve-gyroid-cht.ntop](https://github.com/nTopology/Utilities-community/releases/download/fsae-cooling-sleeve-gyroid-cht-v1.0.0/fsae-cooling-sleeve-gyroid-cht.ntop) # Fuselage from Rails Source: https://docs.ntop.com/community/packages/matthewmuellernTop/fuselage-from-rails AI context for Fuselage from Rails. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fuselage-from-rails). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Create a fuselage from Top, Side, and Bottom rails using Conic Section Sweeps, with tunable rho values and tip/rear close blend radii. ## Package Details | Field | Value | | - | - | | **ID** | `fuselage-from-rails` | | **Type** | Notebook | | **Author** | matthewmuellernTop | | **Version** | 1.0.0 | | **nTop Version** | 6.0+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `Airplane`, `Fuselage`, `Sweep` | | **License** | MIT | | **Verified** | No | *** Create a fuselage from rails using Conic Section Sweeps. Top and Bottom tangent is set to +Y, Side tangent is set to +/- Z. All rails should have a starting point in the X=0 plane. Top and Bottom rails should be planar in XZ with the nose pointed in the -X direction. Side rail can be non-planar, but should be kept in +Y. If end points of rails do not line up in X, the minimum X value will be used to close the fuselage. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/matthewmuellernTop/fuselage-from-rails/`. ## Usage 1. Open the provided `.ntop` file in nTop 6.0+. 2. Connect your input geometry / fields to the exposed inlets. 3. Tune parameters. Export via the standard nTop exporters. ## Inputs & outputs | Name | Type | Notes | | - | - | - | | `Top` | Curve | Top rail. Should start at X=0, be planar in XZ, with the nose pointed in the -X direction. | | `Side` | Curve | Side rail. Can be non-planar, but should be kept in +Y with a starting point at X=0. | | `Bottom` | Curve | Bottom rail. Should start at X=0, be planar in XZ, with the nose pointed in the -X direction. | | `Top Rho` | Real Field | Rho value controlling the conic section sweep tangency for the Top rail. | | `Bottom Rho` | Real Field | Rho value controlling the conic section sweep tangency for the Bottom rail. | | `Tip Close Blend Radius` | Real | Blend radius used when closing the fuselage at the nose (tip). | | `Rear Close Blend Radius` | Real | Blend radius used when closing the fuselage at the tail (rear). | | `Closed Fuselage` (output) | Implicit Body | The resulting closed fuselage body. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/fuselage-from-rails](https://community.ntop.com/#/detail/fuselage-from-rails) ## Download [Download fuselage-from-rails.ntop](https://github.com/nTopology/Utilities-community/releases/download/fuselage-from-rails-v1.0.0/fuselage-from-rails.ntop) # Lesher Teal Hackathon Starter with Quick Aero Estimates Source: https://docs.ntop.com/community/packages/matthewmuellernTop/lesher-teal-hackathon-starter AI context for Lesher Teal Hackathon Starter with Quick Aero Estimates. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/lesher-teal-hackathon-starter). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Parametric Lesher Teal aircraft with a Run Command link to a Python AeroSandbox script that updates cruise CL, CD, L/D and neutral point within seconds of any geometry change. ## Package Details | Field | Value | | - | - | | **ID** | `lesher-teal-hackathon-starter` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 1.1.0 | | **nTop Version** | 6.2+ | | **Domain** | Aerospace | | **Application** | Analysis | | **Complexity** | Intermediate | | **Tags** | `aircraft`, `aerodynamics`, `aerosandbox`, `doe`, `run-command`, `python`, `flow-analysis`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** A parametric nTop model of the Lesher Teal, the record-setting pusher aircraft that University of Michigan professor Edgar J. Lesher designed and first flew in 1965. It's the starter file for a student hackathon challenge: parameterize the aircraft so it captures the designer's intent, then pull out parameters for a design of experiments. The built-in Aircraft Flow Analysis gives high-fidelity results but takes a while to solve. This package adds a **Quick Aero Estimate** section: an nTop **Run Command** block sends the current geometry to a small Python script, which uses [AeroSandbox](https://github.com/peterdsharpe/AeroSandbox) and reports cruise CL, CD, L/D, max L/D, neutral point and static margin within about 3 seconds of any change. The aero integration (`teal_aero.py` and the Run Command chain) was built with Claude. ![Lesher Teal model in nTop with flow-analysis streamlines](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/matthewmuellernTop/cover.png) ## Files | File | Purpose | | - | - | | `lesher-teal-hackathon-starter.ntop` | The notebook: wing, fuselage and tail geometry, checks, flow analysis and the Quick Aero Estimate section | | `teal_aero.py` | Quick aero script called by the notebook; also usable from a terminal | | `requirements.txt` | Python dependency (`aerosandbox`) | | `aero-output-example.png` | Example of the plot the script writes | The site's download button gives you a zip with the notebook, `teal_aero.py`, `requirements.txt`, this README and the license. `aero-output-example.png` and the publication record are only in the [package folder on GitHub](https://github.com/nTopology/Utilities-community/tree/main/packages/matthewmuellernTop/lesher-teal-hackathon-starter). ## Setup (about 5 minutes) 1. Install Python 3.9 or newer from [python.org](https://www.python.org/downloads/) and tick **Add python.exe to PATH**. 2. Install AeroSandbox: ```bash theme={null} pip install aerosandbox ``` 3. Create the folder `C:\TealAero` and put `teal_aero.py` in it. To use a different folder, change the notebook's **Aero Tool Folder** variable to match, using forward slashes. 4. Check the script works (it prints the baseline estimate): ```bash theme={null} python C:\TealAero\teal_aero.py ``` 5. Open `lesher-teal-hackathon-starter.ntop` in nTop 6.2 or later and save a working copy. 6. The first time the notebook runs, nTop asks you to **Trust** the Run Command block. Click Trust. If AeroSandbox is installed in a different Python (a venv or conda env), set **Python Executable** to that interpreter's full path. ## Using it Every aero-relevant input is a named variable, in the Wings, Fuselage, Stabilizers and Mass Estimate sections: * **Wing:** root point (its placement), chord, airfoil, span, sweep, taper, twist, dihedral * **H-stab:** the same eight inputs * **Twin fins** (`VStab`): root point, chord, airfoil, height, sweep, taper * **Ventral fin:** root point (`Lower Stab Root`), chord, airfoil, height, sweep, taper * **Fuselage:** the top, side and bottom rail point lists * **Mass Estimate:** a mass and a point location for each of payload, engine, structures and fuel (rough estimates that total the 500 kg max takeoff weight). A group weight statement block turns them into the total mass and CG the aero estimate uses. Both the geometry blocks and the aero estimate read these variables. When you replace a typed value with an expression on your own design parameters, the estimate follows automatically. | Direction | Name | Meaning | | - | - | - | | Input | Wing, H-stab, fin, ventral and fuselage variables | Geometry, in model units | | Input | Payload, Engine, Structures and Fuel Mass and Location | Mass Estimate section: kg and m for each group | | Input | Cruise Speed (m per s) | m/s (82 = 160 kn) | | Output | Total Mass, Mass Statement CG | Group weight statement result; drives Aircraft Mass and CG X | | Output | Aircraft Mass, CG X | Mass and CG sent to the aero script; static margin is measured about CG X | | Output | Cruise CL, Cruise CD, Cruise L/D | At the cruise mass and speed, sea level | | Output | Max L/D | Best lift-to-drag ratio over angle of attack | | Output | Neutral Point X, Static Margin pct MAC | Pitch stability | | Output | Neutral Point, CG Point | Viewport markers; keep the neutral point behind the CG | Each run also writes `aero_results.json` and `aero_results.png` (polars plus top and side views) next to the script, so you can check the geometry was read correctly. If an estimate doesn't appear, copy the text of **Aero Command Line** into a terminal and run it to see the error. ### From a terminal (DOE) Any key you leave out keeps its Teal baseline value. Lengths are in m, angles in deg. ```bash theme={null} python teal_aero.py wing.span=8 wing.x=2.4 hstab.chord=0.6 mass=520 python teal_aero.py --list ``` `--list` prints every key with its baseline value. Add `--csv doe.csv --no-plot` to each run to collect a sweep into one CSV. ## Evidence and limits * The notebook was prepared and checked in an internal nTop build (43139, with the Notebook API). This publication copy was not reopened in a public nTop 6.2 release. * In that build, Run Command produced the estimate shown above: cruise L/D 14.2, neutral point 2.753 m. Wing-placement and tail changes updated it as expected, and the script matches a direct terminal run. * The flow analysis is included but paused, without results; run it yourself. * This is a quick estimate: * Drag covers only the wing, tails and fuselage. Propeller, cooling, gear and interference drag are left out, so real power is higher. * CL\_max and stall speed are rough. * Moments are untrimmed (no elevator deflection). * A positive twist value is read as washout, and the tip gets half of it because the wing block ramps twist over the full span. * Fuselage sections are modeled as ellipses through the rails. * Use it to rank designs, then check final candidates with the flow analysis. ## License and credits The notebook and script are released under the MIT license; see [LICENSE](LICENSE). * The notebook description embeds the photo [Lesher Teal](https://commons.wikimedia.org/wiki/File:Lesher_Teal.jpg) by FlugKerl2, licensed [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/). That photo isn't covered by the MIT license. * Aircraft dimensions and performance figures are from the [Lesher Teal Wikipedia article](https://en.wikipedia.org/wiki/Lesher_Teal). * [AeroSandbox](https://github.com/peterdsharpe/AeroSandbox) (MIT) is a dependency, not bundled. *** ## Source [https://community.ntop.com/#/detail/lesher-teal-hackathon-starter](https://community.ntop.com/#/detail/lesher-teal-hackathon-starter) ## Download [Download lesher-teal-hackathon-starter.ntop](https://github.com/nTopology/Utilities-community/releases/download/lesher-teal-hackathon-starter-v1.1.0/lesher-teal-hackathon-starter.ntop) # Single Panel Wing Laser Cut Structure Source: https://docs.ntop.com/community/packages/matthewmuellernTop/single-panel-wing-laser-cut-structure AI context for Single Panel Wing Laser Cut Structure. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/single-panel-wing-laser-cut-structure). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Parametric NACA wing (span, chord, taper, sweep, twist) turned into slotted, interlocking ribs and spars, exported as 3MF slices and converted to laser-cut SVGs with an included Python script. ## Package Details | Field | Value | | - | - | | **ID** | `single-panel-wing-laser-cut-structure` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 6.1+ | | **Domain** | Aerospace | | **Application** | Manufacturing | | **Complexity** | Intermediate | | **Tags** | `wing`, `airfoil`, `naca`, `laser-cutting`, `ribs-and-spars`, `svg`, `python`, `rc-aircraft` | | **License** | MIT | | **Verified** | No | *** A parametric wing in nTop that generates a flat-pack rib-and-spar structure for laser cutting. You set the airfoil and planform, and the notebook builds slotted ribs and spars that interlock. It then exports their profiles as a 3MF file. The included Python script turns that 3MF into true-size SVG cut files, one per part. ![Laser-cut ribs and spars assembled into the wing structure, with the cut sheets behind](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/matthewmuellernTop/cover.jpg) ## Files | File | Purpose | | - | - | | `single-panel-wing-laser-cut-structure.ntop` | The nTop notebook: wing definition, rib and spar layout, and 3MF export | | `slices3mf_to_cut.py` | Converts the exported 3MF slice profiles into SVG files for laser cutting | The site's download button gives you the notebook. Get the script from [this package folder on GitHub](https://github.com/nTopology/Utilities-community/tree/main/packages/matthewmuellernTop/single-panel-wing-laser-cut-structure), or clone the whole repo: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` ## Usage 1. Open `single-panel-wing-laser-cut-structure.ntop` in nTop 6.1 or later. It was prepared with nTop 6.1.2. 2. Save a working copy. 3. Set the wing inputs: NACA 4-digit code (default 2412), Root Chord Length, Wing Span, Taper Ratio, LE Angle (sweep) and twist. 4. Set **Lattice Path** to where the 3MF of rib and spar profiles should be written. 5. Convert the 3MF to SVGs, using either the notebook or a terminal (see the next section). ## Converting the 3MF to SVG The script needs Python 3.8+ and numpy. ```bash theme={null} python -m pip install numpy python slices3mf_to_cut.py WingStructsSlices.3mf ``` With [uv](https://docs.astral.sh/uv/) installed, `uv run slices3mf_to_cut.py WingStructsSlices.3mf` installs numpy automatically. This writes one SVG per flat part into a `_svg` folder next to the 3MF. Parts are drawn at true size in millimeters. Outer profiles are red, holes blue, and any outline that could not be closed is green; check green outlines before cutting. | Option | Effect | | - | - | | `-o FOLDER` | Write the SVGs to a different folder | | `--split-parts` | Write each separate part on a plane as its own SVG | | `--gap-tol MM` | Close gaps in outlines up to this size (default: 3 × the median segment length) | | `--margin MM` | Margin around each part (default 2 mm) | | `--stroke MM` | SVG stroke width (default 0.1 mm) | The script works with any 3MF that contains beam-lattice or slice-stack profiles, not just this notebook's output. ### Running the script from nTop The notebook's **Run Command** block can call the script right after export. In this copy its paths are blank. To use it: 1. Set **Lattice Path** to the 3MF output location. 2. Set **Python Script Path** to your copy of `slices3mf_to_cut.py`. Use a path without spaces, because the command does not quote it. 3. Make sure `python` on your PATH has numpy installed. The block runs `python ""`. nTop asks you to trust the file or block before any Run Command executes. ## Notes The notebook is byte-identical to the shared source and was not re-evaluated in nTop for this submission. Measure your sheet thickness and test-cut a slot before cutting the full set, since slot fit depends on your material and laser kerf. ## License MIT. See [LICENSE](LICENSE). *** ## Source [https://community.ntop.com/#/detail/single-panel-wing-laser-cut-structure](https://community.ntop.com/#/detail/single-panel-wing-laser-cut-structure) ## Download [Download single-panel-wing-laser-cut-structure.ntop](https://github.com/nTopology/Utilities-community/releases/download/single-panel-wing-laser-cut-structure-v1.0.0/single-panel-wing-laser-cut-structure.ntop) # X-59 Hackathon Starter with Quick Aero Estimates Source: https://docs.ntop.com/community/packages/matthewmuellernTop/x59-hackathon-starter AI context for X-59 Hackathon Starter with Quick Aero Estimates. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/x59-hackathon-starter). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Parametric X-59 low-boom aircraft with a mass statement and a Run Command link to a Python AeroSandbox script that reports supersonic cruise L/D, drag and neutral point within seconds of any geometry change. ## Package Details | Field | Value | | - | - | | **ID** | `x59-hackathon-starter` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 1.1.0 | | **nTop Version** | 6.2+ | | **Domain** | Aerospace | | **Application** | Analysis | | **Complexity** | Intermediate | | **Tags** | `aircraft`, `aerodynamics`, `supersonic`, `aerosandbox`, `run-command`, `python`, `mass-properties`, `ai-assisted` | | **License** | MIT | | **Verified** | No | *** A parametric nTop model of an X-59-style low-boom supersonic demonstrator. It's a starter file for a student hackathon: change the wing, canards or tail, and see how cruise efficiency and pitch stability respond. The notebook includes a **Mass Estimates** section, a group mass statement with payload, engine, structures and fuel at point locations. It also has an **Aero Analysis** section, where an nTop **Run Command** block sends the current geometry, mass and CG to a small Python script. The script uses [AeroSandbox](https://github.com/peterdsharpe/AeroSandbox) and reports cruise CL, CD, L/D, drag, pitching moment, neutral point and static margin in about 2 seconds. Version 1.1 adds a twisted main wing with separate root, panel-break and tip twist, passes the fuselage shape from nTop to the script, adds an **Area Ruling** table of cross-sectional area along the aircraft, and includes a reference X-59 mesh to compare designs against. The aero integration (`x59_aero.py` and the Run Command chain) was built with Claude. ![X-59 model in nTop with CG and neutral point markers](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/matthewmuellernTop/cover.png) ![Example aero results: planform with CG and neutral point, plus CL, CD, L/D and Cm against angle of attack](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/matthewmuellernTop/aero-output-example.png) ## Files | File | Purpose | | - | - | | `x59-hackathon-starter.ntop` | The notebook: fuselage, wing, canards, tails, engine duct, mass statement, reference mesh, Area Ruling table and the Aero Analysis section | | `x59_aero.py` | Quick aero script called by the notebook; also usable from a terminal | | `requirements.txt` | Python dependency (`aerosandbox`) | | `aero-output-example.png` | Example of the plot the script writes | The site's download button gives you a zip with the notebook, `x59_aero.py`, `requirements.txt`, this README and the license. ## Setup (about 5 minutes) 1. Install Python 3.9 or newer from [python.org](https://www.python.org/downloads/) and tick **Add python.exe to PATH**. 2. Install AeroSandbox: ```bash theme={null} pip install aerosandbox ``` If you skip this, the script installs AeroSandbox on its first run, which takes a minute or two. 3. Create the folder `C:\X59_Aero` and put `x59_aero.py` in it. To use a different folder, change the notebook's **Aero Script Folder** variable to match. 4. Check the script works (it prints the baseline estimate): ```bash theme={null} python C:\X59_Aero\x59_aero.py ``` 5. Open `x59-hackathon-starter.ntop` in nTop 6.2 or later and save a working copy. 6. When the Aero Analysis section runs, nTop asks permission to run the command. Allow it. ## Using it nTop asks permission again **every time the command changes**, which is every time you change an input it uses. The command line carries the aircraft parameters, so treat the prompt as "run the analysis?". Each run takes about 2 seconds. | Direction | Name | Meaning | | - | - | - | | Input | Main Wing variables | Root chord, span (full), inner/outer quarter-chord sweep, inner/outer taper, panel break, root/break/tip twist, dihedral, airfoil, X/Z position, root incidence | | Input | Fuselage rails | Top, Side and Bottom Rail control points; the script gets points sampled along each rail | | Input | Canard variables | Root chord, span, sweep, taper, twist, dihedral, airfoil, X/Z position, root incidence | | Input | Stabilizer variables | H-stab root chord, span, sweep, taper, X/Z position | | Input | Mass Estimates | Payload, Engine, Structures and Fuel masses and CG points; they set **Aircraft Mass** and **CG X Location** | | Input | Cruise Mach, Cruise Altitude | Flight condition (default Mach 1.41 at 55,000 ft) | | Input | Open Plot Window | 1 = open the results image after each run, 0 = don't | | Input | Aero Fuselage Points | Number of points sampled along each fuselage rail for the script (default 41) | | Input | Area Ruling Station Count | Number of X stations for the Area Ruling table (default 101) | | Output | Aero Results | Text report: cruise CL, CD, L/D, drag, Cm, neutral point, static margin | | Output | Cruise L/D, Best L/D | L/D at the cruise point, and the best L/D over the angle-of-attack sweep | | Output | Neutral Point X, Neutral Point Marker, CG Marker | Pitch stability; keep the CG ahead of the neutral point | | Output | Area Ruling Table | Cross-sectional area (m²) of the whole aircraft against X (mm), from nose to tail | Each run also writes `aero_results/latest_report.txt` and `latest_results.png` next to the script. ### Baseline mass statement | Item | Mass | Basis | | - | - | - | | Payload | 550 kg | Pilot, ejection seat, avionics and test instrumentation (estimate) | | Engine | 1,110 kg | One GE F414-GE-100, dry | | Structures and systems | 8,500 kg | Airframe, gear and systems, at the OML volume centroid (estimate) | | Fuel | 4,500 kg | Full internal fuel (estimate) | | **Total** | **14,660 kg** | Close to the published \~32,300 lb max takeoff weight | Lower **Fuel Mass** to model the aircraft partway through the mission. ### Main wing twist The main wing is a **Twisted 2 Panel Wing** custom block. Twist is set at three spanwise stations, **Wing Root Twist**, **Wing Break Twist** and **Wing Tip Twist**, varies linearly between them and pivots about mid-chord. The baseline is 0, -2.412 and -3 deg. The script reads a negative value as washout (nose down). ### Area ruling The **Area Ruling** section cuts the assembled aircraft (`X59 OML`) with planes normal to X at evenly spaced stations from nose to tail and measures each section's area. Open **Area Ruling Table** to view or plot the curve. Raise **Area Ruling Station Count** for a smoother curve; 101 stations take about 12 seconds to rebuild. Use it to spot sudden changes in area along the aircraft, which add wave drag. ### Reference mesh The **Verification** section holds a reference X-59 surface mesh, placed over the model. Use it to check how far a design has moved from the baseline shape. ### From a terminal Any key you leave out keeps its baseline value. Lengths are in mm and angles in deg. ```bash theme={null} python x59_aero.py wing_span=10000 wing_tip_twist=-4 canard_x=10500 cg_x=18000 mass=13000 open_plot=0 ``` The fuselage keys (`fuse_top_x`, `fuse_top_z`, `fuse_side_x`, `fuse_side_y`, `fuse_bot_x`, `fuse_bot_z`) take comma-separated lists in mm. Left out, they default to the rails' control points. ## Evidence and limits * The notebook was prepared and checked in an internal nTop build (43139, with the Notebook API). This publication copy was not reopened in a public nTop 6.2 release. * With the 1.1 notebook, the script run on the exact command line the notebook builds gives cruise L/D 7.16, best L/D 7.21, neutral point 20,898 mm and static margin +30.0% MAC at Mach 1.41, 14,660 kg and CG 18,281 mm. Every block in the notebook, including the Area Ruling table, built without errors. * This is a quick, semi-empirical estimate (AeroSandbox `AeroBuildup`, including wave drag). Use it to rank designs. Expect absolute values to be off by 10–20%. * The fuselage follows points sampled along the notebook's Top, Side and Bottom Rails, as smooth rounded sections. The Fuselage Top/Bottom Rho values aren't passed. * The vertical tail, T-tail and engine duct are fixed in, or left out of, the script. Edits to them in nTop don't change the estimate. * Moments are untrimmed (no control-surface deflection). * The neutral point comes from a straight-line fit of Cm against CL over the sweep, from -1 to 7 deg angle of attack. * Main wing twist is applied at the root, panel break and tip, linear in between. Canard twist is still a single value: positive is read as washout, and the tip gets half of it. * Area Ruling uses flat cuts normal to X, not the Mach-angle cuts of a full supersonic area-rule analysis. * The masses are public-figure-based estimates, not X-59 data. ## License and credits The notebook and script are released under the MIT license; see [LICENSE](LICENSE). * This is an independent, approximate model inspired by the NASA/Lockheed Martin X-59 QueSST. It isn't affiliated with or endorsed by NASA or Lockheed Martin. * [AeroSandbox](https://github.com/peterdsharpe/AeroSandbox) (MIT) is a dependency, not bundled. *** ## Source [https://community.ntop.com/#/detail/x59-hackathon-starter](https://community.ntop.com/#/detail/x59-hackathon-starter) ## Download [Download x59-hackathon-starter.ntop](https://github.com/nTopology/Utilities-community/releases/download/x59-hackathon-starter-v1.1.0/x59-hackathon-starter.ntop) # Exporting an nTop File for Multi-Material Printing Source: https://docs.ntop.com/community/packages/natalie-scala/multi-material-printing-export AI context for Exporting an nTop File for Multi-Material Printing. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/multi-material-printing-export). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Export multi-body nTop designs to 3MF, STEP, or STL for multi-material FDM printing, with a PLA nosecone + carbon fiber implant as a worked example. ## Package Details | Field | Value | | - | - | | **ID** | `multi-material-printing-export` | | **Type** | Bundle | | **Author** | natalie-scala | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Additive Manufacturing | | **Complexity** | Intermediate | | **Tags** | `multi-material`, `3mf`, `fdm`, `slicer`, `bambu`, `mesh`, `boolean`, `export` | | **License** | MIT | | **Verified** | No | *** Export multi-body nTop designs for multi-material FDM printing. The included nTop file of a PLA aero nosecone with a PLA-CF motor mount implant serves as a worked example throughout. ## Step 1: Define and Separate Your Material Zones Before exporting, make sure your design is explicitly split into distinct bodies within nTop. Each material or color zone must be its own independent **CAD Body** or **Mesh**. **Note:** Avoid overlapping geometry. Use **Boolean Subtract** or **Boolean Intersect** to ensure that where Material A ends, Material B begins with a clean interface. ![Multiple implicit bodies in nTop](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/natalie-scala/images/image5.png) Start with your multiple implicit bodies positioned and dimensioned as desired. ![nTop node graph with multiple material bodies](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/natalie-scala/images/image3.png) Note that the matrix body "Fus Segment w Wire Hole" is meshed with a cutout of the "CF Implant" through a Boolean Subtract to ensure a clean interface. Mesh each object and **Merge Meshes** to export to your slicer. Merging within nTop protects the relative positions of bodies by preventing the slicer from snapping objects back to the print plate — this allows objects to remain suspended within your structure. You can then split them by part in the slicer to specify varying filament types. \> Do not export the bodies as one single mesh. Your slicer will read it as one body and you will be unable to split the file by part. ## Step 2: Choosing the Right Export Format * **3MF (Highly Recommended)** * **Why:** 3MF files natively support multi-body assemblies, color data, and relative spatial positioning. * **How:** Use the **Export Mesh** block and select `.3mf`. Most modern slicers (Bambu Studio, Cura) will instantly recognize it as a multi-material object. * **STEP (For CAD/NURBS workflows)** * **Why:** Best if sending to a high-end toolpath generator or if you need precise analytical geometry. * **How:** Convert your implicit bodies to CAD faces using **CAD Body from Implicit** and use the **Export CAD** block. * **Separate STLs (The Legacy Way)** * **Why:** Use this only if your slicer doesn't support 3MF. * **How:** Export each material zone as an individual `.stl` file. ## Step 3: Slicer Import Best Practices The most important part of multi-material printing is maintaining the shared coordinate system so parts align automatically. The easiest method is to export a 3MF of merged meshes. Example shown in Bambu Studio: ![Import part into slicer](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/natalie-scala/images/image4.png) Import your part into your slicer. ![Split to Parts in slicer](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/natalie-scala/images/image1.png) Right-click your project in the "Objects" tab, go to "Split", and select "To Parts". ![Assign filament type per object](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/natalie-scala/images/image2.png) Select the filament type for each object by clicking the numbered/colored box next to the object name. **Alternative methods:** * **If using 3MF:** Drag and drop the file into your slicer. If prompted to "Load as a single part with multiple bodies," click **Yes**. Right-click each sub-body to assign it to a specific extruder/filament. * **If using STLs:** Select *all* exported STL files at once and drag them into the slicer together. Say **Yes** when asked to treat them as a single object with multiple parts — otherwise the slicer drops them all onto the build plate separately, destroying alignment. ## Final Notes **Mesh Density:** Multi-material boundaries need to line up exactly. If mesh resolution is too low on one body, you may get tiny gaps or overlaps at the interface. Keep **edge length** consistent across all bodies during the meshing phase. **Voids:** If one material is entirely embedded inside another, make sure you have physically hollowed out the matrix material. Slicers don't always handle overlapping volumes well. **Elevation:** If one object is embedded within another and intended to print at some elevation above the print bed, **Merge Meshes** in nTop and export the merged 3MF. You can then split the objects in the slicer to specify filament type. **Mesh Tolerancing:** Set your mesh tolerance to about a third of your printer's smallest feature size. If you're not happy with how the mesh represents your smallest features, increase your tolerance or input a **Min. Feature Size**. Find a balance between accuracy and file size — cutting tolerance in half quadruples the triangle count, which can create massive files that freeze your slicer. 3D printers also have a physical resolution limit, so setting tolerance smaller than the machine's capabilities wastes computing power. ## Example Files | File | Description | | - | - | | `Final Nose Cone w Implant Test Print.ntop` | PLA nosecone with PLA-CF motor mount implant — multi-material workflow example | | `Final Nose Cone w Implant Test Print.3mf` | Exported 3MF ready for slicing | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/multi-material-printing-export](https://community.ntop.com/#/detail/multi-material-printing-export) ## Download [Download multi-material-printing-export.ntop](https://github.com/nTopology/Utilities-community/releases/download/multi-material-printing-export-v0.1.0/multi-material-printing-export.ntop) # Serpent Spring Clip Source: https://docs.ntop.com/community/packages/natalie-scala/spring-clip AI context for Serpent Spring Clip. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/spring-clip). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Customizable serpentine spring clip with a toggle and retractable tongue for snap-fit latching between two objects. ## Package Details | Field | Value | | - | - | | **ID** | `spring-clip` | | **Type** | Block | | **Author** | natalie-scala | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Mechanical | | **Complexity** | Advanced | | **Tags** | `clip`, `latch`, `snap-fit`, `spring`, `serpentine`, `toggle`, `fastener` | | **License** | MIT | | **Verified** | No | *** This block creates a customizable serpentine spring clip with a toggle and retractable tongue, driven by inputs like Bend Radius, Unit Count, Spring Thickness, Spring Width, and the Tongue and Toggle dimensions. The block produces a single implicit body of the clip. It can be permanently attached to or integrated into a larger Object A (e.g. an access panel) by its frame, while its tongue temporarily snaps into a recess in Object B (e.g. a fuselage) to lock the assembly in place. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/natalie-scala/spring-clip/`. ## Usage 1. Open the provided `.ntop` file in nTop 4.12+. 2. Set the spring geometry inputs (Bend Radius, Unit Count, Spring Thickness, Spring Width) to size the clip's compressibility and length. 3. Set the Tongue and Toggle dimensions to fit the alignment hole in Object B and for ergonomic actuation. 4. Attach the resulting body's frame to Object A; the tongue snaps into a recess in Object B to lock the assembly. ## Components | Component | Description | | - | - | | Spring | The serpentine (zig-zag) portion that compresses for clip actuation | | Tongue | The extension at the end of the spring that interfaces with the alignment hole in Object B | | Toggle | The protruding tab used to manually compress the spring and retract the tongue | | Frame | The outer border that integrates the clip into Object A | ## Inputs & outputs | Name | Notes | | - | - | | `Bend Radius` | Radius of the spring arcs — impacts spring length and compressibility. | | `Unit Count` | Number of complete snaking units in the spring (one direction plus its return) — impacts spring length and compressibility. | | `Spring Thickness` | Diameter of the serpentine spring — impacts compressibility. | | `Spring Width` | Length of the straightaways of the spring — impacts dimensions and compressibility. | | `Tongue Length` | Total length of the tongue geometry. Not accurate to how much it actually protrudes from the frame — check the "True Tongue Protrusion" variable at the bottom of the custom block for that. | | `Tongue Width` / `Tongue Thickness` | Dimension and strength considerations for latching engagement. | | `Toggle Length` / `Toggle Width` / `Toggle Height` | Sizing for user ergonomics. | | Output | Main result — a single implicit body of the clip. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/spring-clip](https://community.ntop.com/#/detail/spring-clip) ## Download [Download spring-clip.ntop](https://github.com/nTopology/Utilities-community/releases/download/spring-clip-v0.1.0/spring-clip.ntop) # 2 Fluid Heat Exchanger Source: https://docs.ntop.com/community/packages/ntop/2-fluid-hex AI context for 2 Fluid Heat Exchanger. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/2-fluid-hex). ## Summary This generation of high-efficiency, dual-fluid heat exchangers is driven by Gyroid TPMS to maximize internal surface area and optimize thermal performance. ## Package Details | Field | Value | | - | - | | **ID** | `2-fluid-hex` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44 | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `lattice`, `tpms`, `am` | | **License** | MIT | | **Verified** | Yes | *** This generation of high-efficiency, dual-fluid heat exchangers is driven by Gyroid TPMS to maximize internal surface area and optimize thermal performance. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/2-fluid-hex/`. ## Usage 1. Open the provided `.ntop` file in nTop 5.44. ## License MIT. *** ## Source [https://community.ntop.com/#/detail/2-fluid-hex](https://community.ntop.com/#/detail/2-fluid-hex) ## Download [Download 2-fluid-hex.ntop](https://github.com/nTopology/Utilities-community/releases/download/2-fluid-hex-v1.0.0/2-fluid-hex.ntop) # Design of 3D printable airless tyres using NTopology Source: https://docs.ntop.com/community/packages/ntop/3d-printed-airless-tyres AI context for Design of 3D printable airless tyres using NTopology. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/3d-printed-airless-tyres). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Jafferson & Sharma design volume lattice, TPMS, and hybrid TPMS non-pneumatic tyre structures in nTopology, comparing weight and material cost for 3D-printed TPU tyres. ## Package Details | Field | Value | | - | - | | **ID** | `3d-printed-airless-tyres` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `lattice`, `tpms`, `automotive` | | **License** | Proprietary | | **Verified** | No | *** Independent research paper referencing nTopology — this entry links out to the original publication. By J.M. Jafferson & H. Sharma, *Materials Today: Proceedings*, 2021. [Read it on ScienceDirect](https://www.sciencedirect.com/science/article/abs/pii/S2214785321011184) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/3d-printed-airless-tyres](https://community.ntop.com/#/detail/3d-printed-airless-tyres) ## Download [Download 3d-printed-airless-tyres.ntop](https://github.com/nTopology/Utilities-community/releases/download/3d-printed-airless-tyres-v1.0.0/3d-printed-airless-tyres.ntop) # Aerojet Rocketdyne's 3D-printed quad thruster enables low-cost space exploration Source: https://docs.ntop.com/community/packages/ntop/aerojet-rocketdyne-quad-thruster AI context for Aerojet Rocketdyne's 3D-printed quad thruster enables low-cost space exploration. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/aerojet-rocketdyne-quad-thruster). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Aerojet Rocketdyne's 3D-printed quad thruster enables low-cost space exploration ## Package Details | Field | Value | | - | - | | **ID** | `aerojet-rocketdyne-quad-thruster` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `case-study`, `aerospace`, `additive-manufacturing` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/aerojet-rocketdyne-low-cost-quad-thruster/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/aerojet-rocketdyne-quad-thruster](https://community.ntop.com/#/detail/aerojet-rocketdyne-quad-thruster) ## Download [Download aerojet-rocketdyne-quad-thruster.ntop](https://github.com/nTopology/Utilities-community/releases/download/aerojet-rocketdyne-quad-thruster-v1.0.0/aerojet-rocketdyne-quad-thruster.ntop) # AI-Optimized Lattice Structures for Biomechanics Scaffold Design Source: https://docs.ntop.com/community/packages/ntop/ai-optimized-lattice-biomechanics-scaffold AI context for AI-Optimized Lattice Structures for Biomechanics Scaffold Design. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/ai-optimized-lattice-biomechanics-scaffold). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary AI-Optimized Lattice Structures for Biomechanics Scaffold Design ## Package Details | Field | Value | | - | - | | **ID** | `ai-optimized-lattice-biomechanics-scaffold` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `ai`, `lattice`, `biomechanics` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Research paper hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.mdpi.com/2313-7673/10/2/88) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/ai-optimized-lattice-biomechanics-scaffold](https://community.ntop.com/#/detail/ai-optimized-lattice-biomechanics-scaffold) ## Download [Download ai-optimized-lattice-biomechanics-scaffold.ntop](https://github.com/nTopology/Utilities-community/releases/download/ai-optimized-lattice-biomechanics-scaffold-v1.0.0/ai-optimized-lattice-biomechanics-scaffold.ntop) # Air Force designs a 50% lighter CubeSat bus assembly with nTop Source: https://docs.ntop.com/community/packages/ntop/air-force-cubesat-architected-materials AI context for Air Force designs a 50% lighter CubeSat bus assembly with nTop. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/air-force-cubesat-architected-materials). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Air Force designs a 50% lighter CubeSat bus assembly with nTop ## Package Details | Field | Value | | - | - | | **ID** | `air-force-cubesat-architected-materials` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `case-study`, `aerospace`, `architected-materials` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/air-force-optimizes-cubesat-using-architected-materials/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/air-force-cubesat-architected-materials](https://community.ntop.com/#/detail/air-force-cubesat-architected-materials) ## Download [Download air-force-cubesat-architected-materials.ntop](https://github.com/nTopology/Utilities-community/releases/download/air-force-cubesat-architected-materials-v1.0.0/air-force-cubesat-architected-materials.ntop) # Area of 3 Points Source: https://docs.ntop.com/community/packages/ntop/area-of-3-points AI context for Area of 3 Points. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/area-of-3-points). ## Summary Calculates the area of the triangle created from 3 points in coordinate space. ## Package Details | Field | Value | | - | - | | **ID** | `area-of-3-points` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `area`, `triangle`, `geometry`, `coordinate`, `measurement` | | **License** | MIT | | **Verified** | Yes | *** Calculates the area of the triangle created from 3 points in coordinate space. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/area-of-3-points/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point 1` | Point | First point of the triangle. | | `Point 2` | Point | Second point of the triangle. | | `Point 3` | Point | Third point of the triangle. | ## Outputs | Name | Type | Description | | - | - | - | | `Area of Triangle` | Scalar | Computes the area of a triangle | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/area-of-3-points](https://community.ntop.com/#/detail/area-of-3-points) ## Download [Download area-of-3-points.ntop](https://github.com/nTopology/Utilities-community/releases/download/area-of-3-points-v1.0.0/area-of-3-points.ntop) # Area Ruling Hello World Source: https://docs.ntop.com/community/packages/ntop/area-ruling-hello-world AI context for Area Ruling Hello World. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/area-ruling-hello-world). ## Summary Demo showing how to set up an area ruling optimization. Optimizes 8 parameters so the actual area ruling curve matches a Sears-Haack target curve, quantified using RMSE. ## Package Details | Field | Value | | - | - | | **ID** | `area-ruling-hello-world` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `area-ruling`, `optimization`, `aerospace`, `rmse`, `sears-haack`, `parametric` | | **License** | MIT | | **Verified** | Yes | *** Area ruling demo. Goal: Optimize the 8 parameters so the red curve (actual area ruling) matches the target curve (green curve). Difference is quantified with the RMSE between the values. Other quantifications could be used instead if they work better. [Sears-Haack Body](https://en.wikipedia.org/wiki/Sears%E2%80%93Haack_body) *Antonsen, June 2025* ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/area-ruling-hello-world/`. ## Inputs All parameters are dimensionless geometric scalars in the range 0–1. | Name | Type | Description | | - | - | - | | `Height Param 1` | Scalar | Controls the height of the area ruling profile at the first control point. Range: 0–1. | | `Height Param 2` | Scalar | Controls the height of the area ruling profile at the second control point. Range: 0–1. | | `Height Param 3` | Scalar | Controls the height of the area ruling profile at the third control point. Range: 0–1. | | `Height Param 4` | Scalar | Controls the height of the area ruling profile at the fourth control point. Range: 0–1. | | `Width Param 1` | Scalar | Controls the width of the area ruling profile at the first control point. Range: 0–1. | | `Width Param 2` | Scalar | Controls the width of the area ruling profile at the second control point. Range: 0–1. | | `Width Param 3` | Scalar | Controls the width of the area ruling profile at the third control point. Range: 0–1. | | `Width Param 4` | Scalar | Controls the width of the area ruling profile at the fourth control point. Range: 0–1. | ## Outputs | Name | Type | Description | | - | - | - | | `RMSE` | Scalar | Root Mean Square Error between the actual area ruling curve and the target Sears-Haack curve. Lower values indicate a closer match. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/area-ruling-hello-world](https://community.ntop.com/#/detail/area-ruling-hello-world) ## Download [Download area-ruling-hello-world.ntop](https://github.com/nTopology/Utilities-community/releases/download/area-ruling-hello-world-v1.0.0/area-ruling-hello-world.ntop) # Axis through CAD Cylinder or Hole Source: https://docs.ntop.com/community/packages/ntop/axis-through-cad-cylinder-or-hole AI context for Axis through CAD Cylinder or Hole. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/axis-through-cad-cylinder-or-hole). ## Summary This CB will create an axis through a CAD cylinder or hole. You need to define the edge you want the axis to go through and a face that is normal to that axis. ## Package Details | Field | Value | | - | - | | **ID** | `axis-through-cad-cylinder-or-hole` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `axis`, `cad`, `cylinder`, `hole`, `edge`, `normal` | | **License** | MIT | | **Verified** | Yes | *** This CB will create an axis through a CAD cylinder or hole. You need to define the edge you want the axis to go through and a face that is normal to that axis. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/axis-through-cad-cylinder-or-hole/`. ## Inputs | Name | Type | Description | | - | - | - | | `CAD Edges` | list\ | The CAD Edge(s) that define the hole. | | `CAD Face` | brep\_face | A CAD face the is Normal to the hole you wish to put the Axis through - typically the face adjacent to your hole. | ## Outputs | Name | Type | Description | | - | - | - | | `Axis` | axis | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/axis-through-cad-cylinder-or-hole](https://community.ntop.com/#/detail/axis-through-cad-cylinder-or-hole) ## Download [Download axis-through-cad-cylinder-or-hole.ntop](https://github.com/nTopology/Utilities-community/releases/download/axis-through-cad-cylinder-or-hole-v1.0.0/axis-through-cad-cylinder-or-hole.ntop) # How blueflite reduced fuselage mass 25% in 4 hours instead of 4 weeks Source: https://docs.ntop.com/community/packages/ntop/blueflite-fuselage-mass-reduction AI context for How blueflite reduced fuselage mass 25% in 4 hours instead of 4 weeks. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/blueflite-fuselage-mass-reduction). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary How blueflite reduced fuselage mass 25% in 4 hours instead of 4 weeks ## Package Details | Field | Value | | - | - | | **ID** | `blueflite-fuselage-mass-reduction` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `case-study`, `aerospace`, `lightweighting` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/4-hours-of-design-time-instead-of-4-weeks-how-blueflite-reduced-fuselage-mass-25-in-a-fraction-of-the-time-with-ntop/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/blueflite-fuselage-mass-reduction](https://community.ntop.com/#/detail/blueflite-fuselage-mass-reduction) ## Download [Download blueflite-fuselage-mass-reduction.ntop](https://github.com/nTopology/Utilities-community/releases/download/blueflite-fuselage-mass-reduction-v1.0.0/blueflite-fuselage-mass-reduction.ntop) # Boolean Intersect [Listless] Source: https://docs.ntop.com/community/packages/ntop/boolean-intersect-listless AI context for Boolean Intersect [Listless]. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/boolean-intersect-listless). ## Summary Create an Implicit Body where the input bodies spatially overlap. Functions in the same way as a Boolean Intersect block, but does not uses lists and only accepts 2 inputs. ## Package Details | Field | Value | | - | - | | **ID** | `boolean-intersect-listless` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `boolean`, `intersect`, `implicit`, `overlap`, `two-input` | | **License** | MIT | | **Verified** | Yes | *** Create an Implicit Body where the input bodies spatially overlap. Functions in the same way as a Boolean Intersect block, but does not uses lists and only accepts 2 inputs. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/boolean-intersect-listless/`. ## Inputs | Name | Type | Description | | - | - | - | | `Object A` | Implicit Body | First implicit body to intersect. | | `Object B` | Implicit Body | Second implicit body to intersect. | ## Outputs | Name | Type | Description | | - | - | - | | `Intersected Geometry` | Implicit Body | Performs the Boolean Intersect between the two bodies | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/boolean-intersect-listless](https://community.ntop.com/#/detail/boolean-intersect-listless) ## Download [Download boolean-intersect-listless.ntop](https://github.com/nTopology/Utilities-community/releases/download/boolean-intersect-listless-v1.0.0/boolean-intersect-listless.ntop) # Bounding Box for Points Source: https://docs.ntop.com/community/packages/ntop/bounding-box-for-points AI context for Bounding Box for Points. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/bounding-box-for-points). ## Summary This custom block creates a Bounding Box for a set of points ## Package Details | Field | Value | | - | - | | **ID** | `bounding-box-for-points` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `bounding-box`, `points`, `extents`, `geometry`, `spatial` | | **License** | MIT | | **Verified** | Yes | *** This custom block creates a Bounding Box for a set of points ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/bounding-box-for-points/`. ## Inputs | Name | Type | Description | | - | - | - | | `Points` | Point List | The Points you want to create a Bounding Box for | ## Outputs | Name | Type | Description | | - | - | - | | `Bounding Box_0` | bounding\_box | Creates a Bounding Box for a set of points based on the maximum and minimum coordinates of the point list | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/bounding-box-for-points](https://community.ntop.com/#/detail/bounding-box-for-points) ## Download [Download bounding-box-for-points.ntop](https://github.com/nTopology/Utilities-community/releases/download/bounding-box-for-points-v1.0.0/bounding-box-for-points.ntop) # Cardinal Face Points Source: https://docs.ntop.com/community/packages/ntop/cardinal-face-points AI context for Cardinal Face Points. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cardinal-face-points). ## Summary This CB will return the center point on the 'face' of the object bounding box. ## Package Details | Field | Value | | - | - | | **ID** | `cardinal-face-points` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `cardinal`, `face`, `center-point`, `bounding-box`, `geometry` | | **License** | MIT | | **Verified** | Yes | *** This CB will return the center point on the 'face' of the object bounding box. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/cardinal-face-points/`. ## Inputs | Name | Type | Description | | - | - | - | | `Input body` | Implicit Body | Implicit body to get max or min point from | | `Index` | Integer | 0 - Bottom | | 1 - Top | | | | 2 - Back | | | | 3 - Front | | | | 4 - Left | | | | 5 - Right | | | | `Tolerance` | Scalar | Sampling tolerance to refine the bounding box. | ## Outputs | Name | Type | Description | | - | - | - | | `OutputObject` | Point | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/cardinal-face-points](https://community.ntop.com/#/detail/cardinal-face-points) ## Download [Download cardinal-face-points.ntop](https://github.com/nTopology/Utilities-community/releases/download/cardinal-face-points-v1.0.0/cardinal-face-points.ntop) # Generating new cellular structures for additive manufacturing through an uncond… Source: https://docs.ntop.com/community/packages/ntop/cellular-structures-latent-diffusion-model AI context for Generating new cellular structures for additive manufacturing through an uncond…. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cellular-structures-latent-diffusion-model). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Generating new cellular structures for additive manufacturing through an unconditional 3D latent diffusion model ## Package Details | Field | Value | | - | - | | **ID** | `cellular-structures-latent-diffusion-model` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Additive Manufacturing | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `ai`, `generative-design`, `cellular-structures` | | **License** | Proprietary | | **Verified** | No | *** # Generating new cellular structures for additive manufacturing through an unconditional 3D latent diffusion model ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Research paper hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.sciencedirect.com/science/article/pii/S2214860425000764) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/cellular-structures-latent-diffusion-model](https://community.ntop.com/#/detail/cellular-structures-latent-diffusion-model) ## Download [Download cellular-structures-latent-diffusion-model.ntop](https://github.com/nTopology/Utilities-community/releases/download/cellular-structures-latent-diffusion-model-v1.0.0/cellular-structures-latent-diffusion-model.ntop) # A new approach for designing cellular structures via volumetric scanner Source: https://docs.ntop.com/community/packages/ntop/cellular-structures-volumetric-scanner AI context for A new approach for designing cellular structures via volumetric scanner. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cellular-structures-volumetric-scanner). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Moj, Robak, Owsiński, Kurek & Żak use nTopology's topological cell gradation to design, manufacture, and analyze cellular structures for DMLS/SLM and SLS additive manufacturing. ## Package Details | Field | Value | | - | - | | **ID** | `cellular-structures-volumetric-scanner` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Additive Manufacturing | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `cellular-structures`, `lattice`, `manufacturing` | | **License** | Proprietary | | **Verified** | No | *** # A new approach for designing cellular structures: design process, manufacturing and structure analysis using a volumetric scanner Independent research paper referencing nTopology — this entry links out to the original publication. By K. Moj, G. Robak, R. Owsiński, A. Kurek & K. Żak, *Journal of Mechanical Science and Technology*, 2023. [Read it on Springer](https://link.springer.com/article/10.1007/s12206-022-2107-1) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/cellular-structures-volumetric-scanner](https://community.ntop.com/#/detail/cellular-structures-volumetric-scanner) ## Download [Download cellular-structures-volumetric-scanner.ntop](https://github.com/nTopology/Utilities-community/releases/download/cellular-structures-volumetric-scanner-v1.0.0/cellular-structures-volumetric-scanner.ntop) # Center Plane of Mesh Face Source: https://docs.ntop.com/community/packages/ntop/center-plane-of-mesh-face AI context for Center Plane of Mesh Face. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/center-plane-of-mesh-face). ## Summary Given a face, this custom block will place four random points on the face and then create a plane that is normal to the first three points and is centered between all four points. For best results choos either a small portion of a mesh face ## Package Details | Field | Value | | - | - | | **ID** | `center-plane-of-mesh-face` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `center`, `plane`, `mesh`, `face`, `normal`, `sampling` | | **License** | MIT | | **Verified** | Yes | *** Given a face, this custom block will place four random points on the face and then create a plane that is normal to the first three points and is centered between all four points. For best results choos either a small portion of a mesh face or a flat face. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/center-plane-of-mesh-face/`. ## Inputs | Name | Type | Description | | - | - | - | | `Mesh Face` | Mesh | The mesh face to sample points from and derive the center plane. For best results use a small or flat face. | | `Flip Normal` | bool | Reverses the plane normal direction. Use if the output plane is pointing away from the intended side. | ## Outputs | Name | Type | Description | | - | - | - | | `Center Plane` | plane | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/center-plane-of-mesh-face](https://community.ntop.com/#/detail/center-plane-of-mesh-face) ## Download [Download center-plane-of-mesh-face.ntop](https://github.com/nTopology/Utilities-community/releases/download/center-plane-of-mesh-face-v1.0.0/center-plane-of-mesh-face.ntop) # Center Point of CAD Cylinder or Hole Source: https://docs.ntop.com/community/packages/ntop/center-point-of-cad-cylinder-or-hole AI context for Center Point of CAD Cylinder or Hole. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/center-point-of-cad-cylinder-or-hole). ## Summary The CB will give you the Center Point of a CAD cylinder or hole. ## Package Details | Field | Value | | - | - | | **ID** | `center-point-of-cad-cylinder-or-hole` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `center`, `cad`, `cylinder`, `hole`, `geometry`, `coordinate` | | **License** | MIT | | **Verified** | Yes | *** The CB will give you the Center Point of a CAD cylinder or hole. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/center-point-of-cad-cylinder-or-hole/`. ## Inputs | Name | Type | Description | | - | - | - | | `CAD Edge(s)` | list\ | CAD Edges you wish to get the center point of. | ## Outputs | Name | Type | Description | | - | - | - | | `Centroid` | Point | Extract the centroid of the bounding box | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/center-point-of-cad-cylinder-or-hole](https://community.ntop.com/#/detail/center-point-of-cad-cylinder-or-hole) ## Download [Download center-point-of-cad-cylinder-or-hole.ntop](https://github.com/nTopology/Utilities-community/releases/download/center-point-of-cad-cylinder-or-hole-v1.0.0/center-point-of-cad-cylinder-or-hole.ntop) # Centroid of Points Source: https://docs.ntop.com/community/packages/ntop/centroid-of-points AI context for Centroid of Points. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/centroid-of-points). ## Summary This custom blocks creates the centroidal point of a list of points ## Package Details | Field | Value | | - | - | | **ID** | `centroid-of-points` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `centroid`, `points`, `average`, `geometry`, `list` | | **License** | MIT | | **Verified** | Yes | *** This custom blocks creates the centroidal point of a list of points ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/centroid-of-points/`. ## Inputs | Name | Type | Description | | - | - | - | | `Points` | Point List | Points for which the centroid is to be calculated | ## Outputs | Name | Type | Description | | - | - | - | | `Point_0` | Point | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/centroid-of-points](https://community.ntop.com/#/detail/centroid-of-points) ## Download [Download centroid-of-points.ntop](https://github.com/nTopology/Utilities-community/releases/download/centroid-of-points-v1.0.0/centroid-of-points.ntop) # Checkerboard Texture Source: https://docs.ntop.com/community/packages/ntop/checkerboard-texture AI context for Checkerboard Texture. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/checkerboard-texture). ## Summary Returns an infinite checkerboard field along one axis with values of 0 and 1. ## Package Details | Field | Value | | - | - | | **ID** | `checkerboard-texture` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `checkerboard`, `texture`, `returns`, `infinite`, `field`, `along` | | **License** | MIT | | **Verified** | Yes | *** Returns an infinite checkerboard field along one axis with values of 0 and 1. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/checkerboard-texture/`. ## Inputs | Name | Type | Description | | - | - | - | | `Cell Size` | Scalar Field | Size of a single period of the checkerboard (always define units) | | `Location` | Point | Location of the starting point of a unit | | `Direction` | Vector | Normal direction of the patterned field | ## Outputs | Name | Type | Description | | - | - | - | | `Oriented Checkerboard` | Scalar Field | Orient to desired location and axis | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/checkerboard-texture](https://community.ntop.com/#/detail/checkerboard-texture) ## Download [Download checkerboard-texture.ntop](https://github.com/nTopology/Utilities-community/releases/download/checkerboard-texture-v1.0.0/checkerboard-texture.ntop) # Cobra Aero reduced air-cooled cylinder weight by 50% with nTop Source: https://docs.ntop.com/community/packages/ntop/cobra-aero-drone-engine-cylinder AI context for Cobra Aero reduced air-cooled cylinder weight by 50% with nTop. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cobra-aero-drone-engine-cylinder). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Cobra Aero reduced air-cooled cylinder weight by 50% with nTop ## Package Details | Field | Value | | - | - | | **ID** | `cobra-aero-drone-engine-cylinder` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `case-study`, `thermal`, `drone` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/cobra-aero-multiphysics-simulation-drone-engine/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/cobra-aero-drone-engine-cylinder](https://community.ntop.com/#/detail/cobra-aero-drone-engine-cylinder) ## Download [Download cobra-aero-drone-engine-cylinder.ntop](https://github.com/nTopology/Utilities-community/releases/download/cobra-aero-drone-engine-cylinder-v1.0.0/cobra-aero-drone-engine-cylinder.ntop) # Cobra Golf designed their LIMIT3D irons 50% faster with nTop Source: https://docs.ntop.com/community/packages/ntop/cobra-golf-limit3d-irons AI context for Cobra Golf designed their LIMIT3D irons 50% faster with nTop. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cobra-golf-limit3d-irons). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Cobra Golf designed their LIMIT3D irons 50% faster with nTop ## Package Details | Field | Value | | - | - | | **ID** | `cobra-golf-limit3d-irons` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `case-study`, `lattice`, `sporting-goods` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/cobra-golf-designed-their-limit3d-irons-50-faster-with-ntop/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/cobra-golf-limit3d-irons](https://community.ntop.com/#/detail/cobra-golf-limit3d-irons) ## Download [Download cobra-golf-limit3d-irons.ntop](https://github.com/nTopology/Utilities-community/releases/download/cobra-golf-limit3d-irons-v1.0.0/cobra-golf-limit3d-irons.ntop) # Conformal Spiral to Body Source: https://docs.ntop.com/community/packages/ntop/conformal-spiral-to-body AI context for Conformal Spiral to Body. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/conformal-spiral-to-body). ## Summary This custom block creates a spiral that is conformal to an implicit body. ## Package Details | Field | Value | | - | - | | **ID** | `conformal-spiral-to-body` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `conformal`, `spiral`, `implicit`, `surface-mapping`, `curve` | | **License** | MIT | | **Verified** | Yes | *** This custom block creates a spiral that is conformal to an implicit body. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/conformal-spiral-to-body/`. ## Inputs | Name | Type | Description | | - | - | - | | `Implicit Body` | Implicit Body | Body that the spiral will conform to | | `Starting Point` | Point | Starting point of the spiral (recommended: bottom center point of the implicit body) | | `Spiral Direction` | Vector | The normal direction the spiral will rotate around | | `Number of Rotations` | Scalar | The number of rotations in the spiral | | `Tolerance` | Scalar | Used in operations to create the conformal curve. Decrease if the curve is not conformal; increase if the block is slow to compute | | `Increment Size` | Scalar | Controls the number of points used to generate the spiral. A smaller value produces a better-conforming spline | ## Outputs | Name | Type | Description | | - | - | - | | `Final Spiral` | spline | Orients the Spline to ensure it wraps around the implicit body | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/conformal-spiral-to-body](https://community.ntop.com/#/detail/conformal-spiral-to-body) ## Download [Download conformal-spiral-to-body.ntop](https://github.com/nTopology/Utilities-community/releases/download/conformal-spiral-to-body-v1.0.0/conformal-spiral-to-body.ntop) # Designing a cooler camera housing Source: https://docs.ntop.com/community/packages/ntop/cooler-camera-housing-design AI context for Designing a cooler camera housing. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cooler-camera-housing-design). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Designing a cooler camera housing ## Package Details | Field | Value | | - | - | | **ID** | `cooler-camera-housing-design` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `case-study`, `thermal`, `enclosure` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/designing-a-cooler-camera-housing/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/cooler-camera-housing-design](https://community.ntop.com/#/detail/cooler-camera-housing-design) ## Download [Download cooler-camera-housing-design.ntop](https://github.com/nTopology/Utilities-community/releases/download/cooler-camera-housing-design-v1.0.0/cooler-camera-housing-design.ntop) # Cross Sectional Area Max-Min Source: https://docs.ntop.com/community/packages/ntop/cross-sectional-area-max-min AI context for Cross Sectional Area Max-Min. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/cross-sectional-area-max-min). ## Summary This block returns the largest and smallest Cross-Sectional area of an Implicit Body, as well as their Z locations in the form of a list. Max is before Min in the lists. ## Package Details | Field | Value | | - | - | | **ID** | `cross-sectional-area-max-min` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `cross-section`, `area`, `maximum`, `minimum`, `implicit`, `measurement` | | **License** | MIT | | **Verified** | Yes | *** This block returns the largest and smallest cross-sectional area of an implicit body, as well as their Z locations, as a two-item list. Index 0 is the max area slice; index 1 is the min area slice. To inspect the area value of a slice, drag and drop the cross-sectional area chip from that slice in the nTop graph. ## When to use this In additive manufacturing, cross-sectional area directly affects print time, material consumption, and thermal behavior at each layer. Use this block to: * **Predict thermal hot spots** — sudden jumps between max and min area indicate stress concentrations and residual heat buildup during printing * **Validate build orientation** — compare max cross-sectional area across different orientations to find the orientation with the lowest peak area ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/cross-sectional-area-max-min/`. ## Inputs | Name | Type | Description | | - | - | - | | `Implicit Body` | Implicit Body | The implicit body to evaluate | | `Slice Layer Height` | Scalar | The layer height at which the body is sliced to compute cross sections | | `Feature Size` | Scalar | The feature size of the slices | | `Include Negative Z` | Bool | Enable if the body extends into negative Z space to ensure the entire body is sliced | | `Frame` | Frame | Frame to redefine the coordinate system if needed | ## Outputs | Name | Type | Description | | - | - | - | | `Combined Lists` | List\<Slice\> | Two-item list of slices — index 0 is the max area slice, index 1 is the min area slice. Drag and drop the cross-sectional area chip from each slice to read its area value | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/cross-sectional-area-max-min](https://community.ntop.com/#/detail/cross-sectional-area-max-min) ## Download [Download cross-sectional-area-max-min.ntop](https://github.com/nTopology/Utilities-community/releases/download/cross-sectional-area-max-min-v1.0.0/cross-sectional-area-max-min.ntop) # Displacement Distorted Implicit Body Source: https://docs.ntop.com/community/packages/ntop/displacement-distorted-implicit-body AI context for Displacement Distorted Implicit Body. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/displacement-distorted-implicit-body). ## Summary This blocks takes a Displacement Vector Point Map and turns it into a distorted body through field remapping. This block is great for visualizing what a deformed part will look like after Static Structural Analysis in nTop or from a .CSV fi ## Package Details | Field | Value | | - | - | | **ID** | `displacement-distorted-implicit-body` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Simulation | | **Complexity** | Beginner | | **Tags** | `displacement`, `distortion`, `implicit`, `field-remapping`, `structural-analysis`, `deformation` | | **License** | MIT | | **Verified** | Yes | *** This blocks takes a Displacement Vector Point Map and turns it into a distorted body through field remapping. This block is great for visualizing what a deformed part will look like after Static Structural Analysis in nTop or from a .CSV file from external software. Because there is a decent ammount of smoothening, this block can take a bit to run. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/displacement-distorted-implicit-body/`. ## Inputs | Name | Type | Description | | - | - | - | | `Displacement Point Map` | vector\_point\_map | Displacement Vector Point Map | | `Implicit Body` | Implicit Body | Oirignal Implicit Body | | `Interpolation` | point\_cloud\_interpolation\_v110\_enum | Interpolation Type for Point Map to Field | | `Grid Size` | Scalar | Grid Size used for Smoothen Field | | `Smooth Iterations` | Integer | Amount of Smooth Iterations for Smoothen Field | | `Smooth Interpolation` | interpolation\_enum | Interpolation Type for Smoothen Field | | `X Bounds Scale` | Scalar | Factor to scale the original Bounding Box by in X. The Bounding Box limits the amount of displacement allowed. | | `Y Bounds Scale` | Scalar | Factor to scale the original Bounding Box by in Y. The Bounding Box limits the amount of displacement allowed. | | `Z Bounds Scale` | Scalar | Factor to scale the original Bounding Box by in Z. The Bounding Box limits the amount of displacement allowed. | ## Outputs | Name | Type | Description | | - | - | - | | `Compensated Body` | Implicit Body | Remap the original Implicit Body by using the X,Y, and Z Displacement Fields | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/displacement-distorted-implicit-body](https://community.ntop.com/#/detail/displacement-distorted-implicit-body) ## Download [Download displacement-distorted-implicit-body.ntop](https://github.com/nTopology/Utilities-community/releases/download/displacement-distorted-implicit-body-v1.0.0/displacement-distorted-implicit-body.ntop) # DMG MORI redesigns robotic end-effector for additive manufacturing Source: https://docs.ntop.com/community/packages/ntop/dmg-mori-robotic-end-effector AI context for DMG MORI redesigns robotic end-effector for additive manufacturing. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/dmg-mori-robotic-end-effector). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary DMG MORI redesigns robotic end-effector for additive manufacturing ## Package Details | Field | Value | | - | - | | **ID** | `dmg-mori-robotic-end-effector` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Additive Manufacturing | | **Complexity** | Intermediate | | **Tags** | `case-study`, `robotics`, `additive-manufacturing` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/dmg-mori-robot-end-effector/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/dmg-mori-robotic-end-effector](https://community.ntop.com/#/detail/dmg-mori-robotic-end-effector) ## Download [Download dmg-mori-robotic-end-effector.ntop](https://github.com/nTopology/Utilities-community/releases/download/dmg-mori-robotic-end-effector-v1.0.0/dmg-mori-robotic-end-effector.ntop) # Extract Base File Name Source: https://docs.ntop.com/community/packages/ntop/extract-base-file-name AI context for Extract Base File Name. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/extract-base-file-name). ## Summary This custom block extracts the base file name from a file path with an option to include the file extension. For example, "C/Users/NAME/Downloads/model.stl" -> "model"/"model.stl" ## Package Details | Field | Value | | - | - | | **ID** | `extract-base-file-name` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `file-path`, `filename`, `string`, `utility`, `extension` | | **License** | MIT | | **Verified** | Yes | *** This custom block extracts the base file name from a file path with an option to include the file extension. For example, "C/Users/NAME/Downloads/model.stl" -> "model"/"model.stl" ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/extract-base-file-name/`. ## Inputs | Name | Type | Description | | - | - | - | | `Path` | file\_path | Original path | | `Include extension` | bool | Option to remove the file extension | ## Outputs | Name | Type | Description | | - | - | - | | `Output` | | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/extract-base-file-name](https://community.ntop.com/#/detail/extract-base-file-name) ## Download [Download extract-base-file-name.ntop](https://github.com/nTopology/Utilities-community/releases/download/extract-base-file-name-v1.0.0/extract-base-file-name.ntop) # Extract Cell Map Cells Source: https://docs.ntop.com/community/packages/ntop/extract-cell-map-cells AI context for Extract Cell Map Cells. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/extract-cell-map-cells). ## Summary Extracts the Cells of a Cell Map as seperate Mesh Boxes. The boxes will be undersized from the cell by roughly 10%. ## Package Details | Field | Value | | - | - | | **ID** | `extract-cell-map-cells` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `extract`, `cell`, `map`, `cells`, `extracts`, `seperate` | | **License** | MIT | | **Verified** | Yes | *** Extracts the Cells of a Cell Map as seperate Mesh Boxes. The boxes will be undersized from the cell by roughly 10%. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/extract-cell-map-cells/`. ## Inputs | Name | Type | Description | | - | - | - | | `Cell Map` | cell\_map | The Cell Map to extract the cells from | ## Outputs | Name | Type | Description | | - | - | - | | `Mesh List_0` | list\ | Splits the mesh faces to separate the cells | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/extract-cell-map-cells](https://community.ntop.com/#/detail/extract-cell-map-cells) ## Download [Download extract-cell-map-cells.ntop](https://github.com/nTopology/Utilities-community/releases/download/extract-cell-map-cells-v1.0.0/extract-cell-map-cells.ntop) # Extract Row Source: https://docs.ntop.com/community/packages/ntop/extract-row AI context for Extract Row. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/extract-row). ## Summary Extract a row from a table. ## Package Details | Field | Value | | - | - | | **ID** | `extract-row` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `table`, `row`, `data`, `lookup` | | **License** | MIT | | **Verified** | Yes | *** Extract a row from a table. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/extract-row/`. ## Inputs | Name | Type | Description | | - | - | - | | `Table` | table | Starting table | | `Row` | Integer | Index of row to extract | ## Outputs | Name | Type | Description | | - | - | - | | `Row` | list\ | Extracts an element from a table | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/extract-row](https://community.ntop.com/#/detail/extract-row) ## Download [Download extract-row.ntop](https://github.com/nTopology/Utilities-community/releases/download/extract-row-v1.0.0/extract-row.ntop) # Extrude CAD Face Source: https://docs.ntop.com/community/packages/ntop/extrude-cad-face AI context for Extrude CAD Face. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/extrude-cad-face). ## Summary This custom block extrudes a CAD face normal to the surface up to a given height. ## Package Details | Field | Value | | - | - | | **ID** | `extrude-cad-face` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `extrude`, `cad`, `face`, `normal`, `height`, `solid` | | **License** | MIT | | **Verified** | Yes | *** This custom block extrudes a CAD face normal to the surface up to a given height. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/extrude-cad-face/`. ## Inputs | Name | Type | Description | | - | - | - | | `Face` | brep\_face | Face to extrude | | `Height` | Scalar Field | Height of extrusion | | `Flip direction` | bool | Check to reverse the direction of the extrusion | ## Outputs | Name | Type | Description | | - | - | - | | `Extrusion` | lattice\_body | Creates a lattice using a solid box as the unit cell. This creates a solid extrusion from the CAD Face | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/extrude-cad-face](https://community.ntop.com/#/detail/extrude-cad-face) ## Download [Download extrude-cad-face.ntop](https://github.com/nTopology/Utilities-community/releases/download/extrude-cad-face-v1.0.0/extrude-cad-face.ntop) # Extrude Flat CAD Face Source: https://docs.ntop.com/community/packages/ntop/extrude-flat-cad-face AI context for Extrude Flat CAD Face. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/extrude-flat-cad-face). ## Summary This custom block takes a flat cad face and will extrude it normal to the face. ## Package Details | Field | Value | | - | - | | **ID** | `extrude-flat-cad-face` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `extrude`, `flat`, `cad`, `face`, `normal`, `planar` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes a flat cad face and will extrude it normal to the face. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/extrude-flat-cad-face/`. ## Inputs | Name | Type | Description | | - | - | - | | `Flat CAD Face` | brep\_face | The CAD Face you want to extrude | | `Extrusion Distance` | Scalar | The distance to extrude the face | | `Flip Direction` | bool | Option to flip the extrusion direction normal | ## Outputs | Name | Type | Description | | - | - | - | | `Final Extrusion` | Implicit Body | Extrudes the profile based on the input extrusion distance | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/extrude-flat-cad-face](https://community.ntop.com/#/detail/extrude-flat-cad-face) ## Download [Download extrude-flat-cad-face.ntop](https://github.com/nTopology/Utilities-community/releases/download/extrude-flat-cad-face-v1.0.0/extrude-flat-cad-face.ntop) # Extrude Image on a CAD Face Source: https://docs.ntop.com/community/packages/ntop/extrude-image-on-a-cad-face AI context for Extrude Image on a CAD Face. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/extrude-image-on-a-cad-face). ## Summary This custom block adds a bitmap image to a CAD face and extrudes it normal to the surface to the provided height. ## Package Details | Field | Value | | - | - | | **ID** | `extrude-image-on-a-cad-face` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `extrude`, `image`, `bitmap`, `cad`, `face`, `emboss` | | **License** | MIT | | **Verified** | Yes | *** This custom block adds a bitmap image to a CAD face and extrudes it normal to the surface to the provided height. ## Recommendations * If you are experiencing noise around your image, try enabling the `Smoothen` option. When smoothing, decrease the `Smooth Grid size` and change `Interpolation type` to cubic for best results. * A good starting `Color field` is Grayscale. If your image has a lot of color, try a different color field — it may produce a better result. * The `Centroid` does not need to be exactly on the face; it acts as a rough guide for positioning. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/extrude-image-on-a-cad-face/`. ## Inputs | Name | Type | Description | | - | - | - | | `CAD face` | brep\_face | CAD Face to add the image to | | `Body` | Implicit Body | Body that will have the added image | | `Bitmap` | bitmap | The imported image to extrude | | `Centroid` | Point | The image will be centered around this location. The centroid does not need to be exactly on the face, it acts a rough guide. | | `Length` | Scalar | The Length of the image | | `Width` | Scalar | The Width of the image | | `Height` | Scalar Field | Height normal to the surface | | `Color field` | Choice | A good starting field is the grayscale, but if your image has a lot of color, you may find a different color field produces a better result. | | `Flip Image` | bool | If you notice your words are backwards, flip the image. | | `Rotation Angle` | Scalar | Angle to rotate the image | | `Inverse Image` | bool | Reverse which part of the image is shown | | `Smoothen` | bool | If you are experiencing some noise around your image, you may want to try the smoothen option. If selecting “Smoothen”, we recommend decreasing the smooth grid size and change interpolation type to cubic. | | `Smooth Grid size` | Scalar | Input used if you choose to smoothen the image | | `Smooth iterations` | Integer | Input used if you choose to smoothen the image | | `Interpolation type` | interpolation\_enum | Input used if you choose to smoothen the image | ## Outputs | Name | Type | Description | | - | - | - | | `Image on Face` | Implicit Body | Applying the image field to the implicit body | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/extrude-image-on-a-cad-face](https://community.ntop.com/#/detail/extrude-image-on-a-cad-face) ## Download [Download extrude-image-on-a-cad-face.ntop](https://github.com/nTopology/Utilities-community/releases/download/extrude-image-on-a-cad-face-v1.0.0/extrude-image-on-a-cad-face.ntop) # Extrude Twist Draft Source: https://docs.ntop.com/community/packages/ntop/extrude-twist-draft AI context for Extrude Twist Draft. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/extrude-twist-draft). ## Summary This custom block takes a profile and will extrude with a draft angle and a twist rate. ## Package Details | Field | Value | | - | - | | **ID** | `extrude-twist-draft` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `extrude`, `twist`, `draft-angle`, `profile`, `rotation` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes a profile and will extrude with a draft angle and a twist rate. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/extrude-twist-draft/`. ## Inputs | Name | Type | Description | | - | - | - | | `Profile` | new\_profile | The profile to be extruded and twisted | | `Distance` | Scalar | The distance to extrude | | `Twist Rate` | Scalar | The rate of twist affecting the body | | `Draft Angle` | Scalar | Please choose the No draft Option if you have a draft angle of 0, otherwise there will be a 1 deg draft angle applied to your part. | | `Choice` | Choice | Choice of how the draft is applied | ## Outputs | Name | Type | Description | | - | - | - | | `Final Body` | Implicit Body | Applies Twist to the extruded profile | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/extrude-twist-draft](https://community.ntop.com/#/detail/extrude-twist-draft) ## Download [Download extrude-twist-draft.ntop](https://github.com/nTopology/Utilities-community/releases/download/extrude-twist-draft-v1.0.0/extrude-twist-draft.ntop) # Full-flight qualification for F-16 aircraft spare part in just 30 days Source: https://docs.ntop.com/community/packages/ntop/f-16-spare-part-qualification AI context for Full-flight qualification for F-16 aircraft spare part in just 30 days. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/f-16-spare-part-qualification). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Full-flight qualification for F-16 aircraft spare part in just 30 days ## Package Details | Field | Value | | - | - | | **ID** | `f-16-spare-part-qualification` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `case-study`, `aerospace`, `additive-manufacturing` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/aerospace-f-16-aircraft-qualification-for-additive-manufacturing/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/f-16-spare-part-qualification](https://community.ntop.com/#/detail/f-16-spare-part-qualification) ## Download [Download f-16-spare-part-qualification.ntop](https://github.com/nTopology/Utilities-community/releases/download/f-16-spare-part-qualification-v1.0.0/f-16-spare-part-qualification.ntop) # FDM 3D-printed orthotic insole design using a gyroid structure Source: https://docs.ntop.com/community/packages/ntop/fdm-orthotic-insole-gyroid AI context for FDM 3D-printed orthotic insole design using a gyroid structure. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fdm-orthotic-insole-gyroid). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Jonnala & Kumar design a gyroid TPMS orthotic insole from a 3D foot scan and pressure mapping data, comparing energy absorption to a solid construction for FDM 3D printing in soft PLA. ## Package Details | Field | Value | | - | - | | **ID** | `fdm-orthotic-insole-gyroid` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `tpms`, `gyroid`, `medical`, `fdm` | | **License** | Proprietary | | **Verified** | No | *** # Design and development of fused deposition modeling (FDM) 3D-printed orthotic insole by using gyroid structure Independent research paper referencing nTopology — this entry links out to the original publication. By Uday Kumar Jonnala, Rakesh Sankineni & Ravi Kumar Yennam, *Journal of the Mechanical Behavior of Biomedical Materials*, 2023. [Read it on ScienceDirect](https://www.sciencedirect.com/science/article/abs/pii/S1751616123003582) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/fdm-orthotic-insole-gyroid](https://community.ntop.com/#/detail/fdm-orthotic-insole-gyroid) ## Download [Download fdm-orthotic-insole-gyroid.ntop](https://github.com/nTopology/Utilities-community/releases/download/fdm-orthotic-insole-gyroid-v1.0.0/fdm-orthotic-insole-gyroid.ntop) # Field-driven generative design of patient-specific maxillofacial plates Source: https://docs.ntop.com/community/packages/ntop/field-driven-maxillofacial-plates AI context for Field-driven generative design of patient-specific maxillofacial plates. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/field-driven-maxillofacial-plates). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Tel et al. use nTopology's field-driven generative design and Bone Plate Generator module to create patient-specific osteosynthesis plates for orthognathic and trauma maxillofacial surgery. ## Package Details | Field | Value | | - | - | | **ID** | `field-driven-maxillofacial-plates` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `field-driven-design`, `generative-design`, `medical`, `implants` | | **License** | Proprietary | | **Verified** | No | *** # Optimizing efficiency in the creation of patient-specific plates through field-driven generative design in maxillofacial surgery ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Independent research paper referencing nTopology — this entry links out to the original publication. By Alessandro Tel, Erik Kornfellner, Francesco Moscato, Shankeeth Vinayahalingam, Tong Xi, Lorenzo Arboit & Massimo Robiony, *Scientific Reports*, 2023. The first published application of nTopology's field-driven design in maxillofacial surgery, generating patient-specific osteosynthesis plates for orthognathic and trauma cases. Cover image: Figure 1 from the paper, open access under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). [Read it on Nature](https://www.nature.com/articles/s41598-023-39327-8) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/field-driven-maxillofacial-plates](https://community.ntop.com/#/detail/field-driven-maxillofacial-plates) ## Download [Download field-driven-maxillofacial-plates.ntop](https://github.com/nTopology/Utilities-community/releases/download/field-driven-maxillofacial-plates-v1.0.0/field-driven-maxillofacial-plates.ntop) # Field from Fluid Domain - 6.1 Source: https://docs.ntop.com/community/packages/ntop/field-from-fluid-domain-6-1 AI context for Field from Fluid Domain - 6.1. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/field-from-fluid-domain-6-1). ## Summary This Custom Block will allow users the generate an Implicit Body from a Point Map, by letting users define Lower and Upper Bounds they wish to truncate (i.e. eliminate) in order to shape the new geometry. Version 6.1 has fewer inputs expose ## Package Details | Field | Value | | - | - | | **ID** | `field-from-fluid-domain-6-1` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.42+ | | **Domain** | Simulation | | **Complexity** | Beginner | | **Tags** | `field`, `fluid`, `point-map`, `implicit`, `bounds`, `truncation` | | **License** | MIT | | **Verified** | Yes | *** This Custom Block will allow users the generate an Implicit Body from a Point Map, by letting users define Lower and Upper Bounds they wish to truncate (i.e. eliminate) in order to shape the new geometry. Version 6.1 has fewer inputs exposed over 6.0 ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/field-from-fluid-domain-6-1/`. ## Inputs | Name | Type | Description | | - | - | - | | `CSV Point Map` | Scalar Point Map | Input a Unit Less Point Map. | | `Field Definition Steps` | Text | Section label grouping the field definition workflow steps. | | `Lower Bound` | Scalar | The lower bound defines the minium value you wish to keep, values below will be truncated. This input is unit less. | | `Upper Bound` | Scalar | The upper bound defines the maximum value you wish to keep, values above will be truncated. This input is unit less. | | `Field to Implicit Steps` | Text | Section label grouping the field-to-implicit conversion steps. | | `Field Resolution` | Scalar | The granularity of this value will impact resolution of the field but also increase computation time. A good starting value should be 0.01mm. If the Implicit body generated is outside the bounds of the point map, decrease this value. | This value needs to be less than 1.0 and greater than 0.0 | \| `Grid Size` | Scalar | This value will need to be iterated upon until the final implicit lies within the truncate set of Points. It's easiest to turn the point visiblity on while going through this process. A good starting value at the moment seems to be \~3-4x + the Build/Tolerance Size | \| `Mesh Steps` | Text | Section label grouping the meshing workflow steps. | \| `Mesh Tolerance` | Scalar | Size of the sampled grid spacing. An example starting point would be 30% of the mesh size used to run your CFD. In most cases a final Smoothen Body operation will be required at the very end | \| `Min. feature size` | Scalar | Option to specify the approximate size of the smallest feature(s) of the implicit body that should be preserved during the conversion. when provided, features that are smaller than this input will be filtered out and not included in the final result. This is not a Minimuim Element Size control. | \| `Final Smoothen` | Text | Section label grouping the final smoothing steps. | \| `Smooth Iterations` | Integer | This value will need to be iterated upon until the final implicit lies within the truncate set of Points. It's easiest to turn the point visiblity on while going through this process. You should not need to exceed 3. | ## Outputs | Name | Type | Description | | - | - | - | | `Final Body` | Implicit Body | Step 8: Final Smoothen of CSV to Implicit | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/field-from-fluid-domain-6-1](https://community.ntop.com/#/detail/field-from-fluid-domain-6-1) ## Download [Download field-from-fluid-domain-6-1.ntop](https://github.com/nTopology/Utilities-community/releases/download/field-from-fluid-domain-6-1-v1.0.0/field-from-fluid-domain-6-1.ntop) # Fill Mesh Source: https://docs.ntop.com/community/packages/ntop/fill-mesh AI context for Fill Mesh. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fill-mesh). ## Summary This custom block will take in an open mesh and will create a solid that is within the same bounds. ## Package Details | Field | Value | | - | - | | **ID** | `fill-mesh` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `fill`, `mesh`, `solid`, `open-mesh`, `watertight` | | **License** | MIT | | **Verified** | Yes | *** This custom block will take in an open mesh and will create a solid that is within the same bounds. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/fill-mesh/`. ## Inputs | Name | Type | Description | | - | - | - | | `Open Mesh` | Mesh | The open mesh that needs to be filled | | `Flip Direction` | bool | If your faces are not facing towards each other, we recommend you flip the direction to get the desired results. | ## Outputs | Name | Type | Description | | - | - | - | | `Final` | Implicit Body | Performs a boolean intersect on the Implicit Face scalar field, and the mesh bounding box solid box, to create a solid region where the two overlap. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/fill-mesh](https://community.ntop.com/#/detail/fill-mesh) ## Download [Download fill-mesh.ntop](https://github.com/nTopology/Utilities-community/releases/download/fill-mesh-v1.0.0/fill-mesh.ntop) # Filter Beams by Length in a Containment Source: https://docs.ntop.com/community/packages/ntop/filter-beams-by-length-in-a-containment AI context for Filter Beams by Length in a Containment. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-beams-by-length-in-a-containment). ## Summary This custom block filters lattice beams selectively by the length in a defined containment. ## Package Details | Field | Value | | - | - | | **ID** | `filter-beams-by-length-in-a-containment` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Additive Manufacturing | | **Complexity** | Beginner | | **Tags** | `filter`, `beams`, `length`, `containment`, `lattice`, `selective` | | **License** | MIT | | **Verified** | Yes | *** This custom block filters lattice beams selectively by the length in a defined containment. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-beams-by-length-in-a-containment/`. ## Inputs | Name | Type | Description | | - | - | - | | `Lattice` | lattice\_body | Lattice on which filtering is to be done by length in a containment | | `Condition` | comparison\_enum | Logical arguments used with the filter criteria, Length. | | `Length` | Scalar | The filter criteria, beam length from the Lattice. | | `Beam thickness` | Scalar Field | Thickness of the Lattice Beams | | `Containment` | Implicit Body | Containment region for the filtering | | `Choice` | Choice | Use Refined Bounding Box option only if the Final Lattice is incorrectly trimmed and has undesired rounded ends | | `Tolerance` | Scalar | Tolerance for the Refined Bounding Box | ## Outputs | Name | Type | Description | | - | - | - | | `Final` | lattice\_body | Filters the lattice beams by the length in the defined containment. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-beams-by-length-in-a-containment](https://community.ntop.com/#/detail/filter-beams-by-length-in-a-containment) ## Download [Download filter-beams-by-length-in-a-containment.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-beams-by-length-in-a-containment-v1.0.0/filter-beams-by-length-in-a-containment.ntop) # Filter Mesh for Largest Mesh Source: https://docs.ntop.com/community/packages/ntop/filter-mesh-for-largest-mesh AI context for Filter Mesh for Largest Mesh. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-mesh-for-largest-mesh). ## Summary Filters mesh by splitting the surface mesh and removing all items except the mesh with the largest triangle count. ## Package Details | Field | Value | | - | - | | **ID** | `filter-mesh-for-largest-mesh` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `mesh`, `largest`, `filters`, `splitting`, `surface` | | **License** | MIT | | **Verified** | Yes | *** Filters mesh by splitting the surface mesh and removing all items except the mesh with the largest triangle count. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-mesh-for-largest-mesh/`. ## Inputs | Name | Type | Description | | - | - | - | | `Mesh` | Mesh | Mesh to be filtered. | ## Outputs | Name | Type | Description | | - | - | - | | `Output` | | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-mesh-for-largest-mesh](https://community.ntop.com/#/detail/filter-mesh-for-largest-mesh) ## Download [Download filter-mesh-for-largest-mesh.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-mesh-for-largest-mesh-v1.0.0/filter-mesh-for-largest-mesh.ntop) # Filter Meshes by Body Source: https://docs.ntop.com/community/packages/ntop/filter-meshes-by-body AI context for Filter Meshes by Body. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-meshes-by-body). ## Summary Given a list of meshes, this custom block will filter any meshes that do not overlap with a body (or vice versa if you select inside body). ## Package Details | Field | Value | | - | - | | **ID** | `filter-meshes-by-body` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `meshes`, `body`, `overlap`, `containment` | | **License** | MIT | | **Verified** | Yes | *** Given a list of meshes, this custom block will filter any meshes that do not overlap with a body (or vice versa if you select inside body). ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-meshes-by-body/`. ## Inputs | Name | Type | Description | | - | - | - | | `Meshes` | list\ | Mesh list to filter | | `Body` | Implicit Body | The body being used to filter the mesh list | | `Tolerance` | Scalar | The tolerance controls the distance used to evaluate if the body and mesh intersect. A higher tolerance will result in more overlap. | | `Inside Body` | bool | The bool that controls if you want to select meshes that lie inside the body or outside | ## Outputs | Name | Type | Description | | - | - | - | | `Filtered List` | list\ | The filter block will remove any items in the list that are negative if the inside body is checked. Otherwise, it will remove any items in the list that are positive. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-meshes-by-body](https://community.ntop.com/#/detail/filter-meshes-by-body) ## Download [Download filter-meshes-by-body.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-meshes-by-body-v1.0.0/filter-meshes-by-body.ntop) # Filter Point Map using CAD Faces Source: https://docs.ntop.com/community/packages/ntop/filter-point-map-using-cad-faces AI context for Filter Point Map using CAD Faces. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-point-map-using-cad-faces). ## Summary This Custom Block filters out a point map by excluding the result of the points near CAD faces. ## Package Details | Field | Value | | - | - | | **ID** | `filter-point-map-using-cad-faces` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `point-map`, `cad`, `faces`, `proximity`, `exclusion` | | **License** | MIT | | **Verified** | Yes | *** This Custom Block filters out a point map by excluding the result of the points near CAD faces. * Used to filter out stress concentrations that appear on boundaries, which are typically simulation artifacts rather than real structural hotspots. * Uses the Keep Out Distance (`KO distance`) to define a buffer zone around the CAD faces — any points within this distance are excluded from the output point map. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-point-map-using-cad-faces/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point map` | Scalar Point Map | Point Map | | `CAD faces` | list\ | CAD Faces | | `KO distance` | Scalar | Keep Out Distance - The distance around the CAD Faces | | `Region` | Choice | The region you want to filter — `Outside` keeps points with distance > KO distance, `Inside` keeps points with distance \< KO distance, `Boundary` keeps points with distance = KO distance | ## Outputs | Name | Type | Description | | - | - | - | | `Filtered PM` | Scalar Point Map | The new point map using the filtered points and values | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-point-map-using-cad-faces](https://community.ntop.com/#/detail/filter-point-map-using-cad-faces) ## Download [Download filter-point-map-using-cad-faces.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-point-map-using-cad-faces-v1.0.0/filter-point-map-using-cad-faces.ntop) # Filter Point Map using Mesh Boundaries Source: https://docs.ntop.com/community/packages/ntop/filter-point-map-using-mesh-boundaries AI context for Filter Point Map using Mesh Boundaries. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-point-map-using-mesh-boundaries). ## Summary This Custom Block filters out a point map by excluding the result of the points in the vicinity of mesh boundaries. ## Package Details | Field | Value | | - | - | | **ID** | `filter-point-map-using-mesh-boundaries` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `point-map`, `mesh`, `boundaries`, `proximity`, `exclusion` | | **License** | MIT | | **Verified** | Yes | *** This Custom Block filters out a point map by excluding the result of the points in the vicinity of mesh boundaries. * Used to filter out stress concentrations that appear on boundaries, which are typically simulation artifacts rather than real structural hotspots. * Uses the Keep Out Distance (`KO Distance`) to define a buffer zone around the mesh boundaries — any points within this distance are excluded from the output point map. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-point-map-using-mesh-boundaries/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point Map` | Scalar Point Map | Point Map | | `Mesh Entities` | list\ | Mesh entities | | `KO Distance` | Scalar | Keep Out Distance - The distance around the mesh elements | | `Region` | Choice | The region you want to filter — `Outside` keeps points with distance > KO Distance, `Inside` keeps points with distance \< KO Distance, `Boundary` keeps points with distance = KO Distance | ## Outputs | Name | Type | Description | | - | - | - | | `Filtered PM` | Scalar Point Map | The new point map using the filtered points and values | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-point-map-using-mesh-boundaries](https://community.ntop.com/#/detail/filter-point-map-using-mesh-boundaries) ## Download [Download filter-point-map-using-mesh-boundaries.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-point-map-using-mesh-boundaries-v1.0.0/filter-point-map-using-mesh-boundaries.ntop) # Filter Points by Plane Source: https://docs.ntop.com/community/packages/ntop/filter-points-by-plane AI context for Filter Points by Plane. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-points-by-plane). ## Summary Filters a scalar point map to retain those within the negative field of a plane. ## Package Details | Field | Value | | - | - | | **ID** | `filter-points-by-plane` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `points`, `plane`, `scalar`, `half-space` | | **License** | MIT | | **Verified** | Yes | *** Filters a scalar point map to retain those within the negative field of a plane. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-points-by-plane/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point map` | Scalar Point Map | The point map that will be filtered. | | `Cut plane` | plane | Plane used to divide the point map. Points on the negative side of the plane are retained in the output. | ## Outputs | Name | Type | Description | | - | - | - | | `Filtered Points` | Scalar Point Map | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-points-by-plane](https://community.ntop.com/#/detail/filter-points-by-plane) ## Download [Download filter-points-by-plane.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-points-by-plane-v1.0.0/filter-points-by-plane.ntop) # Filter Scalar Point Map by Value Source: https://docs.ntop.com/community/packages/ntop/filter-scalar-point-map-by-value AI context for Filter Scalar Point Map by Value. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-scalar-point-map-by-value). ## Summary This Custom Block filters out a scalar point map based on a condition and a reference value ## Package Details | Field | Value | | - | - | | **ID** | `filter-scalar-point-map-by-value` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `scalar`, `point-map`, `threshold`, `condition` | | **License** | MIT | | **Verified** | Yes | *** This Custom Block filters out a scalar point map based on a condition and a reference value ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-scalar-point-map-by-value/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point map` | Scalar Point Map | Point Map | | `Condition` | comparison\_enum | Condition to filter by | | `Value` | Scalar | Reference Value | ## Outputs | Name | Type | Description | | - | - | - | | `Filtered Point Map` | Scalar Point Map | The new filtered point map | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-scalar-point-map-by-value](https://community.ntop.com/#/detail/filter-scalar-point-map-by-value) ## Download [Download filter-scalar-point-map-by-value.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-scalar-point-map-by-value-v1.0.0/filter-scalar-point-map-by-value.ntop) # Filter Scalar Point Map by Volume Source: https://docs.ntop.com/community/packages/ntop/filter-scalar-point-map-by-volume AI context for Filter Scalar Point Map by Volume. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-scalar-point-map-by-volume). ## Summary Filters a scalar point map by volume. There are options for inside, outside and on the boundary for filtering the points. ## Package Details | Field | Value | | - | - | | **ID** | `filter-scalar-point-map-by-volume` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `scalar`, `point-map`, `volume`, `inside`, `outside` | | **License** | MIT | | **Verified** | Yes | *** Filters a scalar point map by volume. There are options for inside, outside and on the boundary for filtering the points. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-scalar-point-map-by-volume/`. ## Inputs | Name | Type | Description | | - | - | - | | `Scalar Point Map` | Scalar Point Map | The point map to be filtered. | | `Volume` | Implicit Body | The implicit body defining the volume region used to filter points. | | `Region` | Choice | Options: Inside / Outside / Boundary | ## Outputs | Name | Type | Description | | - | - | - | | `Filtered point map` | Scalar Point Map | Final filtered point map | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-scalar-point-map-by-volume](https://community.ntop.com/#/detail/filter-scalar-point-map-by-volume) ## Download [Download filter-scalar-point-map-by-volume.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-scalar-point-map-by-volume-v1.0.0/filter-scalar-point-map-by-volume.ntop) # Filter Vector Point Map by Value Source: https://docs.ntop.com/community/packages/ntop/filter-vector-point-map-by-value AI context for Filter Vector Point Map by Value. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/filter-vector-point-map-by-value). ## Summary This Custom Block filters out a Vector Point Map based on a condition and a reference value. ## Package Details | Field | Value | | - | - | | **ID** | `filter-vector-point-map-by-value` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `filter`, `vector`, `point-map`, `threshold`, `condition` | | **License** | MIT | | **Verified** | Yes | *** This Custom Block filters out a Vector Point Map based on a condition and a reference value. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/filter-vector-point-map-by-value/`. ## Inputs | Name | Type | Description | | - | - | - | | `Vector point map` | vector\_point\_map | Vector Point Map | | `Condition` | comparison\_enum | Condition | | `Component` | Choice | Vector component | | `Value` | Scalar | Filtering Value | ## Outputs | Name | Type | Description | | - | - | - | | `Filtered Point Map` | vector\_point\_map | The Filtered Point Map | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/filter-vector-point-map-by-value](https://community.ntop.com/#/detail/filter-vector-point-map-by-value) ## Download [Download filter-vector-point-map-by-value.ntop](https://github.com/nTopology/Utilities-community/releases/download/filter-vector-point-map-by-value-v1.0.0/filter-vector-point-map-by-value.ntop) # Fischer Koch S Unit Cell Source: https://docs.ntop.com/community/packages/ntop/fischer-koch-s-unit-cell AI context for Fischer Koch S Unit Cell. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/fischer-koch-s-unit-cell). ## Summary Creates a custom unit cell from a Fischer-Koch S surface periodic pattern field with options for wall thickness and midsurface offset. ## Package Details | Field | Value | | - | - | | **ID** | `fischer-koch-s-unit-cell` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Additive Manufacturing | | **Complexity** | Beginner | | **Tags** | `fischer-koch`, `unit-cell`, `tpms`, `lattice`, `periodic`, `surface` | | **License** | MIT | | **Verified** | Yes | *** Creates a custom unit cell from a Fischer-Koch S surface periodic pattern field with options for wall thickness and midsurface offset. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/fischer-koch-s-unit-cell/`. ## Inputs | Name | Type | Description | | - | - | - | | `Unit Cell Type` | Choice | Type of parametrized unit cell — `0`: Walled (solid walls), `1`: Offset (offset surface only), `2`: Walled + Offset (combination of both) | | `Cell Size` | Scalar | Size of one unit cell in mm. Controls the overall scale of the periodic pattern. | | `Approx. Wall Thickness` | Scalar | Approximate thickness of the TPMS walls in mm. | | `Midsurface Offset` | Scalar | Offset of the TPMS as a positive or negative approximate distance. Positive values shift the mid-surface wall outward; negative values shift it inward. | ## Outputs | Name | Type | Description | | - | - | - | | `Custom Unit Cell` | Unit Cell | Fischer-Koch S unit cell ready for use in lattice workflows. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/fischer-koch-s-unit-cell](https://community.ntop.com/#/detail/fischer-koch-s-unit-cell) ## Download [Download fischer-koch-s-unit-cell.ntop](https://github.com/nTopology/Utilities-community/releases/download/fischer-koch-s-unit-cell-v1.0.0/fischer-koch-s-unit-cell.ntop) # Gear Profile Source: https://docs.ntop.com/community/packages/ntop/gear-profile AI context for Gear Profile. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/gear-profile). ## Summary This workflow creates a gear profile based on the inputs below. ## Package Details | Field | Value | | - | - | | **ID** | `gear-profile` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Mechanical | | **Complexity** | Beginner | | **Tags** | `gear`, `profile`, `parametric`, `mechanical`, `teeth` | | **License** | MIT | | **Verified** | Yes | *** This workflow creates a gear profile based on the inputs below. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/gear-profile/`. ## Inputs | Name | Type | Description | | - | - | - | | `Number of Teeth` | Integer | Total number of teeth on the gear. Common values: 12–20 for pinions, 20–60 for standard gears. More teeth = smoother transmission but larger diameter. | | `Pressure Angle` | Scalar | Angle (degrees) between the tooth force direction and the tangent to the pitch circle. Standard values are **20°** (most common, ISO/AGMA default) or **14.5°** (legacy). Higher angles increase tooth strength but raise bearing loads. | | `Module` | Scalar | Ratio of pitch diameter to number of teeth (mm/tooth). Controls overall gear size — larger module = bigger, stronger teeth. Common values: 1, 1.25, 1.5, 2, 2.5, 3, 4, 5. Two meshing gears must share the same module. | | `Dedendum Clearance` | Scalar | Extra radial depth below the pitch circle, beyond the standard dedendum, to prevent tip-to-root contact with a mating gear. Typically **0.25 × module** (e.g. 0.5 mm for module 2). | ## Outputs | Name | Type | Description | | - | - | - | | `Gear Profile` | new\_profile | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/gear-profile](https://community.ntop.com/#/detail/gear-profile) ## Download [Download gear-profile.ntop](https://github.com/nTopology/Utilities-community/releases/download/gear-profile-v1.0.0/gear-profile.ntop) # Graph from Curve Source: https://docs.ntop.com/community/packages/ntop/graph-from-curve AI context for Graph from Curve. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/graph-from-curve). ## Summary This custom block produces a graph lattice given a curve. ## Package Details | Field | Value | | - | - | | **ID** | `graph-from-curve` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `graph`, `curve`, `lattice`, `skeleton`, `beam` | | **License** | MIT | | **Verified** | Yes | *** This custom block produces a graph lattice given a curve. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/graph-from-curve/`. ## Inputs | Name | Type | Description | | - | - | - | | `Curve` | curve\_interface | Curve to create the graph | | `Curve refinement` | Scalar | Increment to use when sampling the curve | ## Outputs | Name | Type | Description | | - | - | - | | `Graph` | Lattice | Creates the Graph from the line segments generated from the point list | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/graph-from-curve](https://community.ntop.com/#/detail/graph-from-curve) ## Download [Download graph-from-curve.ntop](https://github.com/nTopology/Utilities-community/releases/download/graph-from-curve-v1.0.0/graph-from-curve.ntop) # Advanced Heat Exchanger Design and Simulation Whitepaper Source: https://docs.ntop.com/community/packages/ntop/guide-advanced-heat-exchanger-whitepaper AI context for Advanced Heat Exchanger Design and Simulation Whitepaper. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-advanced-heat-exchanger-whitepaper). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Advanced Heat Exchanger Design and Simulation Whitepaper ## Package Details | Field | Value | | - | - | | **ID** | `guide-advanced-heat-exchanger-whitepaper` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `guide`, `heat-exchanger`, `whitepaper` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/whitepaper-advanced-heat-exchanger-design-and-simulation/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-advanced-heat-exchanger-whitepaper](https://community.ntop.com/#/detail/guide-advanced-heat-exchanger-whitepaper) ## Download [Download guide-advanced-heat-exchanger-whitepaper.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-advanced-heat-exchanger-whitepaper-v1.0.0/guide-advanced-heat-exchanger-whitepaper.ntop) # Advanced design software and additive manufacturing for personalized implants Source: https://docs.ntop.com/community/packages/ntop/guide-am-personalized-implants AI context for Advanced design software and additive manufacturing for personalized implants. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-am-personalized-implants). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Advanced design software and additive manufacturing for personalized implants ## Package Details | Field | Value | | - | - | | **ID** | `guide-am-personalized-implants` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `guide`, `medical`, `additive-manufacturing` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/download-advanced-design-software-and-additive-manufacturing-for-personalized-implants/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-am-personalized-implants](https://community.ntop.com/#/detail/guide-am-personalized-implants) ## Download [Download guide-am-personalized-implants.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-am-personalized-implants-v1.0.0/guide-am-personalized-implants.ntop) # Design Automation for Medical Devices Source: https://docs.ntop.com/community/packages/ntop/guide-design-automation-medical-devices AI context for Design Automation for Medical Devices. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-design-automation-medical-devices). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Design Automation for Medical Devices ## Package Details | Field | Value | | - | - | | **ID** | `guide-design-automation-medical-devices` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `guide`, `medical`, `automation` | | **License** | Proprietary | | **Verified** | No | *** Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/download-design-automation-for-medical-devices/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-design-automation-medical-devices](https://community.ntop.com/#/detail/guide-design-automation-medical-devices) ## Download [Download guide-design-automation-medical-devices.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-design-automation-medical-devices-v1.0.0/guide-design-automation-medical-devices.ntop) # The Engineering Guide to Generative Design Source: https://docs.ntop.com/community/packages/ntop/guide-engineering-generative-design AI context for The Engineering Guide to Generative Design. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-engineering-generative-design). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary The Engineering Guide to Generative Design ## Package Details | Field | Value | | - | - | | **ID** | `guide-engineering-generative-design` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Optimization | | **Complexity** | Intermediate | | **Tags** | `guide`, `generative-design` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/download-guide-generative-design/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-engineering-generative-design](https://community.ntop.com/#/detail/guide-engineering-generative-design) ## Download [Download guide-engineering-generative-design.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-engineering-generative-design-v1.0.0/guide-engineering-generative-design.ntop) # The Engineering Guide to Lightweighting Source: https://docs.ntop.com/community/packages/ntop/guide-engineering-lightweighting AI context for The Engineering Guide to Lightweighting. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-engineering-lightweighting). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary The Engineering Guide to Lightweighting ## Package Details | Field | Value | | - | - | | **ID** | `guide-engineering-lightweighting` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `guide`, `lightweighting` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/download-engineering-guide-to-lightweighting/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-engineering-lightweighting](https://community.ntop.com/#/detail/guide-engineering-lightweighting) ## Download [Download guide-engineering-lightweighting.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-engineering-lightweighting-v1.0.0/guide-engineering-lightweighting.ntop) # The Field-Driven Design Whitepaper Source: https://docs.ntop.com/community/packages/ntop/guide-field-driven-design-whitepaper AI context for The Field-Driven Design Whitepaper. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-field-driven-design-whitepaper). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary The Field-Driven Design Whitepaper ## Package Details | Field | Value | | - | - | | **ID** | `guide-field-driven-design-whitepaper` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Simulation | | **Complexity** | Intermediate | | **Tags** | `guide`, `field-driven-design`, `whitepaper` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/download-whitepaper-field-driven-design/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-field-driven-design-whitepaper](https://community.ntop.com/#/detail/guide-field-driven-design-whitepaper) ## Download [Download guide-field-driven-design-whitepaper.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-field-driven-design-whitepaper-v1.0.0/guide-field-driven-design-whitepaper.ntop) # Heat Exchangers for Aerospace and Defense Source: https://docs.ntop.com/community/packages/ntop/guide-heat-exchangers-aerospace-defense AI context for Heat Exchangers for Aerospace and Defense. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-heat-exchangers-aerospace-defense). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Heat Exchangers for Aerospace and Defense ## Package Details | Field | Value | | - | - | | **ID** | `guide-heat-exchangers-aerospace-defense` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `guide`, `aerospace`, `heat-exchanger` | | **License** | Proprietary | | **Verified** | No | *** Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/heat-exchangers-for-aerospace-and-defense/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-heat-exchangers-aerospace-defense](https://community.ntop.com/#/detail/guide-heat-exchangers-aerospace-defense) ## Download [Download guide-heat-exchangers-aerospace-defense.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-heat-exchangers-aerospace-defense-v1.0.0/guide-heat-exchangers-aerospace-defense.ntop) # Implicit Modeling Technology Whitepaper Source: https://docs.ntop.com/community/packages/ntop/guide-implicit-modeling-whitepaper AI context for Implicit Modeling Technology Whitepaper. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-implicit-modeling-whitepaper). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Implicit Modeling Technology Whitepaper ## Package Details | Field | Value | | - | - | | **ID** | `guide-implicit-modeling-whitepaper` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `guide`, `implicit-modeling`, `whitepaper` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/whitepaper-implicit-modeling-technology/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-implicit-modeling-whitepaper](https://community.ntop.com/#/detail/guide-implicit-modeling-whitepaper) ## Download [Download guide-implicit-modeling-whitepaper.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-implicit-modeling-whitepaper-v1.0.0/guide-implicit-modeling-whitepaper.ntop) # The Industrial Technology Guide Source: https://docs.ntop.com/community/packages/ntop/guide-industrial-technology AI context for The Industrial Technology Guide. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-industrial-technology). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary The Industrial Technology Guide ## Package Details | Field | Value | | - | - | | **ID** | `guide-industrial-technology` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `guide`, `industrial` | | **License** | Proprietary | | **Verified** | No | *** Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/download-the-industrial-technology-guide/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-industrial-technology](https://community.ntop.com/#/detail/guide-industrial-technology) ## Download [Download guide-industrial-technology.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-industrial-technology-v1.0.0/guide-industrial-technology.ntop) # The Personalized Medical Devices Guide Source: https://docs.ntop.com/community/packages/ntop/guide-personalized-medical-devices AI context for The Personalized Medical Devices Guide. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-personalized-medical-devices). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary The Personalized Medical Devices Guide ## Package Details | Field | Value | | - | - | | **ID** | `guide-personalized-medical-devices` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `guide`, `medical`, `mass-customization` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/personalized-medical-devices-guide/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-personalized-medical-devices](https://community.ntop.com/#/detail/guide-personalized-medical-devices) ## Download [Download guide-personalized-medical-devices.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-personalized-medical-devices-v1.0.0/guide-personalized-medical-devices.ntop) # The Thermal Management Guide Source: https://docs.ntop.com/community/packages/ntop/guide-thermal-management AI context for The Thermal Management Guide. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-thermal-management). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary The Thermal Management Guide ## Package Details | Field | Value | | - | - | | **ID** | `guide-thermal-management` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `guide`, `thermal` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/thermal-management-guide/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-thermal-management](https://community.ntop.com/#/detail/guide-thermal-management) ## Download [Download guide-thermal-management.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-thermal-management-v1.0.0/guide-thermal-management.ntop) # The Turbomachinery Guide for Aerospace and Defense Source: https://docs.ntop.com/community/packages/ntop/guide-turbomachinery-aerospace-defense AI context for The Turbomachinery Guide for Aerospace and Defense. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/guide-turbomachinery-aerospace-defense). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary The Turbomachinery Guide for Aerospace and Defense ## Package Details | Field | Value | | - | - | | **ID** | `guide-turbomachinery-aerospace-defense` | | **Type** | Guide | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `guide`, `aerospace`, `turbomachinery` | | **License** | Proprietary | | **Verified** | No | *** Guide hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/guides/turbomachinery-guide-for-aerospace-and-defense/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/guide-turbomachinery-aerospace-defense](https://community.ntop.com/#/detail/guide-turbomachinery-aerospace-defense) ## Download [Download guide-turbomachinery-aerospace-defense.ntop](https://github.com/nTopology/Utilities-community/releases/download/guide-turbomachinery-aerospace-defense-v1.0.0/guide-turbomachinery-aerospace-defense.ntop) # Implicit Axis Source: https://docs.ntop.com/community/packages/ntop/implicit-axis AI context for Implicit Axis. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/implicit-axis). ## Summary This custom block takes in an implicit and will output the axis for the part in either the U, V or W direction. ## Package Details | Field | Value | | - | - | | **ID** | `implicit-axis` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `implicit`, `axis`, `uvw`, `direction`, `orientation` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes in an implicit and will output the axis for the part in either the U, V or W direction. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/implicit-axis/`. ## Inputs | Name | Type | Description | | - | - | - | | `Implicit` | Implicit Body | The implicit body to reference for creating the axis. | | `Along axis` | Choice | The Axis direction | ## Outputs | Name | Type | Description | | - | - | - | | `Axis` | axis | Creating the Axis using the line segment length and direction | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/implicit-axis](https://community.ntop.com/#/detail/implicit-axis) ## Download [Download implicit-axis.ntop](https://github.com/nTopology/Utilities-community/releases/download/implicit-axis-v1.0.0/implicit-axis.ntop) # Implicit Body from Logo Source: https://docs.ntop.com/community/packages/ntop/implicit-body-from-logo AI context for Implicit Body from Logo. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/implicit-body-from-logo). ## Summary Imports a .png image file and turns it into an extruded body with a given depth. ## Package Details | Field | Value | | - | - | | **ID** | `implicit-body-from-logo` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `implicit`, `body`, `from`, `logo`, `imports`, `png` | | **License** | MIT | | **Verified** | Yes | *** Imports a .png image file and turns it into an extruded body with a given depth. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/implicit-body-from-logo/`. ## Inputs | Name | Type | Description | | - | - | - | | `Path` | file\_path | Filepath to the .png image file. | | `Color field` | Choice | Choose with numerical representation of the image data is used to create the body. | | `Length` | Scalar | Image length along the y axis. | | `Width` | Scalar | Image width along the x axis. | | `Depth` | Scalar | Depth of the body from the image. | | `Dot pitch` | Scalar | Sampling resolution of the image — smaller values produce higher fidelity geometry but increase computation time. | | `Centroid` | Point | Center of the created logo | | `X rotation angle` | Scalar | Rotation of the logo body around the X axis in degrees. | | `Y rotation angle` | Scalar | Rotation of the logo body around the Y axis in degrees. | | `Z rotation angle` | Scalar | Rotation of the logo body around the Z axis in degrees. | ## Outputs | Name | Type | Description | | - | - | - | | `Final Logo` | Implicit Body | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/implicit-body-from-logo](https://community.ntop.com/#/detail/implicit-body-from-logo) ## Download [Download implicit-body-from-logo.ntop](https://github.com/nTopology/Utilities-community/releases/download/implicit-body-from-logo-v1.0.0/implicit-body-from-logo.ntop) # IMR and Renishaw streamline the additive manufacturing of spinal implants Source: https://docs.ntop.com/community/packages/ntop/imr-renishaw-spinal-implants AI context for IMR and Renishaw streamline the additive manufacturing of spinal implants. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/imr-renishaw-spinal-implants). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary IMR and Renishaw streamline the additive manufacturing of spinal implants ## Package Details | Field | Value | | - | - | | **ID** | `imr-renishaw-spinal-implants` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `case-study`, `medical`, `additive-manufacturing` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/streamlining-additive-manufacturing-for-spinal-implants/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/imr-renishaw-spinal-implants](https://community.ntop.com/#/detail/imr-renishaw-spinal-implants) ## Download [Download imr-renishaw-spinal-implants.ntop](https://github.com/nTopology/Utilities-community/releases/download/imr-renishaw-spinal-implants-v1.0.0/imr-renishaw-spinal-implants.ntop) # Invert CAD Face Selection Source: https://docs.ntop.com/community/packages/ntop/invert-cad-face-selection AI context for Invert CAD Face Selection. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/invert-cad-face-selection). ## Summary Removes specified CAD Faces from a list of CAD Faces ## Package Details | Field | Value | | - | - | | **ID** | `invert-cad-face-selection` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `invert`, `cad`, `face`, `selection`, `removes`, `specified` | | **License** | MIT | | **Verified** | Yes | *** Removes specified CAD Faces from a list of CAD Faces ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/invert-cad-face-selection/`. ## Inputs | Name | Type | Description | | - | - | - | | `Remove Faces` | list\ | Faces to remove | | `All faces` | list\ | All of the faces in the CAD body | ## Outputs | Name | Type | Description | | - | - | - | | `Inverted selection` | list\ | Filters All CAD Faces to remove any faces that meet the condition | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/invert-cad-face-selection](https://community.ntop.com/#/detail/invert-cad-face-selection) ## Download [Download invert-cad-face-selection.ntop](https://github.com/nTopology/Utilities-community/releases/download/invert-cad-face-selection-v1.0.0/invert-cad-face-selection.ntop) # KW Micro Power cut the weight of their compact turbogenerator by 44% with nTop Source: https://docs.ntop.com/community/packages/ntop/kw-micro-power-turbogenerator AI context for KW Micro Power cut the weight of their compact turbogenerator by 44% with nTop. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/kw-micro-power-turbogenerator). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary KW Micro Power cut the weight of their compact turbogenerator by 44% with nTop ## Package Details | Field | Value | | - | - | | **ID** | `kw-micro-power-turbogenerator` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `case-study`, `lightweighting`, `turbogenerator` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/aerospace-microturbine-kw-micro-power/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/kw-micro-power-turbogenerator](https://community.ntop.com/#/detail/kw-micro-power-turbogenerator) ## Download [Download kw-micro-power-turbogenerator.ntop](https://github.com/nTopology/Utilities-community/releases/download/kw-micro-power-turbogenerator-v1.0.0/kw-micro-power-turbogenerator.ntop) # Lattice design optimization: Crowdsourcing ideas in the classroom Source: https://docs.ntop.com/community/packages/ntop/lattice-design-crowdsourcing-classroom AI context for Lattice design optimization: Crowdsourcing ideas in the classroom. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/lattice-design-crowdsourcing-classroom). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Dhruv Bhate (Arizona State) has students use nTopology's Element software to minimize beam weight under bending, tension and torsion via unit-cell selection, cell-size distribution, and member thickness optimization. ## Package Details | Field | Value | | - | - | | **ID** | `lattice-design-crowdsourcing-classroom` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Additive Manufacturing | | **Complexity** | Beginner | | **Tags** | `research-paper`, `lattice`, `education`, `design-for-am` | | **License** | Proprietary | | **Verified** | No | *** Independent research paper referencing nTopology — this entry links out to the original publication. By Dhruv Bhate (Arizona State University), Solid Freeform Fabrication Symposium, 2018. [Read it in the UT Austin repository](https://repositories.lib.utexas.edu/items/cb1c241c-68a2-4acc-b00d-4ecfb04db1e2) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/lattice-design-crowdsourcing-classroom](https://community.ntop.com/#/detail/lattice-design-crowdsourcing-classroom) ## Download [Download lattice-design-crowdsourcing-classroom.ntop](https://github.com/nTopology/Utilities-community/releases/download/lattice-design-crowdsourcing-classroom-v1.0.0/lattice-design-crowdsourcing-classroom.ntop) # Reducing weight to help win and withstand the rigors of a 24 hour Le Mans race Source: https://docs.ntop.com/community/packages/ntop/le-mans-24-hour-weight-reduction AI context for Reducing weight to help win and withstand the rigors of a 24 hour Le Mans race. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/le-mans-24-hour-weight-reduction). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Reducing weight to help win and withstand the rigors of a 24 hour Le Mans race ## Package Details | Field | Value | | - | - | | **ID** | `le-mans-24-hour-weight-reduction` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `case-study`, `motorsport`, `lightweighting` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/reducing-weight-to-help-win-and-withstand-the-rigors-of-a-24-hour-le-mans-race/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/le-mans-24-hour-weight-reduction](https://community.ntop.com/#/detail/le-mans-24-hour-weight-reduction) ## Download [Download le-mans-24-hour-weight-reduction.ntop](https://github.com/nTopology/Utilities-community/releases/download/le-mans-24-hour-weight-reduction-v1.0.0/le-mans-24-hour-weight-reduction.ntop) # LifeNabled created a reusable digital workflow to 3D print prosthetics Source: https://docs.ntop.com/community/packages/ntop/lifenabled-3d-printed-prosthetics AI context for LifeNabled created a reusable digital workflow to 3D print prosthetics. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/lifenabled-3d-printed-prosthetics). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary LifeNabled created a reusable digital workflow to 3D print prosthetics ## Package Details | Field | Value | | - | - | | **ID** | `lifenabled-3d-printed-prosthetics` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `case-study`, `medical`, `prosthetics` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/3d-printed-prosthetics-guatemala/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/lifenabled-3d-printed-prosthetics](https://community.ntop.com/#/detail/lifenabled-3d-printed-prosthetics) ## Download [Download lifenabled-3d-printed-prosthetics.ntop](https://github.com/nTopology/Utilities-community/releases/download/lifenabled-3d-printed-prosthetics-v1.0.0/lifenabled-3d-printed-prosthetics.ntop) # LightForce Orthodontics reduced dental brace design time by 60 percent with nTop Source: https://docs.ntop.com/community/packages/ntop/lightforce-dental-braces AI context for LightForce Orthodontics reduced dental brace design time by 60 percent with nTop. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/lightforce-dental-braces). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary LightForce Orthodontics reduced dental brace design time by 60 percent with nTop ## Package Details | Field | Value | | - | - | | **ID** | `lightforce-dental-braces` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `case-study`, `medical`, `mass-customization` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/lightforce-custom-dental-braces/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/lightforce-dental-braces](https://community.ntop.com/#/detail/lightforce-dental-braces) ## Download [Download lightforce-dental-braces.ntop](https://github.com/nTopology/Utilities-community/releases/download/lightforce-dental-braces-v1.0.0/lightforce-dental-braces.ntop) # Liquid-cooled cold plate for automotive power electronics Source: https://docs.ntop.com/community/packages/ntop/liquid-cooled-cold-plate-automotive AI context for Liquid-cooled cold plate for automotive power electronics. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/liquid-cooled-cold-plate-automotive). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Liquid-cooled cold plate for automotive power electronics ## Package Details | Field | Value | | - | - | | **ID** | `liquid-cooled-cold-plate-automotive` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `case-study`, `thermal`, `automotive` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/cold-plate-automotive-power-electronics/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/liquid-cooled-cold-plate-automotive](https://community.ntop.com/#/detail/liquid-cooled-cold-plate-automotive) ## Download [Download liquid-cooled-cold-plate-automotive.ntop](https://github.com/nTopology/Utilities-community/releases/download/liquid-cooled-cold-plate-automotive-v1.0.0/liquid-cooled-cold-plate-automotive.ntop) # Lockheed Martin accelerates design with AI and embedded simulation Source: https://docs.ntop.com/community/packages/ntop/lockheed-martin-ai-embedded-simulation AI context for Lockheed Martin accelerates design with AI and embedded simulation. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/lockheed-martin-ai-embedded-simulation). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Lockheed Martin accelerates design with AI and embedded simulation ## Package Details | Field | Value | | - | - | | **ID** | `lockheed-martin-ai-embedded-simulation` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `case-study`, `aerospace`, `ai` | | **License** | Proprietary | | **Verified** | No | *** Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/lockheed-martin-accelerates-design-with-ai-and-embedded-simulation/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/lockheed-martin-ai-embedded-simulation](https://community.ntop.com/#/detail/lockheed-martin-ai-embedded-simulation) ## Download [Download lockheed-martin-ai-embedded-simulation.ntop](https://github.com/nTopology/Utilities-community/releases/download/lockheed-martin-ai-embedded-simulation-v1.0.0/lockheed-martin-ai-embedded-simulation.ntop) # Max Evenly Spaced Points Source: https://docs.ntop.com/community/packages/ntop/max-evenly-spaced-points AI context for Max Evenly Spaced Points. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/max-evenly-spaced-points). ## Summary This custom block creates almost evenly spaced points on a body based on a desired point spacing using a hexagonal packaging approach. ## Package Details | Field | Value | | - | - | | **ID** | `max-evenly-spaced-points` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `evenly-spaced`, `points`, `hexagonal-packing`, `distribution`, `sampling` | | **License** | MIT | | **Verified** | Yes | *** This custom block creates almost evenly spaced points on a body based on a desired point spacing using a hexagonal packaging approach. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/max-evenly-spaced-points/`. ## Inputs | Name | Type | Description | | - | - | - | | `Mesh` | Mesh | A Mesh of the part (or Mesh of a Surface) you want to put points on. | | `Point spacing (mm)` | Scalar | Desired spacing between points. | | `Body` | Implicit Body | The Implict Body you want to put points on. | | `Relaxation iterations` | Integer | Number of iterations to evenly distribute the points on the mesh. | | `Random seed` | Integer | Seed value to generate randomness. | ## Outputs | Name | Type | Description | | - | - | - | | `Closest Points` | list\ | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/max-evenly-spaced-points](https://community.ntop.com/#/detail/max-evenly-spaced-points) ## Download [Download max-evenly-spaced-points.ntop](https://github.com/nTopology/Utilities-community/releases/download/max-evenly-spaced-points-v1.0.0/max-evenly-spaced-points.ntop) # Mirror Points using a Plane Source: https://docs.ntop.com/community/packages/ntop/mirror-points-using-a-plane AI context for Mirror Points using a Plane. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/mirror-points-using-a-plane). ## Summary Mirror a set of points using a plane ## Package Details | Field | Value | | - | - | | **ID** | `mirror-points-using-a-plane` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `mirror`, `points`, `using`, `plane`, `set` | | **License** | MIT | | **Verified** | Yes | *** Mirror a set of points using a plane ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/mirror-points-using-a-plane/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point list` | Point List | The points you want to mirror | | `Mirror plane` | plane | The plane that the points will mirror across | ## Outputs | Name | Type | Description | | - | - | - | | `Any_1` | Point List | Translates the projected points to the opposite side of the mirrored plane. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/mirror-points-using-a-plane](https://community.ntop.com/#/detail/mirror-points-using-a-plane) ## Download [Download mirror-points-using-a-plane.ntop](https://github.com/nTopology/Utilities-community/releases/download/mirror-points-using-a-plane-v1.0.0/mirror-points-using-a-plane.ntop) # Move Object Source: https://docs.ntop.com/community/packages/ntop/move-object AI context for Move Object. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/move-object). ## Summary This block moves the object's center to the new location provided and rotates the object if you choose. ## Package Details | Field | Value | | - | - | | **ID** | `move-object` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `move`, `translate`, `rotate`, `transform`, `placement` | | **License** | MIT | | **Verified** | Yes | *** This block moves the object's center to the new location provided and rotates the object if you choose. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/move-object/`. ## Inputs | Name | Type | Description | | - | - | - | | `Object` | Implicit Body | The implicit body to move and rotate. | | `New Location` | Point | Target point for the object's center after the move. | | `X Rotation Angle` | Scalar | Rotation Angle around the X axis | | `Y Rotation Angle` | Scalar | Rotation Angle around the Y axis | | `Z Rotation Angle` | Scalar | Rotation Angle around the Z axis | ## Outputs | Name | Type | Description | | - | - | - | | `Rotated Object` | Implicit Body | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/move-object](https://community.ntop.com/#/detail/move-object) ## Download [Download move-object.ntop](https://github.com/nTopology/Utilities-community/releases/download/move-object-v1.0.0/move-object.ntop) # Multi-scale topology optimization for stiffness and de-homogenization Source: https://docs.ntop.com/community/packages/ntop/multiscale-topology-optimization-dehomogenization AI context for Multi-scale topology optimization for stiffness and de-homogenization. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/multiscale-topology-optimization-dehomogenization). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Groen, Thomsen & Sigmund (DTU) demonstrate implicit geometry modeling using the nTop platform to convert multi-scale topology optimization results into single-scale, manufacturable de-homogenized designs. ## Package Details | Field | Value | | - | - | | **ID** | `multiscale-topology-optimization-dehomogenization` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Optimization | | **Complexity** | Advanced | | **Tags** | `research-paper`, `topology-optimization`, `de-homogenization`, `implicit-geometry` | | **License** | Proprietary | | **Verified** | No | *** Independent research paper referencing nTopology — this entry links out to the original publication. By J. P. Groen, C. R. Thomsen & Ole Sigmund (Technical University of Denmark), *Structural and Multidisciplinary Optimization*, 2021. [Read it on Springer](https://link.springer.com/article/10.1007/s00158-021-02874-7) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/multiscale-topology-optimization-dehomogenization](https://community.ntop.com/#/detail/multiscale-topology-optimization-dehomogenization) ## Download [Download multiscale-topology-optimization-dehomogenization.ntop](https://github.com/nTopology/Utilities-community/releases/download/multiscale-topology-optimization-dehomogenization-v1.0.0/multiscale-topology-optimization-dehomogenization.ntop) # NASA CFD 2030 LES Simulation Dataset Source: https://docs.ntop.com/community/packages/ntop/nasa-cfd-2030-les-dataset AI context for NASA CFD 2030 LES Simulation Dataset. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/nasa-cfd-2030-les-dataset). ## Summary 12,000 LES CFD runs across 2,400 drone planform geometries, generated with nTop Fluids on CoreWeave GPU infrastructure for NASA's CFD Vision 2030 Grand Challenge. ## Package Details | Field | Value | | - | - | | **ID** | `nasa-cfd-2030-les-dataset` | | **Type** | Bundle | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Application** | CFD | | **Complexity** | Advanced | | **Tags** | `cfd`, `les`, `nasa`, `coreweave`, `aerospace`, `simulation`, `dataset`, `planform` | | **License** | Proprietary | | **Verified** | Yes | *** ![Planform parameterization](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) A large-eddy simulation (LES) CFD dataset generated with nTop Fluids — nTop's GPU-native LBM-LES solver — in collaboration with [CoreWeave](https://www.coreweave.com/), produced in the context of NASA's CFD Vision 2030 Grand Challenge for large-scale ensemble simulation. [Orbit render of a sample planform geometry](orbit.mp4) ## What's in it * 12,000 CFD runs across 2,400 distinct fixed-wing UAS planform geometries (Latin Hypercube sampled) at 5 angles of attack each * 10,000 runs completed in 32.2 hours; 11,950 of 12,000 completed overall * Fixed cruise conditions: Mach 0.21, ISA standard day at 30,000 ft * Per-run outputs: aerodynamic scalars (C\_L, C\_D, L/D, moments), surface pressure/force distributions, and full 3D flow fields (instantaneous + time-averaged) * \~1.1 GB per run, \~13-14 TB total * Simulated on CoreWeave's GPU cloud infrastructure ## Intended use Design space characterization and surrogate-model / MDO (multidisciplinary design optimization) training over parametric planform geometry. Read more: * [nTop + CoreWeave: NASA 2030 Grand Challenge in CFD](https://www.ntop.com/resources/blog/ntop-coreweave-nasa-2030-grand-challenge-in-cfd/) * [10,000 LES Simulations in 32 Hours: nTop and CoreWeave Hit NASA's CFD 2030 Target](https://www.coreweave.com/blog/10000-les-simulations-in-32-hours-ntop-and-coreweave-hit-nasas-cfd-2030-target) ## Access This dataset is not available for direct download. Use the "Request Access" button on this page to request it. ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/nasa-cfd-2030-les-dataset](https://community.ntop.com/#/detail/nasa-cfd-2030-les-dataset) ## Download [Download nasa-cfd-2030-les-dataset.ntop](https://github.com/nTopology/Utilities-community/releases/download/nasa-cfd-2030-les-dataset-v1.0.0/nasa-cfd-2030-les-dataset.ntop) # nTop → SUAVE Aircraft Mission Analysis Connector Source: https://docs.ntop.com/community/packages/ntop/ntop-suave-connector AI context for nTop → SUAVE Aircraft Mission Analysis Connector. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/ntop-suave-connector). ## Summary Compound blocks (Airport, Flight Segments, Reference Area, geometry-driven Wing/Fuselage) that export nTop aircraft models to SUAVE for AVL-based mission and stability analysis with output plots. ## Package Details | Field | Value | | - | - | | **ID** | `ntop-suave-connector` | | **Type** | Connector | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Application** | Analysis | | **Complexity** | Advanced | | **Tags** | `suave`, `avl`, `aerodynamics`, `aerospace`, `mission-analysis`, `connector`, `python` | | **License** | Proprietary | | **Verified** | Yes | *** ![Mission analysis output](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) A set of nTop compound blocks and a companion Python script that connect nTop aircraft geometry to [SUAVE](https://suave.stanford.edu/) (Stanford University Aerospace Vehicle Environment) for full-mission aerodynamic and stability analysis. ## What's in it * **Mission blocks** — `Airport` (altitude, ISA deviation) and `Flight Segment` (climb/cruise/descent legs: altitude, airspeed, body angle, distance) define the mission profile. * **Vehicle blocks** — `Basic Parameters` (reference area, passengers), `Simplified Wing`, `Simplified Fuselage`, `Landing Gear`, `Mass Properties`, `Performance Envelope`, `Vehicle Systems`, and a full `Turbofan Network` (fan, compressor, combustor, turbine, nozzles). Geometric inputs like reference area and wing/fuselage dimensions can be driven directly from nTop geometry rather than typed in by hand. * **Export blocks** — `Export Mission to SUAVE` and `Export Simplified Vehicle to SUAVE` write the mission and vehicle definitions out as SUAVE-compatible JSON. * **`suave_from_json.py`** — loads the exported JSON, builds the SUAVE vehicle/mission, runs the analysis, and produces mission plots (aerodynamic forces, aircraft velocities, drag component breakdown, aerodynamic coefficients, and more). ## Requirements * [SUAVE](https://suave.stanford.edu/) (open-source aircraft conceptual design environment) * [AVL](https://web.mit.edu/drela/Public/web/avl/) (Mark Drela, MIT) — used by SUAVE as the aerodynamics/stability solver * Python 3 with SUAVE's dependencies installed * nTop (for the compound blocks) ## Workflow 1. Build your aircraft in nTop using the vehicle compound blocks, driving geometric parameters from your model where applicable. 2. Define the mission using the `Airport` and `Flight Segment` blocks. 3. Run the `Export Mission to SUAVE` and `Export Simplified Vehicle to SUAVE` blocks to write out the JSON files. 4. Run `suave_from_json.py` against the exported JSON to execute the SUAVE/AVL analysis and generate the mission plots. ## Access This package is not available for direct download. Use the "Request Access" button on this page to request it. ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/ntop-suave-connector](https://community.ntop.com/#/detail/ntop-suave-connector) ## Download [Download ntop-suave-connector.ntop](https://github.com/nTopology/Utilities-community/releases/download/ntop-suave-connector-v0.1.0/ntop-suave-connector.ntop) # Orient Unit Cell to Plane Source: https://docs.ntop.com/community/packages/ntop/orient-unit-cell-to-plane AI context for Orient Unit Cell to Plane. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/orient-unit-cell-to-plane). ## Summary Places the input unit cell at the list of input points. It gives the user the ablity to adjust the rotation of the unit cell along it's axis, rotate the unit cell about a vector and translate the unit cell along it's axis. In addition it re ## Package Details | Field | Value | | - | - | | **ID** | `orient-unit-cell-to-plane` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `orient`, `unit-cell`, `plane`, `rotation`, `lattice`, `placement` | | **License** | MIT | | **Verified** | Yes | *** Places the input unit cell at the list of input points. It gives the user the ablity to adjust the rotation of the unit cell along it's axis, rotate the unit cell about a vector and translate the unit cell along it's axis. In addition it requires a 'Rotation Axis' as an input which will allow the user to rotate the unit on surfaces/plane parallel to the build plane. It will also automatically compute and place points on the desired input surface via the CAD Face Mesh and Object to Perforace inputs. The final addition, allows to user to input selected CAD edges and define a keep out zone from while no points will be generated. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/orient-unit-cell-to-plane/`. ## Inputs | Name | Type | Description | | - | - | - | | `Unit Cell (UC)` | Mesh | Make sure align in z originally. Also use the center of the unit cell to place points, this can be changed in the source plane block in the orient plane block | | `UC Spacing (mm)` | Scalar | Desired spacing between perforation pattern. | | `Radii: UC Xsec (mm)` | Scalar | This value can be between the minimum radii or maximum radii of an inscribed or circumscribed circle on a Cross Section of your Unit Cell. | For example, if we have a square cross section: Min Value = the distance between the center point and a bisected edge of a the square. Max Value = the distance between the center point and a corner of a the square. | \| `Object to Perforate` | Implicit Body | The implicit body you want to perforate. | \| `CAD Face Mesh` | Mesh | A mesh of the CAD faces you want to perforate. | \| `Relaxation iterations` | Integer | Number of iterations to evenly distribute the points on the mesh. | \| `Random seed` | Integer | Seed value to generate randomness. | \| `Angle to twist` | Scalar | Rotates the Unit Cell about its axis. | \| `'draft' Vector` | Vector | Define the vector you wish to rotate/tilt in. For example, if tilting in the z direction enter 0,0,1 etc | \| `Angle to 'draft'` | Scalar | Rotates the Unit Cell about it's centroid based off the 'draft' Vector | \| `Nom. Thickness (mm)` | Scalar | The nominal thickness of the part you are perforating. This will help ensure the Unit Cell penetrates the part by translating it along its axis. | \| `Rotation Axis` | Scalar Field | This will generally be the primary axis of object you want to perforate. | \| `CAD Edge KOZ` | list\ | A set of CAD Edges you wish to use as, Unit Cell Keep Out Zone (KOZ). This will be used to remove points near the Edges. Select edges on the surface you are selecting above. | \| `Radius of KOZ` | Scalar Field | Define the size of the Keep Out Zone (KOZ). This value will define an exclusion zone around the CAD Edge. | ## Outputs | Name | Type | Description | | - | - | - | | `Merge Mesh Output` | Mesh | Positions a single unit cell at each of the point locations. The angle and positioning inputs are applied at this step. The output is a single mesh of all the positioned unit cells. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/orient-unit-cell-to-plane](https://community.ntop.com/#/detail/orient-unit-cell-to-plane) ## Download [Download orient-unit-cell-to-plane.ntop](https://github.com/nTopology/Utilities-community/releases/download/orient-unit-cell-to-plane-v1.0.0/orient-unit-cell-to-plane.ntop) # Parametric Impeller Source: https://docs.ntop.com/community/packages/ntop/parametric-impeller AI context for Parametric Impeller. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/parametric-impeller). ## Summary This parametric notebook generates exponentially twisted primary and secondary vanes, all driven by adjustable parameters such as twist rate, vane count, and radial taper. ## Package Details | Field | Value | | - | - | | **ID** | `parametric-impeller` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.45+ | | **Domain** | Mechanical | | **Application** | Turbomachinery | | **Complexity** | Intermediate | | **Tags** | `turbo`, `impeller`, `parametric` | | **License** | MIT | | **Verified** | Yes | *** This parametric notebook generates high-fidelity pump geometry by combining a drafted central column with exponentially twisted primary and secondary vanes, all driven by adjustable fluid dynamics parameters like twist rate, vane count, and radial taper. ## **What you get** * **Complex Vane Morphologies:** Primary and secondary vanes with independent height and count controls. * **Advanced Twist Control:** Exponentially ramped twist rates to optimize flow behavior at the vane tips. * **Manufacturing Ready:** Integrated radial draft angles and central column blending for castability or 3D printing. * **Robust Field Logic:** Implicit modeling ensures clean Booleans and predictable offsets for downstream shelling or simulation. ## **Inputs** | Name | Type | Notes | | - | - | - | | `Vanes Max Height` | Scalar | Maximum height of the primary vanes. | | `Vanes Primary Count` | Integer | Total number of primary vanes in the polar array. | | `Secondary Vanes Height` | Scalar | Height multiplier for the secondary vanes. | | `Min Radius` | Scalar | The inner radius at the top of the vanes. | | `Max Radius` | Scalar | The overall outer radius of the impeller. | | `Top Vane Taper` | Angle | Taper angle of the vane cutouts at the top. | | `Linear Twist Rate` | Twist Rate | Base twist rate applied to the vanes (deg/mm). | | `Top Twist Ramp` | Twist Rate | Exponential increase of twist near the vane tips. | | `Exp. k Factor` | Scalar | Growth factor for the exponential twist ramp. | | `Plate Thickness` | Scalar | Thickness of the bottom mounting plate. | | `Column Radius` | Scalar | Radius of the central mounting column. | | `Center Blend Radius` | Scalar | Radius of the blend between the plate and column. | | `Vane Thickness` | Scalar | Nominal wall thickness of the vanes. | | `Draft Angle` | Angle | Radial draft applied to vanes for mold release. | | `Hole Radius` | Scalar | Radius of the central shaft hole. | ## **Outputs** | Name | Type | Notes | | - | - | - | | `Final Solid` | Implicit Body | The completed impeller geometry, ready for simulation or export. | ## **Modeling Principles** * **Late Trimming:** To maintain field integrity, all components are modeled as "infinite" bodies and intersected with a master domain at the final step. * **Normalized Fields:** The twist operation uses normalized distance fields to prevent thickness distortion during high-twist maneuvers. * **Interactive Polar Arrays:** Utilizes a custom remap-based polar array for faster performance and better field continuity than standard geometry-based arrays. ## **License** MIT. *** ## Source [https://community.ntop.com/#/detail/parametric-impeller](https://community.ntop.com/#/detail/parametric-impeller) ## Download [Download parametric-impeller.ntop](https://github.com/nTopology/Utilities-community/releases/download/parametric-impeller-v1.0.0/parametric-impeller.ntop) # Parametric Pyramid Horn Antenna Source: https://docs.ntop.com/community/packages/ntop/parametric-pyramid-horn-antenna AI context for Parametric Pyramid Horn Antenna. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/parametric-pyramid-horn-antenna). ## Summary This block synthesizes a Pyramid Horn Antenna by iterating to find an optimal χ (Chi) value. It generates a 3D manifold including the feed waveguide and flared aperture. Refer to the Technical Diagram for dimension mapping: A/B (Aperture) a ## Package Details | Field | Value | | - | - | | **ID** | `parametric-pyramid-horn-antenna` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.45+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `antenna`, `waveguide`, `rf`, `parametric`, `aperture`, `horn` | | **License** | MIT | | **Verified** | Yes | *** This block synthesizes a Pyramid Horn Antenna by iterating to find an optimal χ (Chi) value. It generates a 3D manifold including the feed waveguide and flared aperture. Refer to the Technical Diagram for dimension mapping: A/B (Aperture) and L1/L2 (Slant Lengths). ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/parametric-pyramid-horn-antenna/`. ## Inputs | Name | Type | Description | | - | - | - | | `Desired Gain (dBi)` | Scalar | Desired Gain (dBi) | | `f [Hz]` | Scalar | Design Frequency \[Hz] | | `a [cm]` | Scalar | Waveguide Broad Wall (a) | | `b [cm]` | Scalar | Waveguide Narrow Wall (b) | | `Waveguide - L [cm]` | Scalar | Waveguide Length \[cm] | | `t [cm]` | Scalar | Thickness \[cm] | | `+/- % Variation of χi for Sampling` | Scalar | Optimization Search Window (%) For example, if the Initial Chi value is 100 and the % Variation defined is 15, the Sampling Range will be define between 85 - 115. | | `Number of Design Points` | Integer | This value defines the number of sample points or design points you which to run. It takes the Sample Range, previously defined, and simply divides by this value. | | `% Tolerance to Check` | Scalar | Convergence Tolerance (%) | ## Outputs | Name | Type | Description | | - | - | - | | `Pyramid Horn: Waveguide + Aperature` | Implicit Body | Generates the final 3D manifold by boolean-subtracting the inner hollow volume from the external horn-waveguide shell based on the calculated slant lengths P\_E and P\_H. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/parametric-pyramid-horn-antenna](https://community.ntop.com/#/detail/parametric-pyramid-horn-antenna) ## Download [Download parametric-pyramid-horn-antenna.ntop](https://github.com/nTopology/Utilities-community/releases/download/parametric-pyramid-horn-antenna-v1.0.0/parametric-pyramid-horn-antenna.ntop) # Perforate with Normal Holes Source: https://docs.ntop.com/community/packages/ntop/perforate-with-normal-holes AI context for Perforate with Normal Holes. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/perforate-with-normal-holes). ## Summary Creates a random distribution of normal-direction holes in one or more surfaces. It lets the user specify an exact quantity of holes that are randomly distributed and somewhat equally spaced. ## Package Details | Field | Value | | - | - | | **ID** | `perforate-with-normal-holes` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `perforate`, `holes`, `random`, `distribution`, `surface`, `normal-direction` | | **License** | MIT | | **Verified** | Yes | *** Creates a random distribution of normal-direction holes in one or more surfaces. It lets the user specify an exact quantity of holes that are randomly distributed and somewhat equally spaced. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/perforate-with-normal-holes/`. ## Inputs | Name | Type | Description | | - | - | - | | `Outer Hole Diameter` | Scalar | Hole diameter on the outer surface(s) of the part. | | `Inner Hole Diameter` | Scalar | Hole diameter on the inner surface(s) of the part. | | `Max Part Thickness` | Scalar | Part thickness, which will be the same as the depth of the holes. | | `Point Count` | Integer | Total quantity of holes on the surface(s). | | `Relaxation Iterations` | Integer | Equalizes point spacing. Larger value will take longer to process but will result in more equally spaced holes. | | `Thin Wall Body` | Implicit Body | Implicit body on which holes are desired. | | `CAD Face(s)` | list\ | CAD face(s) on which holes will be placed. If using more than 1 CAD face, all faces must be adjacent. | ## Outputs | Name | Type | Description | | - | - | - | | `FINAL Body` | Implicit Body | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/perforate-with-normal-holes](https://community.ntop.com/#/detail/perforate-with-normal-holes) ## Download [Download perforate-with-normal-holes.ntop](https://github.com/nTopology/Utilities-community/releases/download/perforate-with-normal-holes-v1.0.0/perforate-with-normal-holes.ntop) # Phasor noise for efficient 3D dehomogenisation Source: https://docs.ntop.com/community/packages/ntop/phasor-noise-3d-dehomogenisation AI context for Phasor noise for efficient 3D dehomogenisation. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/phasor-noise-3d-dehomogenisation). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Woldseth, Jensen & Sigmund (DTU) develop this dehomogenisation procedure in direct collaboration with nTopology, using the nTop implicit geometry kernel to exploit the phasor noise framework. ## Package Details | Field | Value | | - | - | | **ID** | `phasor-noise-3d-dehomogenisation` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Optimization | | **Complexity** | Advanced | | **Tags** | `research-paper`, `topology-optimization`, `de-homogenization`, `implicit-geometry` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Independent research paper referencing nTopology — this entry links out to the original publication. By Rebekka V. Woldseth, Peter Dørffler Ladegaard Jensen & Ole Sigmund (Technical University of Denmark), *Structural and Multidisciplinary Optimization*, 2025. Developed in direct collaboration with nTopology using the nTop implicit geometry kernel. Cover image: Figure 1 from the paper, open access under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). [Read it on Springer](https://link.springer.com/article/10.1007/s00158-025-04074-z) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/phasor-noise-3d-dehomogenisation](https://community.ntop.com/#/detail/phasor-noise-3d-dehomogenisation) ## Download [Download phasor-noise-3d-dehomogenisation.ntop](https://github.com/nTopology/Utilities-community/releases/download/phasor-noise-3d-dehomogenisation-v1.0.0/phasor-noise-3d-dehomogenisation.ntop) # Plane from 3 Points Source: https://docs.ntop.com/community/packages/ntop/plane-from-3-points AI context for Plane from 3 Points. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/plane-from-3-points). ## Summary Create a plane from 3 points. ## Package Details | Field | Value | | - | - | | **ID** | `plane-from-3-points` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `plane`, `three-points`, `geometry`, `construction` | | **License** | MIT | | **Verified** | Yes | *** Create a plane from 3 points. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/plane-from-3-points/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point 1` | Point | First point to define the plane. | | `Point 2` | Point | Second point to define the plane. | | `Point 3` | Point | Third point to define the plane. | | `Flip normal` | bool | Flips the orientation of the plane. | ## Outputs | Name | Type | Description | | - | - | - | | `Plane` | plane | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/plane-from-3-points](https://community.ntop.com/#/detail/plane-from-3-points) ## Download [Download plane-from-3-points.ntop](https://github.com/nTopology/Utilities-community/releases/download/plane-from-3-points-v1.0.0/plane-from-3-points.ntop) # Planes Following a Curve Source: https://docs.ntop.com/community/packages/ntop/planes-following-a-curve AI context for Planes Following a Curve. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/planes-following-a-curve). ## Summary This custom block outputs planes spaced at the given distance a part and have a z direction normal to the surface and a x direction that follows the provided curve. ## Package Details | Field | Value | | - | - | | **ID** | `planes-following-a-curve` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `planes`, `curve`, `spaced`, `normal`, `frenet-frame` | | **License** | MIT | | **Verified** | Yes | *** This custom block outputs planes spaced at the given distance a part and have a z direction normal to the surface and a x direction that follows the provided curve. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/planes-following-a-curve/`. ## Inputs | Name | Type | Description | | - | - | - | | `Curve` | curve\_interface | Curve for planes to follow | | `Body` | Implicit Body | Implicit that the plane will be normal to | | `Line Spacing` | Scalar | How close the intervals are for determining the tangent vector along the curve. The smaller the line spacing, the clower the vector will be to following the curve. | | `Dist between Planes` | Scalar | Spacing between consecutive output planes along the curve. | ## Outputs | Name | Type | Description | | - | - | - | | `Destination Plane` | list\ | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/planes-following-a-curve](https://community.ntop.com/#/detail/planes-following-a-curve) ## Download [Download planes-following-a-curve.ntop](https://github.com/nTopology/Utilities-community/releases/download/planes-following-a-curve-v1.0.0/planes-following-a-curve.ntop) # Point from Bounding Box Source: https://docs.ntop.com/community/packages/ntop/point-from-bounding-box AI context for Point from Bounding Box. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/point-from-bounding-box). ## Summary Input an implicit body and extract a point on the bounding box based on the min, max, or centroid values of the bounding box in x, y, and z. ## Package Details | Field | Value | | - | - | | **ID** | `point-from-bounding-box` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `bounding-box`, `implicit`, `centroid`, `min-max`, `coordinate` | | **License** | MIT | | **Verified** | Yes | *** Input an implicit body and extract a point on the bounding box based on the min, max, or centroid values of the bounding box in x, y, and z. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/point-from-bounding-box/`. ## Inputs | Name | Type | Description | | - | - | - | | `Body` | Implicit Body | Body to extract the point from | | `X` | Choice | Location of the point in the x direction. | | `Y` | Choice | Location of the point in the y direction. | | `Z` | Choice | Location of the point in the z direction. | ## Outputs | Name | Type | Description | | - | - | - | | `Point` | Point | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/point-from-bounding-box](https://community.ntop.com/#/detail/point-from-bounding-box) ## Download [Download point-from-bounding-box.ntop](https://github.com/nTopology/Utilities-community/releases/download/point-from-bounding-box-v1.0.0/point-from-bounding-box.ntop) # Preziosa Francesco SRL and Add-it cut robot gripper weight 32-40% Source: https://docs.ntop.com/community/packages/ntop/preziosa-robot-gripper-weight-reduction AI context for Preziosa Francesco SRL and Add-it cut robot gripper weight 32-40%. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/preziosa-robot-gripper-weight-reduction). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Preziosa Francesco SRL and Add-it cut robot gripper weight 32-40% ## Package Details | Field | Value | | - | - | | **ID** | `preziosa-robot-gripper-weight-reduction` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Additive Manufacturing | | **Complexity** | Intermediate | | **Tags** | `case-study`, `topology-optimization`, `robotics` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/robot-gripper-topology-optimization-metal-3d-printing/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/preziosa-robot-gripper-weight-reduction](https://community.ntop.com/#/detail/preziosa-robot-gripper-weight-reduction) ## Download [Download preziosa-robot-gripper-weight-reduction.ntop](https://github.com/nTopology/Utilities-community/releases/download/preziosa-robot-gripper-weight-reduction-v1.0.0/preziosa-robot-gripper-weight-reduction.ntop) # Profile from CAD Face Source: https://docs.ntop.com/community/packages/ntop/profile-from-cad-face AI context for Profile from CAD Face. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/profile-from-cad-face). ## Summary This custom block takes a flat cad face and converts it to a profile. ## Package Details | Field | Value | | - | - | | **ID** | `profile-from-cad-face` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `profile`, `cad`, `face`, `conversion`, `flat`, `planar` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes a flat cad face and converts it to a profile. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/profile-from-cad-face/`. ## Inputs | Name | Type | Description | | - | - | - | | `Flat CAD face` | brep\_face | Face that will become the profile | | `Tolerance` | Scalar | Tolerance between created profile and original CAD face. | ## Outputs | Name | Type | Description | | - | - | - | | `Profile of CAD Face` | new\_profile | Converts the CAD Face to an implicit and extracts the profile of the face from the location of the plane. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/profile-from-cad-face](https://community.ntop.com/#/detail/profile-from-cad-face) ## Download [Download profile-from-cad-face.ntop](https://github.com/nTopology/Utilities-community/releases/download/profile-from-cad-face-v1.0.0/profile-from-cad-face.ntop) # Regular Points in Body Source: https://docs.ntop.com/community/packages/ntop/regular-points-in-body AI context for Regular Points in Body. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/regular-points-in-body). ## Summary This custom block creates a grid of evenly spaced points in a body ## Package Details | Field | Value | | - | - | | **ID** | `regular-points-in-body` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `grid`, `points`, `evenly-spaced`, `body`, `sampling` | | **License** | MIT | | **Verified** | Yes | *** This custom block creates a grid of evenly spaced points in a body ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/regular-points-in-body/`. ## Inputs | Name | Type | Description | | - | - | - | | `Body` | Implicit Body | Body used to create the evenly spaced points | | `Grid spacing` | Vector | Spacing between the points | ## Outputs | Name | Type | Description | | - | - | - | | `Output` | | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/regular-points-in-body](https://community.ntop.com/#/detail/regular-points-in-body) ## Download [Download regular-points-in-body.ntop](https://github.com/nTopology/Utilities-community/releases/download/regular-points-in-body-v1.0.0/regular-points-in-body.ntop) # Remap Cylindrical Field Source: https://docs.ntop.com/community/packages/ntop/remap-cylindrical-field AI context for Remap Cylindrical Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/remap-cylindrical-field). ## Summary Remap a scalar field into a cylindrical space. The only values that will be mapped are values along the positive X-axis, and the Y-axis between -length/2 and +length/2. This block will not attempt to scale the field values to compensate for ## Package Details | Field | Value | | - | - | | **ID** | `remap-cylindrical-field` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `remap`, `cylindrical`, `scalar-field`, `coordinate-transform`, `mapping` | | **License** | MIT | | **Verified** | Yes | *** Remap a scalar field into a cylindrical space. The only values that will be mapped are values along the positive X-axis, and the Y-axis between -length/2 and +length/2. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Cylindrical Body block. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/remap-cylindrical-field/`. ## Inputs | Name | Type | Description | | - | - | - | | `Field` | Scalar Field | Scalar field to remap. | | `Y Mapping Length` | Scalar | The length of the scalar field along the Y-axis to wrap the around the circumference of the cylindrical space. | ## Outputs | Name | Type | Description | | - | - | - | | `Scalar Field_0` | Scalar Field | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/remap-cylindrical-field](https://community.ntop.com/#/detail/remap-cylindrical-field) ## Download [Download remap-cylindrical-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/remap-cylindrical-field-v1.0.0/remap-cylindrical-field.ntop) # Remap Spherical Field Source: https://docs.ntop.com/community/packages/ntop/remap-spherical-field AI context for Remap Spherical Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/remap-spherical-field). ## Summary Remap a scalar field into a spherical space. The only values that will be mapped are values along the positive X-axis, the Y-axis between -length/2 and +length/2, and the positive Z-axis. This block will not attempt to scale the field value ## Package Details | Field | Value | | - | - | | **ID** | `remap-spherical-field` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `remap`, `spherical`, `scalar-field`, `coordinate-transform`, `mapping` | | **License** | MIT | | **Verified** | Yes | *** Remap a scalar field into a spherical space. The only values that will be mapped are values along the positive X-axis, the Y-axis between -length/2 and +length/2, and the positive Z-axis. This block will not attempt to scale the field values to compensate for distortion. If the compensation is preferred, use the Remap Spherical Body block. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/remap-spherical-field/`. ## Inputs | Name | Type | Description | | - | - | - | | `Field` | Scalar Field | Scalar field to remap. | | `Y Mapping Length` | Scalar | The length of the scalar field along the Y-axis to wrap around the longitudinal circumference of the spherical space. | | `Z Mapping Length` | Scalar | The length of the scalar field along the Z-axis to wrap around the latitudinal circumference of the spherical space. | ## Outputs | Name | Type | Description | | - | - | - | | `Scalar Field_0` | Scalar Field | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/remap-spherical-field](https://community.ntop.com/#/detail/remap-spherical-field) ## Download [Download remap-spherical-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/remap-spherical-field-v1.0.0/remap-spherical-field.ntop) # Remove CAD Faces from Shell Source: https://docs.ntop.com/community/packages/ntop/remove-cad-faces-from-shell AI context for Remove CAD Faces from Shell. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/remove-cad-faces-from-shell). ## Summary This custom block takes a CAD Body and multiple CAD faces and will shell the body, removing those faces from the shell. ## Package Details | Field | Value | | - | - | | **ID** | `remove-cad-faces-from-shell` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `remove`, `cad`, `faces`, `shell`, `hollow`, `open-shell` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes a CAD Body and multiple CAD faces and will shell the body, removing those faces from the shell. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/remove-cad-faces-from-shell/`. ## Inputs | Name | Type | Description | | - | - | - | | `CAD body` | brep | The CAD body to be shelled. | | `Faces to remove` | list\ | Where there will be an opening in the shell | | `Tolerance` | Scalar | Used for converting the CAD body to an implicit body. | | `Thickness` | Scalar Field | Shell Thickness | ## Outputs | Name | Type | Description | | - | - | - | | `Shelled Part` | Implicit Body | Boolean intersect the thickened remaining faces with the implicit body to remove excess. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/remove-cad-faces-from-shell](https://community.ntop.com/#/detail/remove-cad-faces-from-shell) ## Download [Download remove-cad-faces-from-shell.ntop](https://github.com/nTopology/Utilities-community/releases/download/remove-cad-faces-from-shell-v1.0.0/remove-cad-faces-from-shell.ntop) # Remove Duplicate Points Source: https://docs.ntop.com/community/packages/ntop/remove-duplicate-points AI context for Remove Duplicate Points. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/remove-duplicate-points). ## Summary This custom block removes duplicate points in a point list based on a selected distance threshold. ## Package Details | Field | Value | | - | - | | **ID** | `remove-duplicate-points` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `remove`, `duplicate`, `points`, `deduplication`, `distance-threshold` | | **License** | MIT | | **Verified** | Yes | *** This custom block removes duplicate points in a point list based on a selected distance threshold. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/remove-duplicate-points/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point list` | Point List | Point List | | `Distance threshold` | Scalar | Distance threshold for removing the duplicate points | ## Outputs | Name | Type | Description | | - | - | - | | `Points` | Point List | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/remove-duplicate-points](https://community.ntop.com/#/detail/remove-duplicate-points) ## Download [Download remove-duplicate-points.ntop](https://github.com/nTopology/Utilities-community/releases/download/remove-duplicate-points-v1.0.0/remove-duplicate-points.ntop) # Replace File Extension Source: https://docs.ntop.com/community/packages/ntop/replace-file-extension AI context for Replace File Extension. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/replace-file-extension). ## Summary This custom block replaces the file extension of a file path with an option to add a suffix before the extension. ## Package Details | Field | Value | | - | - | | **ID** | `replace-file-extension` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `file-path`, `extension`, `string`, `utility`, `suffix` | | **License** | MIT | | **Verified** | Yes | *** This custom block replaces the file extension of a file path with an option to add a suffix before the extension. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/replace-file-extension/`. ## Inputs | Name | Type | Description | | - | - | - | | `Path` | file\_path | Original path | | `New extension` | Text | New file extension | | `Suffix` | Text | Optional suffix to add to the path before the new extension. | ## Outputs | Name | Type | Description | | - | - | - | | `New Path` | file\_path | Adds the new extension to the file name | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/replace-file-extension](https://community.ntop.com/#/detail/replace-file-extension) ## Download [Download replace-file-extension.ntop](https://github.com/nTopology/Utilities-community/releases/download/replace-file-extension-v1.0.0/replace-file-extension.ntop) # Replace Values in a List Source: https://docs.ntop.com/community/packages/ntop/replace-values-in-a-list AI context for Replace Values in a List. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/replace-values-in-a-list). ## Summary This custom block replaces (substitutes) values of an initial list with newly defined values at the selected index of the initial list. ## Package Details | Field | Value | | - | - | | **ID** | `replace-values-in-a-list` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `replace`, `list`, `index`, `substitution`, `data` | | **License** | MIT | | **Verified** | Yes | *** This custom block replaces (substitutes) values of an initial list with newly defined values at the selected index of the initial list. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/replace-values-in-a-list/`. ## Inputs | Name | Type | Description | | - | - | - | | `Values` | Scalar List | List of initial values | | `Replacement index` | Integer | Index of the list at which the replacement is done | | `New values` | Scalar List | List of new values to be replaced | ## Outputs | Name | Type | Description | | - | - | - | | `Final list set` | Scalar List | Combining both halves to create the new list with the replaced values. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/replace-values-in-a-list](https://community.ntop.com/#/detail/replace-values-in-a-list) ## Download [Download replace-values-in-a-list.ntop](https://github.com/nTopology/Utilities-community/releases/download/replace-values-in-a-list-v1.0.0/replace-values-in-a-list.ntop) # Select CAD Faces by Containment Source: https://docs.ntop.com/community/packages/ntop/select-cad-faces-by-containment AI context for Select CAD Faces by Containment. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/select-cad-faces-by-containment). ## Summary This custom block selects CAD faces that are contained inside a region. The entire bounding box of each face must be contained. ## Package Details | Field | Value | | - | - | | **ID** | `select-cad-faces-by-containment` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `select`, `cad`, `faces`, `containment`, `region`, `bounding-box` | | **License** | MIT | | **Verified** | Yes | *** This custom block selects CAD faces that are contained inside a region. The entire bounding box of each face must be contained. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/select-cad-faces-by-containment/`. ## Inputs | Name | Type | Description | | - | - | - | | `CAD Body` | brep | CAD Body to extract faces from | | `Region` | Implicit Body | Region used to select faces | ## Outputs | Name | Type | Description | | - | - | - | | `Any_0` | list\ | Evaluates each face based on the Region field. If the faces max and min points are both within the region, the face is selected. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/select-cad-faces-by-containment](https://community.ntop.com/#/detail/select-cad-faces-by-containment) ## Download [Download select-cad-faces-by-containment.ntop](https://github.com/nTopology/Utilities-community/releases/download/select-cad-faces-by-containment-v1.0.0/select-cad-faces-by-containment.ntop) # SI-BONE scales implant design with batch processing Source: https://docs.ntop.com/community/packages/ntop/si-bone-implant-batch-processing AI context for SI-BONE scales implant design with batch processing. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/si-bone-implant-batch-processing). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary SI-BONE scales implant design with batch processing ## Package Details | Field | Value | | - | - | | **ID** | `si-bone-implant-batch-processing` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `case-study`, `medical`, `batch-processing` | | **License** | Proprietary | | **Verified** | No | *** ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.jpg) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/additive-manufacturing-orthopedic-implants-batch-processing/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/si-bone-implant-batch-processing](https://community.ntop.com/#/detail/si-bone-implant-batch-processing) ## Download [Download si-bone-implant-batch-processing.ntop](https://github.com/nTopology/Utilities-community/releases/download/si-bone-implant-batch-processing-v1.0.0/si-bone-implant-batch-processing.ntop) # Side Duct Body Source: https://docs.ntop.com/community/packages/ntop/side-duct-body AI context for Side Duct Body. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/side-duct-body). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Creates an air duct implicit body that transitions from a parallelogram cross-section at the inlet to a circular cross-section at the outlet, following a user-defined spline path. ## Package Details | Field | Value | | - | - | | **ID** | `side-duct-body` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.4 | | **nTop Version** | 5.28+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `duct`, `aerospace`, `spline`, `implicit`, `inlet`, `outlet`, `transition`, `parallelogram` | | **License** | MIT | | **Verified** | No | *** Creates an air duct implicit body that transitions from a parallelogram cross-section at the inlet to a circular cross-section at the outlet. The duct follows a user-defined spline path from inlet to outlet. ## Inputs | Name | Type | Description | | - | - | - | | Inlet Location | Point | 3D position of the duct inlet center | | Inlet Width | Real (length) | Width of the parallelogram cross-section at the inlet | | Inlet Height | Real (length) | Height of the parallelogram cross-section at the inlet | | Inlet Radius | Real (length) | Blend radius smoothing the inlet cross-section corners | | Inlet Angle | Real (angle) | Side angle of the parallelogram at the inlet | | Outlet Location | Point | 3D position of the duct outlet center | | Outlet Radius | Real (length) | Radius of the circular cross-section at the outlet | ## Outputs | Name | Type | Description | | - | - | - | | Bounded | Implicit | The bounded duct implicit body | ## Notes * The duct path is defined by a spline connecting the inlet and outlet locations. Path curvature is controlled by **Path Start Tension** and **Path End Tension** internal parameters (default 1.27). * **Transition Continuity** controls the smoothness of the cross-section transition along the path (default: tangent continuous). * The outlet diameter is computed as `2 × Outlet Radius`. * A **Butt Line Zero** reference plane is established at the origin for coordinate alignment. *** ## Source [https://community.ntop.com/#/detail/side-duct-body](https://community.ntop.com/#/detail/side-duct-body) ## Download [Download side-duct-body.ntop](https://github.com/nTopology/Utilities-community/releases/download/side-duct-body-v1.0.4/side-duct-body.ntop) # Single Panel Wing Source: https://docs.ntop.com/community/packages/ntop/single-panel-wing AI context for Single Panel Wing. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/single-panel-wing). ## Summary Create a Single Panel Wing driven by Root Chord Length, Wing Span, QC Angle, and Taper Ratio. ## Package Details | Field | Value | | - | - | | **ID** | `single-panel-wing` | | **Type** | Block | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 5.45+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `wing`, `aircraft` | | **License** | MIT | | **Verified** | Yes | *** Create a Single Panel Wing driven by Root Chord Length, Wing Span, QC Angle, and Taper Ratio. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/single-panel-wing/`. ## Usage 1. Open the provided `.ntop` file in nTop 5.45+. 2. Add the Single Panel Wing custom block in your notebook. 3. Define the Root Point to position the wing relative to your fuselage. 4. Adjust the Quarter Chord Angle and Dihedral Angle to set the wing's orientation and stability characteristics. 5. Control the wing's shape using Root Chord Length, Wing Span, and Taper Ratio. 6. Apply aerodynamic washout by adjusting the Twist Mag. 7. The output is a mirrored Implicit Body, providing a full wing assembly symmetrical across the global plane. ## Inputs & outputs | Name | Type | Description | | - | - | - | | `Root Point` | Point | The frontmost point where the wing attaches to the fuselage. | | `Root Chord Length` | Scalar | Wing length from front to back at the root. | | `Wing Span` | Scalar | Full span of both wings (tip-to-tip). | | `Quarter Chord Angle` | Scalar | Sweep angle measured at 25% chord line; positive values sweep back, negative sweep forward. | | `Taper Ratio` | Scalar | Ratio of tip chord to root chord (defines how much the wing narrows). | | `Twist Mag` | Scalar | The magnitude of angular twist (washout) from root to tip. | | `Dihedral Angle` | Scalar | The upward V-angle of the wings for lateral stability. | | **Output** | **Implicit Body** | The final generated, twisted, and mirrored wing geometry. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/single-panel-wing](https://community.ntop.com/#/detail/single-panel-wing) ## Download [Download single-panel-wing.ntop](https://github.com/nTopology/Utilities-community/releases/download/single-panel-wing-v0.1.0/single-panel-wing.ntop) # Slices by Plane Source: https://docs.ntop.com/community/packages/ntop/slices-by-plane AI context for Slices by Plane. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/slices-by-plane). ## Summary This Custom Block slices an implicit body into sections of equal widths based on the choice of a slicing plane. ## Package Details | Field | Value | | - | - | | **ID** | `slices-by-plane` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Additive Manufacturing | | **Complexity** | Beginner | | **Tags** | `slices`, `plane`, `implicit`, `sections`, `equal-width`, `additive` | | **License** | MIT | | **Verified** | Yes | *** This Custom Block slices an implicit body into sections of equal widths based on the choice of a slicing plane. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/slices-by-plane/`. ## Inputs | Name | Type | Description | | - | - | - | | `Body` | Implicit Body | Body to slice | | `Slicing plane` | Choice | The plane to slice the body | | `Section count` | Integer | How many sections you would like to slice the body into. | ## Outputs | Name | Type | Description | | - | - | - | | `Final Sections` | Implicit Body List | Boolean Intersects the input body with the corresponding list of boxes. This will divide the body into the number of input sections | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/slices-by-plane](https://community.ntop.com/#/detail/slices-by-plane) ## Download [Download slices-by-plane.ntop](https://github.com/nTopology/Utilities-community/releases/download/slices-by-plane-v1.0.0/slices-by-plane.ntop) # Sorted Points by Distance from Surface Source: https://docs.ntop.com/community/packages/ntop/sorted-points-by-distance-from-surface AI context for Sorted Points by Distance from Surface. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/sorted-points-by-distance-from-surface). ## Summary This custom block sorts a set of points based on the distance from a surface of a given implicit. ## Package Details | Field | Value | | - | - | | **ID** | `sorted-points-by-distance-from-surface` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `sorted`, `points`, `distance`, `surface`, `proximity`, `ordering` | | **License** | MIT | | **Verified** | Yes | *** This custom block sorts a set of points based on the distance from a surface of a given implicit. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/sorted-points-by-distance-from-surface/`. ## Inputs | Name | Type | Description | | - | - | - | | `Point list` | Point List | Points for sorting | | `Body` | Implicit Body | Body to compare for distance when sorting | ## Outputs | Name | Type | Description | | - | - | - | | `Sorted` | Point List | Sorts the point list based on the line lengths | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/sorted-points-by-distance-from-surface](https://community.ntop.com/#/detail/sorted-points-by-distance-from-surface) ## Download [Download sorted-points-by-distance-from-surface.ntop](https://github.com/nTopology/Utilities-community/releases/download/sorted-points-by-distance-from-surface-v1.0.0/sorted-points-by-distance-from-surface.ntop) # Hypersonic Vehicles, Modeled in Days: How Specter Aerospace Accelerates Hyperso… Source: https://docs.ntop.com/community/packages/ntop/specter-aerospace-hypersonic-design AI context for Hypersonic Vehicles, Modeled in Days: How Specter Aerospace Accelerates Hyperso…. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/specter-aerospace-hypersonic-design). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Hypersonic Vehicles, Modeled in Days: How Specter Aerospace Accelerates Hypersonic Design ## Package Details | Field | Value | | - | - | | **ID** | `specter-aerospace-hypersonic-design` | | **Type** | Case Study | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Aerospace | | **Complexity** | Intermediate | | **Tags** | `case-study`, `aerospace`, `hypersonic` | | **License** | Proprietary | | **Verified** | No | *** # Hypersonic Vehicles, Modeled in Days: How Specter Aerospace Accelerates Hypersonic Design ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Case study hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.ntop.com/resources/case-studies/how-specter-aerospace-accelerates-hypersonic-design-with-ntop/) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/specter-aerospace-hypersonic-design](https://community.ntop.com/#/detail/specter-aerospace-hypersonic-design) ## Download [Download specter-aerospace-hypersonic-design.ntop](https://github.com/nTopology/Utilities-community/releases/download/specter-aerospace-hypersonic-design-v1.0.0/specter-aerospace-hypersonic-design.ntop) # Spiral Curve Source: https://docs.ntop.com/community/packages/ntop/spiral-curve AI context for Spiral Curve. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/spiral-curve). ## Summary This custom block creates a spiral curve based on the given inputs. ## Package Details | Field | Value | | - | - | | **ID** | `spiral-curve` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.41+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `spiral`, `curve`, `parametric`, `geometry`, `helix` | | **License** | MIT | | **Verified** | Yes | *** This custom block creates a spiral curve based on the given inputs. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/spiral-curve/`. ## Inputs | Name | Type | Description | | - | - | - | | `Starting Point` | Point | Starting location of the spiral | | `Direction` | Vector | Direction of the spiral created | | `Height` | Scalar | Height of the spiral | | `Radius` | Scalar | Radius that the spiral follows | | `Number of Rotations` | Scalar | Total number of full 360° turns in the spiral. | ## Outputs | Name | Type | Description | | - | - | - | | `Spiral` | curve\_interface | Spiral through the points. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/spiral-curve](https://community.ntop.com/#/detail/spiral-curve) ## Download [Download spiral-curve.ntop](https://github.com/nTopology/Utilities-community/releases/download/spiral-curve-v1.0.0/spiral-curve.ntop) # Spiral Field Source: https://docs.ntop.com/community/packages/ntop/spiral-field AI context for Spiral Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/spiral-field). ## Summary This custom block takes a radius and creates an involute that begins with that radius created. Equations used: [https://math.stackexchange.com/questions/411855/implicit-representation-of-the-involute-of-a-circle/415023](https://math.stackexchange.com/questions/411855/implicit-representation-of-the-involute-of-a-circle/415023) ## Package Details | Field | Value | | - | - | | **ID** | `spiral-field` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `spiral`, `field`, `involute`, `implicit`, `parametric` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes a radius and creates an involute that begins with that radius created. Equations used: [https://math.stackexchange.com/questions/411855/implicit-representation-of-the-involute-of-a-circle/415023](https://math.stackexchange.com/questions/411855/implicit-representation-of-the-involute-of-a-circle/415023) ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/spiral-field/`. ## Inputs | Name | Type | Description | | - | - | - | | `Radius` | Scalar | Spiral Radius | | `Center` | Point | Spiral Center | | `Normal` | Vector | The spiral will curve around this normal | | `Spiral Direction` | Choice | The rotation direction you would like the spiral to turn | ## Outputs | Name | Type | Description | | - | - | - | | `Output` | | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/spiral-field](https://community.ntop.com/#/detail/spiral-field) ## Download [Download spiral-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/spiral-field-v1.0.0/spiral-field.ntop) # Split with Printer Volume Source: https://docs.ntop.com/community/packages/ntop/split-with-printer-volume AI context for Split with Printer Volume. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/split-with-printer-volume). ## Summary This custom block will split a body into different sections to fit inside the printer using the rectangular cell map. ## Package Details | Field | Value | | - | - | | **ID** | `split-with-printer-volume` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Additive Manufacturing | | **Complexity** | Beginner | | **Tags** | `split`, `printer`, `volume`, `additive`, `build-volume`, `sectioning` | | **License** | MIT | | **Verified** | Yes | *** This custom block will split a body into different sections to fit inside the printer using the rectangular cell map. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/split-with-printer-volume/`. ## Inputs | Name | Type | Description | | - | - | - | | `Body` | Implicit Body | Body to Split | | `Start location` | Point | To change where the split is located, you can move the start location | | `Printer volume` | bounding\_box | Bounding box representing the usable build volume of the printer. The body will be split into sections that fit within this volume. | | `Perimeter gap` | Scalar | Space between the edge of the printer volume and the body. | ## Outputs | Name | Type | Description | | - | - | - | | `Final Split` | Implicit Body List | Removes any implicit body with no resulting body | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/split-with-printer-volume](https://community.ntop.com/#/detail/split-with-printer-volume) ## Download [Download split-with-printer-volume.ntop](https://github.com/nTopology/Utilities-community/releases/download/split-with-printer-volume-v1.0.0/split-with-printer-volume.ntop) # STDEV Source: https://docs.ntop.com/community/packages/ntop/stdev AI context for STDEV. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/stdev). ## Summary In statistics, the standard deviation is a measure of the amount of variation or dispersion of a set of values. A low standard deviation indicates that the values tend to be close to the mean of the set, while a high standard deviation indi ## Package Details | Field | Value | | - | - | | **ID** | `stdev` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `stdev`, `statistics`, `standard`, `deviation`, `measure`, `amount` | | **License** | MIT | | **Verified** | Yes | *** In statistics, the standard deviation is a measure of the amount of variation or dispersion of a set of values. A low standard deviation indicates that the values tend to be close to the mean of the set, while a high standard deviation indicates that the values are spread out over a wider range. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/stdev/`. ## Inputs | Name | Type | Description | | - | - | - | | `Scalar List` | Scalar List | Samples to compute data metric | | `Trimming Threshold` | Scalar | Trimming Threshold from 0-0.5. A value of 0.1 removes 10% of the largest and smallest values of the dataset. | ## Outputs | Name | Type | Description | | - | - | - | | `Standard Deviation` | Scalar | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/stdev](https://community.ntop.com/#/detail/stdev) ## Download [Download stdev.ntop](https://github.com/nTopology/Utilities-community/releases/download/stdev-v1.0.0/stdev.ntop) # CB - Supports - Bar - Straight Tips - Part to BPlate (External) Source: https://docs.ntop.com/community/packages/ntop/supports-bar-straight-tips-part-to-bplate-external AI context for CB - Supports - Bar - Straight Tips - Part to BPlate (External). Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/supports-bar-straight-tips-part-to-bplate-external). ## Summary This CB creates cylindrical bar supports with straight tips and flared base from the build plate to the part. Supports external part surfaces only...i.e. surfaces with clear line of sight to build plate. ## Package Details | Field | Value | | - | - | | **ID** | `supports-bar-straight-tips-part-to-bplate-external` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Additive Manufacturing | | **Complexity** | Beginner | | **Tags** | `supports`, `bar`, `straight`, `tips`, `part`, `bplate` | | **License** | MIT | | **Verified** | Yes | *** This CB creates cylindrical bar supports with straight tips and flared base from the build plate to the part. Supports external part surfaces only...i.e. surfaces with clear line of sight to build plate. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/supports-bar-straight-tips-part-to-bplate-external/`. ## Inputs | Name | Type | Description | | - | - | - | | `Part` | Implicit Body | The part to generate bar supports for. Only external surfaces with clear line of sight to the build plate will be supported. | | `Build plane` | plane | Build Plane from which the bar supports orginate. | | `Point Spacing` | Scalar | Spacing of points where support bars will connect to part. | | `Overhang angle` | Scalar | Angle with respect to the build plane. Surfaces at or below this angle necessitate support structures. | | `Tip Offset` | Scalar | Offset between the part and the connection point | | `Tip Thickness (Part)` | Scalar | Thickness of the tip connection at the part | | `Tip Thickness (Bar)` | Scalar | Thickness of the tip connection to the part at the start of the support bars. | | `Bar Thickness (Tip)` | Scalar | Thickness of the support bars at the point where the tip connection points are started. | | `Bar Thickness (Base)` | Scalar | Thickness of the vertical support bars at the baseplate. | | `Blend radius` | Scalar | Blend Radius of the bar supports to the build plate. | ## Outputs | Name | Type | Description | | - | - | - | | `Supports Trimmed` | Implicit Body | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/supports-bar-straight-tips-part-to-bplate-external](https://community.ntop.com/#/detail/supports-bar-straight-tips-part-to-bplate-external) ## Download [Download supports-bar-straight-tips-part-to-bplate-external.ntop](https://github.com/nTopology/Utilities-community/releases/download/supports-bar-straight-tips-part-to-bplate-external-v1.0.0/supports-bar-straight-tips-part-to-bplate-external.ntop) # Parametrically designed surface topography on AM lattice structures Source: https://docs.ntop.com/community/packages/ntop/surface-topography-am-lattice-structures AI context for Parametrically designed surface topography on AM lattice structures. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/surface-topography-am-lattice-structures). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Chahid, Racasan, Pagani, Townsend et al. correlate parametrically designed CAD surface texture with areal surface roughness on additively manufactured lattice structures for improved design validation. ## Package Details | Field | Value | | - | - | | **ID** | `surface-topography-am-lattice-structures` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Additive Manufacturing | | **Complexity** | Advanced | | **Tags** | `research-paper`, `lattice`, `surface-roughness`, `lpbf` | | **License** | Proprietary | | **Verified** | No | *** # Parametrically designed surface topography on CAD models of additively manufactured lattice structures for improved design validation Independent research paper referencing nTopology — this entry links out to the original publication. By Y. Chahid, R. Racasan, L. Pagani, A. Townsend et al. (University of Huddersfield), *Additive Manufacturing*, 2021. [Read it on ScienceDirect](https://www.sciencedirect.com/science/article/pii/S2214860420311039) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/surface-topography-am-lattice-structures](https://community.ntop.com/#/detail/surface-topography-am-lattice-structures) ## Download [Download surface-topography-am-lattice-structures.ntop](https://github.com/nTopology/Utilities-community/releases/download/surface-topography-am-lattice-structures-v1.0.0/surface-topography-am-lattice-structures.ntop) # Table Element Source: https://docs.ntop.com/community/packages/ntop/table-element AI context for Table Element. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/table-element). ## Summary Access an element in a table from row and column indices. ## Package Details | Field | Value | | - | - | | **ID** | `table-element` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `table`, `element`, `row`, `column`, `lookup`, `data` | | **License** | MIT | | **Verified** | Yes | *** Access an element in a table from row and column indices. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/table-element/`. ## Inputs | Name | Type | Description | | - | - | - | | `Table` | table | Starting table | | `Row` | Integer | Index of row | | `Column` | Integer | Index of column | ## Outputs | Name | Type | Description | | - | - | - | | `Any_0` | Text | Extracts the corresponding element from the table | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/table-element](https://community.ntop.com/#/detail/table-element) ## Download [Download table-element.ntop](https://github.com/nTopology/Utilities-community/releases/download/table-element-v1.0.0/table-element.ntop) # Text along a Curve on Body Source: https://docs.ntop.com/community/packages/ntop/text-along-a-curve-on-body AI context for Text along a Curve on Body. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/text-along-a-curve-on-body). ## Summary This custom block takes a line of text and converts it to an implicit body. This uses the Arial Bold Font. ## Package Details | Field | Value | | - | - | | **ID** | `text-along-a-curve-on-body` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.28+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `text`, `curve`, `implicit`, `font`, `engraving`, `label` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes a line of text and converts it to an implicit body. This uses the Arial Bold Font. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/text-along-a-curve-on-body/`. ## Inputs | Name | Type | Description | | - | - | - | | `Text` | Text | Text to be converted to an implicit | | `Curve` | curve\_interface | Curve that the text will follow. Recommendation: Place the curve on the body for the best results. | | `Body` | Implicit Body | The text will be placed on the body aligned by the normal of the body surface and the provided curve. | | `Letter spacing` | Scalar | Approximate spacing between each letter. | | `Height` | Scalar | Height of one Letter | | `Width` | Scalar | Width of one Letter | | `Depth` | Scalar | Text depth | | `Displayed on body` | Choice | Choose to apply either an emboss or engraving. | | `Blend radius` | Scalar Field | Blend radius between the text and the body | ## Outputs | Name | Type | Description | | - | - | - | | `Final Body` | Implicit Body | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/text-along-a-curve-on-body](https://community.ntop.com/#/detail/text-along-a-curve-on-body) ## Download [Download text-along-a-curve-on-body.ntop](https://github.com/nTopology/Utilities-community/releases/download/text-along-a-curve-on-body-v1.0.0/text-along-a-curve-on-body.ntop) # Text Label on Part Source: https://docs.ntop.com/community/packages/ntop/text-label-on-part AI context for Text Label on Part. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/text-label-on-part). ## Summary This custom block applies a text label engraving or embossing on a part. ## Package Details | Field | Value | | - | - | | **ID** | `text-label-on-part` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `text`, `label`, `engraving`, `embossing`, `marking` | | **License** | MIT | | **Verified** | Yes | *** This custom block applies a text label engraving or embossing on a part. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/text-label-on-part/`. ## Inputs | Name | Type | Description | | - | - | - | | `Body` | Implicit Body | Body that will have the label | | `Location` | Point | Approximate location for the text. This will later be placed directly on the surface, so no need for this to be exact. | | `Text` | Text | Text to be converted to an implicit | | `Letter spacing` | Scalar | Spacing between each letter (this is applied before the transformation) | | `Length` | Scalar | Length of the entire text string (before warping it to the surface) | | `Width` | Scalar | Width of the entire text string (before warping it to the surface) | | `Rotate` | Scalar | Rotate around the normal to the surface | | `Thickness` | Scalar | Thickness of engraving/embossing. | | `Lock ratio` | bool | If you want to lock the ratio between the length and the width, check this option and then use the scale choice to only use the length or width when defining the size. | | `Scale` | Choice | If you want to lock the ratio between the length and the width, check the lock ratio and then use the scale choice to only use the length or width when defining the size. | | `Displayed on body` | Choice | Choose to either apply an emboss or an engraving | | `Text region` | Implicit Body | The text will be confined to this defined region. If you want this on a specific mesh or CAD face, try using the one sided offset or extrude CAD face and choose that as the text region | ## Outputs | Name | Type | Description | | - | - | - | | `Final Body` | Implicit Body | Choose to engrave or emboss | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/text-label-on-part](https://community.ntop.com/#/detail/text-label-on-part) ## Download [Download text-label-on-part.ntop](https://github.com/nTopology/Utilities-community/releases/download/text-label-on-part-v1.0.0/text-label-on-part.ntop) # Text to Implicit Source: https://docs.ntop.com/community/packages/ntop/text-to-implicit AI context for Text to Implicit. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/text-to-implicit). ## Summary This custom block takes a line of text and converts it to an implicit body. This uses the Arial Bold Font. ## Package Details | Field | Value | | - | - | | **ID** | `text-to-implicit` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.42+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `text`, `implicit`, `font`, `conversion`, `geometry` | | **License** | MIT | | **Verified** | Yes | *** This custom block takes a line of text and converts it to an implicit body. This uses the Arial Bold Font. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/text-to-implicit/`. ## Inputs | Name | Type | Description | | - | - | - | | `Text` | Text | Text to be converted to an implicit | | `Letter spacing` | Scalar | Spacing between each letter (this is applied before the transformation) | | `Location` | Point | The center of the text string will be placed at this location. | | `X rotation angle` | Scalar | Use if you would like to rotate the object around the x axis | | `Y rotation angle` | Scalar | Use if you would like to rotate the object around the y axis | | `Z rotation angle` | Scalar | Use if you would like to rotate the object around the z axis | | `Length` | Scalar | Length of the entire text string | | `Width` | Scalar | Width of the entire text string | | `Depth` | Scalar | Text depth | | `Lock ratio` | bool | If you want to lock the ratio between the length and the width, check this option and then use the scale choice to only use the length or width when defining the size. | | `Scale` | Choice | If you want to lock the ratio between the length and the width, check the lock ratio option and then use the scale choice to only use the length or width when defining the size. | ## Outputs | Name | Type | Description | | - | - | - | | `Final Word` | Implicit Body | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/text-to-implicit](https://community.ntop.com/#/detail/text-to-implicit) ## Download [Download text-to-implicit.ntop](https://github.com/nTopology/Utilities-community/releases/download/text-to-implicit-v1.0.0/text-to-implicit.ntop) # Design and numerical simulation of direct cooling evaporators for chip thermal… Source: https://docs.ntop.com/community/packages/ntop/tpms-direct-cooling-evaporator-chip-test AI context for Design and numerical simulation of direct cooling evaporators for chip thermal…. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/tpms-direct-cooling-evaporator-chip-test). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Design and numerical simulation of direct cooling evaporators for chip thermal test based on triply periodic minimal surfaces ## Package Details | Field | Value | | - | - | | **ID** | `tpms-direct-cooling-evaporator-chip-test` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Thermal | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `tpms`, `thermal`, `simulation` | | **License** | Proprietary | | **Verified** | No | *** # Design and numerical simulation of direct cooling evaporators for chip thermal test based on triply periodic minimal surfaces ![cover](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/community/packages/ntop/cover.png) Research paper hosted on ntop.com — this entry links out to the original. [Read it on ntop.com](https://www.sciencedirect.com/science/article/pii/S2214157X2500231X) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/tpms-direct-cooling-evaporator-chip-test](https://community.ntop.com/#/detail/tpms-direct-cooling-evaporator-chip-test) ## Download [Download tpms-direct-cooling-evaporator-chip-test.ntop](https://github.com/nTopology/Utilities-community/releases/download/tpms-direct-cooling-evaporator-chip-test-v1.0.0/tpms-direct-cooling-evaporator-chip-test.ntop) # Catalog of triply periodic minimal surfaces, equation-based lattice… Source: https://docs.ntop.com/community/packages/ntop/tpms-lattice-catalog-homogenized-properties AI context for Catalog of triply periodic minimal surfaces, equation-based lattice…. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/tpms-lattice-catalog-homogenized-properties). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Fisher, Miller, Bartolai, Simpson & Yukish (Penn State) catalog TPMS lattice structures as nTopology files, with images, CAD models, and homogenized elastic property data for engineered structures. ## Package Details | Field | Value | | - | - | | **ID** | `tpms-lattice-catalog-homogenized-properties` | | **Type** | Research Paper | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.49+ | | **Domain** | Geometry | | **Complexity** | Intermediate | | **Tags** | `research-paper`, `tpms`, `lattice`, `geometry` | | **License** | Proprietary | | **Verified** | No | *** # Catalog of triply periodic minimal surfaces, equation-based lattice structures, and their homogenized property data Independent research paper referencing nTopology — this entry links out to the original publication. By J.W. Fisher, S.W. Miller, J. Bartolai, T.W. Simpson & M.A. Yukish (Penn State), *Data in Brief*, 2023. Distributes nTopology-format implementations of implicit TPMS surface equations alongside homogenized property data. [Read it on ScienceDirect](https://www.sciencedirect.com/science/article/pii/S2352340923004298) ## License Proprietary. *** ## Source [https://community.ntop.com/#/detail/tpms-lattice-catalog-homogenized-properties](https://community.ntop.com/#/detail/tpms-lattice-catalog-homogenized-properties) ## Download [Download tpms-lattice-catalog-homogenized-properties.ntop](https://github.com/nTopology/Utilities-community/releases/download/tpms-lattice-catalog-homogenized-properties-v1.0.0/tpms-lattice-catalog-homogenized-properties.ntop) # True False Field Source: https://docs.ntop.com/community/packages/ntop/true-false-field AI context for True False Field. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/true-false-field). ## Summary This custom block creates a field composed of 0s and 1s. If the translation location = 0, the field will equal 1 at all positive values of the field and 0 for negative values of the field. To reverse this, check the Flip input. This can be ## Package Details | Field | Value | | - | - | | **ID** | `true-false-field` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `boolean-field`, `binary`, `mask`, `threshold`, `implicit` | | **License** | MIT | | **Verified** | Yes | *** This custom block creates a field composed of 0s and 1s. If the translation location = 0, the field will equal 1 at all positive values of the field and 0 for negative values of the field. To reverse this, check the Flip input. This can be useful when adding ramps or only applying a ramp to a certain section by multiplying this field with another. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/true-false-field/`. ## Inputs | Name | Type | Description | | - | - | - | | `Scalar field` | Scalar Field | The field you want to modify | | `Flip` | bool | Changes the positive or negative assignment | ## Outputs | Name | Type | Description | | - | - | - | | `Ramp` | Scalar Field | Assigns binary values to the input scalar field | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/true-false-field](https://community.ntop.com/#/detail/true-false-field) ## Download [Download true-false-field.ntop](https://github.com/nTopology/Utilities-community/releases/download/true-false-field-v1.0.0/true-false-field.ntop) # U or V Plane Source: https://docs.ntop.com/community/packages/ntop/u-or-v-plane AI context for U or V Plane. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/u-or-v-plane). ## Summary This custom block will place a plane that is centered at the UV Origin with a normal pointing in the U or V direction. ## Package Details | Field | Value | | - | - | | **ID** | `u-or-v-plane` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `plane`, `uv`, `origin`, `normal`, `direction` | | **License** | MIT | | **Verified** | Yes | *** This custom block will place a plane that is centered at the UV Origin with a normal pointing in the U or V direction. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/u-or-v-plane/`. ## Inputs | Name | Type | Description | | - | - | - | | `Face` | brep\_face | The Face to reference for the UV origin | | `U or V Plane` | Choice | The direction you want the plane normal to face | ## Outputs | Name | Type | Description | | - | - | - | | `Chosen Plane` | plane | The choice of which plane direction to use | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/u-or-v-plane](https://community.ntop.com/#/detail/u-or-v-plane) ## Download [Download u-or-v-plane.ntop](https://github.com/nTopology/Utilities-community/releases/download/u-or-v-plane-v1.0.0/u-or-v-plane.ntop) # UV Span Source: https://docs.ntop.com/community/packages/ntop/uv-span AI context for UV Span. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/uv-span). ## Summary This custom block will calculate the span in the U or V direction of a CAD Face. ## Package Details | Field | Value | | - | - | | **ID** | `uv-span` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `uv`, `span`, `cad-face`, `measurement`, `parametric` | | **License** | MIT | | **Verified** | Yes | *** This custom block will calculate the span in the U or V direction of a CAD Face. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/uv-span/`. ## Inputs | Name | Type | Description | | - | - | - | | `Face` | brep\_face | The CAD Face to analyze | | `U or V Span` | Choice | The direction you want to obtain the span of | | `Divisions` | Scalar | The number of divisions will determine how many cells are created in the U or V direction. If you have a part with a lot of curvature, we recommend a higher number of divisions. | ## Outputs | Name | Type | Description | | - | - | - | | `Output` | | Output. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/uv-span](https://community.ntop.com/#/detail/uv-span) ## Download [Download uv-span.ntop](https://github.com/nTopology/Utilities-community/releases/download/uv-span-v1.0.0/uv-span.ntop) # Voronoi Surface Lattice with KOZ Source: https://docs.ntop.com/community/packages/ntop/voronoi-surface-lattice-with-koz AI context for Voronoi Surface Lattice with KOZ. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/voronoi-surface-lattice-with-koz). ## Summary This custom block creates a Voronoi Surface Lattice that avoids input Keep Out Zones (KOZ) ## Package Details | Field | Value | | - | - | | **ID** | `voronoi-surface-lattice-with-koz` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.44+ | | **Domain** | Additive Manufacturing | | **Complexity** | Beginner | | **Tags** | `voronoi`, `surface`, `lattice`, `keep-out-zone`, `additive` | | **License** | MIT | | **Verified** | Yes | *** This custom block creates a Voronoi Surface Lattice that avoids input Keep Out Zones (KOZ) ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/voronoi-surface-lattice-with-koz/`. ## Inputs | Name | Type | Description | | - | - | - | | `Body` | Implicit Body | The body that will have the surface voronoi | | `Keep out zones` | Implicit Body List | Areas to avoid. Spheres work best, but you can also use other geometry as well. | | `Mesh tolerance` | Scalar | Used to create the surface lattice | | `Additional gap` | Scalar Field | If the lattice still is intersecting the part, increase this additional gap input. | | `Point count` | Integer | Number of points used for the voronoi surface region. | | `Spatial weighting` | Scalar Field | An optional input to cntrol the spacing of the generated points. | | `Beam thickness` | Scalar Field | The beam thickness of the resulting lattice | ## Outputs | Name | Type | Description | | - | - | - | | `Voronoi` | voronoi\_surface\_lattice\_body | Generates the Voronoi Lattice | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/voronoi-surface-lattice-with-koz](https://community.ntop.com/#/detail/voronoi-surface-lattice-with-koz) ## Download [Download voronoi-surface-lattice-with-koz.ntop](https://github.com/nTopology/Utilities-community/releases/download/voronoi-surface-lattice-with-koz-v1.0.0/voronoi-surface-lattice-with-koz.ntop) # Wood Texture Source: https://docs.ntop.com/community/packages/ntop/wood-texture AI context for Wood Texture. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/wood-texture). ## Summary Wood Texture. ## Package Details | Field | Value | | - | - | | **ID** | `wood-texture` | | **Type** | Block | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.43+ | | **Domain** | Geometry | | **Complexity** | Beginner | | **Tags** | `wood`, `texture` | | **License** | MIT | | **Verified** | Yes | *** Wood Texture. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/wood-texture/`. ## Inputs | Name | Type | Description | | - | - | - | | `Axis` | Implicit Body | The central axis to control the "Growth" | | `Frequency` | Integer | Number of growth rings in the wood pattern. Higher values produce denser ring patterns. Try a range of 1–50 to start. | | `Organic-ness of field` | Scalar | Generate the "organic-ness" of the field. Higher frequencies will create more chaotic patterns. Try a frequency range of 1-50 to start. | ## Outputs | Name | Type | Description | | - | - | - | | `Wave` | Scalar Field | The wave generator -- based on the above inputs. | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/wood-texture](https://community.ntop.com/#/detail/wood-texture) ## Download [Download wood-texture.ntop](https://github.com/nTopology/Utilities-community/releases/download/wood-texture-v1.0.0/wood-texture.ntop) # Advanced Wrist Brace Workflow Source: https://docs.ntop.com/community/packages/ntop/wrist-brace-split-workflow AI context for Advanced Wrist Brace Workflow. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/wrist-brace-split-workflow). ## Summary This notebook walks through how to create a wrist brace with a voronoi and other lattices throughout the design. This is the advanced version of two nTop Files for the Wrist Brace Application Workbook, and this notebook also covers how to s ## Package Details | Field | Value | | - | - | | **ID** | `wrist-brace-split-workflow` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.45+ | | **Domain** | Medical | | **Complexity** | Advanced | | **Tags** | `advanced`, `wrist`, `brace`, `medical` | | **License** | MIT | | **Verified** | Yes | *** This notebook walks through how to create a wrist brace with a voronoi and other lattices throughout the design. This is the advanced version of two nTop Files for the Wrist Brace Application Workbook, and this notebook also covers how to split the wrist brace into two parts and add connector geometry. For the file without these advanced steps, please review the "Wrist Brace Workflow". ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/advanced-wrist-brace-workflow/`. ## Inputs | Name | Type | Description | | - | - | - | | `Thickness of Arm Brace` | Scalar | Wall thickness of the brace shell. | | `Beam Thickness` | Scalar Field | Thickness of the lattice beams inside the brace. | | `Clearance` | Scalar | Gap between mating parts to account for fit and assembly tolerance. | | `Point count` | Integer | Number of voronoi cells created. | | `Rim Thickness` | Scalar | Thickness of the solid rim border running around the edge of the brace. | | `# of Connectors` | Integer | Number of Connectors on the cut line per side | | `Connector Dist from Edge` | Scalar | How close the connectors will be placed to the edge of the wrist brace | | `Split Plane` | plane | This plane and angle will determine how the brace is split into two sections. Change the angle to change the location of the split. | | `Gap Thickness` | Scalar | Defining how large the gap is when splitting the two sections into two. | ## Outputs | Name | Type | Description | | - | - | - | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/wrist-brace-split-workflow](https://community.ntop.com/#/detail/wrist-brace-split-workflow) ## Download [Download wrist-brace-split-workflow.ntop](https://github.com/nTopology/Utilities-community/releases/download/wrist-brace-split-workflow-v1.0.0/wrist-brace-split-workflow.ntop) # Wrist Brace Workflow Source: https://docs.ntop.com/community/packages/ntop/wrist-brace-workflow AI context for Wrist Brace Workflow. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/wrist-brace-workflow). ## Summary This notebook walks through how to create a wrist brace with a voronoi and other lattices throughout the design. This is the simplified version of two nTop Files for the Wrist Brace Application Workbook. To learn how to split the wrist brac ## Package Details | Field | Value | | - | - | | **ID** | `wrist-brace-workflow` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 1.0.0 | | **nTop Version** | 5.45+ | | **Domain** | Medical | | **Complexity** | Intermediate | | **Tags** | `wrist`, `brace`, `medical` | | **License** | MIT | | **Verified** | Yes | *** This notebook walks through how to create a wrist brace with a voronoi and other lattices throughout the design. This is the simplified version of two nTop Files for the Wrist Brace Application Workbook. To learn how to split the wrist brace into two parts and add connector geometry, please review the "Advanced Wrist Brace Workflow". ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/ntop/wrist-brace-workflow/`. ## Inputs | Name | Type | Description | | - | - | - | | `Wrist Brace Thickness` | Scalar | Wall thickness of the brace shell. | | `Beam Thickness` | Scalar Field | Thickness of the lattice beams inside the brace. | | `Clearance` | Scalar | Gap between mating parts to account for fit and assembly tolerance. | | `Point Count` | Integer | Number of voronoi cells created. | | `Rim Thickness` | Scalar | Thickness of the solid rim border running around the edge of the brace. | ## Outputs | Name | Type | Description | | - | - | - | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/wrist-brace-workflow](https://community.ntop.com/#/detail/wrist-brace-workflow) ## Download [Download wrist-brace-workflow.ntop](https://github.com/nTopology/Utilities-community/releases/download/wrist-brace-workflow-v1.0.0/wrist-brace-workflow.ntop) # Pilatus PC 12 Parametric Airplane Source: https://docs.ntop.com/community/packages/orcunbulat/pilatus-pc-12-parametric-airplane AI context for Pilatus PC 12 Parametric Airplane. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/pilatus-pc-12-parametric-airplane). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Parametric model of a civilian aircraft Pilatus PC 12. ## Package Details | Field | Value | | - | - | | **ID** | `pilatus-pc-12-parametric-airplane` | | **Type** | Notebook | | **Author** | nTop | | **Version** | 0.1.0 | | **nTop Version** | 5.53+ | | **Domain** | Aerospace | | **Complexity** | Advanced | | **Tags** | `airplane`, `parametric`, `modelling`, `aircraft` | | **License** | MIT | | **Verified** | No | *** # Pilatus PC-12 Parametric Airplane A fully parametric model of the Pilatus PC-12, a civilian turboprop utility aircraft. Eight exposed inputs drive the wing design and are the variable set intended for parametric sweeps and nTopCL automation (profile, span, chord, sweep, taper, dihedral, and wing position); everything else in the notebook is derived from them or held constant. ## Installation Clone this repo or copy the package folder into your nTop workspace: ```bash theme={null} git clone https://github.com/nTopology/Utilities-community.git ``` The package lives at `packages/orcunbulat/pilatus-pc-12-parametric-airplane/`. ## Usage 1. Open the provided `.ntop` file in nTop 5.53+. 2. Connect your input geometry / fields to the exposed inlets. 3. Tune parameters. Export via the standard nTop exporters. ## Inputs * **Root Chord** — Wing chord at the fuselage centerline. Together with span and the taper ratios it sets wing area (PC-12 reference area 25.81 m²). * **Wing Span** — Full span, tip to tip. The wing CB receives half of this per side; with winglets enabled, the span-compensation formula keeps this value exact. * **NACA Code** — The PC-12 uses the NASA/Langley low-speed series (GA(W)-1 derivatives): LS(1)-0417MOD at the root and LS(1)-0313 at the tip (17% and 13% thick respectively), blended along the span. NACA 2417 is selected as the closest match. * **Taper Ratio Inner** — Chord reduction across the inner panel. PC-12: constant chord inboard (1.0). * **QC Angle Inner** — Sweep at the quarter-chord line of the inner panel; positive sweeps back. The PC-12 is essentially unswept — the visible leading-edge sweep comes from taper alone. * **Dihedral Angle** — Upward V-angle of the wing for roll stability. PC-12 reference ≈ 5°. * **Wings Root Height** — Vertical position of the wing root; negative places the wing low on the fuselage (the PC-12 is a low-wing aircraft). * **Wing Root X** — Longitudinal station of the wing root leading edge. Tie to Aircraft Length so the wing keeps its position on stretched variants. ## Output * **Multi Region Mesh** — the assembled implicit geometry meshed via `multi_region_mesh_from_implicit`. ## License MIT. *** ## Source [https://community.ntop.com/#/detail/pilatus-pc-12-parametric-airplane](https://community.ntop.com/#/detail/pilatus-pc-12-parametric-airplane) ## Download [Download pilatus-pc-12-parametric-airplane.ntop](https://github.com/nTopology/Utilities-community/releases/download/pilatus-pc-12-parametric-airplane-v0.1.0/pilatus-pc-12-parametric-airplane.ntop) # nTop → Blender → Fusion: Lightweight Mesh Export & CAM Source: https://docs.ntop.com/community/packages/umpquajoseph/ntop-blender-fusion-cam AI context for nTop → Blender → Fusion: Lightweight Mesh Export & CAM. Not linked in navigation. > This page is for AI assistant context only. To use this package, visit [community.ntop.com](https://community.ntop.com/#/detail/ntop-blender-fusion-cam). > **Community submission — not verified by nTop.** This package was submitted by an outside community member and has not been reviewed or verified by nTop. Treat its accuracy, safety, and compatibility claims with appropriate caution. ## Summary Decimate dense nTop meshes in Blender to reduce file size by 10x, then machine the lightweighted model in Fusion 360 using mesh-compatible CAM toolpaths. ## Package Details | Field | Value | | - | - | | **ID** | `ntop-blender-fusion-cam` | | **Type** | Bundle | | **Author** | umpquajoseph | | **Version** | 0.1.0 | | **nTop Version** | 4.12+ | | **Domain** | Mechanical | | **Complexity** | Intermediate | | **Tags** | `blender`, `fusion 360`, `cam`, `mesh`, `decimation`, `lightweighting`, `cnc`, `voronoi` | | **License** | MIT | | **Verified** | No | *** Decimate dense nTop meshes in Blender to reduce file size by up to 10x without sacrificing fidelity, then take the reduced model all the way through to CNC manufacturing in Fusion 360. The core problem this solves: when you directly use the mesh result from implicit modeling without post-processing, high-density nTop models (lattices, scaffolds, voronoi structures) produce very large mesh files, which is entirely natural given the geometric complexity of these structures. Trying to share, demo, or machine these without decimation leads to extreme load times and frequent crashes in downstream tools. Blender's decimation modifier provides a flexible option for this step in the workflow. ## Workflow ### Part 1 - Lighten the mesh in Blender [Watch the tutorial (Video 1)](https://youtu.be/r7uYutD8P2g) Export your mesh from nTop, then use Blender's Decimate modifier to shrink the file size while staying within fidelity tolerance. In the example, a 1 GB+ scaffold model comes down to \~2 MB with no meaningful visual loss. As a bonus, Blender also lets you colorize models and export them as colored 3D files, useful for sharing and demos. ### Part 2 - Machine the mesh in Fusion 360 [Watch the tutorial (Video 2)](https://www.youtube.com/watch?v=_EKJIaY0cqs) Take the decimated mesh into Fusion 360 for CAM. Two important differences when machining mesh bodies vs. CAD bodies: * You cannot reference individual faces, edges, or points; only the mesh as a whole. * The toolpaths that work best for meshes are **3D Flat** and **3D Scallop**. The example part was machined with a roughing bit only (limited CNC time). Fidelity improves significantly with smaller bit sizes or a dedicated finishing pass. ## Example files | File | Description | Tutorial | | - | - | - | | `high-density-scaffold.ntop` | High-density scaffold, Blender decimation example | [Video 1](https://youtu.be/r7uYutD8P2g) | | `voronoi-gradient.ntop` | Voronoi gradient, source model for manufacturing | [Video 2](https://www.youtube.com/watch?v=_EKJIaY0cqs) | | `fusion-manufactured-voronoi-gradient.f3d` | Fusion 360 file with CAM toolpaths set up | [Video 2](https://www.youtube.com/watch?v=_EKJIaY0cqs) | | `manufactured-full-scale.jpeg` | Photo of the CNC-machined voronoi part | | | `manufactured-close-up.jpeg` | Close-up of the machined surface | | ## License MIT. *** ## Source [https://community.ntop.com/#/detail/ntop-blender-fusion-cam](https://community.ntop.com/#/detail/ntop-blender-fusion-cam) ## Download [Download ntop-blender-fusion-cam.ntop](https://github.com/nTopology/Utilities-community/releases/download/ntop-blender-fusion-cam-v0.1.0/ntop-blender-fusion-cam.ntop) # Are there restrictions on trial or educational licenses? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/are-there-restrictions-on-trial-or-educational-licenses ## Question: Is the complete functionality of the software open to students and trial users? Do trials and educational users get all of the import and export options? Is the trial version or educational version the same as the full version? ## Applies to: * nTop * Education Licenses * Trial licenses ## Answer: Educational and trial licenses are fully functional without any feature gating. They have the exact same features as a paid license of nTop. ## Keywords: *licensing export license question trial restriction educational full program* # As an Org Admin, how can I add a user to my organization when there is an error? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/as-an-org-admin-how-can-i-add-a-user-to-my-organization-when-there-is-an-error ## Issue: When attempting to assign a license to an end-user, the Org. Admin encounters the error message "The following action cannot be performed; please contact [support@ntop.com."](mailto:support@ntop.com.") ![If you try to add a user to your organization that already exists in a different organization, you will receive this error message.](https://files.learn.ntop.com/help-articles/access-and-installation/34764620414867.png) ## Applies to: * nTop User Dashboard * Org. Admin ## Cause: The most likely cause is that the end-user previously acquired an account, and the associated email is linked to a separate organization. End-users may only be part of a single organization. ## Solution: One of our Support team members can reassign the end user to your organization. [Contact nTop support](https://support.ntopology.com/hc/en-us/requests/new) to request this change. ## Keywords: *licensing add user org admin organization administrator can't org* # Can I change my name on the user dashboard? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/can-i-change-my-name-on-the-user-dashboard ## Issue: The user's display name contains spelling or grammatical errors. Users would like to edit account details. ## Applies to: * nTop * User Dashboard ## Cause: This may occur due to an error when submitting a license request. It may also occur due to errors translating non-English letters. ## Solution: Currently, standard users cannot currently edit account details. Contact support or your organization Org Admin If you see a mistake with your info. ## Keywords: *account user dashboard name issue* # Can I transfer my license to a different computer? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/can-i-transfer-my-license-to-a-different-computer ## Question: Can licenses be used on multiple computers? Can I install nTop on a personal laptop and an office workstation? ## Applies to: * nTop * nTop Automate * Cloud Licenses ## Answer: You may install the desktop application on multiple computers using one set of credentials. The [nTop EULA](/help-articles/access-and-installation/accounts-and-licensing/what-is-the-ntop-end-user-license-agreement) permits concurrent use of Cloud licenses on three workstations. > [!NOTE] > > *Note: By default, all licenses have one device concurrency, which means that you must log out of the first instance before using it on the next device to ensure the license's check-in is instantaneous.* ## Keywords: *cloud computer license use multiple transfer concurrent users* # Configuring a Local License Server for nTop Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/configuring-a-local-license-server-for-ntop **Applies to:** IT Administrators and users managing nTop local or floating licenses on Windows. *** ## Objective This guide explains how to configure a local license server using LMTOOLS to ensure stable communication between your computer and nTop software. Following these steps helps prevent common "Vendor Daemon" errors and firewall blocks. *** ### Procedure #### 1. Prepare the License File Before starting the server, you must configure the license file to allow local communication. * Open your \*.lic file in Notepad or a similar text editor. * SERVER Line: Change this\_host to localhost. Verify that the port 27000 is listed at the end. * Example: SERVER localhost HOSTID 27000 * VENDOR Line: Add PORT=2080 to the end of the line. This locks the vendor daemon to a specific port, preventing Windows Firewall from blocking random port assignments. * Example: VENDOR ntoplm PORT=2080 * **Save** the file. #### 2. Configure LMTOOLS Open **LMTOOLS** as an **Administrator**. Administrative privileges are required to create Windows Services and write to debug logs. **Step A: Config Services** 1. Navigate to the **Config Services** tab. 2. **Service Name:** Type **nTopLM**. 3. Paths: Use the Browse buttons to select your lmgrd.exe, your edited \*.lic file, and a location for a debug .log file. 4. **Settings:** Check both **Use Services** and **Start Server at Power Up**. 5. Click **Save Service**. **Step B: Start the Server** 1. Go to the **Start/Stop/Reread** tab. 2. Click **Start Server**. The status bar should display "Server Start Successful." 3. Troubleshooting: If the start fails, open Task Manager, select End Task for any existing lmgrd.exe or ntoplm.exe processes, and try clicking Start Server again. **Step C: Verify Status** 1. Go to the **Server Status** tab. 2. Click **Perform Status Enquiry**. 3. Scroll through the results to confirm the following lines appear: * `license server UP (MASTER)` * `ntoplm: UP` * `Users of ntop_full: (Total of X licenses issued)` #### 3. Point nTop to the Local Server Now that the server is active, you need to configure nTop to look for the license locally. 1. Launch **nTop**. 2. On the login screen, click **License Settings** at the bottom. 3. Server Address: Enter **27000\@localhost**. 4. Click **Apply**. **And that's it! You've successfully configured your local license server.** *** ### Why is this necessary * Why **localhost**? This tells nTop to look internally for the license rather than searching the external network, speeding up the handshake. * Why **PORT=2080**? Without a fixed port, the vendor daemon "jumps" between ports. This often triggers the error: "VD is starting, please check the vendor daemon's status" because the Windows Firewall blocks the unexpected random ports. Are you still having issues? Contact the **nTop Support Team** at [support.ntop.com](https://support.ntop.com/hc/en-us), and we'll be happy to help! # Does an Org admin use one of the organization's end-user licenses? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/does-an-org-admin-use-one-of-the-organization-s-end-user-licenses ## Question: Does the Org admin count as one of the organization's licenses? For example, if there are two end-users at my company with licenses managed by an IT professional, are three licenses required? ## Applies to: Customers using Organization Administration licensing. ## Answer: No, the Org admin does not count against the license total. However, an Org admin may also use a license if they are an end-user as well. ## Keywords: *licensing account ntop license question org admin organization* # FlexNet Licensing Error -39,147 Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/flexnet-licensing-error-39-147 ## **Issue** Users encounter a login failure in nTop with the following error message: > [!NOTE] > > `User/host not on INCLUDE list for feature.` > > `Feature: ntop_full` > > `FlexNet Licensing error:-39,147` ## **Cause** This error occurs when the license server is using a FlexNet Options File (.opt) to manage access. The administrator has restricted the ntop\_full feature to a specific list of authorized users or hosts using the INCLUDE keyword. If your specific username or machine name is not explicitly listed on this list, the server will deny the checkout request, even if seats are available. ## **Solution** To resolve this, the **License Administrator** must update the Options File on the license server. ### **Steps for the Administrator:** 1. Locate the FlexNet Options File (typically a **.opt** file located in the same directory as the license manager). 2. Identify the line restricting the **ntop\_full** feature. 3. Add the user to the **INCLUDE** list using the following syntax: > `INCLUDE ntop_full USER [UserName]` > [!NOTE] > *Note: \[UserName] is case-sensitive and must match the login name of the user's workstation.* 4. **Reread** the license file via the LMTOOLS (or your license management utility) to apply the changes without restarting the server. ### **Need Further Assistance?** If the user is still unable to log in after being added to the **INCLUDE** List, please verify that the HostID or Group settings in the Options file do not have a conflicting **EXCLUDE** statement. For further technical support, please contact your nTop Support. # Getting Started with FlexNet Floating License Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-flexnet-floating-license ## **Overview** This guide provides an overview and best practices for deploying our FlexNet Floating Licenses. At this point you would have received an email from us that a FlexNet license was deployed for your organization. This article contains the step-by-step instructions for installing and configuring the license server components and the FlexNet license files. **See Revenera's '**[**FlexNet Publisher License Administration Guide**](https://ntopology.app.box.com/s/9nhukat6b9ypp216hmtflqh1wem2wm0y)**' for detailed installation and operation instructions.** ![A diagram showing how the Flexnet Client interacts with the components of the Flexnet License Server.](https://files.learn.ntop.com/help-articles/access-and-installation/6811985229203.png) ## **Table of Contents** * [Files Needed](#h-01g51v7yvnxc24aq99430vn31v) * [Hardware](#01jadn7hhawtv9rqv7a6wn1kfa) * [Server(s)](#h-01g51v843zthdfnnakcye96zjm) * [Vendor Daemons](#h-01g51v8cvzh34hhtb1ke6t4rzn) * [Network](#h-01g51v8m40q3dd33m5f4qar53t) * [Installation Instructions](#h-01g51v9mjqpvxgmz890zmt8hwp) * [Loading License Components to your Licensing Server](#h-01jadp1wb1rvm68s3sv6gd7cy5) * [Configuring your nTop Licensing Server](#h-01g51vacedpwkjj32adm5fgvt4) * [Exporting Usage Data](#h-01gyfhwz1af09dedq45p1f7pdv) * [End-User Instructions for Starting up nTop](#h-01g51vammrkwcvtw1f2bpghre5) * [End-User Instructions for Starting up nTop Automate](#01jadpp1csbb5125es12ek5bx2) * [Troubleshooting Tips](#h-01ha56r6zvyct3v1y2kadm17x9) ## **Before We Begin** ## **Files Needed** Before getting started you will need the nTopLM MSI file for configuring your license server. You can download the file by clicking [this link](https://files.learn.ntop.com/FlexNet%20Tools%20Download/ntoplm-1.0.0.msi). Once you install the MSI file it will create a folder that contains the tools you will need for the steps outlined in the following sections. The default installation location is inside the nTopology program folder as shown below. ![The ntoplm folder open to show the included files.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133994899.png) ## **Hardware** The FlexNet Floating License requires a FlexNet license server to operate. When selecting a license server: * We generally recommend not running any additional vendors' license managers or other software from this server in order to optimize the server performance. * All files used in conjunction with the license manager software must be located on a disk that is physically local to the server computer(s). * The license server(s) must have a high-speed, reliable Ethernet connection. * Computers that experience extremely high levels of network traffic or processing lag due to high CPU and/or I/O usage are poor candidates for license servers. * Do not use computers that are frequently rebooted. * The license server machine(s) must have a static IP address. ## **Server(s)** Choose a server model: * Single Server: 1 license file installed on one server. * Distributed Servers: Multiple license files installed across multiple servers. * High-Availability Triad. Licenses are installed on one server, plus two backup servers. * You must specify a primary server and two redundant servers. We recommend that you configure multiple single servers instead of a redundant (triad) configuration. If one of the single servers becomes unavailable, then only a portion of your license becomes unavailable, rather than all of them. A redundant-server configuration will add additional network communication overhead, resulting in reduced server performance. When a redundant triad is configured incorrectly, you will lose all of the inherent benefits of redundancy. If the Triad is your choice for server setup, please consider these specific configurations: * Choose three machines of the same platform type (currently only Windows support available). * All three servers should be on the same subnet in the same physical location. * Install the license file and entire licensing directory on each of the three license servers. * Not configuring the servers in this manner defeats the purpose of having redundancy as the server holding these files becomes a single point of failure. ## **Vendor Daemons** We generally recommend not hosting the nTop FlexNet Floating License with other FlexNet Publisher Vendor Daemons on the same server. However, the system does work on license servers that host other vendors' daemons. For optimal performance with multiple vendor daemons on 1 server please ensure: * The license server(s) and your network environment have suitable bandwidth appropriate for the total number of product clients served by all vendor daemons. * We **do not** support combining the license files from multiple vendor daemons in order to run a single LMGRD. * Revenera states that multiple machines, each running one lmgrd, one vendor daemon, and using one license file is the optimal configuration: * The license files for each vendor are independent of one another. * Each server machine can be maintained separately. If one machine goes down, the other machines continue to serve licenses for their vendors. * Each server has its own debug log. ## **Network** The primary network settings to configure the nTop FlexNet Floating License System are the TCP/IP port settings: 2080, 27000-27009 are the default port(s) for FlexNet Publisher. These settings should only be adjusted in exceptional circumstances, such as to avoid using the same ports as other applications/services on your network. Our licensing MSI provides local service and network service permissions on installation. Additionally, you should configure any virus scanners, firewalls, and WAN optimization software to allow the various components of the nTop Floating License System to run & also communicate on the allocated ports. You can edit the license file to use precise port numbers or entirely different port numbers - if necessary. ### **Wi-Fi Connections** We do not recommend connecting your license server to your network with a wireless connection as they are simply less stable, less reliable, and transfer speeds are 10X slower than ethernet. ### **VPN** We do not recommend connecting your license server to your network over a VPN due to transfer speeds compared to an ethernet connection. ## **Installation Instructions** ### **nTop User Dashboard** Now it's time to download your license files. To do this, you will need to visit the nTop user dashboard located at [https://app.ntop.com](https://app.ntop.com). Please use the account you created with us to login. Note that the nTop user dashboard is your central location to manage users, teams and licenses for your entire organization if you have the Org Admin privileges. You can learn more about the Org Admin role [here](/help-articles/access-and-installation/accounts-and-licensing/ntop-org-admin-guide). ### **Generating nTop FlexNet License Files** Below you can see a snapshot of a typical Licenses tab for an Organization. If you had sent us your Host ID(s) ahead of time, the grey "Set Host ID(s)" icon should be blue. Clicking this will automatically download your license file. However, if you haven't sent your Host ID(s) in advance, you can follow the steps below to obtain your Host ID and generate your license files. **![The Flexnet License file can be downloaded from the licenses tab on the organization. ](https://files.learn.ntop.com/help-articles/access-and-installation/34614133997075.png)** ### **Obtaining your Host ID** Please follow the instructions in [this article](/help-articles/access-and-installation/accounts-and-licensing/how-to-obtain-host-id-for-flexnet-floating-license) to obtain your Host ID. ### **Generating the License File** Once you have the Host ID, please click on the grey icon that says "Set Host ID(s)". This button opens a new window for you to enter your single or multiple Host ID(s) separated by commas. ![Select the button next to the FNP license file to set the Host ID. A secondary window will appear to enter the Host ID.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133999251.png) Once you enter the Host ID(s), click "Generate". After a few seconds the "Generate" button should change to "Download" like in the image below. Click "Download" to download your license file. ## The secondary window to enter the Host ID. Once this is complete you can download the license file. ### **Onboarding License** If you purchased the nTop Onboarding Package, you will need to download additional license files. The onboarding license will allow for unlimited users during your onboarding period. You can choose to install both license files on your FlexNet licensing server. ## **Loading License Components to your Licensing Server** Now we need to use the other tools that were included in the nTopLM MSI that we downloaded previously. We will need the following license server components: * lmtools/lmutil * nTop License Manager * lmgrd * lmadmin * nTop Vendor Daemon * ntoplm.exe Once you have the nTop FlexNet Floating license file(s), you will need to add the server address (and port if running several products from the server) to the file in order to load and run it successfully. Please follow the steps below to add these to the file: * Run your servers on a supported operating system on a stable network. Avoid restarts, unless necessary, as they can interfere with continuity of serving floating licenses to your end users. * Your server(s) should communicate with ports 2080 and 27000-27009. These are the default ports the system uses. Although these ports are configurable, changing them may cause conflicts with other applications. ![An example FNP license open in Notepad. The highlighted information needs to be added to the license file to ensure it runs correctly.](https://files.learn.ntop.com/help-articles/access-and-installation/8317293121171.png) ## **Configuring your nTop Licensing Server** * Open LMTOOLS, navigate to 'Config Services'. * Name the Service, we recommend “nTopLM”. * Browse and load lmgrd.exe. * Browse and load the License File. * Check the 'Use Services' box. * *Note: We recommend this option because you can set it up to restart automatically upon reboot of the license server* * Click 'Save Service'. ![The LMTOOLS menu open on the Config Services tab. Here you can specify the path to the lmgrd and Flexnet License files.](https://files.learn.ntop.com/help-articles/access-and-installation/6812077455635.png) ### **Starting Up Your Server** * Navigate to Start/Stop/Reread tab. * Click 'Start Server'. * You will see a success or error message in the bottom left hand corner of the window. ![The LMTOOLS menu open to the Start/Stop/Reread tab. Selecting Start Server will start your Flexnet Server. You should see a Server Start Successful message in the bottom left corner.](https://files.learn.ntop.com/help-articles/access-and-installation/6812090676627.png) ### **Server Status Inquiries** To check the status of your server, navigate to the 'Server Status' tab * Click 'Perform Status Enquiry'. * Check number of licenses issued for 'ntop\_full' and "ntopcl\_full". These numbers should match the count of licenses purchased. ![The LMTOOLS menu open to the Server Status tab. Click Perform Status Enquiry to see the current usage info for the Flexnet Licenses.](https://files.learn.ntop.com/help-articles/access-and-installation/6812147633171.png) Now your license server is setup and ready for use by End Users in your organization. Please share the ''Server Address' with all eligible users. ## **Exporting Usage Data** To export your usage data, please review the information in the "Managing the Options File" chapter in the '[FlexNet Publisher License Administration Guide](https://ntopology.app.box.com/s/9nhukat6b9ypp216hmtflqh1wem2wm0y).' ## **End-User Instructions for Starting up nTop** As an end user, when you start up nTop for the first time, navigate to the ***License Settings*** button. ![The nTop login window. Select License Settings at the bottom.](https://files.learn.ntop.com/help-articles/access-and-installation/20621237555091.png) Enter the license server address (and port - if necessary), which your Org Admin should have shared with you, and click Apply. ![The License Settings menu. Enter your Server address and then click apply.](https://files.learn.ntop.com/help-articles/access-and-installation/20621235221267.png) If a license is available, nTop will start up. If all licenses are checked out, you will receive the message shown below. ![If all nTop licenses are currently in use, nTop will not start up and will instead display a warning message that no licenses are available.](https://files.learn.ntop.com/help-articles/access-and-installation/20621348055955.png) ## **End-User Instructions for Starting up nTop Automate** nTop Automate should work the same way as nTop. Enter the server address following --license in Command Prompt or Powershell along with the Server Address similar to the step above, and it should log you in. ``` ntopcl --license PORT@HOSTNAME ``` ## **Troubleshooting Tips** * Ensure you're running lmtools as an administrator. * The server line in the license file should be set up: server + host + hostID, and then port. * The "this\_host" in the license file must be the license server's IP address or the hostname if using DNS resolution ## Keywords: *cloud license server floating flexnet fnp vendor daemon lmutil flex host id* # Getting Started with Floating Licenses Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-floating-licenses ## **Overview** > [!NOTE] > > **Note: nTop products are desktop-based software applications. They rely on a cloud server for the limited purpose of authenticating users upon login and checking for available software updates.** **During the course of product usage, the applications can also send personalized or anonymous data related to license utilization and feature usage based on the user's preference. This does NOT include any design data and/or intellectual property (e.g., the nTop file and any local files that may be imported or exported, etc. reside entirely on the user's local machine).** **nTop products do not rely on any other cloud component.** This guide provides an overview of the best practices for managing the nTop Floating Licenses for the Org. Admins. You would have received our email that a Floating license was deployed for your organization. You can follow the step-by-step instructions in this article for managing those licenses by adding Users, adding Teams, and assigning users and licenses to Teams so that the users in a Team can get access to the floating licenses assigned to that Team. Note: If you would like the Floating license to be available to all the users in your organization, you don't need to create Teams but [assign the license to be used at the Organization level](#h-01jag6axcrxvk50frq6b2hhef5). All users added to the Organization automatically get access to the Floating licenses. ## **Table of Contents** * ### [User Dashboard](#h-01jadynrbns5hw9hhrmeapwdfq) * ### [Managing Users](#h-01h5aq692zpbs8w18ch0sy3phx) * ### [Managing Teams](#h-01h5aq6esmmden1txr3tfs5dys) * ### [Managing Licenses](#h-01gyqqgsh4r6xaknjhaj99pgqx) * ### [Assigning Floating License to an Organization](#h-01jag6axcrxvk50frq6b2hhef5) * ### [View Active Cloud Floating Sessions](#h-01jdk24n048nj367w4nfqyaanc) * ### [License Organization Example](#h-01jab5wehan1by2mgmb38q9pqt) ## **User Dashboard** To start, you must navigate to app.ntop.com and go to your organization page, which can be found on the left-hand menu. The first tab is the Dashboard, which displays your organization's metrics regarding Users, Teams, and Licenses. ![The organization dashboard on app.ntop.com.](https://files.learn.ntop.com/help-articles/access-and-installation/34614134275859.png) ## **Managing Users** As an Org. Admin, you can invite new users to your organization. If there are users who already belong to your organization, they'll automatically appear in the user table. You can add a new user to your organization by selecting the **Add User** button in the **Users** tab. The **Add User** button will open a modal window that'll require you to input the following information: * Full Name * Email * Team (optional) Once you add a user, you cannot change their email address. You can, however, change their Full Name, Team, and License. Below is an overview of the Add New User window: ![Selecting the Add User button will open a small window. Use this window to input the user's information.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125795091.png) ## **Managing Teams** As an Org. Admin, you can create teams to organize the users in your organization. You can also edit and delete teams. Teams can be used purely for organizing users, or you can use them to restrict license usage to specific users. To create a team, select the **Add Team** button in the **Teams** tab of your Org Admin Dashboard. A modal window will appear, allowing you to enter the new team name and select **Create**. If you need to change the name of a team, select the **Edit** icon next to the applicable team. This will activate the edit mode. Change the name of the target team and select **Save**. Below is an image of the **Teams** tab. ![On the Licenses tab, select the pencil icon next to a license to assign it to a team. This will open a secondary window where you can select the appropriate team.](https://files.learn.ntop.com/help-articles/access-and-installation/34614134281747.png) Select the "trash can" icon next to the applicable team name to delete a team. You will be prompted with a message that asks you to confirm the deletion. Deleting a team doesn't delete users or licenses. If you delete a team that users are assigned to, the users' team will default to **None.** Hit cancel to exit this mode. To add a user to a team, select the **Edit** icon in the row of the user table. You can choose a team from the Team drop-down menu from this modal window. You can also remove a user from their current team by clicking the red "x" next to the team drop-down box. Select **Save** when you are finished editing the user. Below is an image of the Edit User Details window when editing in the **User** tab. ![On the Users tab, you can click the pencil icon next to a user to edit their user details. This menu will allow you to assign a user to a team.](https://files.learn.ntop.com/help-articles/access-and-installation/34614134284051.png) ## **Managing Licenses** The Licenses tab shows an overview of your organization's licenses. Below is an example of a License tab displaying different license options that nTop offers. The nTop Floating licenses will have the model **Floating**. You can filter them using the Model filter at the top of the table. ![The Licenses tab displays all of the active licenses in your organization.](https://files.learn.ntop.com/help-articles/access-and-installation/34614134284947.png) Select the edit button next to the applicable license to assign a Floating License to a group of users. This button opens a window that prompts you to assign the license to a team. You can choose to select a team from the drop-down menu. After making your selection, click the "Assign" button. ### **Assigning Floating License to an Organization** Check the box *"Assign to the organization's level*." This allows any user you have added to your organization to use this floating license, regardless of their assigned team. After making your selection, click the "Assign" button. ![Select the pencil icon next to a floating license to assign it to a team.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125805587.png) ### **View Active Cloud Floating Sessions** You can view who has checked out the floating license by clicking on the End Sessions button; this will open up a modal with the User and Session information along with the End Session button for you to terminate the session and retrieve the Floating license. ![Selecting the arrow icon next to a floating license will open a secondary window. This window will show active sessions that the license is currently being used for, with the option to end the active sessions.](https://files.learn.ntop.com/help-articles/access-and-installation/35785388781075.png) > [!NOTE] > > *Note: You can also view these Active Cloud Floating Sessions on a user level in the Users tab.* *![The active cloud floating sessions window that can be used to view or close active sessions.](https://files.learn.ntop.com/help-articles/access-and-installation/35785430020371.png)* ## **License Organization Example** The following is an example of how assigning a license to a team works. In the image below, you can see that this organization has three separate teams. The Design team has no licenses available, the ML team has one user with a nTop Named-User License, and the Simulation Team has 1 Floating License and one nTop Automate Named-User License. ![The teams tab of an example organization.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125808275.png) If we go to our licenses tab, we can see the following licenses available: ![The licenses tab of an example organization.](https://files.learn.ntop.com/help-articles/access-and-installation/34614134294931.png) From the Teams and Licenses tabs, we can conclude the following for how the users in the organization can use the licenses: * The FlexNet License is unassigned as it runs separately on FlexNet Servers. * Priya Mehta is the only user who has access to the nTop Automate Named-User license. * The first Floating License is available to the entire organization and has a concurrency of 3. This means that up to 3 users can be using it simultaneously. * The second Floating License is only available to the Simulation Team members and has a concurrency of 3. So three Simulation team members could have it checked out at the same time. * Christopher Scott is the only user who has access to the nTop Named-User License If you still have questions, our [support team](https://support.ntopology.com/hc/en-us/requests/new) will gladly help you. ## Keywords: *cloud license org floating admin* # How can FlexNet Org Admins add Users for nTop Learn and Support access? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-can-flexnet-org-admins-add-users-for-ntop-learn-and-support-access ## Overview As a Flexnet Org Admin, I must ensure all my users can access **nTop Learn** and **nTop Support**. ## Procedure FlexNet Floating users can log into nTop by entering the server address. For them to access **nTop Learn** and **nTop Support** using the nTop sign-in, you would need to add them as a User to your Organization. Follow the instructions below to add the users: 1. As an Org. Admin, you can invite new users to your organization. If there are users who already belong to your organization, they'll automatically appear in the user table. You can add a new user to your organization by selecting the **Add User** button in the **Users** tab. 2. The **Add User** button will open a modal window that'll require you to input the following information: * Name * Email * Team (optional) ![The Add User menu on the organization dashboard on app.ntop.com.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125160467.png) All the users you add to this tab will receive an email from us to welcome an email from us to create an account that gives them access to **nTop Learn** and **nTop Support.** If you encounter any issues when adding a user to your organization, please contact us at [support@ntop.com](mailto:support@ntop.com). # How can I request an educational license? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-can-i-request-an-educational-license ## Question: Can students, researchers, or faculty request a license of nTop? ## Applies to: * nTop * Cloud Licensing * Educational Licensing ## Answer: nTop provides non-commercial licenses for qualifying students and educators. * Please visit [nTopEd](https://www.ntop.com/education/) for more information. ## Keywords: *education license question edu student teacher faculty non-commercial academic* # How can I transfer a license to a different user? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-can-i-transfer-a-license-to-a-different-user ## Question: How can organizations transfer licenses between users? If an employee changes roles, can a company reassign nTop to someone else? Can cloud licenses be assigned to a new user? ## Applies to: * nTop * Cloud Licenses * Local Licenses ## Answer: Cloud licenses can be easily assigned to a new email. If an end-user changes roles or departs a company, contact nTop support to request a transfer. Local licenses cannot be transferred to new users until the expiry date. ## Keywords: *licensing cloud account user transfer email* # How do I get technical support? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-do-i-get-technical-support ## Question: How do I get technical support? ## Answer: ## Support System We are here to support your journey with nTop through both local and web-based content. Read through the options below to see what type of support is available. * [**Help Center and Knowledge Base**](https://support.ntop.com/)**:** Get answers to any questions about accounts, licensing, troubleshooting, and more. Learn about a wide range of topics in the Knowledge Base. Can't find what you are looking for or need help? Submit a ticket to the Product Support team through the Help Center, and they will be happy to help you. * [**Learning Center**](https://learn.ntop.com)**:** Visit the learning center to go through guided courses, level up your skills, and book live training. * [**User Dashboard**](https://app.ntop.com)**:** Download the latest version of nTop, preview Release Notes, manage your account, and manage Organizational Administration features. On your user dashboard, you can find links to nTopLives, tutorials, and blog posts. * [**Youtube**](https://www.youtube.com/c/nTopology): Visit our Youtube channel to watch video tutorials. * [**nTop.com**](https://www.ntop.com/resources/): Visit our website to watch nTop Lives, read blog posts, and see new case studies. * **Home Page**: Opens up when you first launch nTop. It offers an assortment of local examples and links to support resources. * **Documentation:** Select the (?) in the upper right-hand corner and open the Documentation to read about concepts, user interface tips, hotkeys, and more. * **Learn More**: Open up a block's Info Panel and select the Learn More button to access the block's documentation and example files. You can access this information by going to the Block Documentation tab in the sidebar. ![The Learn More button can be found under the information tab of a block in the right side panel.](https://files.learn.ntop.com/help-articles/accounts-and-licensing/50420538584083.png) ## Keywords: *support help learn documentation resources technical* # How do you check for Learn Live access? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-do-you-check-for-learn-live-access ## Overview nTop Learn Live is a series of instructor-led, virtual classroom-style webinars designed to equip customers with the essential skills to use nTop effectively. The program serves as the starting point for most customers in the nTop adoption journey. Each webinar is 2-3 hours long and covers foundational best practices for nTop software functionality, such as navigating the platform and creating initial workflows and custom blocks. ## User Acess If you are a nTop user and would like to check if you have access to nTop Learn Live, you can navigate to [https://app.ntop.com/settings](https://app.ntop.com/settings) and see if you have Learn Live as part of your active licenses. ![The Account Settings tab of app.ntop.com.](https://files.learn.ntop.com/help-articles/accounts-and-licensing/50598744430995.png) ## Org Admin Instructions If you are an Org Admin who has purchased a Named-User or Floating Learn Live licence, it will appear similar to nTop and nTop Automate licenses in your Organization Dashboard. You can assign it similarly to other licenses and follow instructions here ([Getting Started with Floating Licenses](/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-floating-licenses)) ![The Organization tab of app.ntop.com.](https://files.learn.ntop.com/help-articles/accounts-and-licensing/50598759741075.png) If you have bought unlimited concurrency, you can assign it to the Organization, and everyone you add can access Learn Live. Once you have confirmed access, navigate to [https://learn.ntop.com/ntop-learn-live/](https://learn.ntop.com/ntop-learn-live/) and you should be able to see the booking link. ***Note: Ensure you are signed in to see the Click here to book your Learn Live Session button.*** ![The welcome screen on nTop Learn Live.](https://files.learn.ntop.com/help-articles/accounts-and-licensing/50598744499987.png) If you still have questions, email [support@ntop.com](mailto:support@ntop.com) or contact your nTop representative, and we will point you in the right direction. ## Keywords: *learn live access* # How to change or reset your nTop password Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-to-change-or-reset-your-ntop-password ## Objective: Learn how to change or reset your nTop password. ## Applies to: * ntop.com * nTop login * nTop Support login * nTop Learn login ## Procedure: You can change your password for security reasons or reset it if you forget it. Your nTop account password is required to access the software and online resources. ## Change your password: 1. 1. Sign on to your [nTop account](https://app.ntop.com/). 2. Select **Settings** on the dashboard. 3. Follow the prompts to select a new password. 4. Click **Save Password**. ## Reset your password: 1. 1. Open the nTop website ([app.ntop.com](https://app.ntop.com)) or the nTop login screen, and select **Forgot Password**. 2. Enter the email associated with your nTop account. 3. Our system will send you an email with a reset link. ## If you don't get an email: 1. 1. Check your Spam or Bulk mail folders. 2. Add [no-reply@ntop.com](mailto:no-reply@ntop.com) to your address book. ## What happens after you change your password: If you change or reset your password, you'll be signed out everywhere except installs of nTop Platform using local license files to verify account status. Visit this [troubleshooting article](/help-articles/access-and-installation/accounts-and-licensing/ntop-account-troubleshooting-guide) or contact support if you're still experiencing account issues. ## Keywords: *account password forgot login help edit change reset sign-on in sign on pass word* # How to Combine FlexNet Publisher License Files Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-to-combine-flexnet-publisher-license-files ### Objective: To merge multiple FlexNet Publisher license files into a single file to manage split concurrencies or multiple license increments within one license manager. ### Applies to: * nTop Org Admins * IT administrators managing FlexNet License Manager ### Procedure: *Reference: This procedure is based on the* [*FlexNet Publisher License Administration Guide*](https://ntop.app.box.com/s/9nhukat6b9ypp216hmtflqh1wem2wm0y) *published by Revenera.* 1. **Open your license files:** Open each individual license file you received from nTop using a plain text editor (e.g., Notepad). 2. **Verify compatibility:** Ensure all license files are intended for the same license server (host ID). 3. **Consolidate the text:** Copy the entire content of the secondary license files and paste them into the bottom of your primary license file. 4. **Remove redundant SERVER lines:** Find the lines beginning with `SERVER`. * A valid combined file must have **only one set** of `SERVER` lines at the top. * Delete any additional `SERVER` or `VENDOR` lines that appear in the middle of the document after your copy-paste. 5. **Save the file:** Save the new consolidated file with a `.lic` file extension. 6. **Restart the License Manager:** Open your FlexNet license management tool (e.g., LMTOOLS). * Reread the license file or restart the service to apply the changes. ![A Visual representation of merging multiple files into one valid structure.](https://files.learn.ntop.com/help-articles/accounts-and-licensing/50598706617235.png) *Figure: Visual representation of merging multiple files into one valid structure.* And that's it! You have successfully combined your license files! Are you still having issues? Contact the nTop support team, and we'll be happy to help! # How to install nTop on another Computer Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-to-install-ntop-on-another-computer ## Question: How do I install nTop on a different computer? How do I re-install nTop? ## Applies to: You may need to re-download and install nTop when upgrading computers, changing workstations, or using a work-from-home laptop. ## Answer: You may download and install the application on a new workstation without any action required from the nTop team. 1. Login to your profile at [app.ntop.com](http://app.ntopology.com/) to download the latest software version. 2. After installing, a login window will pop up. Login once again to verify your account. ## Keywords: *computer ntop new install license dashboard platform reinstall installation download another second* # How to obtain Host ID for FlexNet Floating License? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-to-obtain-host-id-for-flexnet-floating-license To generate a FlexNet license file from the nTop Organization Dashboard, you need the **Host ID** of the license server you plan to use. Host ID is sometimes called the **MAC Address**, **Physical Address,** or **Ethernet Address**. Note that this is NOT the same as the 'Host Name,' which is the name assigned to your computer. You can generate the Host ID or Physical Address by using one of the following methods: ## [**Method 1:** Using lmutil.exe or lmtools.exe file (Recommended)](#h-01g51v7yvnxc24aq99430vn31v) ## [**Method 2:** Use the *ipconfig* command in your command prompt](#h-01jab0dph7faz16xfkv9yr3jyb) ## **Method 1** For this approach, you will need the nTopLM MSI file, which can be downloaded by clicking [this link](https://files.learn.ntop.com/FlexNet%20Tools%20Download/ntoplm-1.0.0.msi). Once you install the MSI file, it will create a folder containing the tools you need for the next steps. The default installation location is inside the nTopology program folder, as shown below. ![The ntoplm folder open in file explorer.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133834643.png) * For generating the Host ID, we will need to use one of these two applications in that folder based on your installation preference: * **lmutil** (Command Line) * **lmtools** (GUI) * Run lmutil or lmtools on the server you intend to use as described below, which will give you the Host ID to provide us so we can create your license file. ## **Using lmtools** * Start up lmtools * Click the System Settings tab, locate the Hostid Settings box * Locate the Ethernet box. The 12 alphanumeric characters address is the Host ID * Copy and store the Host ID. It should look like 00b0c9f2826f. ![LMTOOLS open to the System Settings tab. Here you can find the host id for your machine.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133838995.png) ## **Using lmutil** * Run Windows Command Prompt (Start | Run | Type "cmd" and click OK) * Change to the Download directory or where you have your lmultil.exe * Enter the following command * ``` ``` lmutil.exe lmhostid ```` - The Host ID is 12 alphanumeric characters printed below your command. - Copy and store the Host ID. It should look like 00b0c9f2826f. ![The command prompt window is used to run the lm command to find the host id.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133841811.png) ## **Method 2** Below are the instructions for how to generate the Host ID using the command prompt directly: - Run Windows Command Prompt (Start | Run | Type "cmd" and click OK) - Enter the following command - ``` ipconfig /all ```` * Find the entry in the output that says "Physical Address." It should look like this: 00-B0-C9-F2-82-6F. * Copy and store the Host ID. ![The secondary method for using command prompt to find the devices physical address.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133845651.png) Once you have obtained the Host ID, follow the [Getting Started with FlexNet Floating License](/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-flexnet-floating-license) article steps to generate your FlexNet license file. If you run into any issues, please contact [support@ntop.com](mailto:support@ntop.com); we'll be happy to help you. ## Keywords: *license floating host id* # How to remove/deactivate a FNP license Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/how-to-remove-deactivate-a-fnp-license ## Objective: Learn how to remove or deactivate a FlexNet Publisher (FNP) licenses ## Applies to: * FlexNet Publisher (FNP) License System ## Procedure: First, let's open LMTOOLS. 1. Navigate to the 'Start/Stop/Reread' tab. 2. Select the service associated with the nTop license. 3. Click 'Stop Server' and select the Force Server Shutdown checkbox. ![A diagram showing sequentially how to stop an fnp server using LMTOOLS.](https://files.learn.ntop.com/help-articles/access-and-installation/25557175274387.png) 4. Navigate to the 'Config Services' tab. 5. Select the Service for nTop software under the 'Service Name' dropdown (the suggested name was “nTopLM”) 6. Click on 'Remove Service'. ![A diagram showing how to sequentially remove FNP service from LMTOOLS. ](https://files.learn.ntop.com/help-articles/access-and-installation/25557175287315.png) And that's it! You have successfully removed the FNP license file. Do you still need help? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *license flexnet fnp deactivate flexnet publisher* # I am running into "License server machine is down or not responding" error Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/i-am-running-into-license-server-machine-is-down-or-not-responding-error ## Issue: *License server machine is down or not responding.* *See the system administrator about starting the license server system, or make sure you're referring to the right host (see LM\_LICENSE\_FILE).* *Feature: ntop\_full* *Hostname:*[*https://app.ntop.com/*](https://license.ntop.com/) *License path: @[https://app.ntop.com/](https://app.ntop.com/);* *FlexNet Licensing error:-96,7. System Error: 11001 "WinSock: Host not found (HOST\_NOT\_FOUND)"* ## Applies to: * Cloud Floating * FNP Floating ## Cause: Entering server address while on Cloud Floating license. The Server address input is to be used only for the FlexNet FNP Floating license ([Getting Started with FlexNet Floating](/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-flexnet-floating-license)) ## Solution: 1. Click the License Settings tab in the Sign-In window. 2. Clear the Server Address input. 3. Restart nTop 4. Check to see that you have cleared the input. 5. Login with your credentials. ![A gif showing how to clear the server address of nTop and restart it to clear the error message.](https://files.learn.ntop.com/help-articles/accounts-and-licensing/17794076369811.png) ## Keywords: *issue* # I can't Login; Incorrect Email Address or Password Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/i-can-t-login-incorrect-email-address-or-password ## Issue: I can't log in to nTop. I get the error: Incorrect email address or password but I am inputting the correct email and password. ## Applies to: * ntop.com * app.ntop.com ## Cause: Certain web extensions can cause this. ## Solution: If you are having trouble logging in to [app.ntop.com](https://app.ntopology.com/), and keep receiving the error "*Password or email incorrect*", web extensions may be blocking you from logging in. To fix this, turn off your web extensions and try logging in. If this doesn't help, try using a different web browser to see if you get a different result. If you are having trouble logging in to the Welcome Dashboard, ensure that: 1. Your Password is spelled correctly 2. There are no trailing spaces behind your email address ## Keywords: *error login app web extension trouble help* # Is it possible to download old versions of nTop? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/is-it-possible-to-download-old-versions-of-ntop ## Question: I need to download an older release of nTop Platform. My IT department has not vetted newer releases. Where can I access past releases? ## Applies to: * nTop versioning ## Answer: If you need to download an older version, please reach out to nTop Support with the version number. You can always download current releases by signing-on to your account at [app.ntop.com.](https://app.ntopology.com/) ## Keywords: *ntop release version old download* # Is it possible to download the version before nTop 5.0? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/is-it-possible-to-download-the-version-before-ntop-5-0 ## Question: I need to access nTop version 4.26 to ensure compatibility with my existing workflows. Do you know where I can download it? ## Applies to: * nTop 5.0 ## Answer: You can download the last release before nTop 5.0, version 4.26, from the User Dashboard (app.ntop.com) by selecting the link below to download the appropriate version. If you have any issues, please contact [nTop Support](https://support.ntopology.com/hc/en-us/requests/new). ![The home page of app.ntop.com where you can download nTop or previous version 4.26.](https://files.learn.ntop.com/help-articles/access-and-installation/30735123238803.png) ## Keywords: *version download older* # My Account Welcome email never arrived Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/my-account-welcome-email-never-arrived ## Issue: I received a license deployment email but have not received an account activation email My Welcome email never arrived and I'm unable to create an account. Can you resend my Welcome email? I can't activate my account without the Welcome email. ## Applies to: * nTop Licensing ## Cause: This issue may occur if: * * Spam filters caught the message * Your inbox is full * The email address is incorrect * Your VPN is blocking the email Occasionally, an organization's security practices can block our automated messages. Extending, renewing, or changing a current nTop account does not automatically trigger an email. ## Solution: Take the following troubleshooting steps: 1. 1. Check your spam and bulk folder for messages from [no-reply@ntop.com](mailto:no-reply@ntopology.com). 2. Add [no-reply@ntop.com](mailto:no-reply@ntopology.com) and [engineering@ntop.com](mailto:engineering@ntop.com) to your contacts to receive emails about licensing, product updates, and newsletters from us. 3. Browse to [app.ntop.com](https://app.ntopology.com/) and click Forgot Password. This step generates a new email that allows you to log in and create an account. 4. Talk to your IT department about the VPN possibly blocking the email. If the issue continues after these steps, please contact Support to verify that the system uses the correct email. We may need to talk with your IT department to get it fixed. As a workaround, users can provide nTop with an alternate email. ## Keywords: *account license email trial welcome missing spam blocked activation emails resend* # My student license is expiring soon, how can I request a renewal? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/my-student-license-is-expiring-soon-how-can-i-request-a-renewal ## Question: My nTop educational license is going to expire soon, may I request an extension? ## Applies to: * nTop * Educational licenses ## Answer: We are glad to hear that you are enjoying using nTop! nTop offers complimentary licenses to qualifying students and educators for non-commercial work. If your license is expiring soon, complete [this form](https://ntop.typeform.com/ntoped) to request an extension or renew. ## Keywords: *education account license question renew expiring student* # nTop Account Guide Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-account-guide ## Overview All nTop users must have an account at [app.ntop.com](https://app.ntopology.com/) to gain access to our software. If you don't have an account and want to experience nTop, visit this [link](https://ntopology.com/request-a-demo/) for a demo. Once you verify your email address, you'll have access to your User Dashboard, which features a Home page and an Account Settings page. You can download nTop, examples, and learning resources from the Home page. From the Account Settings page, you can view your licensing information, view and edit your personal information, and change your account password. If you wish to learn about the Org Admin dashboard, check out this article, which has step-by-step instructions ([nTop Organization Administration Licensing Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-org-admin-guide)) ## Home From the Home page, you can immediately download the latest release of nTop and access learning resources, such as getting started guides, video tutorials, example files, and blog articles. To download nTop, click the **Download nTop** button. The latest version (Version X.X.X) is below the Download nTop button. You can view the release notes of the newest release by selecting the **View Release Notes** button beneath the Download nTop button on the right. Below the Download nTop section are the Help Center and Latest Content sections, which link you to essential learning resources on our support website at [support.ntop.com](http://support.ntopology.com/) and our main website at [ntop.com](https://ntopology.com/) ![The home screen of app.ntop.com.](https://files.learn.ntop.com/help-articles/access-and-installation/16305602682131.png) ## Account Settings From the Account Settings page, you can view your licensing information, view and edit your personal information and change your account password. ## The account settings page on app.ntop.com. This shows your active licenses and other account details. ## Help Center The Help Center page brings you to our extensive and continually expanding support site ([support.ntop.com](https://support.ntop.com)). The Help Center features many helpful articles and videos for every aspect of nTop, from setting up your account to installation, licensing, building notebooks, and workflows, creating lattices, running simulations, importing and exporting data, and so much more. It has content for everyone, regardless of how new or familiar you are with nTop. There's always more to learn. ![The home page of support.ntop.com. This page has articles that are helpful for performing operations in nTop.](https://files.learn.ntop.com/help-articles/access-and-installation/16306086715411.png) ## Keywords: *licensing account support license learning profile dashboard resources* # nTop Account Troubleshooting Guide Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-account-troubleshooting-guide Are you are experiencing problems viewing app.ntop.com or accessing your nTop account? Here are some recommended steps to troubleshoot the problem: 1. If you cannot find the nTop welcome email, check your Junk folder. It is unusual, but some security practices block our automated messages. 2. Make sure you have a stable internet connection before accessing your account. If you are traveling or disconnected from the internet, your license remains valid for 10-days until you need to reconnect. 3. nTop should work with several available browsers. However, we officially support [**Google Chrome**](https://www.google.com/chrome/) and suggest using the newest release. 4. **[Opening a new incognito window](https://support.google.com/chrome/answer/95464?co=GENIE.Platform%3DDesktop\&hl=en)** with Google Chrome and viewing the website may identify conflicts with cookies and third-party extensions. 5. If the issue is generating an error message, try searching our **[Accounts and Installation](https://support.ntopology.com/hc/en-us/categories/360003635054)** section for known solutions. If none of these steps resolve the issue, contact nTop Support for assistance. Be sure to send your system specifications and any relevant screenshots. **[View this article](/help-articles/access-and-installation/setup-and-install-troubleshooting/ntop-troubleshooting-guide)** you're experiencing error messages or crashing with nTop Platform. ## Keywords: *error cloud account login license email server connect browser website* # nTop Allowlisting Guide Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-allowlisting-guide This article reviews the allowlisting guidelines for connecting to cloud licensing, accessing nTop web resources, and receiving important email communications. nTop is a standalone application that operates locally on your desktop. However, we connect to cloud services for license authentication and account management. Some organizations may require [configuring additional proxy settings](https://support.ntopology.com/hc/en-us/articles/360048560934). ## **Connecting to nTop for Cloud Licensing** Following is a list of URLs to allowlist: ## For version 4.2 and newer | **URL** | **Reason** | | - | - | | [https://updater.ntop.com/](https://updater.ntop.com/) | For automatic software updates | | [https://analytics.ntop.com/](https://analytics.ntop.com) | For sharing product usage data | | [https://crashes.ntop.com/](https://crashes.ntop.com) | Crash reports for product improvements | | [https://app.ntop.com/](https://app.ntop.com) | For downloading software and accessing the customer dashboard | ## ## For version 4.1 and older | **URL** | **Reason** | | - | - | | [https://license.ntopology.com/](https://license.ntopology.com) and [https://license.ntop.com/](https://license.ntop.com) | For license verification from desktop software \[Only for nTop 2.18.5 or older] | | [https://updater.ntopology.com/](https://updater.ntopology.com/) and [https://updater.ntop.com/](https://updater.ntop.com/) | For automatic software updates | | [https://analytics.ntopology.com/](https://analytics.ntopology.com) and [https://analytics.ntop.com/](https://analytics.ntop.com) | For sharing product usage data | | [https://crashes.ntopology.com/](https://crashes.ntopology.com) and [https://crashes.ntop.com/](https://crashes.ntop.com) | Crash reports for product improvements | | [https://app.ntopology.com/](https://app.ntop.com) and [https://app.ntop.com/](https://app.ntop.com) | For downloading software and accessing the customer dashboard | **Additional information:** port: 443 Request header: Boost.Beast ## **Web Resources and Email Communication** Following is a list of websites to allowlist and e-mails to add to your trusted senders list to access helpful resources and receive important communications from us: | Website/Email | **Reason** | | - | - | | [https://ntop.com](https://ntop.com) | Our main website | | [https://app.ntop.com](https://app.ntop.com) | For downloading software and accessing the customer dashboard | | [https://support.ntop.com](https://support.ntop.com) | To access nTop Help Center | | [https://learn.ntop.com](https://learn.ntop.com) | To access nTop Learning Center | | [no-reply@ntop.com](mailto:no-reply@ntop.com) | To receive emails from nTop for account activation and license information | | [engineering@ntop.com](mailto:engineering@ntop.com) | To ensure you're receiving our Product Newsletter and other important updates | Contact [support@ntop.com](mailto:support@ntop.com) if you need help connecting to the license server after updating or not receiving emails from us. We can help you revert to an older version and work with your IT to solve the issue. ## Keywords: *licensing cloud account list firewall allow allowlist* # nTop Licensing Options Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-licensing-options nTop is a desktop application, that offers multiple licensing models for customers. ## Licensing Options The table below outlines the various licensing models and authentication mechanisms available to customers. | **License Model** | **Description** | | - | - | | Named-User Licensing | For individual users who need a dedicated license within their organization. | | Cloud Floating Licensing | For organizations that want to share licenses between a group of users. | | FlexNet Floating Licensing | For organizations that are unable to use our cloud-authenticated licenses and already use FlexNet licenses. | ## Notes * nTop software products (nTop, nTop Automate, nTop Core) are desktop-only applications. * Users and Organization Admins can manage their cloud licenses and software downloads on the [nTop User Dashboard](https://app.ntop.com/). * nTop software products connect to cloud services for license authentication, software updates, and sending personalized or anonymized usage data as per user preference. ## Keywords: *licensing cloud license local organization org administration admin* # nTop Org. Admin Guide Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-org-admin-guide ## Overview A user is assigned the role of Org. Admin. that enables the ability to invite people from within their company to use nTop and manage their licenses. The Org. Admin. is a role assigned to an individual by nTop. This guide walks you through how to use the Organization Dashboard, accessible at app.ntop.com/org. ## Table of Content ## [1. What does Org. Admin role offer?](#h-01hf7qretxcxd72d51qk7mhycm) ## [2. Manage Users](#h-01hf7qretx5h12zrd3wkh5hews) ## [3. Manage Teams](#h-01hf7qretxpkdf7aw7fqja0gwd) ## [4. Manage Licenses](#h-01hf7qretxcwbs732av6y0dpn0) ## [5. Miscellaneous Features](#h-01hf7qretxky900gje9fp64dge) ## 1. What does Org. Admin role offer? With the Org. Admin. role, you can: * Add/Edit/Delete Users * Add/Edit/Delete Teams * Manage Licenses If you become an Org. Admin, you'll receive an email invitation to create your account at [app.ntop.com](app.ntopology.com). Once your password is set, you can perform the actions outlined above. If you already have an account at [app.ntop.com](app.ntopology.com), you'll still receive an email notifying you of this role change with links to helpful onboarding material, such as this support article. The Organization Dashboard is integrated into your user dashboard. It'll appear as another menu option, **Organization**, below the Home tab. You'll see an overview of your entire organization from the **Dashboard** menu. This includes the number of Teams, Users, and Licenses. Below is an example of this view: ![The Dashboard tab of the Organization menu on app.ntop.com.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133890067.png) The image above shows three tabs to navigate through: **Users**, **Licenses**, and **Teams.** ## 2. Manage Users As an Org. Admin, you can invite new users to your organization. If there are users who already belong to your organization, they'll automatically appear in the Users table. You can add a new user to your organization by selecting the **Add User** button in the **Users** tab. Users added here will receive access to ***nTop Learn*** and ***nTop Support.*** The **Add User** button will open a modal window that'll require you to input the following information: * Name * Email * Team (optional) All the users you add will receive a welcome email from us asking them to create an account. Below is an example of the Add a New User modal: ![Select the Add User button to add a new user to your organization. A secondary window will appear to enter the user's information.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125452307.png) Once you add a user, you cannot change their email address. You can, however, change their Name and Team by clicking on the Edit icon and setting their Password in the User's row of the table. If you encounter any issues adding a user to your organization, please contact [support@ntop.com](mailto:support@ntopology.com) ## 3. Manage Teams As an Org. Admin, you can create teams to organize your users and edit and delete teams. Teams enable you to assign licenses to a group of users much more easily. To create a team, select the **Teams** tab of your Org. Admin Dashboard. To Add a team, select the **+ Add** **Team** button. Enter the Team Name in the modal that opens up and select **Create** once you are done. ![Select Add Team to create a new team for your organization. A secondary window will open to name the team.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125455123.png) If you need to change a team's name, select the **Edit** icon next to the applicable team. Change the name of the target team and select **Save**. Select the **Delete** icon next to the applicable team to delete a team. Select the Yes button in the Delete Team modal, and you will be prompted with a message that asks you to confirm the deletion. Deleting a team doesn't delete users or licenses. If you must delete a team, the users' team will default to **None.** ![You can select the trash can icon next to a team to delete it. Clicking the icon will open a secondary window that will ask you to confirm deletion of the team.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133909651.png) To add users to the Team, check the step above on Managing Users. ## 4. Manage Licenses As an organization admin, you can assign and un-assign licenses to your organization's users. We highly recommend navigating these articles to learn more about different licenses. | **License Type** | **Details** | | - | - | | nTop FlexNet Floating License | [Getting Started with FlexNet Floating](/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-flexnet-floating-license) | | nTop Cloud Floating License | [Getting Started with Cloud Floating License](/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-floating-licenses) | In this section, you will learn about different options in the Licenses tab. On this tab, you can see the details of all your organization's licenses. * ID * Product *(nTop or nTop Automate)* * Model *(Floating or Named User)* * Assignment *(Team Name/ User Name or Organization Name)* * Start Date * End Date * Deployment *(FlexNet, Cloud or Local)* * Concurrency The table shows an example of the different licenses and their assignments. * nTop Automate - Named User license has been assigned to a specific user. * nTop Cloud Floating license - 1 has been assigned to the Organization and 1 to a specific team. ![An example of the Licenses tab for an organization.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125463699.png) The below table shows assignment options for different licensing models; these apply to both nTop and nTop Automate licenses | **Model** | **Deployment** | **Assignment** | | - | - | - | | Floating | Cloud | Team or Organization | | Named-User | Cloud | User | If you wish to assign a license, click the Assign License icon in the Licenses table and select a User or Team based on the license. Below are images of two different licenses assigned. >
    **Cloud Named-User License** **Cloud Floating License**
    • Assign User Modal
    ![The Assign User window that is used to assign a user to a Named User License.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133916819.png)
    • Assign Team Modal
    ![The Assign Team window that is used to assign a team to a floating license.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133918611.png)
    > [!NOTE] > > *Note: The Assign Team modal has the checkbox to assign a Cloud Floating license to the entire organization instead of a specific team.* If you need to transfer a license from one user or team to another, follow the second procedure above. Select the new option, the **Assign User or Assign Team** modal window, for the license you want to transfer. A message will show you that the license has already been assigned and ask you to confirm that you would like to reassign it to the new user. ![The Assign team window will show a warning message if the license is already assigned to another team.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133925267.png) ***Note:** As an Org. admin, you don't need a nTop license to download and install the software. However, you would still need a license to log into nTop.* ## 5. Miscellaneous Features As an Org Admin, you have the ability to view which of your organization's users are currently using nTop. Starting on the Licenses tab of the Org Admin dashboard, click the arrow icon next to the floating license. ![When on the Licenses tab, you can click the arrow button next to a license to view active users of the license.](https://files.learn.ntop.com/help-articles/access-and-installation/49236480753555.png) Once you click this button, a secondary window will appear showing the current active sessions that this license is being used for. You can click the End Session button next to any active sessions to immediately terminate them. ![This secondary window will appear that shows who is currently using the license. Select End Session to close their active session of nTop.](https://files.learn.ntop.com/help-articles/access-and-installation/49236480755731.png) ## Keywords: *licensing cloud license profile guide org.admin organization administration dashboard org admin organization org administration licenses floating admin cloud licensing* # nTop Preview Guide Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-preview-guide ## Overview: Preview mode is a mode of nTop that allow users to experience the power and capabilities of nTop without a full license. Every account created with nTop has a free nTop Preview license. You can check all your available licenses from [**User Dashboard (app.ntop.com) > Account Settings**](https://app.ntopology.com/settings). If you have purchased an nTop license and are still logged into Preview mode, click here to read about why you entered Preview mode. *![The Account settings page of app.ntop.com.](https://files.learn.ntop.com/help-articles/accounts-and-licensing/50420729661075.png)* *The image above shows the Licenses table, where you can see all the different Named User licenses (*[*What licensing types does nTop offer?*](https://support.ntop.com/hc/en-us/articles/4405458501779)*) assigned to you.* ## Table of Content * ### [What can you do in Preview Mode?](#h-01hawbcvc7ds0tyn8grkr4vx58) * ### [Frequently Asked Questions](#h-01hawc324fvhzs0w9p9jnxmeer) * I purchased and have an active license. Why am I in preview mode? * I entered preview mode as my Educational License expired. How do I renew it? ## **What can you do in Preview Mode?** Once you log into nTop, you'll be greeted by our Home screen, which provides exciting example files and learning resources. You can also open existing files from this Home screen. Open an example file by clicking the thumbnail you'd like to view. A series of hints will appear and guide you through your first journey. Hints will automatically appear on the first launch in Preview mode and the first launch in Trial. Hints can always be reopened. **With this preview version of nTop, you can:** * Preview nTop Notebooks and experience the power of reusable workflows. * Change the value of inputs of a workflow to see models update in real-time. * Expand blocks to view their content and toggle the visibility to render their outputs. **You can also:** * Take section cuts of a model by selecting View > Section Cut or pressing the hotkey “X.” * View the field of a model by selecting the View > Field Viewer or pressing the hotkey “F.” **With this Preview of nTop, you cannot perform the following actions:** * Add blocks * Delete blocks * Modify the body of a notebook * Import data (unless a variable file path is in the input section of a notebook) * Export data ## **FAQ:** **I purchased and have an active nTop license. Why am I in preview mode?** Please check your User Dashboard to see if you still have an active license associated with your account. If you have been assigned a floating license and the floating license is unavailable, it would then check to see if you have a Named User full license available. If that is not available, it will then open nTop in preview mode, If you purchased a FlexNet Publisher (FNP) license, you would have to connect to your FNP server to access nTop ([Getting Started with FlexNet Floating](/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-flexnet-floating-license)) **I entered preview mode as my Educational License expired. How do I renew it?** To apply to renew your educational license, please follow and fill out the form in this [link](https://www.ntop.com/education/), and we will process your request. You have successfully learned about our Preview mode. Reach out to [support@ntop.com](mailto:support@ntop.com) if you have any further questions about licensing. ## Keywords: *license use guide trial mode preview access* # nTop Proxy Settings Guide Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-proxy-settings-guide ## Objective: Learn how to configure proxy settings for nTop. ## Applies to: * Proxy Settings * Enterprise environments ## Procedure: nTop is a standalone application that operates locally on your desktop. However, we connect to cloud services for license authentication and account management. Some users may need to [allowlist nTop URLs](/help-articles/access-and-installation/accounts-and-licensing/ntop-allowlisting-guide). Proxy settings are configured through the nTop login window. This feature enables cloud licensing deployment in enterprise environments. If configuring proxy settings applies to you, please contact your IT administrator for assistance. If you are already logged in, select Logout from your user account menu (see image below). ![The drop-down menu in nTop when you click on the user account icon.](https://files.learn.ntop.com/help-articles/access-and-installation/16087846439315.png) To configure proxy settings, select *“Proxy Settings”* from the login window. ![The log in window for nTop. The Proxy Settings link is highlighted at the bottom of the page.](https://files.learn.ntop.com/help-articles/access-and-installation/16087942269459.png) The proxy settings screen allows you to override the system proxy settings, which gives you the ability to specify the host and port of the proxy server. > [!NOTE] > > *Note: You don't need to enter https\:// in front of the URL.* Select *Apply* when finished. Select back to login with your license to launch nTop. ![The Proxy Settings menu of the nTop launcher. You can enter proxy information here or choose to override the system proxy settings.](https://files.learn.ntop.com/help-articles/access-and-installation/16087982595603.png) And that's it! You've successfully connected to your proxy server. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *cloud account license settings whitelist firewall proxy server configuration port host* # nTop Usage Data Options Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/ntop-usage-data-options nTop is a desktop application, that runs locally and stores all the user generated files on the user's computer. During the course of software usage, there are few types of data that are transferred to nTop cloud services to help nTop monitor the software's integrity while helping nTop decide on how to improve its user experience & products. To learn more, please see our [EULA](https://www.ntop.com/eula/) and [Privacy Policy](https://www.ntop.com/privacy-policy/). ## Data Types The table below outlines the various types of data that may be send to nTop depending on the user license type and usage data selections. | **Data Type** | **Description** | | - | - | | **License Authentication** | **Required** data for cloud-authenticated licenses only, to validate and access the products/services. This may consist of: User email and encrypted password,Product name, session start/end times, device fingerprint ID, device OS, Geo-hash based on IP address. The information is sent to: [https://app.ntop.com/](https://app.ntop.com/) | | **Version Data** | **Required** data to check for and deliver software updates. This may consist of: sending current software version number, and receiving software update installer. The information is sent to: [https://updater.ntop.com/](https://updater.ntop.com/) | | **Anonymous Usage Data** | **Required** data used to help detect fraud, generate aggregated statistics, optimize features, and support internal operations. This may consist of: Organization name,User system information (CPU, GPU, OS information, software version, device type, and device ID), Crash reports, Blocks and UI features used. The information is sent to: [https://analytics.ntop.com/](https://analytics.ntop.com/) and [https://crashes.ntop.com/](https://crashes.ntop.com/) | | **Personalized Usage Data** | **Optional** data used to provide personalized support/content and to generate individualized usage reports and statistics for customers. This may consist of: User first name, last name, and email, that is appended to the required data listed above. The information is sent to: [https://analytics.ntop.com/](https://analytics.ntop.com/) | ![](https://support.ntop.com/hc/article_attachments/52050022955411) ## **Data Flow Diagram** ## Notes For the above listed data types to be transferred, the following conditions must be met: 1. User has an active internet connection 2. User firewall does not block the following nTop websites: * For license authentication: [https://app.ntop.com/](https://app.ntop.com/) * For software updates: [https://updater.ntop.com/](https://updater.ntop.com/) * For product usage data: [https://analytics.ntop.com/](https://analytics.ntop.com/) * For crash reports: [https://crashes.ntop.com/](https://crashes.ntop.com/) Users can disable *Personalized Usage Data* by any one of the following options: * During installation of nTop software, uncheck the “Personalize usage data” option in the “nTop Data” screen. * Turn off the “Personalize usage data” option In the File → Settings window of the nTop desktop application. Note that IT Administrators can reach out to nTop Support if their organization requires them to disable the required data transfers listed in the table above. ## Keywords: *cloud question data tracking usage privacy policy collect analytics* # Referencing nTop in a Publication Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/referencing-ntop-in-a-publication When writing an article for the public domain, whether that is a research paper, thesis, book, blog etc., we require that the authors ensure that any reference to nTop products or resources is clear and specific that allows the readers to discover the relevant information and reproduce the published findings. Any documentation manuals, online help and learning center content available on nTop website or accompanying the software are protected by copyright law and are subject to nondisclosure provisions in your software license agreement. If any piece of content is used directly, paraphrased, or summarized, then a citation to the source of this information must be included in your publication. *Note that for blogs and non-scholarly articles, a hyperlink to the referenced material is sufficient.* For scholarly articles (research papers, thesis etc.), please include the product name in the abstract or the body of the content and provide the product documentation as a reference whenever possible using the guidelines provided below. *Note that the link to the company page can be replaced by a direct URL to the relevant page if required by citation style guides.* ### **nTop Product References** * Example product reference: *nTop, Release 4.1, nTop Inc., [https://ntop.com](https://ntop.com)* ### **nTop Documentation References** This should include the product name, release version, chapter heading, section, company name * Example documentation citation: *nTop Documentation, Release 4.0, Implicit and Other Models, Implicit, nTop Inc., [https://ntop.com](https://ntop.com)* ### **nTop Support References** This should include the source, category, article heading, company name * Example help center citation: *nTop Support, Meshing Workflows, What are surface meshing best practices?, nTop Inc., [https://ntop.com](https://ntop.com)* ### **nTop Learn References** This should include the source, course title, chapter title, company name * Example learn center citation: *nTop Learn, Lattice FEA, Lattice Simulation Options and Comparison, nTop Inc., [https://ntop.com](https://ntop.com)* # What is the nTop End-User License Agreement? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/what-is-the-ntop-end-user-license-agreement ## Question: What is the nTop End-User License Agreement (EULA)? Where can I see the EULA? ## Applies to: * nTop * Cloud Licensing * Local Licensing ## Answer: The End-User License Agreement defines the terms of use for nTop software. [View the EULA](https://www.ntop.com/eula/). ## Keywords: *licensing eula end user agreement* # What is the support policy for nTop Educational Licenses? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/what-is-the-support-policy-for-ntop-educational-licenses ## Question: How can educational users get help with nTop? ## Applies to: * nTop * Educational licenses * nTopEd ## Answer: nTop may supply students, educators, and researchers with free Educational licenses of nTop software. This license permits non-commercial use of the software per the terms of the [end-user license agreement](/help-articles/access-and-installation/accounts-and-licensing/what-is-the-ntop-end-user-license-agreement). nTop Educational users can access the support knowledge base and view step-by-step tutorials at the [nTop Help Center](https://support.ntop.com/hc/en-us/). View [new and current nTop Live](https://www.ntop.com/resources/videos/) videos for the latest tips and tricks. nTop Product Support will assist nTop Educational users on a limited basis regarding installation issues, system crashes, and faulty files. To get help in these areas, sign in to the [nTop Help Center](https://support.ntop.com/hc/en-us) and contact support. ## Keywords: *education support help question student policy* # When does my license expire? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/when-does-my-license-expire ## Question: How can I see when a license will expire? How long is a license active? How can I see my license info? ## Applies to: * nTop * Cloud Licenses * Local Licenses ## Answer: Users can see account details with the desktop application and User Dashboard. 1. To view your account details using the desktop app * Select **Help > About** * Alternatively, select **Account Details > Account Settings** ![You can access the Account Settings page inside nTop using the account details icon in the top right corner of the program.](https://files.learn.ntop.com/help-articles/access-and-installation/17275425572243.png) 2. To view your account details on the web: * Sign on to the [User Dashboard](https://app.ntop.com/) * On the left side, select **Account Settings** ![On app.ntop.com the account settings page displays the license information for your account.](https://files.learn.ntop.com/help-articles/access-and-installation/17275445988115.png) ## Keywords: *account license question expire info* # When is a floating license checked back in? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/when-is-a-floating-license-checked-back-in ## Question: If you are here, you may wonder how to check in a borrowed floating license You are getting a "*No available floating licenses"* error when the previous user closes their nTop session. You are running into License Unavailable - *"All available nTop licenses are in use at this time"* error > > > > > > > > >
    > ![The License Unavailable message that appears when a user tries to login to nTop when all licenses are in use.](https://files.learn.ntop.com/help-articles/access-and-installation/34614125257619.png) > > ![The License Unavailable message that appears when a user tries to login to nTop when all licenses are in use. This message window is specific to when a project is already open and needs action from the user before closing.](https://files.learn.ntop.com/help-articles/access-and-installation/34614133714707.png) >
    ## Answer: When you **close** all active nTop sessions, you are checking back in the Cloud Floating license you borrowed. You don't have to do anything besides **Close** all the nTop windows. This should be instantaneous, and the license should become available for others in the floating pool to check out. ## Is there an idle license timeout? During the license status check run every 3 hours, we scan all the checked-out licenses to see if they are being used. In case of **inactivity**, they are checked back in. ## More articles on this topic: * [Getting Started with Floating License](/help-articles/access-and-installation/accounts-and-licensing/getting-started-with-floating-licenses) * [nTop Organization Administration Licensing Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-org-admin-guide) ## Keywords: *license floating unavailable check in check out idle timeout* # Why is the desktop app unable to connect to nTop's license server? Source: https://docs.ntop.com/help-articles/access-and-installation/accounts-and-licensing/why-is-the-desktop-app-unable-to-connect-to-ntop-s-license-server ## Issue: After installing, changing passwords, or logging out, a sign-in prompt will display when starting the software. Some users may encounter the message: `Unable to connect to nTop's license server. Please contact your IT department and have them review the Licensing Quick Start Guide above.` ## Applies to: * nTop * Cloud Licensing ## Cause: There are a few reasons the login screen may display this error message. * Security settings are blocking the software from contacting our database. * An unstable internet connection is preventing the software from communicating with us. ## Solution: The user's organization may need to allowlist nTop servers or adjust security settings. Please review the following articles for assistance: * [nTop System Requirements Guide](/help-articles/access-and-installation/system-requirements/system-requirements-guide) * [nTop Cloud Licensing Access Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-allowlisting-guide) * [nTop Cloud Licensing Proxy Settings Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-proxy-settings-guide) If the issue persists, we may need to connect with your IT department to fix the problem. ## Keywords: *licensing error cloud account app server issue whitelisting unable* # Access and Installation Source: https://docs.ntop.com/help-articles/access-and-installation/index > **[System requirements](/help-articles/access-and-installation/system-requirements/system-requirements-guide)** > > Find the minimum and suggested computing configurations for optimal performance and an enjoyable experience with nTopology. > **[Accounts and Licensing](/help-articles/access-and-installation/accounts-and-licensing/flexnet-licensing-error-39-147)** > > Get help with account management and questions concerning licensing. > **[Setup and Install Troubleshooting](/help-articles/access-and-installation/setup-and-install-troubleshooting/getting-started-with-ntop)** > > Learn solutions to common issues regarding installation, software setup, accounts, and system updates. # A "Windows protected your PC" message displays during install Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/a-windows-protected-your-pc-message-displays-during-install ## Issue: Executing the nTop MSI may trigger the Microsoft SmartScreen warning "Windows protected your PC" and block the installation process. ![The Windows protected your pc message.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/1500002844202.png) ## Applies to: * nTop Installation ## Cause: This message occurs if an application is unrecognized by Microsoft. New software versions are sometimes unrecognized at release until enough users install the software to build the trust index. ## Solution: We are actively exploring solutions to stop this issue from occurring with future releases. If the MSI was retrieved from a trusted source such as the nTop User Dashboard or an organization's network, selecting the "run anyway" option is safe. Contact your IT team or nTop support with any questions. **If you can't see the 'Run Anyway' option - Only do this if you've downloaded the MSI from the nTop User Dashboard.** **\*\*We highly recommend turning these settings back on after you've installed the program** * Open Windows Security (type in the Search panel on the lower left) * Select the 'App & Browser control' tab * Select 'Reputation-based protection settings' * Turn off 'Potentially unwanted app blocking' ## Keywords: *windows error install issue warning smartscreen defender certificate window harm* # Can I view nTop files without nTop? Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/can-i-view-ntop-files-without-ntop ## Question: Can I view nTop files without nTop? How can I view nTop files? ## Applies to: * nTop ## Answer: nTop files are saved in a .ntop format and require an installation of nTop to open and view. You can do this with [Preview Mode](/help-articles/access-and-installation/accounts-and-licensing/ntop-preview-guide) (no license required). If you are unable to install nTop, the best approach would be to export your parts ([How do I export from nTop?](https://support.ntop.com/hc/en-us/articles/360050845253)). Once your file is exported, you can view it in a CAD or 3D Viewer program. If you want to view files on a Mac, check out this [article](https://support.ntop.com/hc/en-us/articles/360049024053) for more information. ## Keywords: *mesh mac install view download files without* # Error Saving Project - This project could not be saved Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/error-saving-project-this-project-could-not-be-saved ## Issue: My file is taking a long time to save. When I try to save my file, I get the error: "Error Saving Project - This project could not be saved". ## Applies to: * nTop ## Cause: We are currently investigating the cause of this error, but it may be due to saving on a shared network drive. ## Solution: We are still investigating this issue, but if this error happens, we recommend trying to save your file on the Desktop. If you are unable to do so, you may need to re-do the file or open it from a backup save (turned on in Settings). ## Keywords: *error help slow could not be issue project saving saved hours long* # Getting Started with nTop Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/getting-started-with-ntop If you're here, you're probably trying to figure out how to get started with nTop. After reading this tutorial, you should be able to: * [Set up your nTop account](#h-01fwhayae99nz0q97em93v2jyf) * [Download the latest release of nTop](#h-01fwhaynq850bkzbz0fnr29109) * [Install, Open, and Update the Software](#h-01fwhayvfhvd7hempf184ak5tm) * [View Help and Documentation](#h-01fwhazw43jr76t5tm6b0y7p84) * [Get Support](#h-01fwhb04gnnn8qyy9t1c7xzj3m) Before beginning, ensure that your workstation satisfies the minimum system requirements ([nTop System and Licensing Requirements Guide).](/help-articles/access-and-installation/system-requirements/system-requirements-guide) ## 1. Account Set-Up After you reach out about nTop or talk to our Sales team, you will receive an email from [no-reply@ntop.com.](mailto:no-reply@ntopology.com) If you can't find it, it may be in your spam folder. If it isn't there, check out [these tips](/help-articles/access-and-installation/accounts-and-licensing/my-account-welcome-email-never-arrived) and contact support if you still have issues. * Open the email. * Select **Activate My Account**. * This takes you to [app.ntop.com](https://app.ntopology.com/), where you can set up a new password. Your username will be the email address you used to sign up. ![The activation email you will receive when your account is created.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34614134153107.png) * If you have received nTop Licenses mail, it means that you have been issued nTop Licenses. Sometimes, the above email from Activate My Account can be seen as spam. ![An example email of when nTop licenses are deployed.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/39113416780435.png) * If your link to set up your new account has expired, you can generate a new link by selecting **Request**. A new email will be sent to your email address. You can also use the Forgot Password option to reset your account. ![If you try activate your nTop account after the link has expired, you will see this message.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34614125702035.png) * Set up a new password and click Save. * Once you set up a new password, you will be taken to the login screen. ![The log in page of app.ntop.com.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34614125704723.png) * Login using your email address and new password. * You are now logged in to the [nTop User Dashboard](https://app.ntop.com). ## 2. Download the Software Upon logging in to the nTop User Dashboard, you will see a button on the home page to download the latest version of nTop. ![Once you login to app.ntop.com, you will be able to download nTop on the home page.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34614134166291.png) * Select **Download nTop** and save the file to your desktop While nTop is downloading, check out the resources available in the User Dashboard. * [nTop Learn](https://learn.ntop.com)- Our learning site has a wide variety of courses for users to enroll in * [nTop Support](https://support.ntop.com)- Our support site contains a knowledge base of nTop-focused articles, access and installation information, release notes, and a link to contact our support team. * Account Settings- View license information, change your password, or enable two-factor authentication ![The home page also has resources to help you learn nTop.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34614134170131.png) ## 3. Install the Software * Double-click on the **nTop-X.X.X.msi** to run the installer. * Read and accept the EULA to continue with the installation. * Choose the file location to save the program. * Choose which Toolkits you want to install. * Select Install. ## 4. Open the Software * Double-click on the nTop icon (or search in the Windows search bar) to open the program. * Enter your email address and password to log in. * The Home page opens up, allowing you to start a new file, Open a new file, or open an existing example file. ## 5. Software Updates * A green arrow appears in the upper right-hand corner when a new update is available. By selecting the button, you can view the Release Notes and download the latest updates. * You will need to close nTop to install the latest version. ![Inside the nTop program, you click the down arrow icon to see if you have a software update available. From there, you can download new versions of nTop.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34614125716755.png) ## 6. View Documentation and get Help In the upper right-hand corner, select the '?' icon to open a sub-menu. * About—It shows you your current nTop version and your license expiration date and has links to our EULA, Acknowledgments, and website. * Documentation - This opens our nTop internal documentation. It contains information on navigating nTop's UI, shortcuts, block information, and more. * What's New- Brings you to the Release Notes section of our internal documentation * Support- This brings you to our support site, which contains a knowledge base of nTop-focused articles, access and installation information, release notes, and a link to contact our support team. ![Inside the nTop program, you can click the question mark icon to access documentation and get help.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34614134177683.png) ## 7. Get Support Read about our support resources here: [How do I get technical support?](/help-articles/access-and-installation/accounts-and-licensing/how-do-i-get-technical-support) And there you go! Following the instructions above, you should have nTop downloaded and ready to go. Now, you'll be able to start using the program. If you still have questions, our [support team](https://support.ntopology.com/hc/en-us/requests/new) would be happy to help you. ## Keywords: *account support help update getting started install license documentation start profile technical* # How to install nTop with Command Prompt Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/how-to-install-ntop-with-command-prompt ## Objective: This article explains how to install the nTop MSI using the Command Prompt. Command prompt installs are useful to organizations requiring IT professionals or System administrators to deploy software. Command prompt installs can enable logging, which may be useful for troubleshooting. ## Applies to: * nTop * Windows 10 * Command Prompt ## Procedure: 1. Create a directory to save the MSI and log files. For this example, C:\nTop 2. Save a copy of the latest MSI to C:\nTop. For this example, nTop-2.26.4.msi 3. Click the Windows Start button and select **Windows System > Command Prompt**. 4. At the prompt type: ``` msiexec /i "c:\nTop\ntop-2.26.4.msi" /L*V mylog.log ``` ![An example of installing nTop using the command prompt.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/1500002281082.png) 5. The text /L\*V enables verbose logging, creating the log file mylog.log. 6. Complete the installation by following the prompts. If you would like to select which Toolkits to enable and choose country during silent installation, check the command below: * Location: Germany (DE) * These are commands from Microsoft Standard Installer command-line options ([Link](https://learn.microsoft.com/en-us/windows/win32/msi/standard-installer-command-line-options)) * /qn: Quiet display option. The installer runs an installation without displaying a user interface. No prompts, messages, or dialog boxes are displayed to the user. * /passive: Passive display option. * /no restart: Never restart option. The installer never restarts the computer after the installation. * Select all Toolkits with the WIXUI\_TOOLKIT\_XX\_CHECKBOX=1 ``` msiexec /i path/to/nTop-4.24.3.msi WIXUI_TOOLKIT_ADDITIVE_MANUFACTURING_CHECKBOX=1 WIXUI_TOOLKIT_ARCHITECTED_MATERIALS_CHECKBOX=1 WIXUI_TOOLKIT_DESIGN_ANALYSIS_CHECKBOX=1 WIXUI_TOOLKIT_LIGHTWEIGHTING_CHECKBOX=1 WIXUI_LOCATION_LISTBOX="Germany, DE" /qn /norestart /passive ``` Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *install how-to log command prompt msi msiexec admin* # How to limit CPU usage when running nTop Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/how-to-limit-cpu-usage-when-running-ntop ## Objective: Sometimes, you want to use other applications while nTop updates a computationally intensive block or notebook. This article shows you how to use the Windows Task Manager and Affinity in Linux to limit the number of CPUs nTop can access so that the other applications run effectively. ## Applies to: * nTop * nTop Automate ## Procedure: ## Windows 1. Open nTop and then open the Windows Task Manager by typing "Task Manager" in the Windows search bar or using the right mouse button to click the Windows Task Bar and selecting Task Manager. 2. Navigate to the "Details" tab on the Task Manager. ![Task Manager open with the details tab shown. The ntop.exe is highlighted.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/41815082032531.png) 3. Find **ntop.exe** in the list of processes. If you want to limit the number of CPUs for the nTop Command Line, you want to find the ntopcl.exe process. 4. Using the right mouse button, click on the process and select "Set affinity" ![The right click sub menu with Set affinity highlighted.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/41815082033939.png) 5. In the Process Affinity window, all the virtual CPUs will be selected. Unselect a set of these CPUs for the other applications and click "OK" 6. nTop will then safely release those CPUs. > > > > > > > > >
    > ![The processor affinity menu for selecting which CPUs are enabled. The image shows all CPUs enabled.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/1500016896402.png) > > ![The processor affinity menu for selecting which CPUs are enabled. The image shows 4 CPUs enabled.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/1500017146121.png) >
    ## Linux You can control the affinity with taskset ([https://docs.redhat.com/en/documentation/red\_hat\_enterprise\_linux\_for\_real\_time/7/html/reference\_guide/chap-affinity#Using\_the\_task\[…\]essor\_affinity](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux_for_real_time/7/html/reference_guide/chap-affinity#Using_the_task\[%E2%80%A6]essor_affinity) Below is the snippet from the above link: ``` The taskset command sets and checks affinity information for a given process. These tasks can also be achieved using the Tuna tool. Use the taskset command with the -p or --pid option and the PID of the process to be checked. The -c or --cpu-list option displays the information as a numerical list of cores, instead of as a bitmask. ``` And that's it! You've successfully limited the CPU usage when running nTop. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *cpu usage process limit running exe processes* # How to uninstall nTop? Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/how-to-uninstall-ntop ## Objective: This article explains how to uninstall nTop for Windows 10, which is the recommended OS for running nTop. ## Applies to: * nTop * Windows 10 ## Procedure: 1. Click on Search icon in the Windows taskbar and search for 'Control Panel'. 2. Click on 'Uninstall a program' under Programs. 3. In the 'Programs and Features panel, type 'nTop' the search box in the top right corner and press the Enter key to search. 4. Select nTopology and click on 'Uninstall' 5. Follow the prompts to uninstall nTop from your computer. ![The control panel open to the programs and features sub menu. Here you can uninstall nTop.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/18234722416787.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! # How to Use nTop's MCP Server Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/how-to-use-ntop-s-mcp-server ### **Objective** This article explains how to connect AI applications to your technical content using nTop's Model Context Protocol (MCP) server. ### **Applies to** Developers and technical professionals using AI agents and the nTop knowledge base. ## **Overview** The nTop MCP server provides tools that allow AI applications to search and retrieve information from the nTop knowledge base, learning center, and other guides. By using this server, you can integrate nTop's technical documentation directly into your AI-driven workflows. Hosted MCP Server: [https://docs.ntop.com/mcp](https://docs.ntop.com/mcp) ### **Available Tools** The server exposes two primary tools to connected AI clients: * **search\_n\_top:** Use this tool to find relevant information, examples, and references. It returns contextual titles and direct links to documentation pages. * **query\_docs\_filesystem\_n\_top:** Use this tool to run shell-like queries (such as ls, cat, or rg) against a virtualized filesystem containing nTop documentation. ### **Procedure** Please follow these steps to access and utilize the MCP server: **1. Access the Hosted MCP Server** 1. Navigate to the **Agents** or **MCP** section in your application settings. 2. Locate the **Hosted MCP server** URL. 3. Use this URL to connect your AI application (e.g., Claude Desktop, Custom GPT, or a local agent) to nTop content. **2. Search for Information** When you need to answer broad questions or locate specific features, we recommend starting with the search tool: 1. Use the **search\_n\_top** tool for conceptual queries (e.g., "How do I run an aircraft flow analysis?"). 2. The tool returns a list of relevant paths, such as **/knowledge-base/fluids/how-to-run-an-aircraft-flow-analysis**. **3. Retrieve Specific Content** Once you have a documentation path, use the filesystem tool to read the full content: 1. Identify the file path returned from your search 2. Append .mdx to the path. 3. Use commands like head or cat to read the file. * Example: cat /knowledge-base/fluids/how-to-run-an-aircraft-flow-analysis.mdx 4. If you need to find specific technical requirements (like GPU compatibility) across multiple files, use the rg (ripgrep) command. **4. Optimize Your Workflow** To ensure efficient performance and stay within data limits: * **Search first:** Always use **search\_n\_top** before querying the filesystem to find the exact path. * **Batch reads:** We recommend reading multiple sections in a single call using **head** or **cat** when possible. * **Use targeted queries:** Prefer **rg -C** (context search) or **head** over broad **cat** commands on large files to keep output under the 30KB limit. And that's it! You've successfully connected and queried the nTop MCP server. Are you still having issues? Contact the nTop support team, and we'll be happy to help! ### # I am an Org. Admin. and cannot log in to nTop Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/i-am-an-org-admin-and-cannot-log-in-to-ntop ## Issue: * I am an Organization Administrator and cannot log on to nTop. * When trying to sign on to the desktop app, an error message appears stating that there is no valid license for this user. ## Applies to: * User Dashboard * Cloud Licensing * Org. Admin ## Cause: Org. Admin. role only gives you access to the Organization tab on the nTop User Dashboard to manage the licenses, users and teams of your organization. You would still need to be assigned a license. ## Solution: Org. Admin's can assign a license to their account by following the steps explained in the following article: * [nTop Org. Admin Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-org-admin-guide) ## Keywords: *licensing login license organization administration org admin issue* # I am trying to open nTop and there's an error with related to a *.dll Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/i-am-trying-to-open-ntop-and-there-s-an-error-with-related-to-a-dll ## Issue: * Error message: "The code execution cannot proceed because VCRUNTIME140\_1.DLL was not found. Reinstalling the program may fix this problem." * Crash in ucrtbase.dll (Exception code: 0xc0000409) ## Applies to: * Windows 10 and 11 * Microsoft Visual Studio 2015, 2017, 2019 ## Cause: This Windows error message typically occurs because the Visual C++ redistributable files are missing or corrupt. ## Solution: Get the latest versions of Microsoft Visual C++. 1. Visit the [Microsoft Support Site](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022) 2. Browse the **Visual Studio 2015, 2017, and 2019** sections. 3. Download **x64: vc\_redist.x64.exe** 4. Double-click to run the program and install the files. ## Keywords: *windows error update install run visual studio microsoft VCRUNTIME140\_1.DLL runtime vc dll visual studio time vcruntime 140* # I am trying to open nTop and there's an error with VCOMP140.DLL Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/i-am-trying-to-open-ntop-and-there-s-an-error-with-vcomp140-dll ## Issue: While trying to start nTop after installation, I saw the error message: "The code execution cannot proceed because VDCOMP140.DLL was not found. Reinstalling the program may fix this problem." ## Applies to: * nTop * Windows 10 ## Cause: This Windows error message generally occurs due to missing or corrupt Visual C++ redistributable files. ## Solution: Get the latest versions of Microsoft Visual C++. 1. Visit the [Microsoft support site.](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 2. Browse the **Visual Studio 2015, 2017, and 2019** sections. 3. Download **x64: vc\_redist.x64.exe** 4. Double-click to run the program to install the files. ## Keywords: *help VDCOMP COMP Visual Studio DLL Error VDCOMP140 VCRUNTIME VCRUNTIME140\_1 runtime reinstall vcomp vrun VC VD 140* # Is it possible to update the version of OpenGL? Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/is-it-possible-to-update-the-version-of-opengl ## Issue: * Opening nTop triggers an error message "Failed to Initialize OpenGL." * Is it possible to upgrade or downgrade OpenGL versions? * I want to upgrade the OpenGL version to enable software functionality. ![The Failed to initialize OpenGL error. This occurs when a GPU is not compatible with nTop.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/50430099621139.png) ## Applies to: * nTop * OpenGL * Windows 10 * NVIDIA Graphics Cards * AMD Graphics Cards ## Cause: nTop requires an OpenGL 4.3 compliant graphics card. This error occurs if the graphics card is out of date. ## Solution: OpenGL is a standard for rendering 3D graphics used by GPU manufacturers, and implementation is mostly related to hardware. You may try to contact the system manufacturer for assistance, but most likely, upgrading the graphics card is required for this system to be compliant with nTop. If you have a compliant graphics card in your system and still get this message, please make sure that the appropriate drivers from the manufacturer are installed and up to date. In case you have several graphics cards in your system, please make sure that the one that is connected to your monitor meets these requirements. ## Keywords: *nvidia gpu amd opengl issue graphics card* # Is there a way to retrieve data from .tmp file? Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/is-there-a-way-to-retrieve-data-from-tmp-file ## Question: If the software crashes and generates a temporary file, is there a way to recover lost work? ## Applies to: * nTop ## Answer: So long as the **filename.ntop.tmp** is larger than 0kb, you can open the file by changing the name to just **filename.ntop.** Generally, a 0 kb file means the data is corrupt and unusable. We suggest [enabling auto backup](/help-articles/knowledge-base/interop/an-unexpected-error-occurs-upon-opening-files). ## Keywords: *crash question backup exit tmp* # nTop setup wizard ended prematurely Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/ntop-setup-wizard-ended-prematurely ## Issue: When installing nTop, I encountered the error message "Setup Wizard Ended Prematurely." ![If the nTop Setup wizard ends prematurely, you will receive this message.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34151759354771.png) ## Applies to: * nTop installation ## Solution: There are two potential solutions to check/try to clear this message: 1. Check your machine settings to ensure no pending Windows updates. We have seen reports that pending Windows installations have prevented the installer from completing. 2. Right-click the nTop MSI file and select "Troubleshoot compatibility." Windows should then help identify any outstanding issues preventing nTop from installing correctly. ![Right Clicking the installer in the File Explorer allows you to run the Troubleshoot Compatibility feature in Windows.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/34151759357459.png) ## Keywords: *error ntop install setup issue installation ended wizard prematurely* # nTop Troubleshooting Guide Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/ntop-troubleshooting-guide Experiencing a recurring nTop support issue? Here are some recommended steps to troubleshoot the problem: 1. Restart your computer to verify optimal system health. A simple restart solves many computer troubles. Keep in mind that [Restart is not the same as Shut down](https://www.howtogeek.com/349114/shutting-down-doesnt-fully-shut-down-windows-10-but-restarting-it-does/). Restarting reinitializes Windows 10 and mitigates memory leaks. 2. Are you using the latest version of nTop? We [release updates](https://support.ntopology.com/hc/en-us/categories/360005712353-What-s-New-) with performance improvements and error fixes frequently. 3. Is this issue specific to particular files? Can you reproduce the issue with the same files on a different system? These steps help determine if the problem is file-specific or a system problem. 4. If the issue generates an error message, search our [Knowledge Base](https://support.ntopology.com/hc/en-us/categories/360003678133) for known solutions. 5. Check that your [system specifications](https://support.ntopology.com/hc/en-us/sections/360008279513) are compatible with nTop. 6. If your graphics card meets the nTop system requirements, we recommend using the latest driver. If your driver is outdated, download and install the newest release from the manufacturer's website. 7. Make sure your computer is configured to use the [high-performance graphics card settings.](https://support.ntopology.com/hc/en-us/articles/360043607974) 8. Check for pending Windows updates. Installing missing updates may correct system troubles. If none of these actions resolve the issue, contact [nTop Support](https://support.ntopology.com/hc/en-us/requests/new) for assistance. To get you the fastest help, be sure to send your: * System specifications (CPU, RAM, Memory, GPU, Windows version) * Relevant screenshots * nTop files * Reference files * **Steps to reproduce** * [Crash reports and Log files](https://support.ntopology.com/hc/en-us/articles/360039628273) ## Keywords: *error support help crash ntop troubleshoot problem bug platform issue* # Out of disk space error when installing in a different drive than C:\ Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/out-of-disk-space-error-when-installing-in-a-different-drive-than-c ## Issue: I get an out of disk space in C:\ when installing in D:\ drive. ## Applies to: * nTop 3.9.3 ## Cause: The installer uses system folders that are located in the C:\ drive. ## Solution: Installing nTop on the C:\ drive needs about 2.1 Gb of free space. Installing it on any other drive adds up to about 1.4 Gb of space used in the C:\ drive due to the files going into system folders that are located within the C:\ drive. Clearing up at least 1.4 Gb in C:\ solves this issue. ## Keywords: *error space issue installation out of disk space* # The selected file could not be opened Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/the-selected-file-could-not-be-opened ## Issue: When I opened my file I got this error message: The selected file could not be opened. It may be from an unsupported version of nTop. ![An Error opening file error message in nTop.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/360104225713.png) ## Cause: This issue is caused by the file saving as a larger size than it actually is, causing it to be unreadable. ## Solution: Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new) if you are encountering this issue. ## Keywords: *error help open file could not version be can't issue opened unsupported* # Valid license not found error Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/valid-license-not-found-error ## Issue: When launching nTop or nTop Automate, the software fails to open, and the following error message appears: ``` "A license is required to use ntop/ntopcl, but a valid license was not found. If you do not have an active ntop/ntopcl license, please contact sales@ntop.com for more information. If you believe you're receiving this message in error, please contact support@ntop.com if you continue to experience this issue." ``` ## Applies to: * nTop (Desktop) * nTop Automate (Command Line) * Network environments enforcing TLS v1.2 ### **Cause:** By default, nTop uses **TLS v1.3** (Transport Layer Security) to connect to our licensing server for authentication. If your organization's network security protocols are restricted to the older **TLS v1.2** standard, the connection will fail, resulting in the "Valid license not found" error. ## **Solution:** To resolve this, you must add a specific flag to the nTop executable to force it to use the older TLS v1.2 protocol. The easiest way to apply this change permanently is to modify your desktop shortcut. 1. Locate your **nTop** shortcut on the desktop. 2. **Right-click** the shortcut and select **Properties** from the context menu. 3. Click on the **Shortcut** tab. 4. Locate the **Target** field. You will see a file path ending in `ntop.exe"`. 5. Place your cursor at the very end of the text (after the closing quotation mark). 6. Type a **space**, followed by `--tls1_2`. **Correct format:** `"C:\Program Files\nTopology\nTopology\ntop.exe" --tls1_2` 7. Click **Apply,** then **OK,** to save the changes. Note: Ensure the flag is placed outside the quotation marks. If placed inside (e.g., `"...ntop.exe --tls1_2"`), Windows will treat the flag as part of the file name, and the shortcut will fail to launch. **Running nTop Automate (nTopCL):** If you are running nTop via the command line, you must append the flag to your execution command: `ntopcl.exe --tls1_2` ## Keywords: *nTop license error TLS 1.2 TLS 1.3 network protocol valid license not found licensing connection ntop.exe flag* # What do I do if nTop crashes? Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/what-do-i-do-if-ntop-crashes ## Issue: nTop has crashed. ## Cause: The only known cause of nTop crashing and unexpectedly closing out is when the computer's memory (RAM) runs out of space. When the mesh or simulation data size approaches the computer's total RAM, nTop may crash. The Windows Task Manager allows you to observe the current memory used by nTop. ## Solution: Crashes can be prevented by: * Increasing the Pagefile (by using the computer's disk as virtual memory) To increase the Pagefile, we recommend following [this article](https://www.tomshardware.com/news/how-to-manage-virtual-memory-pagefile-windows-10,36929.html). ***Note: This article wasn't written by nTop, and this link will take you to a different website.*** * On the Pagefile window, if you check "Custom Size," change the minimum to 100000 and the maximum to 400000. It may give you a warning, but it should be fine. *These are the settings that the Simulation Team here at nTop uses (and were used with 32GB RAM).* * Online, it is recommended to use 1.5x(RAM) as the minimum and 4x(RAM) as the maximum, but the team has seen good results with the above values. ***Note: Increasing the Pagefile will increase the size of your temp files. If you run out of space, you may need to lower your Pagefile size.*** * Increasing the RAM Size. * Reducing the mesh element count, We highly recommend checking this video ([What are surface meshing best practices?](/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices)) * Remove memory-intensive blocks from your notebook, such as Topology Optimization and Simulation blocks. * Make sure other memory-intensive programs aren't running at the same time. ### **When contacting Support, we need you to share the Crash Dump and Logs along with the nTop file which is causing the crash** #### **Locating crash dump** The system generates a crash log when nTop or nTop Automate exits unexpectedly. Find the crash dump file here (copy and paste the location into File Explorer): ``` %localappdata%\CrashDumps ``` The crash dump is in the format: ntop.exe.**N**.dmp. Where **N** is a system-generated value. Click the 'View; tab on the Ribbon and choose 'Details' layout or Right Click and select 'View' > 'Details' ![The file explorer ribbon where you can select the view tab and then details.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/4407288804627.png) Identify the crash dump file closest to when it crashed and submit it to support. **If you are looking up the location manually and can't see Hidden Folders:** * Go to Windows Explorer. * Open the C: drive. * Click the ^ in the upper right-hand corner to expand the options * Select the View tab. * Check 'Show hidden items' * Go to: This PC > Local Disc > Users > YOURNAME > AppData > Local > CrashDumps #### **Locating logs** The system generates a log for every instance nTop is run. Find the logs here (copy and paste the location into File Explorer): ``` %TEMP%\nTopology\Log ``` Zip the entire folder and submit it along with the crash dump ### **Submitting a crash dump and logs** Sending one or more crash dumps or logs to technical support helps our developers diagnose and solve the problem. To submit, click 'Contact Support' at the upper right corner of this support site, and attach the file(s). Please also include a description of what you observed, and if possible, the nTop file used during the crash. ## Keywords: *crash ntop dump* # When I try to start nTop the error "OpenGL Context Creation Failed" occurs. Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/when-i-try-to-start-ntop-the-error-opengl-context-creation-failed-occurs ## Issue: The following error message is displayed if nTop cannot recognize a valid graphics card. ![An nTop error stating that the OpenGL context creation failed, OpenGL unavailable.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/360097503334.png) ## Applies to: * NVIDIA Graphics Cards ## Cause: Possible causes of this issue are: * An unsupported Graphics Card * Outdated Graphics Card drivers * A mistake with NVIDIA Control Panel settings ## Solution: 1. Verify your Graphics card meets the [minimum system requirements](https://support.ntopology.com/hc/en-us/articles/360037004674). 2. Install a new copy of your graphics card driver or update your driver with the manufacturer's latest version. 3. For NVIDIA Graphics Cards be sure to enable [high-performance graphics card settings](https://support.ntopology.com/hc/en-us/articles/360043607974). ## Keywords: *graphics cards error GPU drivers video cards opengl NVIDIA* # When opening the software an "Entry Point Not Found" message appears Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/when-opening-the-software-an-entry-point-not-found-message-appears ## Issue: * nTop fails to open because of outdated Windows OS * The following error message appears: **ntop.exe - Entry Point Not Found** The procedure entry point GetUserDefaultGeoName could not be located in the dynamic link library C:\Program Files\nTop\nTop Platform\ntop.exe. *Kernel32.dll could not be found.* ## Applies To: * nTop * Windows 10 * Windows Server 2019 ## Cause: This error message is caused by a missing function with an outdated operating system, Microsoft Windows 10 version 1709 or newer is required for nTop. ## Solution: Verify your version of Windows 10 with the following steps: 1. Click **Start > Settings > System > About** 2. Look under **Windows Specifications** to check which edition and version your system is running. If your operating system is older than Windows 10 version 1709, install the latest Windows updates. ## Keywords: *windows error OS user point not get 2.22.7 dll entry found default geo name getuserdefaultgeoname procedure located library names kernel32 kernel .dll kernel32.dll* # Where do nTop setup files download when automatically updating the software? Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/where-do-ntop-setup-files-download-when-automatically-updating-the-software ## Question: nTop frequently releases updates to the software. Where can I find the setup file after it's downloaded? ## Applies to: * nTop ## Answer: Setup files download to the Windows Temp directory. The update is named with a random string of characters. Contact [nTop Support](https://support.ntopology.com/hc/en-us/requests/new) if you need help. You can always download the software manually by signing-on to your account at [app.ntop.com](https://app.ntopology.com/) and selecting **Downloads**. ## Keywords: *update file setup release set up download temp Windows* # Why isn't the GPU Acceleration working? Source: https://docs.ntop.com/help-articles/access-and-installation/setup-and-install-troubleshooting/why-isn-t-the-gpu-acceleration-working ## Issue: I turned on the GPU Acceleration settings, but I'm not seeing any live changes. ## Applies to: * nTop 3.0+ ## Cause: GPU Acceleration is now a production feature. GPU acceleration increases the rendering computational speed of most Implicit bodies. **Currently, only CAD parts, meshes, lattices, and most implicit modeling and field-modifying blocks, support real-time modeling in nTop.** ## Solution: * [Make sure your GPU is enabled](/help-articles/access-and-installation/system-requirements/how-to-enable-high-performance-graphics-card-settings) * Restart your computer and re-launch nTop * Turn on the GPU acceleration * Use [this test file](https://ntopology.box.com/s/b4pv8shaceolk95yfaai64dofjb68i7e) to check if it is working by dragging the value slider ![An example of changing the blend radius of a gyroid body. The example showcases the GPU Acceleration feature.](https://files.learn.ntop.com/help-articles/setup-and-install-troubleshooting/1500011380362.png) ## Attachment: * [Example File](https://ntopology.box.com/s/b4pv8shaceolk95yfaai64dofjb68i7e) ## Keywords: *help graphics card live gpu working graphic not rtx issue acceleration updating* # 3Dconnextion SpaceMouse is not working correctly with nTop Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/3dconnextion-spacemouse-is-not-working-correctly-with-ntop ## Issue: The user's 3Dconnexion SpaceMouse is only zooming. Panning, rotating, and any other functions do not work. ## Applies to: * nTop 2.29.5 * 3Dconnexion SpaceMouse Compact * 3Dconnexion SpaceMouse Pro ## Cause: This issue occurs is the 3Dconnexion software is out of date or malfunctioning. ## Solution: nTop fully supports 3Dconnexion peripherals, if you are experiencing an issue visit the manufacturer's website and ensure your software is up to date. [https://3dconnexion.com/us/drivers/](https://3dconnexion.com/us/drivers/) ## Keywords: *issue 3d mouse 3dconnexion spacemouse* # Can I use the Nvidia Tesla T4 or P4 as a GPU? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/can-i-use-the-nvidia-tesla-t4-or-p4-as-a-gpu ## Question: Can I use the Nvidia Tesla T4 or P4 as a GPU? ## Applies to: * GPU * VM * OpenGL ## Answer: No, these units don't have output support which is required for running the full version of nTop. ## Keywords: *virtual machine graphics processor computer question gpu vm setup unit run opengl* # Can nTop be installed on a Virtual Machine? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/can-ntop-be-installed-on-a-virtual-machine ## Question: Does nTop work on a virtual machine? ## Applies to: * nTop * Virtual machine ## Answer: nTop can run on a Virtual Machine as long as software permits GPU passthrough and minimum GPU/CPU requirements are met. nTopCL doesn't need a GPU if it is running on a VM. ## Keywords: *system requirements virtual machine GPU question vm parallels* # Can nTop run on an M1 Macbook? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/can-ntop-run-on-an-m1-macbook ## Question: Can nTop run on an M1 Macbook? ## Applies to: * nTop * Macbooks * Virtual Machines ## Answer: Currently, there is no way to virtualize x86 Windows on an M1 Macbook, and nTop doesn't run on Windows 10 ARM. ## Keywords: *virtual machine mac apple question parallel book m1 bootcamp* # Can nTop use virtual memory? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/can-ntop-use-virtual-memory ## Question: Can nTop use virtual memory? ## Applies to: * RAM * Pagefile ## Answer: Yes, nTop can use virtual memory. To increase the Virtual Memory (pagefile), we recommend following [this article](https://www.tomshardware.com/news/how-to-manage-virtual-memory-pagefile-windows-10,36929.html). > [!NOTE] > > *Note: nTop didn't write this article; this link will take you to a different website.* * * We recommend the following pagefile size for running simulations: * On the Pagefile window, check "Custom Size" and change the min to 100000 and max 400000. It may give you a warning, but it should be fine. * Online recommends using 1.5x(RAM) as the min and 4x(RAM) as the largest, but we have seen good results with the above values. ## Keywords: *virtual question memory pagefile increase* # Does nTop require internet access? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/does-ntop-require-internet-access ## Question: Is there any nTop functionality that requires internet access? ## Applies to: * Cloud licenses ## Answer: nTop is a desktop application and stores project data locally. The application connects to cloud services for software delivery, software updates, license authentication, account management, and analytics. You may run nTop without an internet connection for 10 days before being prompted to connect to the internet again. ## Keywords: *system requirements licensing cloud question internet network* # Does nTop software run on Apple computers with Parallels? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/does-ntop-software-run-on-apple-computers-with-parallels ## Question: Can I run nTop on my MacBook via Parallels? ## Applies to: * nTop * macOS * Apple ## Answer: Regrettably, Parallels does not permit GPU passthrough. Therefore the software cannot detect your graphics card. Officially we don't support macOS or Apple equipment, but some customers experience success with [Boot Camp](https://support.ntop.com/hc/en-us/articles/360049024053) as long as GPU/CPU requirements are met. ## Keywords: *system requirements mac apple question gpu vm parallels macos virtual machine macintosh* # Does nTop support multiple Graphics Card (GPU) usage? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/does-ntop-support-multiple-graphics-card-gpu-usage ## Question: Can nTop utilize multiple GPUs to get better performance? ## Applies to: * Windows 10 * nTop 2.25.4 * NVIDIA * AMD ## Answer: nTop only supports single GPU configurations. We suggest an NVIDIA Quadro RTX 5000, AMD Radeon Pro WX910, or newer for optimal performance. ## Keywords: *system requirements nvidia multiple gpu amd graphics card* # Does nTop support multiprocessing? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/does-ntop-support-multiprocessing ## Question: Does nTop support multiprocessing? ## Applies to: * ntopcl.exe * nTop * Windows 10 ## Answer: nTop supports multiple processors, but the software isn't optimized to utilize multiprocessing technology fully. CPU core count and speed impact nTop performance the most, and we notice some performance consequences with multiple processors. The single-socket Xeon-W processors usually outperform Dual Xeon configurations. ## Keywords: *cpu question multiple performance xeon multiprocessing* # Does nTop utilize multithreading? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/does-ntop-utilize-multithreading ## Question: Does nTop employ multithreading capabilities to optimize software performance? ## Applies to: * nTop Blocks ## Answer: Some nTop blocks can take advantage of multithreading, which is using multiple threads on a single CPU, to speed up the operations. Below is a list of some of nTop's most commonly used blocks and whether they are capable of multithreading. #### **Meshing & Conversion Blocks:** | **Block Name:** | **Processing Capability:** | | - | - | | Mesh from Implicit Body (Simplify Off) | Multi | | Mesh from Implicit Body (Simplify On) | Multi (Simplify step is single) | | Parallel Remesh Surface (BETA) | Multi (Max threads input defines Multi behavior) | | CAD Body from Quad Mesh | Multi | | Mesh from Implicit Body DC | Multi | | Voxel Grid from Implicit Body | Multi | | CAD Body from Implicit Body (BETA) | Multi | | Mesh Quality | Single/Multi (Check Intersections is Multi) | | Simplify Mesh by Amount | Single | | Simplify Mesh by Threshold | Single | | Remesh Surface | Single | | Robust Tetrahedral Mesh | Single | | Volume Mesh | Single | | Boundary Layer Mesh | Single | | Triangulate Mesh | Single | | Quadrangulate Mesh | Single | | Refine Mesh | Single | | Mesh from CAD Body | Single | | Mesh from Voxel Grid | Single | #### **Simulation Blocks:** | **Block Name:** | **Processing Capability:** | | - | - | | Static Analysis | Multi | | Modal Analysis | Multi | | Buckling Analysis | Multi | | Thermal Analysis | Multi | | Homogenization Unit Cell | Multi | #### **Optimization Blocks:** | **Block Name:** | **Processing Capability:** | | - | - | | Topology Optimization | Multi | | Field Optimization | Multi | #### **Manufacturing Blocks:** | **Block Name:** | **Processing Capability:** | | - | - | | Slice Body | Multi | | Slice Body by Marching Squares | Multi | | Slice Graph | Multi | | Slice Mesh | Multi | ## Keywords: *system requirements cpu multi-threading multithreading* # Getting Started with nTop Assistant Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/getting-started-with-ntop-assistant nTop Assistant is a standalone desktop tool that brings AI-powered help directly to your workflow without needing to switch to a browser tab. It's built on the same assistant available at [docs.ntop.com](http://docs.ntop.com/) and is designed for quick answers while you work: troubleshooting tips, best practices, and questions about how specific nTop features work. ## What nTop Assistant is (and isn't) * **A separate application.** nTop Assistant is downloaded and installed independently, and runs in its own process alongside nTop. * **Not connected to your open notebook.** The Assistant has no access to the notebook you're working in. It cannot read your model, your parameters, or any file you haven't explicitly shared with it through screenshots or attachments. * **Built for quick help.** It's intended for fast, in-the-moment questions, like how a feature works, why something isn't behaving as expected, or what the recommended approach is, instead of long, multi-step working sessions. ## Downloading nTop Assistant 1. Go to [app.ntop.com](http://app.ntop.com/) and sign in. 2. From your user dashboard, locate the nTop Assistant download. 3. Download and install the application. Once installed, it runs as its own process, separate from nTop. ## Using nTop Assistant Once nTop Assistant is running, simply type your question. Good use cases include: * **Troubleshooting** — "Why might my lattice body fail to generate?" * **Best practices** — "What's the recommended way to set up a field-driven design?" * **Feature questions** — "How does the Shell block handle open boundaries?" ### Adding context with screenshots and files You can optionally attach screenshots or other files to give the Assistant more context. For example, you might share a screenshot of an error message or attach a file relevant to your question. Anything you attach is sent to the AI for processing. Nothing is shared unless you choose to share it. ## How your data is handled * **You control what's shared.** The Assistant only sees what you type and what you explicitly attach. It has no connection to your open notebook or local files otherwise. * **Attachments are processed by the AI.** Screenshots and files you attach are sent to the AI service to generate a response. * **Context lasts one turn.** The Assistant retains conversation context in memory for a single turn only. It does not build up a persistent history of your session. > [!NOTE] > > **Important - ITAR and export-controlled environments:** Do not use nTop Assistant in ITAR or other restricted environments where data must not leave your controlled systems. Because attached screenshots and files are sent to the AI for processing, the Assistant is not suitable for workflows involving export-controlled or otherwise sensitive data. ## Frequently asked questions **Does nTop Assistant see my notebook?** No. It runs in a separate process and has no connection to your open notebook. It only receives what you type or attach. **Does it remember previous questions?** Context is retained for one turn only. For each new question, include the details the Assistant needs. **How is this different from the assistant on docs.ntop.com?** It's the same underlying assistant, packaged as a desktop tool so you can get help without leaving your workflow for a browser tab. **Where do I get it?** From your user dashboard at [app.ntop.com](http://app.ntop.com/). # How to configure your computer to get the most out of nTop Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/how-to-configure-your-computer-to-get-the-most-out-of-ntop ## Objective: Learn how to configure your computer to get the most out of nTop. These suggestions are above and beyond the [minimum system requirements](/help-articles/access-and-installation/system-requirements/system-requirements-guide) (which will run nTop smoothly). This is designed to guide customers who are looking to maximize computer performance. ## CPU: nTop performance is most impacted by CPU core count and speed. The CPU is where the majority of computations take place. CPUs with high core count are preferred as they can run operations in nTop much faster. CPU Example: * **Intel Core i9** or **AMD Ryzen 9** (16+ cores, latest gen) We have seen some performance consequences with Dual Xeon configurations and don't recommend them for an ideal nTop computer build. ## Memory: A lot of RAM is required for fast topology optimizations. A minimum of 64 GB is recommended, but larger models (5M+ elements) have consumed 128 GB of RAM. The amount of RAM you need depends on how big the models you want to analyze are. High-core count CPUs (like those recommended above) typically require more RAM to run well. RAM Example: * 256 GB DDR4-3600 CL18 kit ## GPU: nTop currently doesn't support multiple GPUs. nTop will run with multiple, but it only utilizes one GPU. We recommend buying one better GPU, rather than multiple ones. You want to focus on the amount of memory when choosing a GPU. The GPU affects your rendering speed and visualization. GPU example: * **Latest NVIDIA RTX** (e.g. 4090, 5000 Ada) (24 GB VRAM) ## SSD & More Since most computations occur in the CPU, we recommend a fast SSD (with an M.2 connection). A fast SSD helps open files faster, is more responsive, and has a larger drive to save big topology optimization files. SSD example: * 2 TB NVMe M.2 SSD (20% free space) ## Keywords: *machine GPU computer memory cores set up CPU SSD RAM rtx titan quadro threadripper core ideal power xeon threads* # How to enable high-performance Graphics Card settings Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/how-to-enable-high-performance-graphics-card-settings ## Issue: Suppose you are experiencing issues with your computer prioritizing an integrated graphics card. In that case, you may need to configure a high-performance NVIDIA graphics card to be the default option for nTop. If pressing Ctrl+H doesn't trigger Precision Render ([What is a Precise Render?](/help-articles/knowledge-base/user-interface/what-is-a-precise-render)), if black images display after rendering, or if you experience any unexpected graphics issues, follow these steps to set the NVIDIA graphics card as the preferred graphics processor. ## Applies to: * nTop * Windows 10 * NVIDIA GPUs ## Solution: **Method 1:** This method will overwrite the NVIDIA settings from Method 2. You may need to use this method if your GPU isn't being selected in nTop To change your graphical performance settings for nTop 1. Launch the Settings App. 2. Browse to System > Display > (scroll down) > Graphics settings. 3. Browse for the nTop.exe file 4. Click nTop in the list and select Options. 5. Choose your performance mode preference and press "Save". **![The Graphics Performance Preference menu of a Windows PC. Changing nTop's default setting to High Performance will ensure the GPU is being utilized correctly.](https://files.learn.ntop.com/help-articles/system-requirements/16089038762387.png)** **Method 2:** Change your default GPU to a high-performance graphics card: 1. Right-click anywhere on your desktop. 2. Click NVIDIA Control Panel. 3. On the left side, select Manage 3D Settings. 4. Select the Global Settings tab 5. Change the preferred graphics processor to a "High-performance NVIDIA processor." Alternatively, keep the default settings and configure nTop to use the high-performance graphics card: 1. Right-click anywhere on your desktop. 2. Click NVIDIA Control Panel. 3. On the left side, select Manage 3D Settings. 4. Select the Program Settings tab. 5. Select ntop.exe from the list of programs. 6. Select the preferred graphics processor and choose "High-performance NVIDIA processor." ![Opening the nVidia control panel to enable your GPU for nTop.](https://files.learn.ntop.com/help-articles/system-requirements/16089238582291.png) ## Keywords: *GPU nvidia graphics card render rendering processor high-performance* # How to run nTop in the cloud using Rescale Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/how-to-run-ntop-in-the-cloud-using-rescale ## Objective: Learn how to run nTop in the cloud using Rescale. ## Applies to: * Cloud computing * nTop * Rescale ## Procedure: nTop has partnered with [Rescale](https://www.rescale.com/), a cloud hosting company, to offer cloud computing for nTop. There are two options for using nTop on Rescale, either as a virtual desktop or batch cloud computing. ## How to use Rescale as a virtual desktop: * Select Desktops and press the "Create a new Desktop" button ![The Rescale Desktops menu. The image is highlighting the Create New Desktop button.](https://files.learn.ntop.com/help-articles/system-requirements/4408104706067.png) * Name your desktop session and choose nTop GUI as your software. You can also choose which version of nTop to run. ![Creating a new desktop allows you to name your new desktop session. You can then select nTop as a software on the desktop.](https://files.learn.ntop.com/help-articles/system-requirements/4408104740371.png) * Choose your hardware. Rescale offers a virtual desktop for nTop with the following specifications: * Physical Cores: 8 Intel Xeon (Broadwell) * GPU: NVIDIA Tesla M60 * Memory: 122 GB * Windows, SSD ![The available desktop that Rescale offers to run nTop.](https://files.learn.ntop.com/help-articles/system-requirements/4408098133523.png) * Provisioning the machine and attaching the software takes about ten minutes. Once this is done you can launch the desktop by clicking on the blue desktop button. ![An active desktop for nTop that was successfully set up. You can launch the desktop using the blue computer monitor button.](https://files.learn.ntop.com/help-articles/system-requirements/4408098164371.png) * Virtual desktop is now available in your browser. Select the nTop icon on the desktop to get started. * Open up nTop and enter your credentials to log in and get started. If you normally use a local license, you can still log in with your credentials because every local license comes with a matching cloud license. ![A virtual rescale desktop with the nTop login window open.](https://files.learn.ntop.com/help-articles/system-requirements/4408104793875.png) * To upload files to the virtual desktop, navigate to the "Files" menu. Drag and drop files from your local machine into the interface to upload your files. ![You can upload files to your Rescale desktop using the files menu.](https://files.learn.ntop.com/help-articles/system-requirements/4408116517395.png) * To access your files on the virtual desktop, click on the “Cloud Files” icon within the virtual desktop. This brings up the “Files” browser with your files in cloud storage. ![The Cloud Files desktop icon, indicating that you can use it for accessing your uploaded files.](https://files.learn.ntop.com/help-articles/system-requirements/4408111278483.png) * Navigate to the file and select the download button. You'll then be prompted to save the file to the “Download” folder on your virtual desktop. * Now you are ready to use nTop in a virtual desktop environment. Don't forget to terminate your desktop session once you are done so you don't run up hardware costs. ## How to use Rescale to run a batch job: * Navigate to the Jobs menu and click "Create New Job" ![Select the Jobs icon on the Rescale site. Then select Create New Job.](https://files.learn.ntop.com/help-articles/system-requirements/4408098235795.png) * Upload your nTop file (\*.ntop) * Upload a JSON file with the input parameters you want to use in the Notebook * Name your Job ![Provide a name for your batch job and then upload the necessary files to run the job.](https://files.learn.ntop.com/help-articles/system-requirements/4408104891795.png) * Choose nTop, the version you want, and provide Command line options. An example of what needs to be in the command line is below: ``` 0:/3.6.4/ntopcl.exe -j input.json -v2 -s -u [username@email.com](mailto:username@email.com) -w xxxxxxx Your-nTop-model.ntop ``` * 0:/3.6.4/ntopcl.exe is the path on the provisioned machine * input.json is the name of the JSON file you uploaded that contains the input parameters * -v2 sets the verbosity of the output to warnings, errors, and runtime progress * -s overwrites the provided \*.ntop file with the results * -u and -w specify your nTop username and password * Your-nTop-model.ntop is the name of your nTop file ![Configuring the Software Settings for nTop before running the batch.](https://files.learn.ntop.com/help-articles/system-requirements/4408098381459.png) * Select Hardware Settings * Select the number of cores you want and choose your virtual machine ![Configuring the hardware settings before running the job.](https://files.learn.ntop.com/help-articles/system-requirements/4408104990355.png) * Hit Submit * Your machine is then provisioned and your job is started. Once it is done, you receive an email updating you of the status of your job ![The status tab of the batch job. This page shows a Job Log indicating when items are running and completed.](https://files.learn.ntop.com/help-articles/system-requirements/4408105018771.png) * Navigate to the Results window to download your results back to your machine ![You can use the Results tab to access the completed jobs and download the results.](https://files.learn.ntop.com/help-articles/system-requirements/4408098473363.png) Feel free to reach out to your Sales associate or Support if you are interested in learning more about nTop and Rescale. ## Keywords: *cloud virtual browser rescale computing HPC desktop* # nTop Automate for Linux Container Image Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/ntop-automate-for-linux-container-image ## Objective Learn how to pull and run the official nTop Automate for Linux container image to execute headless nTop notebooks. nTop Automate for Linux is the headless, command-line version of the nTop platform, designed for executing nTop notebooks without a GUI. To ensure a reliable, consistent experience, nTop publishes an official container image that includes the application and all necessary runtime dependencies. ### Common Use Cases * **Cross-Platform Portability**: Run nTop Automate reliably on any system that supports containers, regardless of the host operating system. * **Scalable Orchestration**: Easily integrate nTop into automated workflows, pipelines, or cluster deployments. ## Prerequisites Before pulling the image, ensure your environment meets the following requirements: * Container Runtime: Docker or Podman must be installed. The examples below utilize Docker commands. * System Requirements: The host must meet the minimum system requirements for nTop. * GPU Requirements: An NVIDIA GPU is required if your notebook utilizes GPU-accelerated blocks, such as Flow Analysis (LBM). * Licensing: Each running container requires its own nTop Automate for Linux license while the nTop Automate process is active. ### Procedure 1. **Pulling the Container Image** Run the following command to download the latest image to your local machine: docker pull us-docker.pkg.dev/ntopweb/ntop-automate/ntop-automate:latest > [!TIP] > > *Tip: To obtain a specific version, replace the* *:latest* *tag with a version string (e.g.,* *5.43.2*\*). The oldest supported version is 5.43.2.\* 2. **Running the Container Image** You can execute nTop notebooks by mounting a volume containing your files and running ntopcl. An example of running a notebook that accepts an input JSON file is below. The example below mounts your current working directory \$(pwd) to the /data directory inside the container. This allows the container to read your notebook and write any output files back to your host system. Note: The present working directory of the host is used in the mount in this example, and the notebook.ntop and input.json files are within the present working directory of the host. The example passes these into ntopcl utilizing a relative path, which is possible because the working directory within the container is set to the mounted directory. If the notebook were to produce an output file in the mount directory, it would be written to the host file system and available when the container exited. Note: this example uses a username and password to log into nTop. The containerized nTop Automate for Linux works the same as the native nTop Automate for Linux and any method of logging into nTop will work with the containerized product. docker run --rm -v "\$(pwd):/data:Z" -w /data us-docker.pkg.dev/ntopweb/ntop-automate/ntop-automate:latest ntopcl notebook.ntop --username \ --password \ -j input.json 3. **Passing through a GPU \[Optional]** The image is built on the docker.io/nvidia/cuda:12.6.3-base-rockylinux8 base image and includes necessary drivers. To pass through a GPU, please see the [NVIDIA Container Toolkit documentation page](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html). Only NVIDIA GPUs are currently supported. 4. **Notes and FAQ** * The image may be used as the base image in your own Dockerfile/Containerfile to produce a custom container image that has nTop Automate for Linux installed * The container image can be used on a Windows host, but the container runtime (docker or podman) must be configured properly to run linux containers (WSL must be installed). Please reference official Docker/Podman documentation for more information on installing/configuring these tools on Windows. # System Requirements Guide Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/system-requirements-guide This article summarizes the system requirements of nTop. For details on specific topics, browse the knowledge base or [contact nTop support](https://support.ntopology.com/hc/en-us/requests/new). ## System Requirements: | Component | Minimum | Recommended | High-Performance | | - | - | - | - | | **System Type** | Laptop or Desktop Workstation | Desktop Workstation | Desktop Workstation | | **CPU** | **Intel Core i7** or **AMD Ryzen 7**(8+ cores, AVX compatible) | **Intel Core i9** or **AMD Ryzen 9**(12+ cores, high clock speed) | **Intel Core i9** or **AMD Ryzen 9**(16+ cores, latest gen) | | **Memory (RAM)** | 64 GB | 128 GB | 256 GB or more | | **Storage** | 500 GB SSD(20% free space) | 1 TB NVMe M.2 SSD(20% free space) | 2 TB NVMe M.2 SSD(20% free space) | | **Graphics Card** | **NVIDIA GPU** (Volta architecture or newer 2018+)(8 GB VRAM min) | **NVIDIA RTX 4070** or equiv.(12 GB VRAM) | **Latest NVIDIA RTX** (e.g. 4090, 5000 Ada)(24 GB VRAM) | | **Drivers** | Latest NVIDIA drivers | | | ## ## **Performance Guidelines** **CPU Performance:** nTop performance is most significantly impacted by CPU core count and clock speed. High-end Intel or AMD processors with multiple cores will provide the best computational performance for meshing and optimization operations. **Memory Requirements:** RAM is critical when working with large models, particularly for meshing and optimization applications. While 64 GB is the minimum, larger models (5M+ elements) can consume 128 GB or more during processing. **Graphics Performance:** The GPU primarily affects rendering speed and real-time visualization. Larger models require more VRAM and a more powerful GPU to maintain responsive real-time rendering and smooth user interaction. **Storage Considerations:** * **File Size:** Meshing and optimization applications can generate files exceeding several gigabytes. Ensure adequate free space for both your project files and temporary system files. * **Speed:** Fast NVMe M.2 SSDs significantly improve file loading times and overall system responsiveness. ## **System Compatibility Notes** ### **Supported Configurations** * **Operating System:** Windows only (see [What operating systems does nTop support?](/help-articles/access-and-installation/system-requirements/what-operating-systems-does-ntop-support)) * **Virtual Machines:** Supported if GPU passthrough is enabled and minimum GPU requirements are met * **CPU Architecture:** x86-64 processors only ### **Unsupported Configurations** * **macOS or Linux:** Not compatible, including virtualization via Parallels or Wine * **ARM CPUs:** Not supported (including Apple Silicon Macs) * **AMD GPUs:** nTop only officially supports NVIDIA GPUs * **Integrated Graphics:** Intel UHD Graphics and similar integrated solutions are not supported * **Older NVIDIA GPUs:** Pre-Volta architecture cards (before 2017) are not supported * **Multiple GPUs:** nTop utilizes only one GPU; multiple GPU configurations offer no performance benefit ### **Hardware Requirements** * **GPU:** NVIDIA GPU with Volta architecture or newer (2018+) required with current drivers * **CPU Age:** Processors must be newer than 10 years old to ensure AVX compatibility * **System Stability:** Minimum specifications are required for functionality and stability ## **Important Notes** * nTop cannot provide technical assistance for systems that don't meet minimum requirements * For optimal performance, consider specifications above minimum requirements * Regular driver updates are essential for system stability and performance **Need Help?** Get answers anytime by searching the knowledge base or [contact support](https://support.ntopology.com/hc/en-us/requests/new)! We're always happy to help! ## Keywords: *system requirements windows licensing cloud cpu memory organization administration org admin operating system graphics card storage* # The CPU is not configured to run nTop because AVX is not enabled Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/the-cpu-is-not-configured-to-run-ntop-because-avx-is-not-enabled ## Issue: Why do I get this error message? The CPU is not configured to run nTop because AVX is not enabled. ## Applies to: * nTop Hardware ## Cause: This is a new warning label that was introduced in nTop 3.2, letting you know that you may experience crashing or the system not working since your CPU is not configured to run AVX. ## Solution: nTop needs a CPU with AVX enabled to run properly. If you receive this error, you need to enable AVX on your CPU (this is best done through your IT department) or upgrade your CPU to one that has AVX enabled. When choosing a new CPU, please refer to our [System Requirements Guide.](/help-articles/access-and-installation/system-requirements/system-requirements-guide) ![A warning indicating that AVX must be enabled for nTop to run successfully.](https://files.learn.ntop.com/help-articles/system-requirements/4401990315667.png) ## Keywords: *error crash cpu issue avx enable* # The software does not open when using a laptop with a docking station Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/the-software-does-not-open-when-using-a-laptop-with-a-docking-station ## Issue: nTop opens properly on an undocked Dell Precision laptop. However, the software does not work if connected to a Dell D6000 docking station utilizing USB Graphics. ## Applies to: * nTop * Laptop * Dell Precision Mobile Workstations * Dell Docking Stations ## Cause: Some docking stations utilize USB Graphic solutions that may interfere with discrete GPUs. ## Solution: Some users can work around this issue by starting nTop on the undocked workstation and then connecting to the dock. However, a Dell Docking station with a Thunderbolt connection may offer a better experience. Visit the Dell troubleshooting guide for more assistance. ## Keywords: *laptop issue dell docking dock thunderbolt usb precision* # What operating systems does nTop support? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/what-operating-systems-does-ntop-support ## Question: What operating systems does nTop support? ## Applies to: * nTop * nTop Automate ## Answer: | **Application** | **Supported Operating System** | | - | - | | nTop (interactive environment) | - Windows 11 (64-bit Enterprise, Professional, and Education editions) | | nTop Automate (headless environment) | - Windows 11 (64-bit Enterprise, Professional, and Education editions) - Red Hat Enterprise Linux (RHEL) 8.9 (64-bit). Please refer to [this article](/help-articles/knowledge-base/ntop-automate/ntop-automate-for-linux-update) to get started. | Here are the salient points to note regarding OS support for the **nTop** product: * nTop does not support macOS, running via Parallels, or any Apple equipment. * nTop does not support Linux or running via Wine. * nTop does not support HPC (High-Performance Computing) Clusters. ***Note: nTop Automate (ntopcl.exe) is supported in HPC clusters on a supported OS.*** We expect that nTop will continue to work on Windows 10, but with Microsoft's [announcement](https://www.microsoft.com/en-us/windows/end-of-support?r=1) to end mainstream support for Windows 10 later this year, we will no longer extensively test, support, or provide updates for Windows 10. To inquire about nTop support for virtual machines and any alternate configuration not listed above, please contact support for assistance. ## Keywords: *system requirements windows mac operating OS apple question automate linux parallels ntopcl wine rhel 7.9* # Why can't I see any geometry in my viewport? Source: https://docs.ntop.com/help-articles/access-and-installation/system-requirements/why-can-t-i-see-any-geometry-in-my-viewport ## Question: When I add blocks to my notebook, I can't see any geometry even when I turn on visibility. Why is this happening? ## Applies to: * System Requirements ## Answer: If you open nTop and your Viewcube is missing, you're unable to zoom in or out, and you're unable to see geometry from blocks you've inserted into the notebook, it means your machine's GPU does not meet our [System Requirements to run nTop](/help-articles/access-and-installation/system-requirements/system-requirements-guide). Please be aware that nTop is not compatible with integrated graphics and requires an actual GPU. If you have a GPU installed in your machine and nTop isn't recognizing it, please follow the instructions in [this article](/help-articles/access-and-installation/system-requirements/how-to-enable-high-performance-graphics-card-settings). ![The nTop viewport showing a white blob where the geometry is supposed to be. The View Cube is blocked by a white box, indicating an issue with the user's GPU.](https://files.learn.ntop.com/help-articles/system-requirements/32149868203923.png) ## Keywords: *GPU requirements system viewport question geometry invisible* # Help Articles Source: https://docs.ntop.com/help-articles/index > **[Knowledge Base](/help-articles/knowledge-base/index)** > > Search for answers, how-tos, and examples on a variety of topics. > **[Access and Installation](/help-articles/access-and-installation/index)** > > Get help with account issues, software setup, and system requirements. > **[What's New](/help-articles/whats-new/index)** > > Learn about improvements in the latest release of nTop. # How do I line up the part and CLI file when I import them to QuantAM? Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-do-i-line-up-the-part-and-cli-file-when-i-import-them-to-quantam ## Question: How do I line up the part and CLI file when I import them to QuantAM? ## Applies to: * Export * Slicing ## Answer: QuantAM has no context menu option to switch to Part Coordinate System for CLI files, but you can still use the Part Coordinate System. To turn it on in Renishaw QuantAM: 1. Open App Settings. 2. In the **Coordinate System** Expander, Enable the **Part Coordinate System** option. 3. Import the CLI files. You can see the CLI files placed on the layout for their coordinate system in the Layout Stage. However, this doesn't change their visibility in the Design Stage. ## Keywords: *part slice system cli design question slicing slices up line quantam coordinate layout stage* # How is the progress bar of the slice body block calculated? Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-is-the-progress-bar-of-the-slice-body-block-calculated ## Question: How is the progress bar of the slice body block calculated? Is it based on the height of the Object we slice? ## Applies to: * Slicing * Export ## Answer: It's calculated by slice count rather than height, but the height determines the slice count. ## Keywords: *block export slice body slicing height slow progress bar stall count* # How to create and export slices Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-create-and-export-slices ## Objective: Learn how to slice your geometry and export the slices. The slices can be exported in many formats. Check out [this article](/help-articles/knowledge-base/interop/what-file-types-can-ntop-import-and-export)to see what is supported for export ## Applies to: * Slicing * Additive Manufacturing ## Procedure: **1. Slice the Object** * Add a **Slice Body** block * **Body**: Drag in the Implicit Body you want to slice * **Layer Height:** Space between slice layers * **Feature Size:** Minimum feature size to accurately capture details * **Include negative Z:** If you want to include layers with negative Z with respect to frame you need to check this box * **Frame**: Using the Frame block, add a reference point to generate the slice stack. * Ensure that your **Frame** is located at the bottom of your part. In this example, the **Min Point** located within the Properties of the geometry was used to designate the **Origin** of the Frame *If you wish to use the Marching Square algorithm of the slicing function, you should use the new **Slice Body by Marching Squares** block enables users who need to slice an Implicit Body using a large feature size for performance reasons but cannot tolerate occasional artifacts introduced by sharpening.* ![A periodic lattice that has been sliced using the Slice Body block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49826466669587.png) **2. Hatch the Slices** * If you wish to add hatches to your slice stack, you can do it with the **Hatch** block * Drag your slice stack into the first input of your **Hatch** block and input values for the **Spacing** and **Angle Step** **![Adding hatches to the sliced lattice using the Hatch block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/360101346914.png)** **3. Merge It All Together** * Merge your slices and hatches using the **Merge Slice Stacks** block * Select the **+** sign within the **Slice Stack List** to add another input * Drag your **Slice** block and **Hatch** block into the list of inputs ![Combining the sliced lattice with the hatches using the Merge Slice Stacks block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500002508261.png) #### **4. Export as your preferred file format** * You can export the Slice Stack using one of the **Export Slices** block And that's it! You've successfully sliced and exported your part. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Slicing%20and%20Export.ntop) ## Keywords: *tutorial export slice hatch slice stacks slicing merge slices exporting* # How to determine the area and lengths of slices Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-determine-the-area-and-lengths-of-slices ## Objective: Learn how to get the cross-sectional area of each slice and their total lengths. ## Applies to: * Slicing * Exporting ## Procedure: **1. Start with your slices created** **2. Extract the Properties** * Open the Slice Body Properties * Expand the Slices (#) * Expand the Properties underneath the Slices (#) * Drag out the cross-sectional area property and the total length property (you can also view these properties without dragging the chips out. Just expand the chevron to see their values) ![Highlighting the cross sectional area property chip of the Slice Body block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49965489413523.png)![The extracted Cross Sectional Area property chip. Opening the property panel of this variable shows the individual cross section of each slice.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49965456819731.png) And that's it! You've successfully determined the area and length of each slice. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/slice_data.ntop) ## Keywords: *export slice property slicing data slices how-to length area cross sectional* # How to export slice data to Renishaw QuantAM Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-export-slice-data-to-renishaw-quantam ## Objective: Export slices into Renishaw QuantAM ## Applies to: * Export Slicing * Additive Manufacturing ## Procedure: **1. Generate Slice Stack** You can use the **Slice Body** or **Slice Mesh** block to slice either an Implicit Body or Mesh to generate closed and open contours. Optionally, you can use the **Simplify Slice Stack** block to reduce the number of polylines within a slice stack, resulting in a smaller file to transfer to QuantAM. ![The Slice Body block generates the slice stack.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/40980891628435.png) **2. Export Slice Stack in Renishaw format** QuantAM supports both ASCII and Binary CLI formats. You can export your slice stack to either of these formats using the **Export Slices to CLI** block. ![Using the Export Slices to Renishaw block to export the slice stack out of nTop. ](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/40980910789267.png) Note: Exports Slices to CLI do not support exporting point exposures generated from the **Slice Lattice** block. **3. Import into Renishaw QuantAM** Once you open Renishaw Quantum 5.3 or newer, you can import the CLI file into an existing document or create a new one with the file. #### **To import into an existing document:** 1. Use the Plus on the side panel to open Import Model ![The Renishaw QuantAM program. Click the plus sign on the left side to import the slices.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/360101215173.png) 2. Select your CLI file. ![Select the CLI file we generated in nTop from the file explorer to import it.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500000121221.png) 3. You will now see the bounding box representation of your slice stack. You can now apply your material definition to generate tool pathing. ![The bounding box representation of your slice stack.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500000124122.png) #### **To import into a new document:** 1. Select Open... from the home screen ![The Renishaw QuantAM program home screen. Select Open, to open the slice stack we created in nTop.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500000121241.png) 2. Select Browse Model ![Select Browse model to find the cli file.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/360098995694.png) 3. When prompted, select Slices ![When importing the CLI file, select slices.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/360101215193.png) 4. You will now see the bounding box representation of your slice stack. You can now apply your material definition to generate tool pathing. ![The bounding box representation of your slice stack.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/360098995714.png) And that's it! You've successfully imported your CLI files into QuantAM. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *Slices export slice renishaw slicing QuantAm RenAM 500Q RenAM 500S RenAM 400* # How to fix slice data must be specified in positive XYZ space error Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-fix-slice-data-must-be-specified-in-positive-xyz-space-error ## Issue: I am trying to export slices and I encountered an error that says "Slice data must be specified in positive XYZ space" ## Applies to: * Exporting slices ## Cause: For the slicer to operate properly, the body must be located entirely in positive coordinate space. This error occurs when a body is in negative coordinate space. For example, the cube below is centered at (0,0,0). So the bottom half of the cube is technically in negative coordinate space. ![](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/50598707544851.png) ## Solution: Use the **Translate Object** block to move the body into entirely positive coordinate space, or change the original origin of the body. You can see in the photo below how applying a **Translate Object** block eliminates the error message. Section 1 contains our original cube at (0,0,0), while Section 2 translates the block to (10,10,10) and re-slices. These new slices are able to be successfully exported. ![](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/50598722833043.png) ## Keywords: *error export slice data slices space issue exporting fix xyz specified positive* # How to generate and export slice data for SLS/SLM/DMLS Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-generate-and-export-slice-data-for-sls-slm-dmls ## Objective: Generate slices from the input geometry to be used in SLS/SLM/DMLS ## Applies to: * Selective Laser Sintering * Direct Metal Laser Sintering * Selective Laser Melting * Slicing ## Procedure: 1. Generate slices for your geometry using one of the slicing blocks ([How to create and export slices](/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-create-and-export-slices)) * Slice Body * Slice Mesh * Slice Graph > [!NOTE] > > **Note:** We recommend using the printer software to generate a slice toolpath. When choosing the Tool pathing type, the software generates the Contour and Hatching based on the Slice output contour generated in the above step. 2. **Generating the outer contour:** The laser has a thickness. To account for the laser's thickness, we need to generate an offset to the contour. We need to generate the number of outer contours based on the times we wish to scan the outer contour. The **Offset Slice Stack** block offsets each slice of a Slice Stack outward or inward from its Frame's Z axis. ![Using the Offset Slice Stack to create an offset to the contour.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/9599530587155.png) 3. **Hatching:** The process of filling each layer of the slice stack with hatch lines. Below are the available different hatching options. * Hatch * Hatch with Islands * Hatch with Stripes ![Using the Hatch block to add filling to each layer of the slice stack with hatches.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/9599612551571.png) ![A close up of a Slice with the Hatch with Islands block. The Island gap, Island width, and Spacing inputs are labeled on the hatches.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/9599758251539.png) ![A close up of a Slice with the Hatch with Stripes block. The Stripe gap, Stripe width, and Spacing inputs are labeled on the hatches.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/9599732252563.png) 4. **Merge Slice Stacks:** The **Merge Slice Stacks** block merges a list of slice stacks into a single stack. Layers will be concatenated if they are of the same height. Otherwise, they will be inserted in order of height. > [!NOTE] > > **Note**: **Merge Slice Stack** determines the order of printing. For example, Offset > Offset > Hatch would look like the below. ![The Merge Slice Stacks block merges a list of slice stacks into a single stack.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/9599836645139.png) 5. **Export Slices:** We have different options for exporting your slices to the printer. * Export Slices to Point Data * Export Slices to CLF * Export Slices to CLI * Export Slices to SSL * Export Slices to Renishaw * Export Slices to EOS * Export Slices to Arcam ABF * Export CLI Points And that's it! You've successfully prepared your slices for SLS/SLM/DMLS. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *export slice slice stacks slicing dmls sls slm* # How to generate bar supports under a part Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-generate-bar-supports-under-a-part ## Objective: Learn how to use the **Supports - Bar - Straight Tips - Part to BPlate (External)** custom block to generate bar supports under a part. In this example, you will learn how to use a combination of blocks to generate supports necessary for additive manufacturing. ![The Supports - Bar - Straight Tips - Part to BPlate (External) custom block](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/50012026788371.png) ## Applies to: * Additive manufacturing ## Procedure: **1. Import the Custom Block:** Import the **Supports - Bar - Straight Tips - Part to BPlate (External)** custom block. **2. Fill out the inputs:** **Input 1: Part** The input body is the part we want to support. We use this example's bracket below ![The example body to apply supports to.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/50012026792595.png) **Input 2:** Build Plane * Define the build plane that your supports should be placed on **Inputs 3-10:** These inputs define the bar support geometry and its position on the part. ![A diagram showing how each input affects the output support bars.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007794441.png) **Input 3:** Point Spacing * Defines the space between the tip points on the part **Input 4:** Overhang Angle * We recommend entering a value slightly less than the required Overhang angle to capture the entire area. An example of 44.8 degrees for a required 45 degrees. **Input 5:** Tip Offset * Defines the 'length' of the tip **Input 6/7:** Tip Thickness (Part > Bar) * Controls the taper of the tip from the Part to the Bar **Input 8/9:** BarThickness (Tip > Base) * Controls the taper of the bar from the Tip to the Base **Input 10:** Blend Radius * Controls the radius of the support beams connecting to the build plate Note: When visualizing supports, it's common for them to appear irregular or disjointed due to their very small features. To see the correct geometry, we recommend using Precise Render to visualize the supports. The example below shows the same part and supports with and without Precise Render enabled. ![Visualized support bars without precise render.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/50012011712275.png)![Visualized support bars with precise render.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/50012026798227.png) ## Download the Example file: * [Custom Block](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Supports%20-%20Bar%20-%20Straight%20Tips%20-%20Part%20to%20BPlate%20\(External\).ntop) * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Bar%20Supports%20Example.ntop) ## Keywords: *additive block implicit part support manufacturing custom prep plate printing build bar minimum 3d supports* # How to slice by tiers Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-slice-by-tiers ## Objective: If you encounter issues using the **Slice Body** block, learn how to use the Custom Block, Slice by Tiers, to create your slices. This custom block breaks down the **Slice Body** block into multiple tiers. It exports a single tier of slices at the correct Z-reference height in CLI format. ## Applies to: * Slice Body * Crash during slicing * Running out of memory while slicing ## Procedure: 1. Import the custom block **CLI Slice Body by Tiers** attached below. ![Import the CLI Slice Body By Tiers block through the Imports tab.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49866353718291.png) 2. The inputs for the **CLI Slice Body by Tiers** are similar to that of the **Slice Body** block. ![ the CLI Slice Body By Tiers block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49866368713363.png) * **Body:** Implicit Body to slice * **Slice Height:** Spacing between slice layers * **Slices Per Tier:** Total height/Number of Tiers * **Slice feature size:** Minimum feature size to accurately capture details * **Tier Number for Export:** List of numbers for iterating all the tiers one after another 3. Use the **Sequence** block to obtain the list with an increment of 1. ![Using the round property chip of the Sequence block as the input for the Tier Number for Export input of the CLI Slice Body By Tiers block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49866368716051.png) * Export Path: File path for export > [!NOTE] > > **Note:** The 'Include negative Z' is checked on by default and the default 'Frame' selected for this block is X-axis 1,0,0 and Y-axis 0,1,0 with the bounding box centroid as the origin. ![The CLI slices generated from the CLI Slice Body By Tiers block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49866368718867.png) 4. **Import and Merge Slices:** If you wish to merge the slice stacks. Use the **Import Slice Stack** block to get the slices back. This block has one input of 'Path'. We use **Concatenate Text** to import all the slice tiers together. The 'Export Path Text' and 'Rounded Sequence' with .cli is the name format all the files are saved in. We reproduce the same with the Text blocks. The slice stacks are merged using the **Merge Slice Stacks** block that can be exported out using the **Export Slices to CLI** block. ![The Slice Stack reimported into nTop and Merged into a single stack.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49866368720659.png) And that's it! You've successfully sliced by tiers. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Custom Block](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/CLI%20Slice%20Body%20by%20Tiers.ntop) * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Slice%20By%20Tiers%20Example.ntop) ## Keywords: *slice slice stacks custom block geometry how-to slice by tiers integrations* # How to Use B&W Image Slicing Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-use-b-w-image-slicing ## Objective: Learn how to slice an implicit body into an image stack for additive manufacturing printers that accept images. ## Applies to: * Additive Manufacturing * Slices for Open DLP and Binderjet systems ## Procedure: **1. Prepare the part** * Convert the part into an Implicit body **2. Choose a Build Volume** * If you are printing from an EOS M or Renishaw AM machine, you can choose from built-in **Build Volume** blocks. * If your machine isn't one of these, create your build volume with a **Bounding Box** block **3. Orient the part within the Build Volume** * Use the **Translate Object** block to move the part into the **Build Volume** * You may need to orient it or create support structures for an optimal build * [How to generate bar supports under a part](/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-generate-bar-supports-under-a-part) * [How to use Minimum Support Orientations](/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-use-minimum-support-orientations) **4. Slice the part** * Add a **Slice Body to B\&W Image Stack** block * **Path:** Choose the destination to save the slices * **Fill Suffix:** * Toggled On: Names the files: "slice\_001", where the number of 0's before the slice number is determined by the total number of slices. * Toggled Off: The files are named "slice\_1", with no 0's. * **Body:** Insert the Implicit Body you want to slice. * **Layer Height:** Define the spacing between the layers. You may need to check the printer settings for the appropriate range of heights. * **Frame:** This is the coordinate system for the build plate. It is auto-populated but may need to be edited depending on the printer settings. * **Print Volume:** Insert the **Bounding Box** or **Build Volume** from Step 2. * The resolution is the number of pixels in the X and Y directions. This value may change depending on your printer and desired resolution. The maximum image resolution supported is 1 billion pixels. * Image X resolution: 1920 * Image Y resolution: 1280 * **Greyscale bits:** 8 bits ![The visualized implicit body to be sliced using the Slice Body to B\&W Stack.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/34385609296787.png) After all the inputs are filled, the block saves the resulting .png file format image stack in the zip folder defined earlier. ![A gif showing the B\&W images that are exported from nTop.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500010202701.png) And that's it! You've successfully learned how to generate a B\&W Image stack for manufacturing. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Slice_BW_Image.ntop) ## Keywords: *additive black renishaw eos slicing print slices image white B\&W b\&w and imaging images resin* # How to use Bounding Box 2D Nesting Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-use-bounding-box-2d-nesting ## Objective: Learn how to use the **Bounding Box 2D Nesting** block (image below) to layout and Slice parts on a build plate. ![The Bounding Box 2D Nesting.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833278253459.png) ## Applies to: * Additive Manufacturing ## Procedure: **1. Select the part to layout** To nest objects in a bounding box, we can start with a Surface Mesh that has been imported into the notebook. ![](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833310864403.png) **2. Define desired unit count** Use the **Sequence from Bounds** and **Scale Object** blocks to define the desired unit count. * Add a **Sequence from Bounds** block * Set the Start to 1 * Set the End to 1 * Set the Count to your desired count for the build plate. * Add a **Scale Object** block * Set the Object as your mesh * Insert the **Sequence from Bounds** block into the Factor input * Insert the Centroid from the **Imported Mesh** into the Scale Point input The meshes are overlayed on one another and a List of Objects is created. As seen in the red box below, we have a List of 16 bodies. The List will be carried through for the rest of the workflow. ![Generating a list of 16 meshes that are overlayed on eachother.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833310865427.png) **3. Slice the list of objects** * Add a **Slice Mesh** block * Input the Scale Object block from Step 2. * Set your layer height Since we are using the **Bounding Box 2D Nesting** Block in the next step, we do not need to select Include negative Z or define a Frame. ![A list of 16 slice stacks created using the Slice Mesh block and inserting the Scale Object mesh list.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833310867091.png) **4. Nest and Layout Part(s) on Build Plate** **4a. Nest Part(s) in Build Volume** Add the **Bounding Box 2D Nesting** block and define the various nesting parameters; Build Volume, Part to Part Offset, Platform Offset, and Perimeter Offset. The Bounding boxes input automatically includes an empty List. Delete this [List](/help-articles/knowledge-base/user-interface/how-to-work-with-lists) and input the **Slice Mesh** list from the previous step. ![The Bounding Box 2D Nesting block has a Bounding Box List block in its Bounding Boxes input by default. Delete this list to be able to insert the new list.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833310870419.png)![Insert the Slice Mesh block list into the Bounding Boxes input of the Bounding Box 2D Nesting block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833310871443.png) The additional Inputs for the **Bounding Box 2D Nesting** are Build Volume, Part to Part Offset, Platform Offset, and Perimeter Offset. **Build Volume:** You can choose between our current List of EOS/Renishaw/RenAM build volumes (found under the Additive Manufacturing tab) or define your own bounding box for a build volume. **Part to Part Offset, Platform Offset, and Perimeter Offset:** Have default values and define the spacing between the Parts as well as the offsets from the plate and exterior of the select Build Volume. **4b. Layout Part on Build Plate** * Add a **Transform Object** block * Insert the **Slice Mesh** block from Step 3 for the Object input * Insert the **Bounding Box 2D Nesting** block from Step 4a into the Transform input ![Insert the Slice Mesh block list into the Object input of the Transform Object block. Insert the Bounding Box 2D Nesting block into the Transform input of the Transform Object block. Visualizing the Transform Object block shows the original slice stack and the new slice stacks now located inside the Build Volume bounding box.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833278262291.png) **5. Trim slice stack to isolate parts within the build volume** * Add a **Trim Slice Stack** block * Slice Stack: Insert the **Transform Object** block from Step 4b * Trimming Body: Add a **Box from Corners** block * Open up the Properties of the part in the Build Volume input (in the **Bounding Box 2D Nesting** block) and extract the Max Point and Min Point chips * Insert the Property chips into the **Box from Corners** block * Slices to Remain: Inside * Feature Tolerance: as desired ![Use the Min Point and Max Point of the Build Volume bounding box to create the trimming box.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833310875539.png) The final output is a Sliced list of all the parts that fit on the Built Plate Volume and meet the desired constraints. In the example shown, 9 of the 16 bodies are able to fit on the build plate. ![The Trim Slice Stack visualized to show the 9 slice stacks that fit inside the defined Build Volume bounding box.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49833310882835.png) You have now completed the procedure for using the Bounding Box 2D Nest Block to arrange parts in preparation for an additive build. ## Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/2D_Nesting.ntop) ## Keywords: *additive part translate manufacturing print prep build plane orient designs layout box objects nest bounding 2d nesting* # How to use Minimum Height Orientation Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-use-minimum-height-orientation ## Objective: Learn how to use the **Minimum Height Orientation** block to determine an optimal orientation to minimize print duration. This block generates a transformation that minimizes the Z-Height of your object in preparation for manufacturing. If you would like a deeper look into the workflow or would like to follow along through the steps below, you can find the nTop file here: [How to use Minimum Height Orientation.](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Minimum_Height_Orientation.ntop) ![The Minimum Height Orientation block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007817581.png) ## Applies to: * Additive Manufacturing ## Procedure: **1. Select the body to orient** Two parts are imported below, a gear (red) and a connecting arm (blue). > [!TIP] > > **Tip:** The **Minimum Height Orientation** block only works with Implicit Bodies. If you want to orient a CAD Body, Mesh, etc., make sure to convert it to an Implicit Body first. ![Two CAD Parts that have been imported into nTop. They have both been converted to implicit bodies. ](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007818101.png) **2. Use the Minimum Height Orientation block** Convert the Body input in the **Minimum Height Orientation** block into a variable. This allows us to interchange the part we want to orient quickly and makes it easier to use that variable in the last step of the workflow. ![Converting the Body input of the Minimum Height Orientation block into a variable.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007818281.png) **3. Generate/display the oriented part** The output of the **Minimum Height Orientation** block is a transformation. The last step is to use the **Transform Object** block to generate the oriented object. Simply drag and drop the Body to Orient variable we created and the **Minimum Height Orientation** block into the Object and Transform inputs below (indicated by the solid red and blue lines, respectively). ![Insert the Body to Orient variable into the object input of the Transform Object block. Insert the Min Body Oriented variable into the Transform input of the Transform Object block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007652022.png) **Visualizing the Transformation:** Below is a GIF to help visualize what is happening and the interchangeability of this workflow. The transformed objects are green. ![A gif showing how the orientation of each body changes when inserted into the Body to Orient block. The Transform Object block is visualized.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007821321.png) And that's it! You've successfully created a minimum height orientation for further processing. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Minimum_Height_Orientation.ntop) ## Keywords: *additive manufacturing height printing minimum orientation 3d orient z* # How to use Minimum Support Orientations Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-use-minimum-support-orientations ## Objective: Learn how to use the **Minimum Support Orientations** block to determine an optimal orientation to minimize support. If you would like a deeper look into the workflow or would like to follow along through the steps below, you can find the nTop file here: [nTop File - How to use Minimum Support Orientations.](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Minimum_Support_Orientation.ntop) The workflow shows how you can determine a series of transformations that optimally orient your part to minimize the supports needed for additive manufacturing. ![The Minimum Support Orientations block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007568982.png) ## Applies to: * Additive manufacturing ## Procedure: **1. Select the body to orient** Import the part you want to orient. ![An imported CAD Part that has been converted to an implicit body.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007738181.png) **2. Generate Minimum Support Orientation options** **2a. Populate Minimum Support Orientation (MSO) block** **Create variables from the inputs:** There are eight inputs to the **MSO** block. In this workflow, we extract four of them to make them variables (this is done by right-clicking on the Input in a block and selecting Make Variable - as seen in the image below) and bring them to the top level of the Notebook, making it easily accessible and transferable to other blocks. Another block uses the Build Plane, Overhang angle, Support region, and Feature size. This workflow also examines all three Support region options: External Only, Internal Only, and All Regions. ![Populating the inputs of the Minimum Support Orientation block.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007781361.png) **2b. Generate/Display a List of possible Orientation** The **MSO** block creates a Transformation List as an output, which needs to be displayed. This is done by using the **Transform Object** block. * Add a **Transform Object** block * Object: Implicit body we want to orient * Transform: **Minimum Support Orientation** block **![The Minimum Support Orientations block creates a Transformation List as an output, which needs to be displayed. This is done by using the Transform Object block. ](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007737221.png)** The **Transform Object** block now has a list of orientation options. As seen in the image below, there are a handful of possibilities for each Support region selection (External Only, Internal Only, and All Regions). As is, this list is not particularly useful. We need to isolate the desired orientation and the associated support region; the first step in this process is generating a List of support volumes. **![The Transform Object block now has a list of orientation options. There are a handful of possibilities for each Support region selection (External Only, Internal Only, and All Regions)](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007739441.png)** **3. Generate a List of Manufacturing Support Volumes** Use the **Manufacturing Support Volume** to generate a list of support volumes for each orientation option. The first input, Body, is the **Transformed Object** **List** we created in Step 2b (solid purple line below). The other inputs are the variables we extract in Step 2a. **![Use the Manufacturing Support Volume to generate a list of support volumes for each orientation option.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007619282.png)** **4. Isolate the optimal orientation** Several candidate orientations (typically 5) minimize the number of supports needed. We need to use the **Transform Object List** and the **Manufacturing Support Volume List** from above to isolate a single orientation that will minimize support. This method of isolating is called List by Proxy. * Add a **Sort** block * Click the down arrow (located in the encircled image below), and select "List Interface, List Interface" to add an additional input to the block called Proxy (seen below). ![Changing the overload of the Sort block to accept a List input and a Proxy input.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007621382.png) * List: Insert the **Transformed Object List** (from Step 2b) * Proxy: Open the Properties of the **Manufacturing Support Volume** block. Navigate through the properties until you see the "Active Voxel Count" chip, and drag that chip into the input. > [!TIP] > > **Tip:** You can open the active voxel count chip further, as seen in the red box below. There we see a List of each support region generated and the number of voxels used to build that volume. Our Sort List by Proxy finds the smallest voxel count and associated orientation. ![Insert the Transform Object list of support orientations into the List input of the Sort block. Open the Properties of the Manufacturing Support Volume block. Navigate through the properties until you see the "Active Voxel Count" chip, and drag that chip into the Proxy input.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007788041.png) After the **Sort** block is satisfied, open the Properties, and the first chip in the List is the orientation that satisfies the minimum amount of supports (i.e. fewest voxels). Drag and drop that chip into the Notebook. **![The properties panel of the Sort block. Here you can see the list of orientations sorted by voxel count. Drag the first list item out of the properties panel and place it in the notebook.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007576342.png)** **5. Isolate the optimal build volume** * Add a Manufacturing Support Volume block * Set the inputs to the previously defined variables for Build Plane, Feature Size, and Overhang Angle * Body: Insert the chip we extracted from the **Sort** block in Step 4 (solid red line below). From here, we can infill the Support Volumes with any Lattice type (i.e. support structure). ![The Manufacturing Support Volume block with the extracted orientation placed in the body input. ](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/1500007622182.png) And that's it! You've successfully created a minimum support orientation for your part. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Additive%20Manufacturing%20Preparation/Minimum_Support_Orientation.ntop) ## Keywords: *additive volume support export manufacturing optimal proxy by printing build sort plane minimum overhang 3d orientations supports* # How to visualize overhang and draft angles? Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-visualize-overhang-and-draft-angles ## Objective: How to visualize overhang regions How to visualize draft angle ## Applies to: * Build Preparation * Manufacturing Preparation * Surface Analysis ## Procedure: We will use the Surface Analysis tool, which colors objects in the view based on specified draft or overhang angles. This tool provides live feedback as the model changes to help you assess manufacturability in real-time. The options are * Mode: The block whose Surface Analysis you want to view. * Overhang Angle: The overhang angle visualization identifies regions in your model where angles may exceed the printable threshold, helping you inspect the design for manufacturability. * Draft Angle: The draft analysis visualizes areas of your model based on a specified draft angle relative to a pull direction, helping you verify that your design meets manufacturability requirements. * Overhang or Draft Angle: This is the input for the overhang or draft angle based on the Mode selection. * Threshold: The threshold input for the Angle input. * Build or Pull Direction: Set the direction vector for surface analysis * Color Legend: A color legend in the panel offers a quick reference for angle ranges. > > > > > > > > >
    > ![A diagram and key associating colors based on a 2 degree Draft Angle.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/35588702253715.png) > > ![A diagram and key associating colors to a 45 degree overhang angle with a 5 degree threshold.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/35588725695123.png) >
    ![How to access the Surface Analysis tool and an example of changing the analysis sliders.](https://files.learn.ntop.com/help-articles/additive-manufacturing-preparation/49795380118035.png) ## Ribs from Graph block Example >
    **Draft Angle = 1 deg** **Draft Angle = 7 deg**
    ![An example of ribs being analyzed with the Surface Analysis tool with the Draft Angle set to 1 degree.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/35588725700883.png) ![An example of ribs being analyzed with the Surface Analysis tool with the Draft Angle set to 7 degrees.](https://files.learn.ntop.com/help-articles/additive-manufacturing-prepartion/35588725705107.png)
    ## Keywords: *additive field viewer manufacturing angle prep fields build overhang visualize angles surface plot* # I'm trying to slice an object but I get the error "Inconsistent layer height" Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/i-m-trying-to-slice-an-object-but-i-get-the-error-inconsistent-layer-height ## Issue: I'm trying to slice my object in nTop, but I keep getting an error that says: "Inconsistent layer height". ## Applies to: * Renishaw QuantAM ## Cause: This error occurs because there are layers with no slice data. No slice data can occur when some parts are "floating" on top of each other. Therefore, some slices have closed contours, some slices have point exposures, and some slices are empty. ## Solution: There are three known solutions to correct this: **Option 1:** Ensure there is slice data at every layer height. This can be accomplished by extending the marker through the entire height of the floating parts. **Option 2:** Re-orient the parts so that they are not floating. This can be accomplished using the block \*Orient Object.\*This allows you to take an object (implicit body, STEP, lattices, slices, etc.) and translate it to a given location on the build plate. **Option 3:** Set the radius of the marker to 0.1mm and center it in the model. ## Keywords: *error export slice renishaw layer slicing data height issue no inconsistent QuantAM orient floating* # My slices are taking too long to process Source: https://docs.ntop.com/help-articles/knowledge-base/additive-manufacturing-preparation/my-slices-are-taking-too-long-to-process ## Issue: I'm trying to slice my object but it is taking too long to process. ## Cause: This occurs when you try to slice a complex part with a small feature size. ## Solution: The performance is reduced if you use a small feature size for slicing lattices or complex parts which turns out many edges to trace. We suggest editing the feature size to try and find a balance between performance and speed. Feature size is the trade-off between performance vs resolution. If you have areas that are less important, like support structures, try using a high feature size in those areas. Another method is to look at processes further up in your notebook that could be causing or adding to the slow processing times. ## Keywords: *error to resolution slicing feature performance slices processing slow output process time issue size take too long* # nTop 4.0 - Cone Gradients Update Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-0-cone-gradients-update ## Overview: The purpose of this article is to explain the changes being made to the implicit body generated by the **Cone** block in nTop 4.0. ## Table of Contents ### [1. Effective Release](#h-01gyfxn1ynz1h7w3bcmb629x8a) ### [2. Change](#h-01gyfx6mmnpb8mpzymm25df6j5) ### [3. Impacted Blocks](#h-01gyfx6vgxsbh6jwcdq19ca0rt) ### [4. Example Differences](#h-01gyfx7e6d4bskcfvrqybf1efd) ### [5. How does this affect you?](#h-01gyfxk4ac45ynxqv0xxktaqeb) ### [6. Recommended Actions](#h-01gzcbd399z6qtve1k0m2k5gjy) ## 1. Effective Release * nTop 4.0 ## 2. Change * In nTop 4.0, we released an improvement to the cone primitive. The implicit body produced by the **Cone** block now has numerically accurate field values when the cone is not oriented with the X/Y/Z axes. * Because the previous result was incorrect in some cases, we did not version the block when implementing this change. In nTop 4.0, version 1.0.0 of the **Cone** block contains the bug fix. * You do not have to manually update the block or change your nTop notebook to benefit from this fix. * All previous notebooks that use the **Cone** block can still be opened and viewed in nTop 4.0+ and all future versions. * Geometry that nTop caches on save, such as meshes, CAD Bodies, slices, analysis results, & more, will be available as view-only. * If you re-run the **Cone** block, blocks downstream that use it as input will also re-run. * Downstream blocks that utilize gradient calculations may produce a slightly different output. ## 3. Impacted Blocks * The **Cone** block, version 1.0.0 Details on impact: * We guarantee that operations that discretize your cone, such as **Mesh from Implicit Body**, **Voxel Grid from Implicit Body**, etc., are within your desired tolerance. * You may observe differences in topology, for example, a mesh's element layout, vertex positions, and connectivity data. * Since the numerical change is minor, these differences will often only be observed after two or more blocks downstream blocks, for example, **Mesh from Implicit Body** > **Remesh Surface.** ## 4. Example Differences This section contains a few examples demonstrating the results from remeshing a cone between nTop version 3.45 and 4.0. ![Using a Remesh Surface block on a meshed cone in nTop 3.45.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/16246865013267.png) ![Using a Remesh Surface block on a meshed cone in nTop 4.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/16246848326419.png) | Version | Edge Length (mm) | Face Count | Vertex Count | | - | - | - | - | | nTop 3.45 (Top image) | 0.5 | 3,038 | 1,521 | | nTop 4.0 (Bottom image) | 0.5 | 2,846 | 1,425 | ## ## 5. How does this affect you? As demonstrated in the previous section, the effect of this update on your existing workflows is minimal. You can expect a minor difference in the topology of a mesh or CAD Body generated from the **Cone** block, but this will not significantly affect any analysis, optimization, or downstream manufacturing processes. ## 6. Recommended Actions Although we expect this update not to affect your existing workflows, we recommend that for any notebooks using the **Cone,** you either export and save any geometry prior to updating and/or save a copy of any notebook(s) with a different name before running the update to preserve your old results if needed. ## Keywords: *update ntop change 4.0 cone gradients* # nTop 4.1 - Type System Change Notice Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-1-type-system-change-notice ## Overview: The purpose of this article is to explain the changes being made to the nTop type system. ## Table of Contents ### [1. Effective Release](#h-01h0g08j3pxch3wd2cvayahmx2) ### [2. Change](#h-01h0g096r7cbbqgd6tmrdfk10p) ### [3. Why is this change happening?](#h-01gyfx6vgxsbh6jwcdq19ca0rt) ### [4. Major Changes](#h-01h0djjzg8jny177h90bnhamvn) #### [4.1. List Processing](#h-01gyfkheg9gvwmmh5w2q9dxzbm) [4.1.1. List Processed Output](#h-01gyfxdhgzqnv7ccq8cmm9k5ps) [4.1.2. Non-List Variables](#h-01gyfxekvx1ktna1nnrh46vsfs) #### [4.2. Groups](#h-01gyfkq82j0z298x8c836h5xp9) #### [4.3. List Interface List](#h-01gyfkqm13nk27jxn5kztha62y) #### [4.4. Property Usage of Abstract Types](#h-01gyfksx5w7be8e3ghkdpjpphb) #### [4.5. Interface Functions](#h-01h0g0ccg59x31reh41m78bvbc) [4.5.1. Using Interface Functions as Inputs](#h-01gyfxh8p0r74k7q28fs4vrp5s) [4.5.2. Interface Types](#h-01gyfxj0b3gjf5eav4j4vs8j49) ### [5. How does this affect you?](#h-01gyfxk4ac45ynxqv0xxktaqeb) ## 1. Effective Release * nTop 4.1 ## 2. Change * In nTop 4.1, we are releasing improvements to the nTop visual programming language that involves migrating our type system. We will now support two type systems: pre-4.1 (old) and post-4.1 (new). * In the new system, behaviors will be changing when working with: * Lists * Groups * Abstract Types (e.g., Material, Spatial3D) * Interface Functions (e.g., Translate Object, Rotate Object) * We fully maintained backward compatibility with this type migration so **any previous notebooks can be opened, viewed, run, and edited in nTop 4.1+ and future versions**. ## 3. Why is this change happening? In the past, nTop had made decisions to help ease the usability of complex types. Over time, the usability benefits became significantly outweighed by the unsafe type behavior that arose, causing bugs, undesired behaviors, and limitations to the nTop programming language. With the release of nTop 4.1, we want to ensure that the nTop programming language can grow in a scalable manner to enable more powerful and robust computational design workflows in the future so that you can build the best parts. ## 4. Major Changes Any new notebooks and most (>95%) of existing notebooks will be moved into a new type system with the new behaviors. A small percentage of existing notebooks (\<5%) with type artifacts will stay in the old type system and will not have these new behaviors. Over time, we will migrate these notebooks to the new system once we can maintain backward compatibility. The behaviors for the new type system are detailed below. ### 4.1 List Processing #### 4.1.1. List Processed Output If a block “[list processes](https://support.ntopology.com/hc/en-us/articles/360046264933-How-to-work-with-lists#:~:text=What%20is%20a%20list%20and,process%20on%20every%20list%20item.),” nTop would previously not correctly mark the output as a list until the block ran. Now it will do so as soon as it has enough information to know that the block will “list process.” For example, in the old type system, **Mesh from Implicit Body** would not convert to a "Mesh List" type until it was run. In the new type system, **Mesh from Implicit Body** is converted to a "Mesh List" type as soon as the **Box List** is placed into the Body input. #### 4.1.2. Non-List Variables The new system will treat variables you declare as having real intent and respecting the type they are declared as. It will no longer be possible to use lists in certain situations, notably as primary inputs for variables of the non-list type. For example, in the old system, non-List Variables could receive List blocks as a primary input but would throw an error once the block was run. To help reduce confusion and errors, in the new system, non-List Variables can no longer receive List blocks as a primary input. In the new system, to place the **Mesh List** variable in the **Volume Mesh** variable, you must change the **Volume Mesh** type to a "Volume Mesh List" via the type dropdown in the top left of the block (shown below). ![Converting the Volume Mesh block to a Mesh List before inserting the Mesh from Implicit Body mesh list.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/16371687855251.png) ### 4.2. Groups When accessing **Group** elements, **List Element** will no longer automatically convert from "Any" to the appropriate type in the new system. See the below example of the old system (left) and new system (right).![In nTop 4.0 the List Element block would automatically convert the block type. The new system in nTop 4.1 does not automatically convert the block type.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/16628330653587.png) To access **Group** elements, you now follow similar principles as [Non-List Variables](#h-01gyfxekvx1ktna1nnrh46vsfs). First, declare the **List Element** a variable. Then, express your design intent by specifying the type of the **Group** element you need to access via the type dropdown (shown below). ![An example of how to correctly change the List Element block type.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/16628555238163.png) This same procedure can be followed to convert a Custom Block that leverages a **Group** and returns an "Any" type into an appropriate type - the best example being the "If" Custom Block (shown below). ![How to change the block type for a Custom Block.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/16629467754515.png) ### 4.3. List Interface List When using **List Interface List**, you can no longer access the list element variable as one of those specific types from the properties panel. In this case, list elements dragged out into the notebook can only be used via functionality common to all list possibilities. Below is an example of the old type system (left) and new type system (right) behavior. If you need to access a more specific type, we recommend changing the type to an "Implicit Body List" or using a **Group** instead. ![The left image shows the properties panel of the List Interface List block in nTop 4.0. The image on the right shows the same block in nTop 4.1 with the new type system.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/15936637541523.png) ### 4.4. Property Usage of Abstract Types When a variable can hold objects of different types, an abstract type such as a “Material” or “Spatial3D”, it will no longer be possible to use that variable as one of those specific types; it can only be used via the functionality common to all possibilities. This will allow users to change the type held in that variable without breaking the downstream workflow. Below is an example of what this looks like in the old system (shown below on the left) and the new system (shown below on the right). You will no longer be able to reference properties for abstract types like “Material.” If you need to reference their properties, change it to a concrete type using the type dropdown at the block's top left. ![The properties panel of an Isotropic Material in nTop 4.0 shown on the left, and the same material shown on the right in nTop 4.1.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/15936656852627.png) ### 4.5. Interface Functions Interface Functions can take multiple types and output the same type as the primary input. The complete list of Interface Functions are: * **Concatenate Lists** * **Filter** * **Insert** * **List Element** * **Orient Object** * **Remove** * **Rotate Object** * **Scale Object** * **Select by Choice** * **Sort** * **Sub List** * **Transform Object** * **Translate Object** #### 4.5.1. Using Interface Functions as Inputs When using an interface type in a block input, it will convert to the appropriate type. Below is an example of this in the old system (left) and the new system (right). In the new system, the **Translate Object** is converted from a "Spatial3d" type to a "Point" type. ![The image on the left shows how a Translate Object block in nTop 4.0 stays a Spatial 3D type when a point is placed inside. The image on the right shows how in nTop 4.1 the block type automatically converts to a point.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/15936637542419.png) #### 4.5.2. Interface Types An interface function will convert to the appropriate type as soon as it knows the primary input type, even if other inputs have not been populated. Below is an example of this in the old system (left) and the new system (right). The new system converts the **Translate Object** from a "Spatial3D" type to a "Box List" type before the block is built. ![In nTop 4.0 on the left, the interface type would not automatically convert to the appropriate type. In nTop 4.1 on the right, the interface type automatically converts to a box list in this example. ](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/15936656845843.png) ## 5. How does this affect you? As previously stated, **we fully maintained backward compatibility so any previous notebooks can be opened, viewed, run, and edited in nTop 4.1+ and future versions.** In notebooks in the new type system, there will be behavior changes detailed below. **Primary** When working with list-processed blocks, there will be limitations to making sure your notebook complies with type safety (see [List Processing](#h-01gyfkheg9gvwmmh5w2q9dxzbm)). This will prevent you from dragging and dropping list blocks into non-list variables and limiting your options when using Context Search on list-processed variables. These limitations do not apply when dragging and dropping list blocks into non-variable list-processed blocks. **Secondary** When accessing List Elements from Groups or when using Custom Blocks that contain Groups and return "Any", you will need to manually declare them variables and change them to the appropriate type (see [Groups](#h-01h0d9nfy9g1ev9e67f1hm3ap3)). **Tertiary** If you work in notebooks with the old type system, you can continue to perform all editing functionality with one exception. The only editing limitation you may encounter is being prevented from copying and pasting blocks or collections of blocks containing type artifacts. This is done to prevent type artifacts from notebooks in the old type system from being copied and pasted into notebooks in the new type system. In the unlikely event this does happen, you can still use the Duplicate command to copy these blocks within your current notebook. The other three areas (see [List Interface List](#h-01h0d9p0ekzwwxzx9915rcn43z), [Property Usage of Abstract Types](#h-01gyfkq82j0z298x8c836h5xp9), and [Interface Functions)](#h-01gyfksx5w7be8e3ghkdpjpphb) should be minor differences when editing notebooks in the new type system. **If you have any questions, please reach out to nTop Product Support at [support@ntop.com](mailto:support@ntop.com).** ## Keywords: *list variable system change function type 4.0 4.1* # nTop 4.11 - Precision Improvements Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-11-precision-improvements ## Overview: This article explains the changes being made to the following blocks in nTop 4.11: **Closest Point to Body, Evaluate Field, Evaluate Field Gradient,** and **Mesh from Implicit Body** when the **Sharpen** check box is selected or **Sharpen iterations** specified. ## Table of Contents ### [1. Effective Release](#h-01gyfxn1ynz1h7w3bcmb629x8a) ### [2. Why is this change happening?](#h-01gyfx6mmnpb8mpzymm25df6j5) ### [3. Impacted Blocks](#01hba02bhp9r5vehnkz0yrsec3) ### [4. Example Differences](#01hba04pwph94c866x09eeed80) ### [5. How does this affect you?](#01hba06ga33c71xx91cp2q0s0v) ### [6. Recommended Actions](#01hba07bvez1y223h8w5rx8fyd) ## 1. Effective Release * nTop 4.11 ## 2. Why is this change happening? * In nTop 4.11, we updated one of the internal computations used by four nTop blocks to produce more precise results for some workflows. * We did not version the impacted blocks when implementing this change. * You do not have to manually update the blocks or change your nTop notebook to benefit from this update. * When you update to 4.11, you can open any previous notebook to view, access, and export any cached geometry or analysis results. This includes meshes, CAD Bodies, slices, and analysis results. * In certain rare cases, the output produced by the impacted blocks will be different. See [4. Example Differences](#01hba04pwph94c866x09eeed80) for details. * Re-running a block will overwrite any cached geometry or analysis results. Note that when you re-run a block, any block in your notebook that contains it as an input will also be triggered to re-run–unless the downstream block is set to [Manual Run Mode](/help-articles/whats-new/whats-new/ntopology-3-10-what-s-new). * You can restore previous results by undoing the action with Ctrl+Z. ## 3. Impacted Blocks * **Closest Point to Body** * **Evaluate Field** * **Evaluate Field Gradient** * All versions of **Mesh from Implicit Body** when **Sharpen** is selected or the **Sharpen iterations** input provided. ## 4. Example Differences >
    **4.10** **4.11**
    Different **mesh topology:** In this hypothetical example, we took the nTop Home Page heat sink file, moved the body a meter from the origin, meshed it at a high tolerance of 0.5mm, and set the Sharpen iterations to 3 to make it susceptible to numerical precision issues. In 4.11, the topology of the sharpened mesh has changed, and the total face count is now 511,592 compared to 511,582 in nTop 4.10. This change should not negatively impact the workflow.
    ![A sharpened mesh in nTop 4.10.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/24105786030483.png) ![A sharpened mesh in nTop 4.11.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/24105800211475.png)
      Different **Closest Point to Body** normals: In this example, we use the **Closest Point to Body ** block to locate a point on the heat sink. We increased the input tolerance, making it susceptible to numerical precision issues. The output point is the same; however, the point’s normals have changed.  
    ![A Closest Point to Body block in nTop 4.10.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/24105800220691.png) ![A Closest Point to Body block in nTop 4.11 has a different normal vector to that of the same block setup in nTop 4.10.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/24105800220691.png)
    ## 5. How does this affect you? We do not expect this update to impact you. As illustrated above, differences should only occur in certain rare cases, and we do not expect this to affect your workflow negatively. ## 6. Recommended Actions You do not need to take any specific action in response to this update. # nTop 4.19 - Internal Computation Update Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-19-internal-computation-update ## Overview: This article explains the changes made to these blocks in nTop 4.19: **Offset Voxel Grid**, **Smoothen Voxel Grid**, **Voxel Grid from Implicit body**, **Implicit Body from Voxel Grid**, **Mesh from Implicit Body**, and **CAD Body from Implicit Body** ## Table of Contents ### [1. Effective Release](#h-01hmrv984he3xrnmmce1zjpmqk) ### [2. Why is this change happening?](#h-01gyfx6mmnpb8mpzymm25df6j5) ### [3. Impacted Blocks](#01gz29jper4q0h9dfcn9b5mf4r) ### [4. How does this affect you?](#01gz29kmpwrtfrreepaqef7rpj) ### [5. Recommended Actions](#01gz29pqbfrqh9ywyr2f1eek7x) ## 1. Effective Release * nTop 4.19 ## 2. Change * In nTop 4.19, we updated one of the internal computations. The observable changes would be a higher voxel count, different Mesh/CAD topologies, or vertex/face counts. However, the Mesh/CAD Body will remain within the specified tolerance. * We did not version the impacted blocks when implementing this change. * We recommend you update all the deprecated blocks. * When you update to 4.19, you can open any previous notebook to view, access, and export any cached geometry or analysis results. This includes meshes, CAD Bodies, slices, and analysis results. * Re-running a block will overwrite any cached geometry or analysis results. Note that when you re-run a block, any block in your notebook that contains it as an input will also be triggered to re-run–unless the downstream block is set to Manual Run Mode. * You can restore previous results by undoing the action with Ctrl+Z. ## 3. Impacted Blocks or Types * **Offset Voxel Grid** * **Smoothen Voxel Grid** * **Voxel Grid from Implicit Body** * **Implicit Body from Voxel Grid** * All versions of **Mesh from Implicit Body** * **CAD Body from Implicit Body** ## 4. How does this affect you? We do not expect this update to impact you, as the Mesh/CAD Body will remain within the specified tolerance. ## 5. Recommended Actions You do not need to take any specific action in response to this update. # nTop 5.0 - Meshing updates for Simulation & Optimization Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-meshing-updates-for-simulation-optimization ## Overview * In nTop 5.0, a third-party dependency will be updated to improve meshing performance. This will affect **six native blocks** and **eight toolkit blocks** related to our simulation and analysis workflows. See Section [2.0 Impacted Blocks.](#h-01hzytn5tb44944bpj0gegg51d) * The previous versions of these blocks will be deprecated ([What is a deprecated block?](/help-articles/knowledge-base/user-interface/what-is-a-deprecated-block)) and will no longer be available. * Your previous notebooks can still be opened and viewed in nTop 5.0. Your geometry and analysis results will be cached and available. * To re-run these blocks in 5.0, you must update them to their newest version. See [5.0 Recommended Actions](#h-01hzyz3qh56xv1wv1pmssk38vy). Updating the blocks will automatically trigger them to re-run and produce new results. Previously cached geometry and results will be overwritten. ## Table of Contents ### [1.0 Why is this change happening?](#h-01hzytn5tbm5d331jyvjzfd471) ### [2.0 Impacted Blocks](#h-01hzytn5tb44944bpj0gegg51d) ### [3.0 Example Differences](#h-01hzytn5tc8qs7t1ef627tq3t0) #### [Example 1 - Remesh Surface applied to a Bracket](#h-01hzytn5tc3b7fankwq5pqqe12) #### [Example 2 - Field Optimization](#h-01hzytn5tcr3xbbyhhs8swd1hj) #### [Example 3a - Topology Optimization - Compliance Response](#h-01hzytn5tcq8hgqe56f6pyh1yk) #### [Example 3b - Topology Optimization - Natural Frequency Response](#h-01hzytn5tc0yp98ktzjapqscb3) #### [Other Changes](#h-01hzyyzdhhjb9ezpezf50s8d86) ### [4.0 How does this affect you?](#h-01hzyz28dxtjz5bb3rfkt4mqeb) ### [5.0 Recommended Actions](#h-01hzyz3qh56xv1wv1pmssk38vy) ### [6.0 Effective Release](#h-01hzyz3qh5t56swpcek0eqgjxd) ## 1.0 Why is this change happening? * We are upgrading our meshing technology to improve its quality and speed for simulation workflows. As a result of this update, there will be minor differences in the location of nodes and elements produced by select meshing blocks compared to previous versions (versions 4.26 and prior). * This article documents the impact of this change on simulation and optimization results to alleviate any concerns regarding these workflows. ## 2.0 Impacted Blocks The following table summarizes the blocks that will be updated in nTop 5.0, their function, the latest version number, and the performance difference from releases nTop 4.26 and prior: | **Block Name** | **Function** | **Updated Version** | **Impact** | | - | - | - | - | | Remesh Surface | Remesh an existing surface mesh | 1.2.0 | Minor differences in mesh output | | Remesh Surface with Cyclic Symmetry | Remesh an existing surface mesh while imposing cyclic symmetry | BETA 1.1.0 | Minor differences in mesh output | | Topology Optimization | Perform a density-based topology optimization using a SIMP (solid isotropic material with penalization) approach | 1.1.0 | Minor changes in results with no decrease in solution quality | | Field Optimization | Perform a field optimization | BETA 1.1.0 | Minor changes in results with no decrease in solution quality | | FE Volume Mesh from CAD | Create an FE Mesh of solid elements from a single CAD body | 1.3.0 | Minor differences in mesh output | | Single Body Topology Optimization | Perform a topology optimization on a single component | 1.1.0 | Minor changes in results with no decrease in solution quality | Examples of the minor differences noted above are provided in [3.0 Example Differences](#h-01hzytn5tc8qs7t1ef627tq3t0). In addition, the following toolkit blocks, which internally use one or more of the blocks listed above, will be affected by this update: | **Block Name** | **Toolkit** | **Updated Version** | **Function** | | - | - | - | - | | Surface Lattice from CAD Body | Architected Materials | 2.2.0 | Create a conformal surface lattice from a CAD Body | | Tet Lattice from CAD Body | Architected Materials | 2.2.0 | Create a tetrahedral lattice from a CAD Body | | FE CAD Shell Mesh | Design Analysis | 1.2.0 | Create an FE Mesh of shell elements from a CAD Body | | FE Shell Mesh | Design Analysis | 1.2.0 | Create an FE Mesh of shell elements from a surface mesh | | FE Tetrahedral Mesh | Design Analysis | 1.2.0 | Create an FE Mesh of solid elements from a surface mesh | | Infill Tet Lattice | Lightweighting | 2.2.0 | Create a tetrahedral lattice from an Implicit body. | | Remesh CAD Face | Architected Materials | 1.2.0 | Remesh a CAD face | | Simple Remesh Body | Lightweighting | 1.2.0 | Remesh an Implicit Body | These blocks are found in the Architected Materials, Design Analysis, and Lightweighting ribbons, visible to users who opted-in for Toolkits. ## 3.0 Example Differences This section contains a few examples detailing the expected differences in meshing and optimization workflows between nTop 4.26 and nTop 5.0. ## Example 1 - Remesh Surface applied to a Bracket >
      **nTop 4.26** **nTop 5.0**
      ![An example of Remesh Surface applied to a bracket in nTop 4.26.](https://lh7-us.googleusercontent.com/docsz/AD_4nXe4AJzxO-D_RS_z_RF2rXbR0gzhgSsoe7jOtqHxpkP2veQijkwVGYMnae-0VnBX1oD3TmQdCm1lx7Mpf50-VB72X2J0jiAGygrTXf5Ipc41j7oR2oc-L2JdyhE1xXLmkpc40YDWxIPWW7cKo6DHdyZj8-Za?key=MabGWdQ0du4g53AlT5KSYQ) ![An example of Remesh Surface applied to a bracket in nTop 5.0.](https://lh7-us.googleusercontent.com/docsz/AD_4nXdlb4jqs7AWZpioNY_D8g436oFhPGb2auXdPODn4R6LVBlnv9M5V_QVACKsxei7h2tUafiJl6xiL7SlCZr8bryB8zEixIkKOR5RT8Q5d1PVYAmHukk-EisTsQn7HX2lR1eri183iZlP4cncZhykk4Lcrj4?key=MabGWdQ0du4g53AlT5KSYQ)
    **Face Count** 51086 51692
    **Vertex Count** 25535 25838
    * As seen above, the **Remesh Surface** block creates similar meshes; however, the number of faces and vertices can vary between versions. * Similar differences can be expected for the following blocks: * **Native block(s):** Remesh Surface with Cyclic Symmetry * **Toolkit block(s):** FE CAD Shell Mesh, FE Shell Mesh, FE Tetrahedral Mesh, Remesh CAD Face, and Simple Remesh Body ## Example 2 - Field Optimization In this example, a bracket is optimized using a **Field Optimization** block and a **Shell and Infill Parametric Component**. The optimization objective is to minimize compliance ( **Structural Compliance Response**) while reducing volume fraction by 50% (**Volume Fraction Constraint**). >
      **nTop 4.26** **nTop 5.0**
    **Boundary Conditions** ![An example boundary condition setup on a bracket.](https://lh7-us.googleusercontent.com/docsz/AD_4nXcq3KmTLGIyIdOglAvfjek7csr-hQSmhXzbeALfahggbH8UsD1A18O-ICwjzZxHU776J3tD0pBrHI15IgpgKIEb-yS22-X7USHoLdyGkeFNveYkrldO2yCaa4hOxwf6UBxbbBto2bTKI8VaZUE1jdbdKxQ?key=MabGWdQ0du4g53AlT5KSYQ)
    **Results** ![The Field Optimization results on a bracket in nTop 4.26.](https://lh7-us.googleusercontent.com/docsz/AD_4nXeDnqswRjl3nu_3zr6M9VICYfLunz4mD3Y7HcTDSJ08MKmCHbRs410rk-IyomoCCey4WwLJdegFpXLBum2BJ2dfSqxXve2dZT8EV7SRsqUYLWXPDjJsbpMPgxjYRoifebLITvyrScCf_A8qH4LC7LNe93-1?key=MabGWdQ0du4g53AlT5KSYQ) ![The Field Optimization results on a bracket in nTop 5.0.](https://lh7-us.googleusercontent.com/docsz/AD_4nXeha-2Xki2PIeOhet4G7dpoFNkhHjy_tsdx-EWg-pnq7kzbMOF5WAkuIXLDFMeqUqDX5Ub97VerhRgHJx3q1p7pChkoClrETYFxVr4ljVEx5UnQjg1ooLJB3Z3mG-mfoQZ4GV2b_cDNkMf7yzW2sLM045kI?key=MabGWdQ0du4g53AlT5KSYQ)
    **Convergence Iterations** 52 50
    * As seen above, the field optimization workflow in nTop 5.0 converges to a very similar result as 4.26 and requires fewer iterations. ## Example 3a - Topology Optimization - Compliance Response In this example, a bracket is optimized using the **Topology Optimization** block with a minimum compliance objective (**Structural Compliance Response**) while reducing volume fraction by 50% (**Volume Fraction Constraint**). >
      **nTop 4.26** **nTop 5.0**
    **Iso Contour Plots** ![Iso Contour Plot results from Topology Optimization in nTop 4.26. These results were generated using a Structural Compliance Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXeM9rlH4ErYtBIHOdozmrUtz6o-4X7yxj6f5EsjVxyPGOK_F2wssGBeVglFVFTN8JhN0AnhGE_Z-ZrttJcMT08x53vywlW1hpK1IvcRvj2FHJitM_ihsktFnbn2b_1zi1ezk63ADnIj8WveTLKebfZjxWFd?key=MabGWdQ0du4g53AlT5KSYQ) ![Iso Contour Plot results from Topology Optimization in nTop 5.0. These results were generated using a Structural Compliance Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXfKxToXG_lwMQ2DVejoLaw5H48399CWGt4pbazG5SuPOXluUh6HOQKkn8hGpK3vMg5w2iR8hC9ukCmo5zuTOapXILC2tLW8W6HRARtbAYlldb_-AUpMAroq7bm5TarVxy5DAt27hg1ixr9ucZo30vP7giXk?key=MabGWdQ0du4g53AlT5KSYQ)
    **Threshold Plots** ![Threshold Plot results from Topology Optimization in nTop 4.26. These results were generated using a Structural Compliance Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXf3KFwu9bWqnFLyN2F7i6V8Pat58WxVG-yPERy4aquVP_7wqZIUBKzEBiwDixKwseZypfnid2-_yvyn0gVB1QxhGCFcPVFECAvgmmfltNRNhGSIiK4NKVofBr5Gi3qUfb-7qTHl5AO58S3rGsfVj4nZTNIo?key=MabGWdQ0du4g53AlT5KSYQ) ![Threshold Plot results from Topology Optimization in nTop 5.0. These results were generated using a Structural Compliance Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXcgIGhQ2BXPpZl9_HR1m_S1V2dDLaPEejyV8g3hT7WYQPyiR2eFLSq0fpB3_DKw5rxOSdazAQRP0u52jECOtriah4kvIcWf7Zsn8BIYGH55uo_guwzlDR5Qc-SBEUpaZjZQvN-_4OhWK2wf0daPrQAWeD5Z?key=MabGWdQ0du4g53AlT5KSYQ)
    **Convergence Iterations** 36 35
    * The final optimized shapes were similar in both versions, as showcased by the iso-contour plots (set at a threshold of 0.5) and threshold plots. * Similar differences should be expected when running the **Single Body Topology Optimization** block, which uses the same topology optimization block internally. ## Example 3b - Topology Optimization - Natural Frequency Response The example below details a bracket optimized using the **Topology Optimization** block. The optimization objective was to minimize the plate's volume (**Volume Fraction Response**) while maintaining a natural frequency (first three modes) within a specified band using the **Natural Frequency Constraint** block. >
      **nTop 4.26** **nTop 5.0**
    **Iso Contour Plots** ![Iso Contour Plot results from Topology Optimization in nTop 4.26. These results were generated using a Natural Frequency Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXdlPKTWArm5qC-LDkETvzE4YTuhS-JTYyTvHsoHy52c16Jryf8cBhMhaGl2VMQ0Q4j8TCiHMTZv6-Qrbk3MyqvFPaXi34p9L3ugJk6EGRxUdLeGRFKY2SYeaCtKSvgpgLf6mAiNRmuR6n4LLScnw29hjbRS?key=MabGWdQ0du4g53AlT5KSYQ) ![Iso Contour Plot results from Topology Optimization in nTop 5.0. These results were generated using a Natural Frequency Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXcQuXEjV5RJfF4-Cbz1QcSwzFiub2D9fRbZlf3FBuGW1X21hnk1UJshKGHYJJPGZ6hiZ2Z3C6p-PBy15DDMZpAo9AtsedBoISARVnq9_am-oCdG1FM7cIUv_6x_Yzt-JWoSy-JbGcxMjZzWoh_PXDYWXnNJ?key=MabGWdQ0du4g53AlT5KSYQ)
    **Threshold Plots** ![Threshold Plot results from Topology Optimization in nTop 4.26. These results were generated using a Natural Frequency Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXewN6Bq5j_tciYdHy3NII1Ac9wWM691jrkNRs9gMOxefrAppGSHHjuJujGqOBAF6yWGTXg7FQa5vbV8ZFn14nTFZDVLzhfwiur_nGkf2V-KOMHa9XFcw6mowbtoRbBgjxsxs-bhbtB0M5hiG8VmRa1ziPRL?key=MabGWdQ0du4g53AlT5KSYQ) ![Threshold Plot results from Topology Optimization in nTop 5.0. These results were generated using a Natural Frequency Response.](https://lh7-us.googleusercontent.com/docsz/AD_4nXdeXaAfRgX4LGkP0KoUU9ANb3yvQzuaPOYMKIchSC4IlBDr6dY77aIp3d88KLjmz0zgBc7OUXZZSlU8VJx1NcHTA_QaXDk1bCupVnZNjrLg0wKI7nje6Vilr5a8LOSujVoBHtO5CwsD6mrT363Szrlb7w4?key=MabGWdQ0du4g53AlT5KSYQ)
    **Convergence Iterations** 54 54
    **Natural Frequency 1** 0.900 Hz 0.899 Hz
    **Natural Frequency 2** 0.985 Hz 0.985 Hz
    **Natural Frequency 3** 1.264 Hz 1.263 Hz
    * As seen above, both versions' final optimized shapes were similar, and the modal frequencies show small variations (less than 1E-3 relative error). ## Other Changes In addition to the above-mentioned changes, nTop 5.0 includes an updated Ansys \*.cdb writer that supports a new APDL block command, ETBLOCK. This command was introduced in Ansys 2023R1 to define element types more concisely and is now generated by the **Export FE Mesh**, **Export FE Model, Export Material,** and **Export Analysis (Buckling, Modal, Static, and Thermal)** blocks. Exporting \*.cdb files from these blocks in nTop 5.0 to early versions of Ansys may result in undefined element types in Ansys. Two options are available to correct this incompatibility: 1. Export an Abaqus \*.inp file from nTop and import this file into Ansys Workbench using the External Model component system. Drag and drop the External Model component onto any Ansys Mechanical analysis system's downstream Engineering Data or Model component. 2. You can manually edit the \*.cdb file by commenting out the ETBLOCK and replacing it with the appropriate ET command and keyopts. For more information, see the Ansys Mechanical APDL and Element Reference Guides. >
    **nTop 4.26** **nTop 5.0**
    ![A CDB file exported from nTop 4.26. The file data doesn't contain the ETBLOCK section.](https://lh7-us.googleusercontent.com/docsz/AD_4nXfjyF97PMNAq8juUWkwUlG08e0vlTsDYkGvJs4Xx-nCwfrA7fNq-YfRD6obcNNZoefuedkiDBdhTfXxE3GEbt3A8epKBeWtei0JReg0h1C7iFg38U_NbTtGE6QpM38QPxiwm25R8tEBIeEmrCyG83yDCCM?key=MabGWdQ0du4g53AlT5KSYQ) ![A CDB file exported from nTop 5.0. The file data does contain the ETBLOCK section.](https://lh7-us.googleusercontent.com/docsz/AD_4nXfJ7YIjlg3mmgqTU4lWXmHNJ5O9GEENpLmuabqfbwRmUf0_ZWvFBHqmfSDxV8YMCzLuu_DCkxJfFr2xsQRT7UmCk8fKa6xpN4ehsamfAwtc0eTzNM0n-jBP-315t6ms2ZAfNxmxIxSHaGkS4J8x0EdjPjd9?key=MabGWdQ0du4g53AlT5KSYQ)
    * As seen above, the \*.cdb file exported from nTop 4.26 doesn't contain the ETBLOCK. However, the \*.cdb file exported in nTop 5.0 has the ETBLOCK section. ## 4.0 How does this affect you? * The meshing implementation from nTop 4.26 and prior will not be available in nTop 5.0. Consequently, if you have an existing notebook with older versions of the blocks in the table above, you cannot re-run them until you update the individual block versions. * However, when opening files from nTop 4.26 and prior in nTop 5.0 you will have access to the results that were previously generated. You will be prompted to update these blocks to the latest version. If you choose to update the blocks, your previous results will be erased, and the new output will be generated. This will also restore your ability to re-run the blocks. * As demonstrated in the previous section, this update will have minimal effect on your existing meshing, simulation, and optimization workflows. You can expect a minor difference in the mesh characteristics generated from the updated blocks, but this will not significantly affect the accuracy of the analysis or the quality of the optimized result. ## 5.0 Recommended Actions Here are a few scenarios and the recommended actions to follow when using the simulation and optimization tools after this update: * **Accessing results from an existing notebook:** No action necessary. You can open a notebook created in a version before the update and access your results. You will notice warning messages in the blocks that require an update. **You can ignore these messages if you do not intend to re-run them and generate new results.** * **Modifying or reusing a notebook to generate new results:** You must select the “Update” button for each block in the block's warning panel. We do not auto-update your blocks in notebooks created with older versions. This will update it to the latest version and trigger the block to run. Previous results will be erased, and the new output will be generated. Optionally, save a copy of the notebook with a different name before running the update to preserve your old results and workflows. * **Composing a new notebook:** No action necessary. All the updated blocks will be available by default as you add them to your notebook from the ribbon or the search bar. * If you need to generate the same results, do not upgrade to nTop 5.0. If you already have upgraded, contact [support@ntop.com](mailto:support@ntop.com) to revert back to nTop 4.26.2. ## 6.0 Effective Release These changes will be effective in nTop 5.0, expected to be released the week of **June 24th.** # nTop 5.0 - New Implicit Modeling Kernel Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-new-implicit-modeling-kernel ## Objective: Learn more about the changes happening in nTop 5.0 regarding our new implicit modeling kernel. ## What is happening? We are releasing our new implicit modeling kernel in nTop 5.0. This advanced implicit kernel incorporates our experience working with numerous customers over many years on mainstream production parts. Our new implicit kernel also enables our latest product, nTop Core. nTop Core is a developer library for nTop's partners to embed in their applications so they can work directly with implicit bodies while avoiding meshing bottlenecks. This will increase the number of vendors available to our customers for meshless printing and implicit interop. Please visit our [nTop Core page](https://www.ntop.com/software/ntop-core/) to learn more. ## Frequently Asked Questions: #### **1.0 What is an "implicit modeling kernel"?** nTop represents complex geometry as “implicits”. To create complex implicit geometries, the implicit kernel, or “modeling engine,” performs calculations to return geometry. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **2.0 Why did nTop build a new implicit modeling technology?** Our customers are innovators, pushing the boundaries of what's possible with our technology every day. Our new kernel unlocks more speed, precision, and functionality. It also enables us to better integrate with existing customer tools. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **3.0 When does this change take place?** This change will occur with the release of nTop 5.0 on June 24th, 2024. All releases after nTop 5.0 will be built on the new implicit kernel. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **4.0 What are the benefits of this new technology?** * **Fast booleans at scale** - With our new kernel, workflows that need to perform hundreds of boolean modeling operations, such as added perforations for tooling or texturing, will be able to run within seconds, not hours. * **Rendering, meshing, and slicing speed** - As part designs become more complex, the speed of design iterations increases. Our new kernel reduces the biggest bottlenecks in the design process, especially on parts containing hundreds of features, such as lattices. * **Geometry precision** - Improved implicit modeling precision to meet your production-grade engineering requirements such as: * Sharper mesh edges with fewer iterations * Higher accuracy modeling for thin walls such as TPMS lattices for Additively Manufactured parts and micron-scale tolerance for machined parts * **Platform for future development** - This new technology will enable us to respond to your feedback better and build the features you want, such as improved integrations with nTop Core. Additional features we are working on include better CAD body exports and meshing. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **5.0 Which applications or use cases will benefit from the new technology?** Any workflows and applications that involve complex geometry, such as lattices, perforations, and texturing, will benefit from the improved performance. * Applications that use complex lattice and fin designs, such as **Heat Exchangers and Medical Implants** * Applications with thousands of perforations created by boolean operations, such as **vacuum form tooling and filters** * Applications with complex surface texturing or patterning such as Medical Implants and Gas Turbine Liners [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **6.0 Can I run a notebook created in nTop 4.X in nTop 5.0 or vice versa?** * **Yes**, you can open and run all files created in earlier versions of nTop, but there may be minor differences when regenerating implicit geometry. * **No**, Notebooks saved in nTop 5.0 are not guaranteed to run in older versions of nTop. When a file is run in 5.0, deprecated blocks will be auto-updated to newer, supported versions. If your notebook contains any of those updated blocks, it may fail when trying to open in an older version that does not support the newer blocks. This is consistent across all of our software version updates. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **7.0 Before I update to nTop 5.0, is there anything I should do? What actions should I take to reduce the impact on my files?** * We always recommend making a copy of your nTop notebook before opening in a newer version of nTop. * Ensure you follow best practices in our learning center when building workflows in nTop. Visit our [support article](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-outline-of-expected-differences) for more information on 5.0 differences and actions to mitigate the impact on files. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **8.0 Why will there be differences when running a notebook in 5.0?** The new implicit kernel includes improvements to data structures, algorithms for implicits, and upgrades in precision. All these contribute to slight differences in calculations that can compound. The result of a notebook run in 5.0, albeit different, will be higher quality than those produced by the previous version of nTop. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **9.0 What kind of differences will I see when I run my notebook in 5.0?** * This will depend on your workflow and which blocks you've been using. Please see our [support article](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-outline-of-expected-differences) for details on differences. * We have completed in-depth quality testing to minimize any differences and are confident that, in most cases, you will see the same result as your original workflow. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **10.0 How can I get an old version of nTop if this update doesn't suit my needs?** Please reach out to [support@ntop.com](mailto:support@ntop.com), and our support team will be able to provide you with a download link for an older version of your choice. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **11.0 Are you going to continue supporting customers using older versions of nTop?** As always, nTop's dedicated support team is ready to answer your questions no matter what version you run. If you are on an older version, there may be limitations in the support provided based on available blocks. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **12.0 Will nTop continue to fix bugs or add enhancements to older versions of nTop?** Consistent with all previous releases, all major bug fixes and enhancements will be built on the latest version of nTop. If you have any concerns, please don't hesitate to contact your CSM or our support team. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **13.0 Where can I find more information about nTop 5.0?** Please see our [nTop 5.0 - Outline of expected differences](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-outline-of-expected-differences) and [nTop 5.0 - Meshing updates for Simulation & Optimization](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-meshing-updates-for-simulation-optimization) articles for more information. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Keywords: *document* # nTop 5.0 - Outline of expected differences Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-outline-of-expected-differences ## Overview: The purpose of this article is to explain the changes being made with the release of nTop 5.0. ## Table of Contents ### [1. nTop File and Block Compatibility](#h-01h0g08j3pxch3wd2cvayahmx2) ### [2. Block Output Differences](#h-01h0g096r7cbbqgd6tmrdfk10p) #### [2.1. Scalar Field and Implicit Body Blocks](#h-01gyfkheg9gvwmmh5w2q9dxzbm) [2.1.1. Bounding Box Properties](#h-01gyfxekvx1ktna1nnrh46vsfs) [2.1.2. Mesh from Implicit Body](#01hrq2mwqwx497xyafmp7kdn3w) [2.1.3. Mesh from Implicit by DC](#01hrq2r0fdd3d0ryrpmx1jrh63) [2.1.4. Remesh Surface, Volume Mesh](#01hrq2tjyntk98htzw09wt795h) [2.1.5.](#h-01gyfxdhgzqnv7ccq8cmm9k5ps) [Evaluate Field, Evaluate Field Gradient, Vector Field from Gradient](#01hrq2wf5dfv2p0rfys34nzww1) [2.1.6.](#h-01gyfxdhgzqnv7ccq8cmm9k5ps) [Gradients near sharp edges and along medial axes](#01hrq3rm7nznwdtq1kcy5f5ne2) #### [2.2. Special Case: Blocks with no Implicit Body or Field Inputs](#01hrq476jd30n8z29b6dzjs18s) #### [2.3. Special Case: Field Values near Boundaries](#01hrq4aq0zjpjmhbecyhzdvsnd) [2.3.1. Rectangular, Cylindrical, and Spherical Cell Maps](#01hrq4d58b6atwmn4g1527ztvk) [2.3.2. Rectangular, Cylindrical, and Spherical Volume Lattices](#01hrq4f1ykphvzqyk3920nactt) [2.3.3. Filter Beams by Thickness, Angle, and Connectivity](#01hrq4gax1tbs789m83yr1mpvh) [2.3.4. Trim Lattice, Trim Cell Map](#01hrq6s37eg63ny6a51tr1cjfq) #### [2.4. Special Case: Noise and Random Points](#01hrq6vhrhhz9r0t681z7k04dp) [2.4.1. Cellular Noise 3D](#01hrq6wneb9nm3s0ajwfhfrp91) [2.4.2. Random Points in Body](#01hrq6yjza80rbqtc1b8m0m3cx) #### [2.5. Accuracy of Calculations with Large Values](#01hrq704dj7t8jfys9nth957qq) #### [2.6. NaN Behavior](#01hrq73464gm0tzyxraew1989v) ### [3. Implicit File Compatibility](#01hrq78db2pejnn9shs8wznjn8) ### [4. Recommended Mitigating Actions for Customers](#01hrq7ah9s59ema541xbb1eb8g) ## 1. nTop File and Block Compatibility **All nTop files and CBs created in versions older than nTop 5.0 will open, import, and run in nTop 5.0.** However, many deprecated block versions were removed in nTop 5.0. **Some blocks will be automatically updated** to their supported versions in nTop 5.0. You will not be able to make new instances of blocks with versions less than the following supported versions. For example, if an nTop file saved in nTop 4.0 contains **Sweep Profile** version 1.1, opening the same file in nTop 5.0 will convert it to **Sweep Profile** 1.2. The table below provides an overview of blocks that will automatically update when opened in nTop 5.0. | **Block Name** | **Supported Version** | | - | - | | Closest Point to Body | 1.2 | | Construct Optimized Body | 1.2 | | Curvature | 1.1 | | Field from Mesh Thickness | 1.1 | | Gaussian Curvature | 1.1 | | Implicit Body from Voxel Grid | 1.1 | | Smoothen Body | 1.4 | | Smoothen Field | 1.3 | | Sweep Profile | 1.2 | | Twisted Sweep | 1.2 | | Voxel Grid from Implicit | 1.2 | ## 2. Block Output Differences Any Scalar Field or Implicit Body may differ in field value due to an increase in nTop 5.0's precision. Therefore, **the result of any block that inputs or outputs a Scalar Field, Vector Field, or Implicit Body may change.** The results in nTop 4.0 and nTop 5.0 are not incorrect, only different and often driven by the increase from single to double precision. Below is a list of blocks and behaviors where these value differences may be most apparent. ### 2.1. Scalar Field and Implicit Body Blocks #### 2.1.1. Bounding Box Properties * **Mitigating action:** Use Refine Bounding Box to get the most accurate bounding box for your Implicit Bodies. * nTop 5.0's bounding box is not better or worse #### 2.1.2. Mesh from Implicit Body * **Mitigating action:** Follow [meshing best practices](/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices) * Mesh topology is likely to change in nTop 5.0, but the user-specified tolerance will still be met in all cases * Mesh properties such as vertex count, face count, self-intersections, and more may change. Some cases which resulted in self-intersections in nTop 4.0 no longer result in self-intersections in nTop 5.0. However, it is also possible that cases that used to produce clean meshes will now produce meshes with undesirable properties like self-intersections. * The positioning and counts of vertices and edges of meshes may be different, but the user-specified tolerance will be preserved in all cases #### 2.1.3. Mesh from Implicit by DC * **Mesh from Implicit by DC** block can produce self-intersecting meshes. Some cases which resulted in self-intersections in nTop 4.0 no longer result in self-intersections in nTop 5.0. However, it is also possible that blocks that used to produce clean meshes will now produce meshes with undesirable properties like self-intersections. ![A comparison of using the Mesh from Implicit by DC block. The mesh on the left is in nTop 4.0 and the mesh on the right is in nTop 5.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27415345641875.png) *nTop 4.0 mesh (Left) compared to nTop 5.0 mesh (Right)* ![A comparison of using the Mesh from Implicit by DC block. The mesh on the left is in nTop 4.0 and the mesh on the right is in nTop 5.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27415352731795.png) *Using the same input values, a clean mesh in nTop 4.0 (Left) could produce a self-intersecting mesh in nTop 5.0 (right).* #### 2.1.4. Remesh Surface, Volume Mesh, Simplify Mesh by Threshold/Amount * **Mitigating action:** Follow [meshing best practices](/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices) * Differences in mesh caused by small differences in field inputs * Mesh properties (cleanliness, element count, etc.) can change * Mesh topology can change ![A comparison of using the Remesh Surface block. The mesh on the left is in nTop 4.0 and the mesh on the right is in nTop 5.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27415352770835.png) *Remesh Surface creates a slightly different mesh in nTop 4.0 (Left) versus nTop 5.0 (Right)* #### 2.1.5. Evaluate Field, Evaluate Field Gradient, Vector Field from Gradient * **Mitigating action:** None needed * These changes will also affect the **Closest Point to Body** block #### 2.1.6. Gradients near sharp edges and along medial axes * **Mitigating action**: None needed * A gradient value at a sharp edge or along a medial axis will be more precise but may be a different direction than in nTop 4.0 * Curvature values, which are derived from the gradient, may also be noticeably different at sharp edges and along medial axes * Gradients on medial axes may no longer have length of one. This example has sqrt(2) along the medial planes and sqrt(3) along the medial axes. **![A comparison of fields that have gradient values along medial axes. The field on the left is in nTop 4.0 and the field on the right is in nTop 5.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27415352775443.png)** **![Different gradients at the corners and along the medial axes of a cube.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/30039555732499.png)** *Different gradients at the corners and along the medial axes of a cube.* #### 2.1.7. Point counts on Profiles * **Mitigating action**: Verify results that depend on specific polygon vertex counts * The number of vertices in the Polygon property of a profile could change when taken from Section Body ![Visualizing vertices around a profile after using Section Body in nTop 4.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/30187807860115.png) ![Visualizing vertices around a profile after using Section Body in nTop 5.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/30187807863571.png) *Different point counts in polygons from “Section Body” in nTop 4.0 (top) vs. nTop 5.0 (bottom)* ### 2.2. Special Case: Blocks with no Implicit Body or Field Inputs The following blocks do not have any Implicit Body or Scalar Field inputs or outputs but may still produce small result differences in nTop 5.0, such as a different number of cells in limited cases. * **Cell Map from CAD Face** * **Cell Map between CAD Faces** * **Cell Map from Quad Mesh** **Mitigating action:** None needed **Main affected applications:** Conformal latticing, Ribbing ### 2.3. Special Case: Field Values Near Boundaries If the value of a field is close to zero, the value could change signs due to nTop 5.0's increase in precision. As a result, blocks that use a field's sign to determine if a point is inside an implicit body could change its results. Below are some examples of blocks and behaviors that could change due to small field value changes around zero. **Mitigating action:** To mitigate differences between nTop 4.0 and nTop 5.0, use Offset Body with a small offset on any input Implicit Bodies. Offsetting inwards will ensure that elements determined to be outside in nTop 4.0 will continue to be outside in nTop 5.0. Offsetting outwards will ensure the opposite. **Main affected applications:** Conformal latticing, texturing #### 2.3.1. Rectangular, Cylindrical, and Spherical Cell Maps * Cell maps with domains and frames defined by Implicit Bodies are more precise * Definition of UV space is more precise * Cell and layer counts might be slightly different at implicit boundaries due to field values at cell vertices and centroids #### 2.3.2. Rectangular, Cylindrical, and Spherical Volume Lattice * Lattice beams entirely or partially on the implicit surface may vary in nTop 5.0 due to the filter evaluation determining a vertex inside or outside when it was determined to be the opposite in nTop 4.0 ![Result of trimming a lattice where beams lie exactly on the trimming surface of a sphere in nTop 4.0 (left) and nTop 5.0 (right)](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27417482003219.png) *Result of trimming a lattice where beams lie exactly on the trimming surface of a sphere in nTop 4.0 (left) and nTop 5.0 (right)* #### 2.3.3. Filter Beams by Thickness, Angle, Connectivity * Beam filter results may be slightly different close to implicit surfaces * Evaluation close to zero may have an opposite sign, thus affecting the filter #### 2.3.4. Trim Lattice, Trim Cell Map * Lattice beams or cell map cells entirely or partially on the implicit surface may vary in nTop 5.0 for the same reasons as described under sections 2.3.2 and 2.3.3 ### 2.4. Special Case: Noise and Random Points Unlike the above examples, the following blocks will change significantly in nTop 5.0. The results are still correct. **Mitigating action:** Verify results **Main affected applications:** Texturing, stochastic latticing #### 2.4.1. Cellular Noise 3D * Differences in noise values may result in visible differences in results derived from these blocks ![Differences in surface texture between nTop 4.0 (Left) and nTop 5.0 (Right)](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27417489421459.png) *Differences in surface texture between nTop 4.0 (Left) and nTop 5.0 (Right)* #### 2.4.2. Random Points in Body * **Random Points in Body** block may return different point counts and locations, especially where the Spatial Weighting approaches zero **Mitigating Action:** If no differences in random points can be tolerated, when updating to nTop 5.0, export the points generated with these blocks with Export Point Map, then re-import the point map in nTop 5.0. ### 2.5. Accuracy of Calculations with Large Values Before nTop 5.0, the accuracy of numerical calculations deteriorated as values increased. In nTop 5.0, these calculations are more accurate. In the image below, a Plane created 16 meters from the origin has a 20 degree error in its surface normal in nTop 4.0 (left). This is because the value of 16 meters is much larger than the other values used to create a Plane. The same Plane is correct in nTop 5.0 (right). **![a Plane created 16 meters from the origin has a 20 degree error in its surface normal in nTop 4.0 (left). This is because the value of 16 meters is much larger than the other values used to create a Plane. The same Plane is correct in nTop 5.0 (right).](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27417489442707.png)** In another example, trimming a cell map behaves differently at 10 meters from the origin. This is because the value of 10 meters is much larger than the Implicit Body's field values near its surface. The left is from nTop 4.0, and the right is from nTop 5.0. **![trimming a cell map behaves differently at 10 meters from the origin. This is because the value of 10 meters is much larger than the Implicit Body's field values near its surface. The left is from nTop 4.0, and the right is from nTop 5.0.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/27417482048275.png)** ### 2.6. NaN Behavior nTop 5.0 has different behaviors when NaN values are involved. Note that any math with the Scalar and Integer types has not changed, only the Scalar Field and Implicit Body types are affected. The following field operations will return 0 instead of NaN. * 0 \* NaN = 0 * NaN \* 0 = 0 * 0 / NaN = 0 * 0 / 0 = 0 * mod(0, NaN) = 0 * mod(0, 0) = 0 **Mitigating actions:** * Compare the outputs of any workflows that utilize NaN explicitly. * Avoid workflows that use a zero-length range as an input for the Ramp block. Instead, use the If-Else block. ## 3. Implicit File Compatibility * Implicit files exported from versions older than nTop 5.0 will not be importable in nTop 5.0 and later * Implicit files exported from nTop 5.0 and later will not be importable by nTop versions older than nTop 5.0 * Implicit files exported from nTop 5.0 and later will not be importable by versions of nTop Plugin for EOSPRINT older than version 1.0.0. **Mitigating action:** Open the .ntop file in nTop 5.0 and export a new .implicit file. ## 4. Recommended Mitigating Actions for Users 1. Make a copy: We recommend making a copy before opening any notebook in nTop 5.0. While we can ensure the notebook will open successfully, we cannot guarantee the design will be exactly the same as in nTop 4.0. 2. Follow best practices: * Bounding Boxes: * Use "Refine Bounding Box" if bounding box properties are critical * Meshing: * Refer to the meshing best practices material in our [nTop Learn course](https://learn.ntop.com/surface-meshing-techniques?next=%2Fsurface-meshing-techniques%2F1792325) and [support article](/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices) * Latticing: * Refer to the trimming/generating lattices material in our [learning center course](https://learn.ntop.com/latticing-course/1469708/scorm/cbhqwnf1fp2g) and [support article](https://support.ntop.com/hc/en-us/articles/360059637573) * Implicit Modeling: * Refer to our learning center courses on [implicit modeling](https://learn.ntop.com/ntop-core/1469662/scorm/3vigeuady6lkm) and [implicit fields](https://learn.ntop.com/intro-to-field-driven-design/1470213/scorm/7dcxxe8iy8wo) 3. Verify results: Before upgrading, we recommend exporting or embedding meshes into a workflow. This will allow you to compare the nTop 4.0 mesh to an nTop 5.0 mesh. If you update and would like to revert to an older version, please contact product support. We can supply you with a download link to install previous versions of nTop. It should be noted that, as of right now, we will not guarantee bug fixes or enhancements for older release versions. **If you have any questions, please reach out to nTop Product Support at [support@ntop.com](mailto:support@ntop.com).** ## Keywords: *update ntop expected differences 5 5.0* # nTop 5.11 - Field Optimization Updates Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-11-field-optimization-updates ## Overview: In nTop 5.11, we will promote the **Field Optimization** block and all the related Parametric FE Component blocks—**Parametric Lattice Component**, **Parametric** **Voronoi Component**, **Parametric Shell Component**, **Parametric Shell-Infill** **Component,** and **Parametric FE** **Model—** out of beta and into production. This will directly affect the results generated by the Field Optimization block and indirectly affect downstream blocks that use the Field Optimization results. The previous beta versions of these blocks will be deprecated and no longer be available. Notebooks with older beta blocks can still be opened and viewed in nTop 5.11. Your previous results will be cached and available; however, the cached Field Optimization results may exhibit minor differences in the geometry when opened in 5.11. As such, we recommend updating the Parametric FE Component blocks and re-running the Field Optimization blocks as soon as possible. To update and re-run the blocks in 5.11, select the impacted blocks above and click the “Update” button that can be accessed by clicking the warning icon. Updating the blocks will automatically trigger them to re-run and produce new results. The previously cached results will be overwritten. ## Table of Contents: #### [**1.0 Why is this change happening?**](#h-01jd06twjcrkq7xwy7a2a50n30) #### [**2.0 Impacted Blocks**](#h-01jd06twjcmszvr8j0hg2y5b2c) #### [**3.0 Example Differences**](#h-01jd06twjc5ras0jhyb45fr172) #### [**4.0 How does this affect you?**](#h-01jd06twjcwq40f5dzjcerqzyv) #### [**5.0 Recommended Actions**](#h-01jd06twjdcna80e142rcpbhmp) #### [**6.0 Effective Release**](#h-01jd06twjdxwdpb0kwfqt8qfxq) ### **1.0 Why is this change happening?** We are promoting all the **Field Optimization** and related blocks out of beta. We have also improved the smoothing algorithms to produce better results. ### **2.0 Impacted Blocks** | **Block Name** | **Function** | **Production Version** | **Impact** | | - | - | - | - | | Field Optimization | Perform a field optimization on a Parametric FE Model. | v1.1.0 | Minor (\<5%) results in the Optimization History differences caused by the changes in Parametric Component blocks listed below. | | Parametric FE Model | Combine a list of Parametric FE Components and corresponding FE Connectors into a Parametric FE Model. | v1.0.0 | Minor differences are caused by the changes in the Parametric Component blocks listed below. | | Parametric Voronoi Component | Create a Parametric FE Component for a Voronoi lattice with the following design parameters: cell size and beam thickness. | v1.1.0 | Minor output difference in the Implicit Body. | | Parametric Shell Component | Create a Parametric FE Component for a variable shell structure with the following design parameters: shell thickness (inward direction). | v1.0.0 | There is no result difference. We are promoting the block from beta to production. | | Parametric Shell-Infill Component | Create a Parametric FE Component for a variable shell structure with a periodic lattice infill with the following design parameters: shell thickness (inward direction), lattice thickness. | v1.1.0 | Minor output difference in the Implicit Body. | | Parametric Lattice Component | Create a Parametric FE Component for a periodic lattice with the following design parameters: lattice thickness. | v1.1.0 | Minor output difference in the Implicit Body. | ### **3.0 Example Differences** >
      **nTop 5.10** **nTop 5.11**
    **Parametric Voronoi Component** **and** **subsequent Field Optimization** ![A Parametric Voronoi Component in nTop 5.10.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/35535807461395.png) ![A Parametric Voronoi Component that has been Field Optimized in nTop 5.10.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/35535807469843.png) ![A Parametric Voronoi Component in nTop 5.11.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/35535807473683.png) ![A Parametric Voronoi Component that has been Field Optimized in nTop 5.11.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/35535793273875.png)
    **Parametric Shell-Infill Component** ![A Parametric Shell-Infill Component in nTop 5.10.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/35535807477395.png) ![A Parametric Shell-Infill Component in nTop 5.11.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/35535807479827.png)
    ### **4.0 How does this affect you?** * The Field Optimization implementation from 5.10 and prior will not be available in nTop 5.11 and later. If you have an existing notebook with older block versions, you cannot re-run them until you update the block version. * When opening files saved in nTop 5.10 and prior in 5.11 (or later), you can visualize, interact with, and use the Field Optimization results downstream. You will be prompted to update the block to the latest version. If you choose to update the block, your previous results will be erased, and the new output will be generated. This will also restore your ability to re-run the block. * This will result in faster load times and runtimes for nTop files with Field Optimization. * This update will have minor differences in the optimization objective and convergence. * *\*Note that results will not be cached in nTop Automate.\** ### **5.0 Recommended Actions** Here are a few scenarios and the recommended actions to follow when using the Field Optimization block after this update: * **Accessing results from an existing notebook:** No action necessary. You can open a notebook created in a version before the update and access your results. You will notice warning messages in the blocks that require an update. **You can ignore these messages if you do not intend to re-run them and generate new results. However, there will be differences in the implicit geometry even without re-running.** * **Modifying or reusing a notebook:** You must select the “Update” button for each block in the block's warning panel. We do not auto-update your blocks in notebooks created with older versions. This will update it to the latest version and trigger the block to run. Previous results will be erased, and the new output will be generated. We recommend saving a copy of the notebook with a different name before performing the update to preserve your old results. * **Composing a new notebook:** No action necessary. All the updated blocks will be available by default as you add them to your notebook from the ribbon or the search bar. * ***If you need to generate the exact same results, do not upgrade to 5.11. If you have already upgraded, contact*** [*support@ntop.com*](mailto:support@ntop.com) *to revert to nTop 5.10*. ### **6.0. Effective Release** These changes will be effective in nTop 5.11, which is expected to be released the week of November 25th. # nTop 5.20 - Curve and Profiles Update Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-20-curve-and-profiles-update #### Learn more about the changes happening in nTop 5.20, where we introduce our new curve and profile types and blocks. ### [What is Happening?](#h-01jp2ymctjj53685x8n59ef7ka) ### [Updated Curve Types](#h-01jp2ymctj8pt88qrpvw5qrzr9) ### [New Polycurve Type](#h-01jp2ymctj869xhgcjpbcgv2jd) ### [Updated Profile Type](#h-01jp2ymctj4ygxz2djfwwzryd6) ### [Summary of Type Changes](#h-01jp2ymctj2cte136kgvvs4wm3) ### [Summary of Block Changes](#h-01jp2ymctjrzfns6c5esf04zdn) ### [FAQ](#h-01jp2ymctjpac07sb652bzsvj4) ## What is Happening? Our new curve and profile modeling blocks are being overhauled to allow more modeling in nTop, enabling more design iterations. In this initial release, we're updating the foundation of the Curve and Profile types. Additional blocks for creating and using Curves and Profiles will be released in the future. Our new Curve and Profile types are much easier, allowing engineers to use an Arc, Line, Spline, or Polycurve in any “Curve” input. The most immediate change to modeling workflows is the improved ability to create (or import) a string of curves to be extruded, revolved, or swept. This is enabled by the “abstract” Curve type, to which all other curves auto-convert. Profiles and Polycurves can both be created from any combination of curve types. The result of these changes is that nTop's curve system is much more similar to that of other CAD software. The old Curve and Profile types are being replaced and will need to be updated manually or created using the new versions of blocks. ## Updated Curve Types ![A diagram showing the new block types and how they convert to curves types.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/39709084538643.png) We're introducing four concrete types and one abstract type called Curve. All curve types (Arc, Line, Spline, or Polycurve) can be used in any Curve input. See the table in the “Summary of Block Changes” section for a full list of blocks that use these types. Each type has several unique properties, and all Curves share a set of properties: | **Curve Property** | **Definition** | | - | - | | Arc length field | Length along the curve from the start point | | Bounding box | Bounding box | | Closed | True if start and end point are equal | | End point | End point | | End tangent | Tangent vector at the end point | | Length | Length | | Start point | Start point | | Start tangent | Tangent vector at the start point | | Scalar Field (Conversion) | Distance to the curve | ![An example of curve field properties.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/39291220220435.png) Curve field properties, from left to right: scalar field, arc length field, start/end tangent ## New Polycurve Type A Polycurve is a new type that represents a connected set of arcs, lines, and splines. It can be open or closed, planar or 3D, but not disconnected or branching. The segments (all Curve type) can be accessed in the properties. A Polycurve can be created with the **Polycurve from Curves** block ![An example of a polycurve.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/39291220226963.png) A Polycurve consisting of two lines and two arcs ## Updated Profile Type ![A diagram showing the new profile type and how it can convert to polycurve.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/39709074450067.png) A Profile is a set of coplanar curves. It has two field properties: the first is the signed distance field to the infinite extrusion relative to the profile's plane, and the second is the unsigned distance field to the enclosed region. ![An example of a profile's field properties.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/39291220230675.png) Profile field properties, from left to right: distance to extrusion, distance to region. A Profile can also be closed or open. If closed, it can have multiple loops (e.g. several circles inside a rectangle or the disconnected loops of a logo). Open profiles are semi-infinite and can be used in the same blocks as closed profiles. An open profile will be automatically extended and closed with lines if the infinite extensions intersect ![Three different examples of a profile.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/39709084547091.png) Three Profiles, from left to right: closed, closed with multiple loops, and open. ## Summary of Type Changes | **Old Type** | **New Type** | **Summary** | | - | - | - | | - | Curve | New, “abstract” type. | | - | Polycurve | New type | | Curve (old) | Spline | The old Curve type is deprecated and replaced with the new “Spline” type. | | Arc | Arc | The current type is updated. | | Line Segment | Line | The current type is updated. | | Profile (old) | Profile | The old Profile type is deprecated and replaced with the new Profile type. | | Polygon (old) | - | The Polygon type is deprecated. Use Profile instead. | | Circle (old) | - | The Circle type is deprecated. Circle is now a Profile. | ## Summary of Block Changes | **Old Block** | **Old Output Type** | **New Block** | **New Output Type** | **Change** | | - | - | - | - | - | | - | - | Arc by Tangent | Arc | New Block | | - | - | Extruded Cut | Implicit Body | New Block | | - | - | Polycurve from Curves | Polycurve | New Block | | - | - | Polyline | Polycurve | New Block | | - | - | Profile from Curves | Profile | New Block | | Curve from Control Points | Curve (old) | Spline by Control Points | Spline | Updated Block | | Curve through Points | Curve (old) | Spline through Points | Spline | Updated Block | | Circle | Circle | Circle | Profile | Updated Block | | Curve Integral | Scalar | Curve Integral | Scalar | Updated Block (input type change) | | Equidistant Points on Curve | Point List | Equidistant Points on Curve | Point List | Updated Block (input type change) | | Extrude Profile | Implicit Body | Extrude Profile | Implicit Body | Updated Block (input type change) | | Graph by Swept Projection | | Graph by Swept Projection | Graph | Updated Block (input type change) | | Polygon from Points | Polygon | Profile from Points | Profile | Updated Block | | Regular Polygon | Polygon | Regular Polygon | Profile | Updated Block | | Revolve Profile | Implicit Body | Revolve Profile | Implicit Body | Updated Block (input type change) | | Section Body | Profile (old) | Section Body | Profile | Updated Block | | Surface Area | Scalar | Surface Area | Scalar | Updated Block (input type change) | | Sweep Profile | Implicit Body | Sweep Profile | Implicit Body | Updated Block (input type change) | | Implicit Body from Curve | Implicit Body | Property: Curve.Scalar Field | Scalar Field | Moved to Property | | Twisted Sweep Profile | Implicit Body | - | - | Deprecated Block(Merged with Sweep Profile) | | Loft between Profiles | Implicit Body | See support article FAQ | - | Deprecated Block | | Offset Profile | Profile (old) | - | - | Deprecated Block | ## FAQ **When does this change take place?** * The new Curve and Profile types will be released in nTop version 5.20. **What blocks use the new types?** * All blocks with inputs and outputs of the old type have been updated. This means any block with a Curve or Profile input can be used. **Are there any changes I should make to how I build curve workflows?** * Yes, aside from the general updates described in this article, “**Implicit Body from Curve**” will be deprecated. Instead, use the Curve's Scalar Field property, which represents the distance to the curve. **Can I import and export curves?** * Yes, curves can be imported and exported as the Curve type. * For backward compatibility purposes, existing notebooks that use either the Curve property of CAD Edge or the Curves property of an imported Part will have a new block added when the notebook is opened. All new instances of these properties will be the new Curve type. **What are abstract and concrete types?** * An abstract type serves as a template for other types. It defines a general structure and behavior but is not a complete, usable entity. Abstract types such as Curve provide a starting point for creating more specific, concrete types such as Arc, allowing them to share common characteristics and behaviors. **I'm using the old curve and profile types. How will this affect my work? Can I continue using them?** * The old curve and profile types will be renamed to “\ (old)”. They can still be used, but blocks using these types will be deprecated. The results will not change, and they can continue to be used. **Why was a new block inserted where I was using the Curve property of a Part or CAD edge?** * If a CAD Edge was used, a new block, **Curve from CAD Edge,** will be added to the notebook when opening in 5.20. This is for backward compatibility purposes. **How do I thicken a Curve?** * To thicken a curve, drag the scalar field property of the curve into the **Thicken Body** block. **I'm running into problems concatenating lists of different curve types. What should I do?** * Only lists of the same type can be concatenated. To do this, make each input curve type list a variable and change the type of each variable to **Curve** using the dropdown on the left of the variable. Then, the lists should work in the **Concatenate Lists** block. **Will the new blocks give me the same output?** * Yes, except **Section Body**. * The behavior of **Section Body** version 5.20 will be different from previous versions. Previously, Section Body would return an exact extrusion of the input Body's field at the specified plane. In version 5.20, Section Body will first extract a curve approximation of the Body's surface at the plane and then create an extrusion field from those curves. To create an exact extrusion without first creating boundary curves, use the technique presented in the custom block in this [demo file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Remap%20Extrusion%20Demo.ntop). This block allows an identical result to be created. **Are any blocks deprecated without a new version?** * **Implicit Body from Curve** will be deprecated without a direct replacement block. To achieve the same output, use the new *“Scalar Field”* property of any Curve. * **Loft between Profiles** will be deprecated without a direct replacement block. To achieve the same output, use the technique presented in the custom block in this [demo file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Loft%20between%20Profiles%20Behavior%20Demo.ntop). * **Offset Profile** will be deprecated without a direct replacement block. To achieve a similar output, use the **Offset Body** block on the “distance to extrusion” property followed by **Section Body**. * **Twisted Sweep Profile** will be deprecated without a new version. The block has been combined with **Sweep Profile**, which now has the “Starting Rotation” and “Ending Rotation” inputs. ## Keywords: *curves profiles* # nTop 5.6 - Quadrangulate Mesh Updates Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-6-quadrangulate-mesh-updates ## Overview In nTop 5.6, there will be a library update to improve the quality of quad meshes generated by nTop. This will directly affect the Quadrangulate Mesh block and indirectly affect blocks that take quad meshes as inputs. See our recommended actions in [**section 5.0**](#h-01j7ezk2ymszcychm7m9s1hfg3) below. The previous versions of this block will be deprecated and will no longer be available. Your previous notebooks can still be opened and viewed in nTop 5.6. Your geometry and analysis results will be cached and available. To re-run the block in 5.6, update it to the newest version. Updating the blocks will automatically trigger them to re-run and produce new results. Previously cached geometry and results will be overwritten. ## Table of Contents ### [1.0 Why is this change happening?](#h-01j7ezk2ym0876gax3dr4hf4v5) ### [2.0 Impacted Blocks](#h-01j7ezk2ymyccqs892zdetwn5j) ### [3.0 Example Differences](#h-01j7ezk2ymh74qqq6ww3j644s2) #### [Example 1 - Quadrangulate Mesh applied to a bracket](#h-01j7ezk2ym8new9cvvkm8h9ggd) #### [Example 2 - Quadrangulate Mesh applied to ribs](#h-01j7ezk2ymr2g7mq8ra2d4a766) ### [4.0 How does this affect you?](#h-01j7ezk2ymm9r8zx0k94f80fvh) ### [5.0 Recommended Actions](#h-01j7ezk2ymszcychm7m9s1hfg3) ### [6.0. Effective Release](#h-01j7ezk2ymgqhs9x7pn0tzwrs6) #### ## 1.0 Why is this change happening? * We are upgrading our quad meshing technology to improve the quality of the quad meshes generated from triangle meshes. Additionally, this update fixes certain scenarios that caused nTop to crash as a result of the Quadrangulate Mesh block. As a result, there may be differences in the vertex locations, face counts, and mesh quality compared to previous versions (nTop 5.5 and prior). * The new version of the block will, in general, have better sharp feature preservation. ## 2.0 Impacted Blocks | **Block Name** | **Function** | **Updated Version** | **Impact** | | - | - | - | - | | Quadrangulate Mesh | Quadrangulate a triangular or quad mesh by remeshing. | 1.1.0 | Minor differences in mesh output | ## 3.0 Example Differences This section contains a few examples detailing the expected differences in quad meshing workflows between nTop 5.5 and nTop 5.6. ## Example 1 - Quadrangulate Mesh applied to a bracket >
      **nTop 5.5** **nTop 5.6**
      ![Quadrangulate Mesh on a bracket in nTop 5.5.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/33276615626899.png) ![Quadrangulate Mesh on a bracket in nTop 5.6.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/33276630765075.png)
    **Face Count **(Target=10k) 19269 16293
    **Vertex Count** 19214 16267
    In this example, the mesh quads flow around sharp features better in this area, and the face count is closer to the target face count. ## Example 2 - Quadrangulate Mesh applied to ribs >
      **nTop 5.5** **nTop 5.6**
      ![An example of Quadrangulate Mesh on a set of ribs in nTop 5.5.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/33276615631635.png) ![An example of Quadrangulate Mesh on a set of ribs in nTop 5.6.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/33276630778899.png)
    **Face Count **(Target=10k) 15591 10792
    **Vertex Count** 15571 10776
    In this example, the mesh quads flow differently but are approximately the same overall quality. The face count is closer to the target face count. ### ## 4.0 How does this affect you? * The Quadrangulate Mesh implementation from 5.5 and prior will not be available in nTop 5.6. Consequently, if you have an existing notebook with older block versions, you cannot re-run it until you update the block version. * This update will have a minimal to positive impact on your quad meshing workflows. You can expect a minor difference in the mesh characteristics generated from the updated block. In many cases, the quads will follow features better. In other cases, results may differ slightly, but neither better nor worse. * When opening files saved in nTop 5.5 and prior in 5.6, you can see, interact with, and export the previously generated meshes. You will be prompted to update the blocks to the latest version. If you choose to update the block, your previous results will be erased, and the new output will be generated. This will also restore your ability to re-run the block. Note that results will not be cached in nTop Automate. ![An error message explaining that the Quadrangulate Mesh block is deprecated and that you should update to the latest version.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/33276630782867.png) ## 5.0 Recommended Actions Here are a few scenarios and the recommended actions to follow when using the Quadrangulate Mesh block after this update: * **If you need to generate the same results, do not upgrade to 5.6.** If you have already upgraded, please contact [support@ntop.com](mailto:support@ntop.com) to revert to nTop 5.5. * **Accessing results from an existing notebook:** No action necessary. You can open a notebook created in a version before the update and access your results. You will notice warning messages in the blocks that require an update. **You can ignore these messages if you do not intend to re-run them and generate new results.** * **Modifying or reusing a notebook:** You must select the “Update” button for each block in the block's warning panel. We do not auto-update your blocks in notebooks created with older versions. This will update it to the latest version and trigger the block to run. Previous results will be erased, and the new output will be generated. Optionally, save a copy of the notebook with a different name before running the update to preserve your old results and workflows. * **Composing a new notebook:** No action necessary. All the updated blocks will be available by default as you add them to your notebook from the ribbon or the search bar. ## 6.0. Effective Release These changes will be effective in nTop 5.6, which is expected to be released the week of **September 16th.** # nTopology 3.44 - Meshing updates for Simulation & Optimization Source: https://docs.ntop.com/help-articles/knowledge-base/backwards-compatibility-notices/ntopology-3-44-meshing-updates-for-simulation-optimization ## **Overview** * In nTop version 3.44, we will update five blocks related to simulation and analysis. See section [2.0 Impacted Blocks.](#h-01gv3rtyysmjt6zj89d69w42tj) * Your previous notebooks can still be opened and viewed in nTop 3.44. Your geometry and analysis results will be cached and available as view-only. * The impacted blocks cannot be re-run but can be updated to the latest version. You will need the latest block version to run the notebook. See section [5.0 Recommended Actions.](#h-01gv3rvkyxxv5d6n0c227gr9pm) * Updating the blocks will trigger them to run and produce new geometry and analysis results. Previously cached geometry and results will be overwritten. ### [1.0 Why is this change happening?](#h-01gv3rtpfd6y40nb0cp3mvzv05) ### [2.0 Impacted Blocks](#h-01gv3rtyysmjt6zj89d69w42tj) ### [3.0 Example Differences](#h-01gv3rv5v71yzphpvpm6r80vyc) ### [4.0 How does this affect you?](#h-01gv3rvcra5dnwk8affqzg6m1e) ### [5.0 Recommended Actions](#h-01gv3rvkyxxv5d6n0c227gr9pm) ### [6.0 Effective Release](#h-01gv3rvtkc3tkym2phrqb6qds7) ### [7.0 Stochastic Lattice Application](#h-01gvjrxqpdmxaxwk3cxd9vr159) ## **1.0 Why is this change happening?** * We have upgraded our meshing technology to create high-quality surface and volume meshes for simulation. As a result of this update, there are minor differences in the location of the nodes and elements produced by a few meshing blocks compared to the results from previous versions (versions 3.43 and prior). * The impact of this change on simulation and optimization results, although small, has been documented in this article to allay any concerns regarding these workflows. We believe this change will positively impact meshing performance as this technology continually improves. ## **2.0 Impacted Blocks** Here is a table summarizing the updated blocks, their function, the latest version, and the performance difference from the prior version: | **Block Name** | **Function** | **Update Version** | **Change** | | - | - | - | - | | Remesh Surface | Re-mesh an existing surface mesh. | 1.1.0 | Minor differences in mesh output | | Remesh Surface with Cyclic Symmetry | Re-mesh a surface mesh to create conformal nodes between the independent and dependent planes. | Beta | Minor differences in mesh output | | Volume Mesh | To mesh a solid domain with tetrahedral elements that conform to the boundary of the specified domain. | 1.2.0 | Minor differences in mesh output | | Boundary Layer Mesh | To create a solid mesh along the boundary of a surface mesh using a defined number of layers. | 1.2.0 | Minor differences in mesh output | | Modal Analysis | To calculate the natural frequencies and mode shapes of an FE Model. | 1.3.0 | Minor differences in frequency values of rigid body modes | In addition to this, the following toolkit blocks, which internally use one or more of the blocks listed in the table above, are also affected by this update: | **Block Name** | **Toolkit** | **Section** | **Function** | | - | - | - | - | | Infill Tet Lattice | Architected Materials | Latticing | Create a tetrahedral lattice from the Implicit body. | | Tet Lattice from CAD Body | Architected Materials | Latticing | Create a tetrahedral lattice from the CAD body. | | Surface Lattice from CAD Body | Architected Materials | Latticing | Create a conformal surface lattice from the CAD face. | | Simple Remesh Body | Architected Materials | Utilities | Remesh an Implicit body with a simple set of parameters. | | Remesh CAD Face | Architected Materials | Utilities | Remesh a CAD face with a simple set of parameters. | | FE CAD Solid Mesh | Design Analysis | Mesh Generation | Create an FE Mesh of solid tetrahedral elements from a single CAD Body. | | FE Tetrahedral Mesh | Design Analysis | Mesh Generation | Create an FE Mesh of solid tetrahedral elements from a domain defined by a closed surface mesh. | | FE CAD Shell Mesh | Design Analysis | Mesh Generation | Create an FE Mesh of shell elements from a single CAD Body. | | FE Shell Mesh | Design Analysis | Mesh Generation | Create an FE Mesh of shell elements from an input surface mesh. | These blocks are toolkit blocks found in the Architected Materials and Design Analysis ribbons, visible to users who opted in for Toolkits during the installation process. ## **3.0 Example Differences** This section contains a few examples demonstrating the results from meshing, simulation, and optimization of a bracket between nTop version 3.42 and version 3.44. **Example 1 - Remesh Surface applied to a bracket** > > > > > > > > > > > > > > >
    > **![Remesh Surface block applied to a bracket in nTop 3.42.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/QhLkWVLQGyv2J1b2pp2-RGdGu3q9WSHhw31ZmUYitKgKBiRE2WLwagHs_y8JUgUTw0Ot5lbTXMB4OLmlD6U_l8ACKmQIXo3Y9kcAQC8fztrLShCSmIKNKuzDAHjFJewTnMZLahTpzdngIeExNmq2AG.png)** > > ![Remesh Surface block applied to a bracket in nTop 3.44.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/zo1VjnRwkcVyfBXPVB_lahMuaPJSIMeIz4iZn5-d_OmbjBBVd6Oc7tBtcd-fLEvi9prI0UetOGhu2wJLI1ifx1ac4FoGGk0OMYjzkGlNUAjThG18d98RsOWnc-d305YtqlA5j4B46tr47HbvvQzyk3.png) >
    | **Version** | **Edge Length (mm)** | **Node Count** | **Element Count** | | - | - | - | - | | 3.42 (image on left) | 5 | 17708 | 35444 | | 3.44 (image on right) | 5 | 17697 | 35422 | Besides a slight variation in the number of nodes and elements, the surface meshes generated with the Remesh Surface block are similar in both versions. **Example 2 - Static Analysis** > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
    > **![A diagram of a bracket showing where fixed restraints are applied.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/_hLC4f-lvxXNy-EUCmGn_xyn8UyauSpPpfKjnvRqCtKn_Fumd3U_j1IkyYEQNZFSXI58aKzRacNXr3FgIbOb_N2QMavS6Z74Oa4G__uSsJmRvpteOP-_CTVLRDimB-bUDfn8bwwOeZ4iDM7CjLjRh9.png)** > > ![A diagram of a bracket showing where a force boundary is applied.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/FMZnDspmHP6vtWcXjLXkNg8lUwV5AW6Auki-J78bzsTkVbu-I8NGLkWxGbTf3SPQNf-iYXNHmWKsXlJtC_yO1MfjKahHvO-QDPVin0-8Tz2meUSTjyaSMdf90oF-moNVqiSO7kdPB0o93pDiygvXqh.png) >
    > ![Displacement Results of a Static Analysis run using nTop 3.42.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/VfngUHM8fKdEVcSYo9W7CyZjIr753aUKst0Tvh1GlH-8HqWuEcujPJtPrN3ydKskvG_X2Pos2bY49xWny3rhhFef5KW4U9rRDBJGg7M9ppDNz42Kx3pwDDxl7qMpsvq-x4kx8_onWvIY34HSelExwq.png) > > ![Displacement Results of a Static Analysis run using nTop 3.44.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/4Ml1j2nddqq4JQSqElHajyv_k1uCcLgqBSRc_29c-FTcVM1XklRTkT3gvZienEcyVcz2k6IBV0IIX8pHizFE2AMI3IyUgU5i18-eSelLXB7b7nGqYvcAJOPE6aFkPPSW5WDjMwaude8KHiRodVh9lF.png) >
    > ![Stress Results of a Static Analysis run using nTop 3.42.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/8XL24JzZ_UKLw2EyzEwV-L-oL-avNviUIZgPUqhSvwxzhWlWP1MSWR2tdBryU9Dl7X_1t8UMhF6EufNtztcFrouiwSXkFyYtHtSOJ-jfR_lw0rt07euhya5p2K6s9ai3pT47g9QTQ606HsU22lWjws.png) > > ![Stress Results of a Static Analysis run using nTop 3.44.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/32YZhoeBkdQbypsqtO_RzhCzJ2E6GUWnpAcfks3uyvsv6Z6QxGQngLqRuxCfQM3xEn_9r4p6EbxWNmogFOcmdDriDmIYstWJSwAZs8Luq3KseUhSr32OGhQi64gDNCOdOWpPId0JFngayXkRSwFRTm.png) >
    > ![Stress Results of a Static Analysis run using nTop 3.42. The image is highlighting the max stress.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/sZYwHlWs4fN-db69Y-d9Wlk9qZtXtmk8zJlx4VVa0VCqpXOrRzD0EjqAiDFDpsk3FYuNUjVuhlCMuXWguSZCfuuOS1trDbtKA4KVKBd5kN8CVfiY1wLlRUE-m-GHYrL8fkUW1eonyecBPuqYJastMJ.png) > > ![Stress Results of a Static Analysis run using nTop 3.44. The image is highlighting the max stress.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/OuKDT_gKQsy75W-R4BNcH_lkTmiK40PyDcOKKOKxYqTFYin_FhbEetlsy_mQ14mJPAvDWUycm0LrIauNMtMvCFSYXzwDRfzU6qg-WRvKfyyKw0eOB6aPfmmjgDYabKUafcke2J5oyYdTDFNM0auncO.png) >
    | **Version** | **Max Displacement (mm)** | **Max Stress (MPa)** | **Stress at fillet, (MPa)** | | - | - | - | - | | 3.42 (images on left) | 2.381 | 189.88 | 189.88 | | 3.44 (images on right) | 2.375 | 199.66 | 182.79 | The static analysis of this bracket was carried out using a volume mesh generated from the surface mesh in Example 1. The boundary conditions that were applied to the analysis are indicated in the first set of images. The rest of the images showcase the results of the static analysis from the 2 versions. The stress and displacement values from these analyses are recorded in the table. The maximum displacement values were similar, with a 2% difference between the versions. The maximum stress values and their locations were different. This is because the stress values are evaluated at node points, and the node locations differ between the versions. The difference in the node locations also resulted in a stress concentration area with different values between the versions. While the location of stress concentrations is important, these stress concentration areas typically require further mesh refinement or other forms of analysis for accurate results. Hence, the stress values at a critical location on the model (a fillet) were compared instead, which showed similar values with a 3% difference between the versions. **Example 3 - Topology Optimization** > > > > > > > > > > > > > > > > > > > > >
    > **![Topology Optimization results of a bracket, run using nTop 3.42.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/AOQtdOUxQt9_2U8h4BrYW7dLEgExgBgFf35wrCcyYrRSASgxGwg-CbxKFoeLPRWIplUUE7S_1mZAZMiVTPS2o2WfV56l8oze2F1h7Z9ZiucXPienk71TLaHoPs6TwkDSsY9JEhVBrqHMN_DqHlpTvx.png)** > > ![Topology Optimization results of a bracket, run using nTop 3.44.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/Z4X_q-S2Y-AXxMRg2DMaVc18eZnCHABzOwdIXC70eRFVGDZcuN3z4R01u287I3TTkLHsUKnK5-Nqb3i-cgIdc3OGaz1sgcB1mh4R4jYvJsSgf8LAyrKqhZ7T8EfKXHTksJkFHy66eKjUulo6RKQT9X.png) >
    > ![Topology Optimization results of a bracket, run using nTop 3.42. The geometry in green was kept while the dark blue is removed.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/LgdX-pmUsftd7pnRxlpVfUJ3AqxXOeSFOSsDkM0jLWSaB9wmwLNkFdDVO3awxRsrq3u_8i8MghFQXDoiokBsBkAsm80qKx3i3c6uFat1TUoPAodLJ2OXRXm-r22xxcJEQrSkZMiBDZTMmkl8diPlK9.png) > > ![Topology Optimization results of a bracket, run using nTop 3.44. The geometry in green was kept while the dark blue is removed.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/_qo6nt_NihW5cfKRHzjs_Y8rtszU7SxcM8mWomCy023twvbGaCnTTkzjjxynZI0cIjE9e01nNAUxi1HG_W_veJBXoryEm_m8ZJp8biFts4Tn7HFGltK7woggWGrf0tw__uA8x71OyKkGyNSdtCjEOq.png) >
    | **Version** | **Convergence iteration** | **Result Threshold** | | - | - | - | | 3.42 (images on left) | 24 | 0.5 | | 3.44 (images on right) | 24 | 0.5 | The bracket was optimized using the Topology Optimization block to minimize compliance (maximize stiffness) and a volume fraction constraint to keep the optimized volume under 50% of the original volume. The compliance minimization objective used the same boundary conditions as the static analysis in the previous example. The final optimized shapes were similar in both versions, as showcased by the Iso-contour plots (set at a threshold of 0.5) and Threshold plots. ## **4.0** **How does this affect you?** * The old meshing behavior is not available in nTop version 3.44. Consequently, if you have an existing notebook with older versions of the blocks in the table above, you cannot re-run these blocks unless you update the individual block versions. However, you will have access to the previously generated results. You will also be prompted to update these blocks to the latest version. If you choose to update the blocks, your previous results will be erased, and the new output will be generated. This will also restore your ability to re-run the blocks. As demonstrated in the previous section, the effect of this update on your existing workflows for meshing, simulation, and optimization is minimal. You can expect a minor difference in the characteristics of the mesh generated from the updated blocks but this will not have a significant effect on the accuracy of the analysis or the quality of the optimized result. ## **5.0** **Recommended Actions** Here are a few scenarios and the recommended actions to follow when using the simulation and optimization tools after this update: * **Accessing results from an existing notebook:** No action necessary. You can open a notebook created in a version before the update and access your results in a view-only state. You will notice warning and error messages in the updated blocks. You can ignore these messages if you do not intend to re-run them and generate new results. * **Modifying or reusing a notebook to generate new results:** You must select the Update button for each block in the block's warning panel. We do not auto-update your blocks in notebooks created with older versions. This will update it to the latest version and trigger the block to run. Previous results will be erased, and the new output generated. Optionally, save a copy of the notebook with a different name before running the update to preserve your old results and workflows. * **Composing a new notebook:** No action necessary. All the updated blocks will be available in their latest version by default as you add them to your notebook from the ribbon or the search bar. ## **6.0** **Effective Release** These changes will be effective in nTop version 3.44, expected to be released the week of March 20th. ## **7.0 Stochastic Lattice Application** While the meshing blocks described in section 2.0 are utilized primarily for simulation applications, a few are also used to generate seed points for stochastic lattice structure generation, specifically the Remesh Surface and the Volume Mesh block. The mesh update described in the article will impact these seed points and the lattice structures generated with these blocks. In addition to this, if you opted in for Toolkits during the installation process, the following toolkit blocks related to latticing, which are composed of the updated meshing blocks, will also be updated: | **Block Name** | **Toolkit** | **Section** | **Function** | | - | - | - | - | | Infill Tet Lattice | Architected Materials | Latticing | Create a tetrahedral lattice from the Implicit body. | | Tet Lattice from CAD Body | Architected Materials | Latticing | Create a tetrahedral lattice from the CAD body. | | Surface Lattice from CAD Body | Architected Materials | Latticing | Create a conformal surface lattice from the CAD face. | | Simple Remesh Body | Architected Materials | Utilities | Remesh an Implicit body with a simple set of parameters. | | Remesh CAD Face | Architected Materials | Utilities | Remesh a CAD face with a simple set of parameters. | Here is an example of a component infilled with a lattice using the Infill Tet Lattice toolkit block. This block calls the Remesh Surface and Volume Mesh blocks internally. The mesh created from these blocks will be different, and thus the lattice result is changed: > > > > > > > > >
    > ![An example of the Infill Tet Lattice block in nTop 3.42.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/5qBd-wx3zmT9nXccDBf353Uxr60NSPrLjxfODnJ8Y097KQcWKy6lG3pvcQy_gSZ5ckgGo96-RA3HLSxIgrbx6Yzm07d4SGDSLb80ZTkavfvh4bEqP4r11MWph0o9AIJfUSnhjufLhGHzp7i-DLqkzd.png) > > ![An example of the Infill Tet Lattice block in nTop 3.44.](https://files.learn.ntop.com/help-articles/backwards-compatibility-notices/LnajacE_N7p8aoYkm_y17ro_1ohaJ7L_kNo7ABwRe46zZkuGFJvLgzN60M-ceD8TJcw5XPxDFqDs34CmZyAUkA_evQBFkojUgg2vu94gJpphrOINzzdE6dkavbNGhgeMsVxSJUkTt8JBr-YLGMtioc.png) >
    | **Version** | **Beams Count** | **Vertex Count** | | - | - | - | | 3.42 (image on left) | 105474 | 84106 | | 3.44 (image on right) | 103703 | 81022 | The **Recommended Actions (Section 5.0)** and the **Effective Release Date (Section 6.0)** remain the same for the blocks and workflows described in this section. ## Keywords: *meshing updates breaking changes 3.44* # FDM Fixture Generator Video Walkthrough Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/fdm-fixture-generator-video-walkthrough ## Objective: This tutorial explains how to use the \*\***FDM Fixture Generator**.\*\*nTop developed this workflow with Stratasys to help engineers design and manufacture custom fixtures quickly and efficiently. After watching this tutorial video, you will know how to: * Rapidly create fixtures optimized for FDM. * Configure the FDM Fixture Generator to meet your requirements. * Capture and repeat your unique fixture design process. Let's get started: If you still have questions, our [support team](https://support.ntopology.com/hc/en-us/requests/new) will gladly help you. Thanks for watching! ## Example file: * [Stratasys FDM Fixture Generator Tutorial Files](https://ntop.box.com/s/g0zt90yha6c3vzluxx4g8zobhwp0sdz9) ## Keywords: *tutorial stratasys jigs fixtures generator jig* # How to build processing fixtures with GrabCAD Print Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/how-to-build-processing-fixtures-with-grabcad-print This tutorial explains how to process the output from the **FDM Fixture Generator** with \*\*GrabCAD Print.\*\*nTop developed this workflow in collaboration with Stratasys to help engineers design and manufacture custom fixtures quickly and efficiently. After watching this tutorial video, you will know how to: * Open the fixture file with GrabCAD Print. * Apply the appropriate build parameters. * Export the build to a 3D Printer. This tutorial also demonstrates a new workflow using the **Fractal Infill** option **.** Let's get started. And there you go! Now, you can transfer your completed file from nTop to GrabCAD Print and build the part using your 3D Printer. If you still have questions, our [support team](https://support.ntopology.com/hc/en-us/requests/new) will gladly help you. Thanks for watching! ## Keywords: *cad tutorial stratasys processing fixture generator fdm grabcad 3d print jig grab* # How to create contoured standoffs for jigs and fixtures. Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/how-to-create-contoured-standoffs-for-jigs-and-fixtures Quickly creating fixtures for assembly, machining, and inspection purposes is an everyday use of FDM 3D printing, but complex part geometry can get in the way and make this time-consuming. This tutorial video explains how to create a conformal fixture with contoured standoffs that ensure your part stays in place. After watching, you will know how to: * Quickly create a custom fixture for CMM inspection from complex, organic geometry. * Create contoured standoffs to accurately and predictably hold a part for inspection purposes. * Importing a list of points rapidly defines where a part should be held. Let's get started. And there you go! Now, you can use nTop to create 3D-printed fixtures with contoured standoffs to hold complex geometry accurately. If you still have questions, our [support team](https://support.ntopology.com/hc/en-us/requests/new) will gladly help you. Thanks for watching! ## Download the Example file: * [Contoured Standoffs Tutorial Files.](https://ntopology.box.com/s/yg24kp6tb5cq7i1b3lfb9u5bopq754k5) ## Keywords: *create stratasys 3d printing print fixture jigs fixtures generator fdm standoffs 3d contour* # How to create mounting features on 3D printed fixtures for assembly Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/how-to-create-mounting-features-on-3d-printed-fixtures-for-assembly Designing fixtures to support the assembly of products is a task that often takes longer than it should. As part complexity increases, the time needed to design and fabricate these fixtures multiplies. This tutorial video explains how to rapidly design complete fixtures with configurable mounting features in nTop Platform. After watching this video, you will know how to: * Create mounting features on a fixture to properly hold it in place * Control the size, position, and type of the mounting fixture * Automatically design a complete fixture with mounting features & custom standoffs Let's get started. If you still have questions, our [support team](https://support.ntopology.com/hc/en-us/requests/new) would be happy to help you. Thanks for watching! ## Download the Example file: * [Mounting Features Tutorial Files.](https://ntopology.box.com/s/izbwd8rgp5hug73w64zpxut3keyyxste) ## Keywords: *stratasys 3d printing features fixtures generator fdm mounting assembly* # How to use the FDM Fixture Generator Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/how-to-use-the-fdm-fixture-generator ## Objective: This tutorial explains how to use the Stratasys FDM Fixture Generator. nTop developed this workflow in collaboration with Stratasys to help engineers design and manufacture custom fixtures quickly and efficiently. After reading this walkthrough, you will know how to: * Import geometry into the FDM Fixture Generator. * Create and modify manufacturing-ready fixtures. * Export the geometry to 3D printing formats. Before starting this tutorial, [download the example files](https://ntop.box.com/s/g0zt90yha6c3vzluxx4g8zobhwp0sdz9) and open *Stratasys FDM Fixture Generator.ntop*. Note that this workflow is predefined. You will perform the following steps using the Notebook on the left side of the screen. Basic Workflow Overview![overview1.PNG](https://files.learn.ntop.com/help-articles/fdm-fixture-generator/360098406294.png) Optional Advanced Capabilities![advanced.PNG](https://files.learn.ntop.com/help-articles/fdm-fixture-generator/360100657493.png) ## Procedure: **1. Import the design to be fixtured.** * * Click the Folder on the **CAD Part** or **Mesh Part** block and pick the design you want to import. In the example, *bracket.stl* is already selected. * If working with CAD Parts, we suggest using Parasolid (x\_t). * If working with Mesh Parts, make sure to choose the correct units. * Enter the **Part Orientation** to specify the part removal direction. **2. Create a fixture from the Imported geometry.** * * Drag your CAD Part or Mesh Part into the **Default Conformal Fixture** block's Part property and allow the fixture to generate. * [Visit this guide for a more extensive explanation of the Default Conformal Fixture block.](https://support.ntop.com/hc/en-us/articles/360058869733) **3. Generate the mesh and export it to one of the available 3D Printing formats.** * * Drag **Default Conformal Fixture** into the **Mesh Fixture** block. * We recommend a Feature Size of 1 mm. Smaller values will improve accuracy but may significantly increase processing time and computational requirements. * Drag the **Mesh Fixture** into the **Export Mesh** block and specify a location and file name for the output. ![ezgif.com-gif-maker\_\_1\_.gif](https://files.learn.ntop.com/help-articles/fdm-fixture-generator/360100658573.png) And there you go! If you've followed the instructions in this walkthrough, you should now be ready to open your file with GrabCAD Print and prepare the geometry for FDM printing. Open the file *Stratasys FDM Fixture Generator Tool.ntop* to work on your designs. If you still have questions, our [support team](https://support.ntopology.com/hc/en-us/requests/new) will gladly help you. ## Example file: * [Stratasys FDM Fixture Generator example files.](https://ntop.box.com/s/g0zt90yha6c3vzluxx4g8zobhwp0sdz9) ## Keywords: *tutorial stratasys 3d printing fixture generator fdm* # Masking Module Overview Tutorial Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/masking-module-overview-tutorial ## Summary This tutorial explains how to use the Stratasys and nTop Masking Module. This module is the 2nd set of tools developed in the FDM Fixture Generator and helps engineers design masks for things like protection in manufacturing processes or guides in assembly procedures. After watching this tutorial video, you will know how to: * Quickly create plugs, masks, and enclosures optimized for FDM printing. * Configure the Masking Module tools to meet your specific requirements. * Export an STL or CAD part for downstream use. Let's get started: If you still have questions, the [support team](https://support.ntopology.com/hc/en-us/requests/new) would gladly help you. Thanks for watching! ## Download the Example file: * [Example File.](https://downloads.ntopweb.com/misc/Stratasys%20FDM%20Fixture%20Generator.zip) ## Keywords: *tutorial stratasys fixture generator fdm masking* # Masking Module Surface Enclosure Tutorial Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/masking-module-surface-enclosure-tutorial ## Summary This tutorial explains how to use the Surface Enclosure functionality of the Stratasys and nTop Masking Module. This module is the 2nd set of tools developed in the FDM Fixture Generator and helps engineers design masks for things like protection in manufacturing processes or guides in assembly procedures. After watching this tutorial video, you will know how to: * Quickly create surface enclosures optimized for FDM printing. * Configure the geometry to meet your specific requirements. * Choose the suitable parameters for your application. Let's get started. If you still have questions, the [support team](https://support.ntopology.com/hc/en-us/requests/new) will gladly help you. Thanks for watching! ## Download the Example file: * [Example File.](https://downloads.ntopweb.com/misc/Stratasys%20FDM%20Fixture%20Generator.zip) ## Keywords: *tutorial stratasys fixture generator fdm masking module* # Masking Module Surface Mask Tutorial Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/masking-module-surface-mask-tutorial ## Summary This tutorial explains how to use the Surface Mask functionality of the Stratasys and nTop Masking Module. This module is the 2nd set of tools developed in the FDM Fixture Generator and helps engineers design masks for things like protection in manufacturing processes or guides in assembly procedures. After watching this tutorial video, you will know how to: * Quickly create surface maskings optimized for FDM printing. * Configure the geometry to meet your specific requirements. * Choose the suitable parameters for your application. Let's get started. If you still have questions, the [support team](https://support.ntopology.com/hc/en-us/requests/new) will gladly help you. Thanks for watching! ## Download the Example file: * [Example File.](https://downloads.ntopweb.com/misc/Stratasys%20FDM%20Fixture%20Generator.zip) ## Keywords: *tutorial stratasys fixture generator fdm masking module* # Masking Module Surface Plug Tutorial Source: https://docs.ntop.com/help-articles/knowledge-base/fdm-fixture-generator/masking-module-surface-plug-tutorial ## Summary This tutorial explains how to use the Surface Plug functionality of the Stratasys and nTop Masking Module. This module is the 2nd set of tools developed in the FDM Fixture Generator and helps engineers design masks for things like protection in manufacturing processes or guides in assembly procedures. After watching this tutorial video, you will know how to: * Quickly create surface plugs optimized for FDM printing. * Configure the geometry to meet your specific requirements. * Choose the suitable parameters for your application. Let's get started. If you still have questions, the [support team](https://support.ntopology.com/hc/en-us/requests/new) would gladly help you. Thanks for watching! ## Download the Example file: * [Example File.](https://downloads.ntopweb.com/misc/Stratasys%20FDM%20Fixture%20Generator.zip) ## Keywords: *tutorial stratasys fixture generator fdm masking module* # Can I see some validations in nTop Fluids for canonical problems? Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/can-i-see-some-validations-in-ntop-fluids-for-canonical-problems The accuracy and reliability of **nTop Fluids** have been rigorously validated through comprehensive benchmarking studies comparing our **Lattice Boltzmann Method (LBM)** solver against trusted industry-leading CFD solutions. Our validation study examined five critical test cases spanning external aerodynamics, internal flows, and biomedical applications. Validated Across Multiple Applications: From flow over spheres at various Reynolds numbers to high-lift airfoil analysis, nTop Fluids consistently matched or exceeded the accuracy of established CFD tools. Drag coefficient calculations showed excellent agreement with ANSYS Fluent and standard correlations, with errors of less than two percent across four orders of magnitude in Reynolds number testing. Exceptional Performance in Complex Flows: Testing on challenging cases like the Volvo flame holder and FDA nozzle benchmark revealed nTop's ability to accurately capture transitional flow dynamics, vortex shedding, and recirculation zones. In the FDA nozzle study, nTop showed excellent agreement with experimental Particle Image Velocimetry (PIV) data, particularly excelling in throat region velocity predictions where traditional solvers struggled to achieve 95% confidence intervals. These validation studies confirm that nTop Fluids delivers the accuracy engineers demand while providing the unprecedented speed advantages of a GPU-accelerated LBM solver. To learn more about the comparison benchmark, download the whitepaper. ## Whitepaper: [Whitepaper Link](https://49037331.fs1.hubspotusercontent-na1.net/hubfs/49037331/eBooks%20and%20Guides%20-%20Approved%20Assets/Whitepaper%20-%20nTop%20Fluids.pdf) 1. Turbulent wake flow structures colored by the velocity magnitude *(Left: nTop Fluids and Right: Ansys Fluent GPU FVM)* ![A comparison of turbulent wake flow structures between nTop Fluids on the left, and Ansys Fluent GPU FVM on the right](https://files.learn.ntop.com/help-articles/fluids/50598745207827.png) 2. Instantaneous velocity in the sudden expansion region ![A comparison of instantaneous velocity in a sudden expansion region between nTop Fluids on the top, and Ansys Fluent GPU FVM on the bottom](https://files.learn.ntop.com/help-articles/fluids/50598745244179.png) 3. Isosurfaces of the Q-criterion colored by the velocity magnitude *(Left: nTop Fluids and Right: Ansys Fluent GPU FVM)* ![A comparison of isosurfaces of the Q-criterion colored by the velocity magnitude between nTop Fluids on the left, and Ansys Fluent GPU FVM on the right](https://files.learn.ntop.com/help-articles/fluids/50598760520595.png) 4. Depiction of the turbulent wake with vortex shedding using contours of the velocity magnitude. *(Left: nTop Fluids and Right: Ansys Fluent GPU FVM)* ![A comparison of turbulent wake with vortex shedding using contours of the velocity magnitude between nTop Fluids on the left, and Ansys Fluent GPU FVM on the right](https://files.learn.ntop.com/help-articles/fluids/50598745418643.png) ## Keywords: *ntop fluids validation canonical problems comparison* # How to run a Conjugate Heat Transfer (CHT) analysis Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/how-to-run-a-conjugate-heat-transfer-cht-analysis ## **Objective:** Learn how to set up and run a Conjugate Heat Transfer (CHT) analysis in nTop. This feature extends the standard Flow Analysis by coupling fluid flow with solid heat conduction. In this guide, we will use a Heat Sink example to demonstrate how to simulate cooling performance by analyzing the interaction between an airflow channel and a solid aluminum heat sink. ## **Applies to:** * nTop 5.38 or later (requires nTop Fluids capabilities). ## **Procedure:** **1. Prepare Your Geometry:** Before starting, ensure you have implicit bodies defined for both your fluid and solid regions. * **Solid Geometry (Heat Sink):** The physical parts that conduct heat, such as the heat sink base and fins. * **Fluid Geometry (Air Channel):** The negative space or volume surrounding the heat sink where the air flows. ![This images shows an example of Heat Sink for a Solid Geometry and the Domain around it as Fluid Geometry](https://files.learn.ntop.com/help-articles/fluids/50598721924115.png) **2. Set Up the Virtual Model:** We need to add a **Simulation Model** block to act as the container for your simulation setup. You will use its "Virtual Model" overload, which is designed for LBM-based simulations that do not require traditional body-fitted meshing. * **Add the Fluid Domain (Air):** * Add a **Fluid Domain** block to your Virtual Model list. * Input your **Fluid Domain** implicit body as the Body input (the air channel). * Define the **Fluid Attribute** using the **Air** block (or an **Isotropic Material:** **Isotropic Fluid Property** (Kinematic Viscosity) and **Isotropic Thermal Property** (Conductivity and Specific Heat). * **Add the Solid Domain (Heat Sink):** * Add a **Solid Domain** block to the same list. * Input your **Solid Geometry** (the heat sink body). * Define the **Solid Attribute** using an **Isotropic Material** (e.g., Aluminum) that includes **Isotropic Thermal Property** values. ![Simulation Model setup for having two Domains Solid and Fluid](https://files.learn.ntop.com/help-articles/fluids/50598721942803.png) > [!NOTE] > > *Note: Both materials must have thermal properties defined to enable the CHT solver.* **3. Define Boundary Conditions:** Input a list of boundary conditions into the **Flow Analysis** block. For CHT, you need to define both flow and thermal conditions on the relevant CAD faces or boundaries. > [!NOTE] > > *Note: You need at least one Temperature Restraint to enable CHT.* * **Flow Conditions:** * **Inlet:** Add a **Velocity** boundary (e.g., 1 m/s) to the face where air enters the channel. * **Outlet:** Add a **Pressure** boundary (e.g., 0 Pa) to the face where air exits. * **Thermal Conditions:** * **Inlet Temperature:** Add a **Temperature** boundary to the inlet face (e.g., 298 K or 25°C) to define the incoming air temperature. * **Heat Source:** Add a **Surface Heat Flux** boundary to the bottom face of the heat sink base. This simulates the heat load from a chip or electronic component (e.g., 2000 W/m²). ![Boundary Condition Setup that has Velocity Inlet, Pressure Outlet, Temperature Inlet and Surface Heat Flux for Heat Source](https://files.learn.ntop.com/help-articles/fluids/50598706699283.png) > [!NOTE] > > *Note: nTop Fluids automatically handles the heat transfer interface between the fluid and solid domains defined in your Virtual Model. Any wall or boundary not explicitly assigned a thermal boundary condition is treated as having a zero-temperature gradient. This means the solver assumes these surfaces are perfectly insulated, and no heat is conducted across them.* **4. Configure the Flow Analysis Block** * **Model:** Input the **Simulation Model** containing both the Air and Heat Sink domains. * **Boundary Conditions:** Input the list of flow and thermal boundaries created in Step 3. * **Cell Size:** Define the resolution of the Cartesian grid (e.g., 5mm). ![Flow Analysis block with Boundary Conditions that include both Flow and Thermal BCs](https://files.learn.ntop.com/help-articles/fluids/50598706743315.png) > [!TIP] > > *Tip: Use at least 3 cells to resolve the smallest flow features (channels/gaps) and at least 2 cells across solid structures for accurate quantitative results.* **5. Run the Simulation:** Run the **Flow Analysis** block. The solver will automatically couple the fluid and solid equations, calculating how heat dissipates from the source, conducts through the fins. ![Streamlines from Flow Analysis block in the Display Mode to show Temperature Values](https://files.learn.ntop.com/help-articles/fluids/50598722036627.png) **6. Visualize Results:** Once the analysis is complete, you can inspect the thermal performance. * Temperature Fields: Switch the HUD variable to Temperature time-averaged to view the heat distribution on the solid fins and in the surrounding air. * Display Mode to Streamlines: Visualize the airflow path and color the streamlines by Temperature to see where the air picks up heat. * Surface Plot: Use the temperature time-averaged field to plot colour onto the implicit body to visualise the values and view them in Section Cut (X) mode. ![This image shows an example cut of Surface Plot block with temperature field values](https://files.learn.ntop.com/help-articles/fluids/50598706834067.png) And that's it! You've successfully simulated the cooling performance of a heat sink using CHT. **Are you still having issues?** Contact the support team, and we'll be happy to help! ## **Download the Example file:** [Conjugate Heat Transfer Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Fluids/cht.ntop) ## **More on this topic:** * [How to run a flow analysis](/help-articles/knowledge-base/fluids/how-to-run-a-flow-analysis) * [How to use a CAD Face in a boundary condition](/help-articles/knowledge-base/structures/how-to-use-a-cad-face-in-a-boundary-condition) ## Keywords: *Simulation thermal management nTop Fluids Conjugate Heat Transfer Flow Analysis CHT Electronic Cooling* # How to run a flow analysis Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/how-to-run-a-flow-analysis ## Summary: Ready to dive into fluid simulation with nTop? Learn how to perform a fluid analysis. ## Applies to: * nTop 5.23 or later, as this is when nTop Fluids was introduced. ## Procedure: Before we start, please ensure you have generated the Fluid Geometry. * Fluid Geometry: Have an implicit body that defines your internal fluid domain. * For example, this could be a manifold's negative space, the heat exchanger's internal channels, or any other part through which fluid will flow. >
    **Pipes** **Manifolds** **Cold plates**
    ![Pipe geometry that can be used for an nTop Fluids Flow Analysis](https://files.learn.ntop.com/help-articles/fluids/41462581217683.png) ![Manifold geometry that can be used for an nTop Fluids Flow Analysis](https://files.learn.ntop.com/help-articles/fluids/41462581226003.png) ![Cold plate geometry that can be used for an nTop Fluids Flow Analysis](https://files.learn.ntop.com/help-articles/fluids/41462609513875.png)
    1. Review the Fluid Geometry. For this example, we are starting with CAD Geometry, but you can also create your fluid geometry using Modeling blocks in nTop. ![CAD geometry that has been imported into nTop](https://files.learn.ntop.com/help-articles/fluids/41627215330323.png) 2. Add a **Flow Analysis** block ![The Flow Analysis block that is used to run fluid simulations in nTop](https://files.learn.ntop.com/help-articles/fluids/41627253914131.png) 2. We need to add a **Simulation Model** (Virtual Model overload) as the Model input of the Flow Analysis block. You'll use its "Virtual Model" overload for flow analysis. A Virtual Model is designed for simulations that don't require traditional body-fitted meshing in nTop, like LBM-based CFD. It acts as a container for your simulation setup. ![An example setup of a Simulation Model used to run a Flow Analysis](https://files.learn.ntop.com/help-articles/fluids/41627253915027.png) * * Add a **Fluid Domain**: This block defines the region where the fluid flow will be simulated. You'll input your implicit body representing the fluid volume here. * Add a **Fluid Attribute**: This block assigns material properties to your Fluid Domain. You'll specify the type of fluid using the **Isotopic Fluid Property** block (e.g., Water, Air) and its relevant characteristics (Density, Kinetic Viscosity). **Water** and **Air** blocks are directly available for use. > [!NOTE] > > *Note: These blocks will differ from traditional Structures setup in nTop as they are tailored for methods like LBM, streamlining the setup for complex implicit geometries.* 3. Once we have added the Domain, we need to move the input of the Flow Analysis block's Boundary Conditions ([How to use a CAD Face in a boundary condition](/help-articles/knowledge-base/structures/how-to-use-a-cad-face-in-a-boundary-condition)). For our example, we will use two **Velocity** Inlets and one **Pressure** Outlet. > [!NOTE] > > *Note: To run **Flow Analysis**, you need at least one pressure and one velocity boundary condition, and outlets need to have the same pressure value.* **Every remaining boundary not defined as a Velocity or Pressure boundary is set to a no-slip boundary condition.** ![A diagram showing how boundary conditions are applied to pipe geometry for a Flow Analysis](https://files.learn.ntop.com/help-articles/fluids/41627215336723.png) | **First Inlet (Velocity)** 1. Drag in a **Velocity** block 2. Switch to the CAD overload and then select the Inlet Face 1 3. Enter the Velocity Vector value (0,10,0) | **Second Inlet (Velocity)** 1. Drag in a **Velocity** block 2. Switch to the CAD overload and then select the Inlet Face 2 3. Enter the Velocity Vector value (10,0,0) | **Outlet (Pressure)** 1. Drag in a **Pressure** block 2. Switch to the CAD overload and then select the Outlet Face 3. Enter the Magnitude of 0 Pa. | | - | - | - | ![An example setup of a Flow Analysis including boundary conditions and the Simulation Model](https://files.learn.ntop.com/help-articles/fluids/41627215338387.png) 4. The last input of the **Flow Analysis** block is Cell Size. This is the size of the cells used to create a Cartesian grid across your domain. For this example, we can use a value of 5mm. > [!TIP] > > **Tips on Cell Size:** * The flow analysis uses a uniform Cartesian mesh, defined by a single parameter: Cell Size. * For quantitative results, use at least seven cells to resolve the smallest flow diameter, gap, or hole; for turbulent boundary layers, 20+ cells are recommended. * At least three cells should resolve the smallest flow features for qualitative results. Smallest Flow Feature ![A diagram showing the smallest acceptable cell size for a fluid when running a Flow Analysis](https://files.learn.ntop.com/help-articles/fluids/41627215339795.png) * Solid structures should be resolved with at least two cells. ![A diagram showing the smallest acceptable cell size for a solid body when running a Flow Analysi](https://files.learn.ntop.com/help-articles/fluids/41627253920531.png) * Memory estimation: Ten million cells require approximately one GB of dedicated GPU memory. The following calculation provides a conservative estimate of the required GPU memory (in GB) ![memory\_estimation.png](https://files.learn.ntop.com/help-articles/fluids/50321603109267.png) 5. While the **Flow Analysis** is running, you can see the progress updated in the Bottom Panel (Ctrl +3) ![The log panel in nTop displaying each calculation step of the Flow Analysis process](https://files.learn.ntop.com/help-articles/fluids/41627215343507.png) 7. Once the Flow Analysis is completed, we can review the results. Isolate the **Flow Analysis** block to visualize the results. ![Visualized results of an example Flow Analysis through a pipe](https://files.learn.ntop.com/help-articles/fluids/41627253922323.png) When you toggle the Pressure option on the HUD, you can switch between different available results such as Velocity and Pressure. The default Display Mode is Domain, but you can switch it to visualize Streamlines in the Display tab of the Right Panel. ![Flow analysis results example with blue number bubbles to indicate how to change the display settings](https://files.learn.ntop.com/help-articles/fluids/41627215344915.png) ## Visualized results of an example flow analysis with the display set to Streamlines **Streamline Settings:** Seed Count: This input allows you to control the number of seed points. Increase the number for a denser, streamlined plot. Specify Seed: When you check this input, you can place a Sphere with Center \[mm] and Radius \[mm] to specify the region where you want to select the seed points. **Flow Analysis Results on Boundary** We have a **Flow Analysis Results on Boundary**, which allows you to calculate the average value of the Flow Analysis results, such as Velocity and Pressure, on the selected Boundary. Like other analysis blocks in nTop, **Flow Analysis** block will have access to all the underlying fields from which you can calculate values. ![An example of how to use the Flow Analysis Results on Boundary block using the Flow Analysis results ](https://files.learn.ntop.com/help-articles/fluids/41627215346835.png) That's it: you have completed your flow analysis. ## Attachment: * [Flow Analysis](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Fluids/flow_analysis.ntop) ## Keywords: *analysis fluid flow cfd document fluids* # How to run an aircraft flow analysis Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/how-to-run-an-aircraft-flow-analysis ### **Objective** This article explains the process for setting up and running a GPU-accelerated Computational Fluid Dynamics (CFD) simulation using the **Aircraft Flow Analysis** block to obtain aerodynamic performance data, including pressure, velocity fields, and surface forces. ### **Applies to:** * Calculating lift, drag, and moments on wings, fuselage sections, or complete aircraft assemblies. ### **Procedure:** ***System Requirements:** Requires an **NVIDIA GPU** for flow analysis.* > [!NOTE] > > *Note: This capability is currently only applicable to subsonic flows (speeds up to Mach 0.7).* 1. **Prepare and Orient the Geometry:** Ensure your aircraft geometry is represented as an **Implicit Body** and is correctly oriented: * Flow direction must be aligned with the positive **X-axis**. * Starboard/right wing direction must be aligned with the **Y-axis**. * Lift direction must be aligned with the **Z-axis**. ![](https://files.learn.ntop.com/help-articles/fluids/50598724321939.png) 2. Add the **Aircraft Flow Analysis** Block: Insert the block from the Fluids > Analysis section of the ribbon. * Drag and drop your Implicit Body to the **Aircraft Body** input. * **Define Flow Parameters:** Input the required freestream conditions and cell size: 1. Set the **Mach number** (required). 2. Set the **Temperature** (default is 288.15 K) and **Pressure** (default is 101325 Pa). 3. Input the desired **Angle of Attack** (in degrees). 4. Define the **Cell Size**. ![](https://files.learn.ntop.com/help-articles/fluids/50598742743571.png) > [!NOTE] > > *Note: Smaller cell sizes increase fidelity but require significantly more computation time.* 3. **Analyze Results:** Run the block. The simulation will run until it reaches a steady state and output a **CFD Analysis Result**, which you can use for post-processing, visualization, and extracting force data. * **Check Boundaries:** Review the boundary conditions set by the block in the properties panel to confirm the velocity inlet and pressure outlet are correct. * **View Streamlines:** To visualize the flow field, select the result in the notebook and update its Display Mode to Streamlines in the View Settings. ![](https://files.learn.ntop.com/help-articles/fluids/50598742787603.png) 4. **Extract Near-Body Data (Advanced Post-Processing):** To extract data points from a specific area of the fluid domain: * **Find Region ID:** Select the **Aircraft Flow Analysis** block and switch the **Heads-Up Display (HUD)** to **Cell Region** to visualize and determine the identifier for the region you want to analyze (e.g., region **3** is typically the area near the aircraft body). ![](https://files.learn.ntop.com/help-articles/fluids/50598724454675.png) * **Filter Points:** Add the **Filter Cell Region** block. Input the **CFD Analysis Result** and set the **Region** ID (e.g., **3**) to generate a list of points around the aircraft body. ![](https://files.learn.ntop.com/help-articles/fluids/50598724485779.png) * **Evaluate Data:** Use the output **Point List** along with the **Evaluate Field** block for detailed downstream analysis of pressure or velocity near the surface. ![](https://files.learn.ntop.com/help-articles/fluids/50598742852755.png) And that's it! You've successfully run an **Aircraft Flow Analysis** to calculate the aerodynamic forces on your design. Are you still having issues? Contact the **support team**, and we'll be happy to help! ### ### **Download the Example file:** [Aircraft Flow Analysis Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Fluids/aircraft_flow_analysis.ntop) ## Keywords: *analysis wing aircraft aero* # nTop CFD and Simulation Updates Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/ntop-cfd-and-simulation-updates ## Table of Contents: ### [1.0 Why is this change happening?](#h-01jd06twjcrkq7xwy7a2a50n30) ### [2.0 Key concepts and principles](#h-01jqscwxgcqwx04pzs84zp242k) ### [3.0 What you'll notice first](#h-01jd06twjc5ras0jhyb45fr172) ### [4.0 Changes to boundary conditions](#h-01jd06twjcwq40f5dzjcerqzyv) ### [5.0 Changes to FE Point](#h-01jd06twjdcna80e142rcpbhmp) ### [6.0 New blocks and types for CFD](#h-01jd06twjdxwdpb0kwfqt8qfxq) ### [7.0 How to update blocks that did not automatically update](#01jqsdvwgjgkxyt0bmrp62w2nj) ### [8.0 Recovery results from previous versions](#01jqsdwv9tsr4vxvt8j3gr58zr) ### [9.0 What's next](#01jqvb2j2ea3645np4h443v5kr) ### [Appendix: Summary of block and type changes](#01jqsdym7507czb49t70wp63nq) ### **1.0 Why is this change happening?** In nTop 5.23, the simulation workflow has been expanded to support a growing range of Multiphysics simulation capabilities in nTop, including the recent addition of computational fluid dynamics (CFD). This update ensures a consistent setup and execution experience across different physics types. Unlike the existing structural analyses that rely on body-fitted volume meshes, the new CFD technology operates directly on implicit bodies without body-fitted meshes. Looking ahead, additional “meshless” simulation methods may also be introduced. To prepare for this, the simulation blocks and types have been updated to support direct simulation on implicit geometry while maintaining compatibility with existing mesh- and CAD-based workflows. Existing nTop files will continue to run as expected. Most blocks will update automatically without affecting notebook behavior. Other blocks with new behavior have been versioned to ensure compatibility. When opening a file from a previous version, the notebook will retain the older block versions, which can be updated when convenient. ### **2.0 Key concepts and principles** Understanding the following guiding principles behind the new block design will make the transition smoother. #### There are two model types - FE Model and Virtual Model If you've used nTop before, you're familiar with the **FE Model** type, a container for the simulation domain, material properties, and connections between individual components in the domain. This model type still exists and should be used when the simulation domain will be meshed within nTop. We have introduced a new model type called **Virtual Model** to support simulations that don't require meshing in nTop. Instead of relying on a mesh, the simulation domain in a **Virtual Model** is defined directly by an implicit body, enabling a more flexible and efficient workflow for meshless simulations. A new **Simulation Model** block has been introduced with two overloads - one that outputs an **FE Model** and one that outputs a **Virtual Model**. The **FE Model** overload is used to create a simulation model for all mesh-based structural analyses in nTop: **Static Analysis**, **Thermal Analysis**, **Modal Analysis**, **Buckling Analysis**, **Homogenization Unit Cell**, **Topology Optimization**, and **Field Optimization**. Meanwhile, the **Virtual Model** overload of the **Simulation Model** block is used to create a **Flow Analysis** with the new CFD solver. #### Models are composed of domains A model consists of one or more simulation domains, with connections that define how forces, temperatures, and other physical quantities are transferred between them. Like models, an **FE Domain** denotes a simulation domain that requires a mesh, and a **Virtual Domain** denotes a domain defined by an Implicit Body and does not require meshing in nTop. If you've used nTop before, what was previously called **FE Components** are now Domains. This change reflects the expanded capabilities of our simulation framework—domains can now be mesh-based or implicit-based and represent solid or fluid regions. #### Attributes determine the physics of the domain The physics to be simulated in the domain is determined by the **Attribute** assigned to the domain. **Solid Attributes** are assigned to a **Solid Domain**, and **Fluid Attributes** are assigned to a **Fluid Domain**. Theoretically, a model can include solid and fluid domains, but this is not currently supported. The inputs to the domain attribute then define material properties and kinematic idealizations (e.g., beam and shell simplifications). #### Same boundary conditions, multiple ways to scope them 1. In general, boundary conditions consist of two key elements: The surface or region to which the boundary condition is applied. This is called the scope. 2. The specific parameters of the condition itself, such as pressure or temperature. The same boundary conditions can be applied to either an **FE Domain** or a **Virtual Domain**. However, each boundary condition is overloaded by the method in which the boundary condition is scoped. There are three ways to scope boundary conditions: * by CAD Face - supported on both FE Domains and Virtual Domains * by Body - supported on both FE Domains and Virtual Domains * by Flood Fill - only supported on FE Domains See Section 4 for more details on boundary conditions. ### **3.0 What you'll notice first** You'll first notice that several simulation blocks and types have been renamed. First, the **FE Model** block has been renamed to **Simulation Model**. Moreover, this block has two overloads, one that creates an **FE Model** and one that creates a **Virtual Model**. **FE Model** is used to create a model from meshed sub-domains, whereas the **Virtual Model** creates a model from Implicit Bodies. When opening a nTop file from a previous release, the **FE Model** blocks will be replaced with **Simulation Model** blocks with the **FE Model** overload. Next, the **FE Component** block has been renamed to **Solid Domain**. The **Solid Domain** block is overloaded to accept either an **FE Mesh**, an **Implicit Body**, or a **Point**. A **Fluid Domain** block has also been added to define a domain for fluid simulation. Finally, the “FE” prefix has been dropped on many block and type names to convey that they can be applied to either a mesh or implicit body. A comprehensive list of block and type changes is provided in the Appendix. ### **4.0 Changes to boundary conditions** Before nTop 5.23, boundary conditions could be applied to either a **CAD Face List** or an **FE Boundary**, where an **FE Boundary** was a collection of mesh entities such as nodes, faces, or edges. Starting with nTop 5.23, boundary conditions can be applied to either a **CAD Face List** or a **Boundary** type. **Boundary** is a base class for either an **FE Boundary** or a **Virtual Boundary**, as illustrated in the figure below. ![A diagram showing the new nTop system for boundary conditions](https://files.learn.ntop.com/help-articles/fluids/39938587604883.png) If your model includes a set of CAD Faces that correctly denotes the location of the boundary condition, use the first overload, whether the domain is an **FE Domain** or **Virtual Domain**. If a **CAD Face** is unavailable, use the second overload that accepts the **Boundary** base type. If the domain is an **FE Domain**, use the **FE Boundary by Body** block to scope the location of the boundary condition. These blocks have been available for many releases and are hopefully familiar. Use the **Virtual Boundary by Body** block to define the boundary condition's location for a **Virtual Domain**. This block functions like the **FE Boundary by Body;** however, the entities are selected when the analysis runs. There is no visual feedback before the analysis block runs, so you'll need to verify the boundary location after completing the analysis. The **Virtual Boundary by Body** can also be used with an **FE Domain**. Identifying mesh entities for boundary conditions, but when the analysis begins. This enables boundary conditions to be set once and reused across multiple meshes, making it especially useful for applying the same conditions to multiple FE models. For example, boundary conditions from **Topology Optimization** can be reused in a downstream **Static Analysis** of the final design. A similar pattern exists for scoping body forces to regions. A **Region** base type has been introduced, the parent class for either an **FE Region** or **Virtual Region**. An **FE Region** can be created by **FE Region by Body** and **FE Region by CAD Body** blocks. In contrast, a **Virtual Region** is constructed with the **Virtual Region by Body** block. ![A diagram showing the new nTop system for regions](https://files.learn.ntop.com/help-articles/fluids/39938578319891.png) Before nTop 5.23, the **Boundary by Body** block was used to reuse boundary conditions on multiple FE Models. This block has now been deprecated in favor of the **Virtual Boundary by Body**. In doing so, the selection of mesh entities (Nodes, Edges, and Faces) has been eliminated. nTop will automatically apply the boundary conditions to the appropriate mesh entity depending on the boundary condition type. The following table denotes the mesh entity used for each boundary condition when using the **Virtual Boundary by Body** or **Virtual Regions by Body**. | **Boundary Condition:** | **Operating on the following mesh entities:** | | - | - | | Acceleration Load | cells | | Bearing Force | faces | | Center of Mass Response | cells | | CFD Boundary on FE Mesh (BETA) | nodes | | Convection Boundary Load | faces | | Cyclic Symmetry (BETA) | nodes | | Cylindrical Restraint | nodes | | Demold Constraint | cells | | Displacement Response | nodes | | Displacement Restraint | nodes | | Edge Force | edges | | Export FE Mesh \[Boundary] | nodes | | Export FE Mesh \[Region] | cells | | Export FE Model \[Boundary] | nodes | | Export FE Model \[Region] | cells | | FE Beam Attribute | beams | | FE Shell Attribute | shells | | FE Solid Attribute | cells | | Force | faces | | Heat Generation | cells | | Mass Response | cells | | Max Feature Size Constraint | cells | | Moment of Inertia Response | cells | | Overhang Constraint | faces | | Passive Region Constraint | cells | | Point Force | nodes | | Point Moment | nodes | | Point Restraint | nodes | | Pressure | faces | | Radiation Boundary Load | faces | | Reaction Force Response | nodes | | Remap Constraint | cells | | Rigid Connector (BETA) | nodes | | Rotational Force | cells | | Stress Response | cells | | Structural Bonded Contact | nodes | | Structural Compliance Response | cells | | Surface Force | faces | | Surface Heat Flux | faces | | Temperature Restraint | nodes | | Thermal Bonded Contact | nodes | | Tie Constraint | nodes | | Volume Fraction Response | faces | | Volumetric Heat Generation | faces | ### **5.0 Changes to FE Point** The method for creating and using point mass components in nTop has been updated to enable future features. The current approach for using a point mass and the new version are outlined below: >
    **Before nTop 5.23** **nTop 5.23**
    ![The old FE Component block structure from nTop 5.22 and earlier](https://files.learn.ntop.com/help-articles/fluids/39966928639763.png) ![The Solid Domain block with an FE Point and Point Attribute ](https://files.learn.ntop.com/help-articles/fluids/39966928643603.png) ![The Spring block with two FE Point blocks](https://files.learn.ntop.com/help-articles/fluids/39966921329683.png)
    Similar to using an **FE Mesh** to prescribe a component/domain, we are now introducing the concept of an **FE Point**. The **FE point** creates a six-degree of freedom node that can be included in a simulation analysis and used as more than a point mass. The **FE Point** can be used as a boundary or region to apply acceleration loads and heat flux BCs. The new behavior of the **FE Point** mimics an **FE Mesh**. However, it only contains one node and six possible degrees of freedom. Previously generated workflows and files will automatically update when opened in nTop 5.23, and the results will remain constant. The point itself will become a variable and be used in any/all current locations of the previous point component. ### **6.0. New blocks and types for CFD** With nTop 5.23 comes support for Computational Fluid Dynamics (CFD). With that five new blocks and two types have been added to aid the setup of isothermal fluid flow problems. As more CFD features are added, additional blocks will be released. | **Block Name: Air** | | | - | - | | Location: | Fluids \[Beta] | | Description: | General Purpose Air at NIST (293.15K, 100KPa) | | Output: | Isotropic Material | | **Block Name: Flow Analysis** | | | - | - | | Location: | Fluids \[Beta] | | Description: | Calculates the pressure and velocity on a Virtual Model. The solution uses a Lattice Boltzmann Method. A transient simulation is initiated and continues until the flow reaches a statistically steady state, returning time-averaged pressure and velocity fields. This block requires an NVIDIA GPU. | | Input 1: | The Virtual Model represents the fluid domains to be simulated. | | Input 2: | The Boundary Conditions are to be used for the analysis. At least one Pressure and one Velocity Boundary condition are required. | | Input 3: | The size of the cells used in the analysis. | | Output: | CFD Analysis Result | | **Block Name: Fluid Attribute** | | | - | - | | Location: | Fluids \[Beta] | | Description: | Define material properties as attributes of a fluid. | | Input 1: | The underlying material. | | Output: | Fluid Attribute | | **Block Name: Isotropic Fluid Property** | | | - | - | | Location: | Fluids \[Beta] | | Description: | Defines an Isotropic Fluid Property. | | Input 1: | Kinematic viscosity. | | Output: | Isotropic Fluid Property (Converts to Isotropic Material Property) | | **Block Name: Velocity \[Boundary]** | | | - | - | | Location: | Fluids \[Beta] | | Description: | A boundary condition that specifies a fluid's velocity entering or leaving a Domain. | | Input 1: | The Boundary selected for constant velocity. | | Input 2: | The velocity vector. | | Input 3: | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | | Output: | Velocity (Converts to Boundary Condition) | | **Block Name: Velocity \[CAD Face List]** | | | - | - | | Location: | Fluids \[Beta] | | Description: | A boundary condition that specifies a fluid's velocity entering or leaving a Domain. | | Input 1: | The Boundary selected for constant velocity. | | Input 2: | The velocity vector. | | Input 3: | The reference frame for the components of the Vector. If a Frame is not specified, the components are in the global coordinate system. | | Output: | Velocity (Converts to Boundary Condition) | | **Block Name: Water** | | | - | - | | Location: | Fluids \[Beta] | | Description: | General Purpose Water at NIST (293.15K, 100KPa). | Note: The existing **Pressure** block can now be used in a structural or fluid flow simulation. ### **7.0. How to update blocks that did not automatically update** a. Replace **Boundary by Body** with **Virtual Boundary by Body** b. Replace **Region by Body** with **Virtual Region by Body** ### **8.0. Recovery results from previous versions** a. No results should change ### **9.0. What's Next** nTop 5.23 introduces the first native CFD solution in nTop, representing a significant advancement in simulation capabilities that can be used in your computational models. This initial release focuses on isothermal internal flow simulations, establishing a foundation for future enhancements. Future updates will expand CFD functionality with several key features: * **Conjugate Heat Transfer (CHT)**: The ability to solve heat transfer between solids and fluids, enabling accurate simulations for applications such as heat exchangers and turbine blades. * **External Aerodynamics**: Support for compressible flow and adaptive grid refinement, facilitating the analysis of high-speed external flows, aerodynamic forces, and drag characteristics. * **Turbomachinery Applications**: Enhanced capabilities for moving boundaries and rotating components, essential for high-fidelity simulations of fans, pumps, turbines, and other rotating machinery. These forthcoming features will further advance fluid dynamics simulation within nTop, enabling rapid design and analysis of increasingly complex engineering challenges. ### **Appendix: Summary of block and type changes** #### **Renamed Blocks** | **Old Block Name** | **New Block Name** | | - | - | | Boundary by Body | Virtual Boundary by Body | | FE Component (Mesh) | Solid Domain | | FE Face Boundary | FE Boundary by CAD Face | | FE Lattice Component | FE Lattice Domain | | FE Model | Simulation Model | | FE Solid Attribute | Solid Attribute | | FE Solid Component | FE Solid Domain | | Parametric FE Component | Parametric FE Domain | | Parametric Lattice Component | Parametric Lattice Domain | | Parametric Shell Component | Parametric Shell Domain | | Parametric Shell-Infill Component | Parametric Shell-Infill Domain | | Parametric Voronoi Component | Parametric Voronoi Domain | | Region by Body | Virtual Region by Body | #### **Renamed Types** | **Old Type Name** | **New Type Name** | | - | - | | FE Attribute | Solid Attribute | | FE Body Force | Body Force | | FE Boundary Force | Boundary Force | | FE Connector | Connector | | FE Convection Heat Flux | Convection Heat Flux | | FE Cylindrical Restraint | Cylindrical Restraint | | FE Force | Force | | FE Heat Flux | Heat Flux | | FE Heat Generation | Heat Generation | | FE Model Load | Model Load | | FE Pressure | Pressure | | FE Radiation Heat Flux | Radiation Heat Flux | | FE Remote Force | Remote Force | | FE Remote Restraint | Remote Restraint | | FE Restraint | Restraint | | FE Temperature Restraint | Temperature Restraint | | Parametric FE Component | Parametric FE Domain | #### **New Blocks** | **Block Name** | **Block Description** | | - | - | | FE Point | Creates a six degree of freedom node that can be included in a simulation or optimization. | | Flow Analysis | Calculates the pressure and velocity on a Virtual Model. The solution uses a Lattice Boltzmann Method. A transient simulation is initiated and continues until the flow reaches a statistically steady state, at which point it returns time-averaged pressure and velocity fields. This block requires an NVIDIA GPU. | | Fluid Attribute | Define material properties as attributes of a fluid. | | Fluid Domain | Create a Fluid Domain by assigning a Fluid Attribute to an Implicit Body. | | Isotropic Fluid Property | Defines an Isotropic Fluid Property. | | Solid Domain (Implicit Body overload) | Creates a Solid Domain by assigning Solid Attributes to an Implicit Body. | | Simulation Model (Virtual Domain overload) | Combines a list of Virtual Domains and corresponding Connectors into a Virtual Model. | | Velocity (Boundary Overload) | A boundary condition that specifies a fluid's velocity entering or leaving a Domain. | | Velocity (CAD Face List Overload) | A boundary condition that specifies a fluid's velocity entering or leaving a Domain. | #### **New Types** | **Type Name** | **Type Description** | | - | - | | Boundary | The location of a boundary condition on a Domain. | | FE Point | A six degree-of-freedom node that can be included in a simulation analysis. | | Fluid Attribute | An object with material assignment and fluid properties of selected interior regions (or the entirety) of a fluid domain. | | Isotropic Fluid Property | Properties for an isotropic fluid. | | Region | A select region of a Domain. | | Velocity | A boundary condition that specifies a fluid's velocity entering or leaving a domain. | | Virtual Boundary | An object that defines the location of a boundary condition on a Domain before meshing. | | Virtual Model | An object with information about all the Virtual Domains and the connectivity information between them. | | Virtual Domain | An object with information about a Virtual Domain with corresponding attributes assigned to it. | | Virtual Region | An object that defines a region of a Domain before meshing. | #### **Updated Blocks** | **Deprecated Block** | **Replaced by Block** | | - | - | | Boundary by Body | Virtual Boundary by Body\* | | FE Component (Point Overload) | FE Point + Solid Domain | | Region by Body | Virtual Region by Body\* | \* These blocks will not have an Update button to update the block automatically. They will have to be manually updated to the latest version. # Troubleshooting Common Issues in nTop Fluids Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/troubleshooting-common-issues-in-ntop-fluids This guide provides troubleshooting tips for common problems to help you get your fluid simulations running smoothly. ## 1. General Troubleshooting Steps Before trying to troubleshoot specific issues, please try these general fixes to ensure nTop is running correctly: * Check your nTop and Block Versions: Ensure you use nTop 5.23 or later. If you are working with an older file, some blocks might need updating to their latest versions to be compatible with the new Fluids workflow. Look for the yellow warning icon on blocks indicating a potential update. * Verify Input Geometry: For nTop Fluids, your fluid domain is typically an implicit body. Ensure this body is well-defined, closed (if representing an internal volume), and accurately represents the intended flow path. Issues with the input geometry can lead to unexpected solver behavior. * Review Log Messages: The nTop log often provides valuable error messages or warnings. Always check the log output if a block fails or the results look incorrect. ## 2. Common Setup Issues These are potential things to review when setting up your simulation: * Incorrect boundary condition (BC): * Double-check the Body input for your Virtual Boundary by Body blocks. Ensure the body or plane used for scoping accurately defines the inlet, outlet, or wall surface. Verify that the BC type (e.g., Velocity, Pressure) and its specified values (magnitude, direction) are appropriate for your simulation. * Problems with simulation model or fluid domain definition: * Ensure your Fluid Domain block correctly references the implicit body for the fluid and that the Fluid Attribute (with material properties) is correctly assigned to the Fluid Domain. The Fluid Domain should then be input into the Simulation Model. * Material property assignment errors: * Verify that the Fluid Attribute block has a valid fluid material assigned (e.g., Water, or a custom fluid with correct density and viscosity). Ensure units are consistent. * 'fluid property' is a required property * The error occurs when your setup contains a Solid Domain as part of the list of Virtual Domains. You need just the Fluid Domain for Flow Analysis. ## 3. Solver and Performance Issues These are potential things to review while running the analysis: * Simulation taking too long: * The primary factor is often the Cell Size. A very small cell size drastically increases computation. Try a coarser (larger) cell size for initial runs. * Check your GPU VRAM usage; if it's maxed out, you may need to reduce model complexity or increase cell size. * Solver failing to converge (or producing unstable results): * This can be due to an unstable numerical setup. Check if your boundary conditions are physically realistic (e.g., avoid extremely high velocities or pressures that might be unrealistic for the setup). * Ensure your fluid domain is properly defined and doesn't have unintended leaks or disconnections if it's an internal flow. * A very coarse Cell Size relative to small geometric features can sometimes lead to instability. Conversely, an extremely fine mesh with very high velocities also requires careful setup. * GPU-related errors: * Ensure you have the latest stable NVIDIA drivers for your GPU. * Check if your GPU meets the recommended specifications for nTop Fluids. * The simulation might be too large for your GPU's VRAM. Reduce the Cell Size or simplify the model. * Ensure no other applications are heavily consuming GPU resources. ## 4. Interpreting Unexpected Results If your results are not realistic or seem incorrect, please review the following: * Unrealistic velocity or pressure values: * Re-check all your boundary condition values and their units. Ensure the fluid properties are correct. The Cell Size might also be too coarse to capture the physics accurately, or there might be an issue with the geometry definition. * Flow not behaving as expected: * Carefully review your boundary condition locations and types. Ensure inlets are defined as inlets and outlets as outlets. Check the direction vectors for velocity BCs. Verify the integrity of your fluid domain geometry. ## 5. When to Seek Further Support By systematically checking these common areas, you can resolve many issues encountered when using nTop Fluids. If you've worked through these steps and are still facing issues: * Gather Information: Before contacting nTop support, try to isolate the problem. Note the nTop version, your GPU model, driver version, and the specific error messages from the logs. Prepare a simplified version of your nTop file that reproduces the issue. * nTop Support Portal: Visit the official nTop Support portal (support.ntop.com) for more resources, FAQs, and to submit a support ticket. ## Keywords: *analysis boundary trouble results fluid flow gpu ram condition troubleshoot velocity shoot vram* # What are the additional CFD options to work with nTop? Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/what-are-the-additional-cfd-options-to-work-with-ntop ## Objective: Learn about the CFD options possible with nTop ## Solution: There are different pathways for you to export your geometry out of nTop and run CFD. You can choose the path based on your requirements: | | **Integration** | **Solver Technology** | **Best Used For** | | - | - | - | - | | **Tools for Rapid Iteration / Design Exploration** | | | | | **nTop Fluids** | Native | Lattice Boltzmann (LBM) | Internal flow | | **SimScale** | Implicit Interop | Immersed Boundary (IBM) | Conjugate heat transfer | | **Luminary Cloud** | Implicit Interop | RANS (GPU-based) | External aerodynamics | | **Hexagon scSTREAM** | Implicit Interop | Immersed Boundary (IBM) | Electronics cooling | | **Tools for Design Validation** | | | | | **Ansys Fluent** | Mesh-based translation | RANS (CPU/GPU) | Any | | **Siemens Simcenter Star CCM+** | Mesh-based translation | RANS | Any | As of today, these are the available options. This will evolve as we add more capability to nTop Fluids and Implicit Interop. ## Keywords: *export ntop cfd fluids solver options* # What is nTop Fluids? Source: https://docs.ntop.com/help-articles/knowledge-base/fluids/what-is-ntop-fluids nTop Fluids is a new computational fluid dynamics (CFD) toolset integrated directly inside nTop. **Eliminating the meshing and solving bottlenecks** created by traditional tools, nTop Fluids brings CFD into the iterative computational design loop. We have a new nTop Learn course on nTop Fluids, which dives deep into the technology and setup in nTop. ### What solver is used in nTop Fluids? nTop Fluids uses the Lattice Boltzmann Method (LBM), a numerical approach that simulates fluid flow by evolving particle distribution functions. It recovers the Navier-Stokes equations with a mesoscopic model where particle distribution functions propagate and collide on a voxel grid. The method operates directly on implicit geometry definitions without generating body-fitted meshes. * #### [Key Principles](#h-01jt60ynnga6eka4nedvg7nmna) * #### [Advantages](#h-01jv52tjphgkyp2a4hmkcd30p0) * #### [nTop Fluids (LBM) vs Traditional CFD](#01jv7gczmxtcjqgz6vb5rkvpy2) * #### [Common Applications](#h-01jvz31z21kaqbs5cy89pya9rt) ### Key Principles Lattice Boltzmann equation (LBE): ![The Lattice Boltzmann equation that is used to calculate fluid flow](https://files.learn.ntop.com/help-articles/fluids/40839307813011.png "MathEquation,#000000") * f: discrete particle distribution function * c: discrete velocity * x: position * t: time * Ω: collision operator >
    • The discrete distribution function f(x,t) represents the density of fluid particles moving in a discrete velocity direction c at position x and time t (e.g. this means that 20% of the particles are moving to the right, 30% are moving up, 10% are moving diagonally, and so on). 
    • LBE tracks these distribution functions and evolves them over time.
    • The spatial discretization uses a Cartesian grid, where each point consists of a finite set of discrete particle distribution functions arranged according to a lattice velocity set.
    • Lattice velocity set: DdQq, where d is dimensions and q is discrete velocities 
    ![A typical lattice velocity set for fluid simulations](https://files.learn.ntop.com/help-articles/fluids/40839281786259.png) *D3Q19: A typical lattice velocity set for fluid simulations*
    ### Advantages * **Simplicity and Scalability:** LBM, like direct time stepping schemes, introduces artificial compressibility, simplifying the solution process and improving scalability. * **No Poisson Equation:** Unlike traditional methods, LBM does not require solving the Poisson equation, which is computationally expensive due to its non-local nature. * **Highly Parallelizable:** The LBM algorithm is characterized by very simple parallelization and high numerical efficiency, so that time-resolved flow simulations can be carried out significantly faster than with other solution methods. * **Easy Meshing:** Generating Cartesian grids for LBM is much simpler and more automatable, removing the meshing bottleneck of many other approaches. ### nTop Fluids (LBM) vs Traditional CFD | | **Traditional (Navier-Stokes)** | **nTop Fluids (LBM)** | | - | - | - | | **Solver Method** | Complex partial differential equations (PDEs) are computationally expensive. | Linear equations are solved on a lattice set that is far less computationally intensive. | | **Model Representation** | High-density body-fitted mesh that requires manual, time-consuming work by a meshing expert. | Voxel mesh is far easier and less time-consuming to create. | | **Accuracy** | High accuracy for a wide range of problems with documented validation in various publications. | It is a relatively newer methodology and is less validated for some applications. | | **Compute Parallelization** | Most CFD is still run on CPUs. However, CFD solvers are gradually being ported to run on GPUs, with massive improvements to solver speed. These often require additional HPC licenses at a significant cost to the customer. | Simple to parallelize on a GPU solver that is 100 - 1000x faster than traditional CFD solvers running on CPUs. | ### Common Applications * Pressure drop prediction across complex geometries to minimize energy losses and optimize system designs. * Simulation of laminar, turbulent, and transitional flow regimes for comprehensive and accurate flow behavior analysis. * Identification of unequal flow distributions, recirculation zones, and vortex structures to improve flow efficiency and system reliability. * Calculation of maximum flow velocity to detect critical high-speed zones and prevent erosion or mechanical failure. * Detection of blockages and inefficiencies in flow paths to enhance fluid distribution and reduce pressure losses. > > > > > > > > > > >
    > ![An example of fluid flow through a pipe that has a secondary inlet](https://files.learn.ntop.com/help-articles/fluids/41635371042451.png) > > ![Example of fluid flow through a cold plate](https://files.learn.ntop.com/help-articles/fluids/41537864136979.png) > > ![Example fluid flow through a manifold](https://files.learn.ntop.com/help-articles/fluids/41537864137875.png) >
    ## Keywords: *analysis ntop flow cfd fluids lbm* # Security and Data Handling for Government Teams Source: https://docs.ntop.com/help-articles/knowledge-base/government/security-and-data-handling-for-government-teams Government and defense engineering teams rely on nTop for computational design and analysis. The same security foundation and data-handling practices that protect every nTop customer apply to public-sector work. Here's what that looks like. ## Data handling and network requirements nTop is a desktop application. It runs locally and stores all user-generated design files (CAD imports, exports, and models built in nTop) on the user's own computer. Design data is never transferred to nTop's cloud services. A limited set of other data does move between the desktop app and nTop's cloud, depending on license type and user settings: | Data type | Required? | What it includes | Sent to | | - | - | - | - | | License Authentication | Required for cloud-authenticated licenses | User email and encrypted password, product name, session start/end times, device fingerprint ID, device OS, geo-hash based on IP address | app.ntop.com | | Version Data | Required | Current software version (to check for and deliver updates) | updater.ntop.com | | Anonymous Usage Data | Required | Organization name, system information (CPU, GPU, OS, software version, device type/ID), crash reports, feature usage | analytics.ntop.com, crashes.ntop.com | | Personalized Usage Data | Optional | User first name, last name, and email, appended to the required data above, for personalized support and individualized usage reporting | analytics.ntop.com | For this data to transfer, the user needs an active internet connection, and an organization's firewall can't be blocking app.ntop.com, updater.ntop.com, analytics.ntop.com, and crashes.ntop.com. Personalized Usage Data can be turned off during installation or later via File > Settings. IT administrators whose organization needs to disable the required data transfers can reach out to nTop Support directly. ## Data hosting and infrastructure nTop's infrastructure and data are hosted on Google Cloud Platform (GCP), following [GCP's security best practices](https://cloud.google.com/security/best-practices). Infrastructure spans multiple GCP availability zones, so systems keep running if one zone fails. See [GCP regional clusters](https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters) for more. In the event of a catastrophic outage, nTop is designed to support extended offline access without interruption. ## Encryption REST communications use SSL/TLS. Sensitive data such as tokens and credentials is salted and encrypted in our database, and any of that data cached locally (like license information or access tokens) is encrypted at rest. User credentials are salted and encrypted using BCrypt. No nTop staff member can view or decrypt a password once it's created. ## Access control Only authorized nTop staff can access customer data, granted strictly on a need-to-know basis and routinely audited. During support issues, we ask for permission before accessing customer data, except when investigating a security incident or suspected abuse, and even then we access only the minimum information needed to resolve the issue. Employees with administrative access to our GCP instance are required to have two-factor authentication enabled. End users can also enable two-factor authentication when logging into their nTop dashboard at [app.ntop.com](https://app.ntop.com). ## Incident response nTop maintains an Incident Response Policy covering escalation procedures, rapid mitigation, and post-incident review, and all employees are informed of it. ## Personnel security * **Employee vetting.** New hires go through background checks in accordance with local laws, including employment verification and criminal checks for US employees. * **Confidentiality.** Every employee contract includes a confidentiality agreement. * **Training.** All employees complete security awareness training annually. * **Policies.** nTop maintains a comprehensive set of security policies, updated regularly and shared company-wide. ## Physical security nTop's offices use code-based entry and badge-only access to work areas. Server infrastructure is restricted to IT personnel and a small number of key individuals, with badge access logged and hallways/server room under video monitoring. ## Reporting a security issue If you discover a security concern, email us at [security@ntop.com](mailto:security@ntop.com). We treat security correspondence and vulnerability reports as a top priority and work with researchers acting in good faith toward user privacy and data. # Can I have multiple outputs from a single Notebook? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/can-i-have-multiple-outputs-from-a-single-notebook ## Question: Can I have multiple outputs from a single Notebook? ## Applies to: * Custom blocks * nTop Automate ## Answer: Currently, only one Output is supported for each Notebook used as a Custom Block. ## Keywords: *block question custom multiple one output outputs only supported* # Can I scale my model non-uniformly? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/can-i-scale-my-model-non-uniformly ## Question: How do I scale a model by different factors in X, Y, Z? The **Scale Object** block only allows for uniform scaling. How do I scale my part using a Ramp? ## Answer: ## Non-uniformly: Instead of using the **Scale Object** block, use the **Remap Scale Body** block. This block allows you to scale the object differently in each direction. ![The image shows a body that has been scaled non-uniformly using the Remap Scale Body block. This block allows a body to modified in each direction separately.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500000017021.png) This block is also a Toolkit, which is a combination of blocks. If you want to see how it runs, for curiosity's sake, right-click on it and select 'Export Block'. Then, open it back up in nTop to see how it is built. ## With a Ramp: Use the **Remap Field** block. You can read more on using that block here: [Introduction to the Remap Field block](/help-articles/knowledge-base/implicit-modeling/introduction-to-the-remap-field-block) Use this setup for each direction you want to scale in: * **Multiply** (to shrink) or **Divide** (to expand) * Operand A: X, Y, or Z * Operand B: **Ramp** * Out min and Out max are the scale values. ![The example shows how to use the Remap Field block to change a sphere into an egg shape.](https://files.learn.ntop.com/help-articles/implicit-modeling/4551821773331.png) ## Keywords: *block body toolkit scale question remap object uniform non* # Can I split an implicit body along a plane or CAD Face? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/can-i-split-an-implicit-body-along-a-plane-or-cad-face ## Question: Can I split an implicit body along a plane? ## Answer: Yes, to do this: * * Add a **Plane from Normal** or a **Plane** block * You can also use a CAD Face, convert it into an Implicit Body (with no thickness) and use that to cut your Implicit Body. * Add a **Boolean Subtract** block * Set the Primary Body to your Implicit Body * Set the Secondary Body to the Plane To change which side is cut off, flip the direction of the Plane. ## Keywords: *cad face boolean subtract CAD implicit slice body cut question operation split plane along into half* # Can I turn a closed curve into a profile? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/can-i-turn-a-closed-curve-into-a-profile ## Question: Can I turn a closed curve into a profile? ## Applies to: * Implicit modeling * Modeling * nTop 5.20 ## Answer: Yes, you can use the **Profile from Curves** block to create closed profiles from input curves. ![An example of an open profile in nTop. The Profile from Curves block has a warning icon that alerts the user that the profile is open.](https://files.learn.ntop.com/help-articles/implicit-modeling/40340084056339.png) ![An example of a closed profile in nTop. The Profile from Curves block doesn't have a warning icon because the profile is closed.](https://files.learn.ntop.com/help-articles/implicit-modeling/40340084067987.png) A **Profile** is a set of coplanar curves. It has two field properties: the first is the Signed Distance field to the infinite extrusion relative to the profile's plane and the second is the unsigned distance field to the enclosed region. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/40340084070291.png) *Profile field properties, from left to right: distance to extrusion, distance to region.* A **Profile** can also be closed or open. If closed, it can have multiple loops (e.g. several circles inside a rectangle or the disconnected loops of a logo). Open profiles are semi-infinite and can be used in the same blocks as closed profiles. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/40340084070803.png) *Three Profiles, from left to right: closed, closed with multiple loops, and open* ## Keywords: *create question profile curve polygon closed* # Can I turn mass properties into variables? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/can-i-turn-mass-properties-into-variables ## Question: Can I turn mass properties into variables? Like volume or center of gravity? ## Applies to: * Mass Properties block ## Answer: Yes, you can extract the properties chips from the **Mass Properties** block and turn them into variables. To do this, run the block and open up the Properties panel. Drag whichever property chip you need into the Notebook. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/49361350780691.png) ## Keywords: *mesh volume property variable body properties question of frame chip mass prinipal moments center gravity* # Can I use a Ramp in a Shell? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/can-i-use-a-ramp-in-a-shell ## Question: Is it possible to put a Ramp block in a shell block to make the thickness variable? ## Applies to: * Modeling ## Answer: To put a **Ramp** block into the **Shell** block, you need to change the overload to Scalar on the **Ramp** block (using the down arrow by the block name). ![An image of the Shell block with a Ramp block inserted into the Thickness input. The image highlights the overload button of the Ramp block.](https://files.learn.ntop.com/help-articles/implicit-modeling/4411521125139.png) However, now you can't use a Scalar Field as your input. If you want to use a Scalar Field, and still need a variable thickness, try this workflow instead: * * Use an **Offset Body** block * Input a **Ramp** for the distance * **Boolean Subtract** your base object from the Offset result to create a variable shell ![An Offset Body that has a Ramp block applied to its Distance input. This creates a non uniform thickness result.](https://files.learn.ntop.com/help-articles/implicit-modeling/4411539611539.png) ## Keywords: *ramp block field shell question scalar input overload* # How do I move my object? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-do-i-move-my-object ## Question: How do I move or adjust the position of my part? ## Answer: **If you are using a primitive implicit body**: You can move an object by selecting the origin and using the gimble that appears to drag the part to where you want it. Grab on the colored axes to move along just that axis, or, select the two-toned box to move along two axes at once. **Translate Object:** The **Translate Object** block can be used to move a body by a defined vector. This block works with CAD Bodies, Meshes, Lattices, Implicits, etc. **Orient Object:** The **Orient Object** block can be used to reposition a body based on two planes. You start by specifying a source plane (usually at the edge or center of a body) and then a detitanation plane. The block will move the body from the source to match the destination plane. This block works with CAD Bodies, Meshes, Lattices, Implicits, etc. **Move Object:** The **Move Object** custom block combines the **Orient Object** block with several **Rotate Object** blocks. This allows you to move an implicit body to a new coordinate location, and apply rotation in any of the three directions to the body. This block only works with Implicit Bodies. Use [this link](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Move%20Object.ntop) to download the **Move Object** block. ![This gif is a demonstration of how to move and orient bodies in nTop. The gif demonstrates the Translate Object, Orient Object, and Move Object blocks.](https://files.learn.ntop.com/help-articles/implicit-modeling/51040470002451.png) ## Keywords: *move part translate how view question object I assembly do my origin gimble screen mate objects* # How do I use the Ramp block? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-do-i-use-the-ramp-block ## Question: How does the **Ramp** block work? ## Answer: The **Ramp** block lets you gradually change a value based on the Scalar field. **Ramp** functions can be applied to several types of fields. Another way to think of a **Ramp** is a gradual transition, like walking up a ramp. It takes you from one level to another incrementally. ![The Ramp block](https://files.learn.ntop.com/help-articles/implicit-modeling/4402343865235.png) * **Scalar field:** The field driving the **Ramp**. * There are many options for this input, which is where the power of this block shines. Some examples are (but not limited to): * [Implicit Bodies](#h-01hn4cg5f11z08n4e6p1rsyeh5) * [Point and Axis](#h-01hn4cgmqjfev4jwr9berfrtjd) * [Simulation Results: Von Mises Stress, Displacement Results.](#h-01hn4dh59a8b9s4nfaw8a2yq0d) * [Imported Point Maps converted into Scalar fields (using **Field from Point Map**).](#01hn4dhamft8rhdqcsxtwmjg10) * **In min/In max:** The boundary where the **Ramp** begins (In min) and ends (In max). These values are in relation to the Scalar Field (with 0 mm usually being the neutral edge of the field). * **Out min/Out max:** The **Ramp** output values. Out min is the starting value at the In min, and Out max is the value reached at the In max. They are the new values as a function of the Scalar field. * The values ramp between the **In min** and **In max** values. Before **In min**, the value stays constant at the **Out min** value, and after **In max**, the value stays constant at the **Out max** value. > [!NOTE] > > *Note: When defining these values, make sure to include units.* * **Continuity:** Represents how the values will ramp from In min to In max. The image below shows a Field View ([How to use the Field Viewer](/help-articles/knowledge-base/user-interface/how-to-use-the-field-viewer)) of a **Ramp** block used in a **Thicken Body** block. The body input is a **Cylinder,** and the **Ramp** block defines the Thickness. The **Ramp** block uses a **Plane from Normal** block as its Scalar field. When you use the Turbo colormap in the field viewer, you can see the transition of the Thickness values from *In min* to *In max*. You can also see how the values are constant when it isn't between the *In min* and *In max* values. > [!TIP] > > *Tip: Use the Probe values toggle to see the values in the field by hovering over the field.* ![A diagram showing an implicit body that has been modified using the Ramp block. The diagram shows how the inputs of the Ramp block effect the resulting geometry.](https://files.learn.ntop.com/help-articles/implicit-modeling/6496706420371.png) The image below shows the different *Continuity* options. Using the Field Viewer with a Turbo colormap, you can see how the transitions differ with each option. ![This diagram shows the 3 different result options when changing the Continuity input of the Ramp block. The three options from left to right are: Geometric, Tangential, and Curvature.](https://files.learn.ntop.com/help-articles/implicit-modeling/6497110327827.png) When you use an Implicit body for the Scalar field, a value of 0 refers to the body's outline. Positive values are outside of the body, and negative values are within it. > [!TIP] > > *Tip: You can enter a value in the Contour interval of the Field viewer to accurately see where the In Min and In Max are located* ## **Example 1: Point and Axis** In this example, we will thicken a lattice with a **Point** and **Axis** as scalar field inputs. We can see from the Field Viewer that the **Point** creates spherical contours, and the **Axis** creates cylindrical contours. We can use the **Surface Plot** to display the thickness of the lattice as a shaded view over it. We can see how the field varies using a point and an axis. ### Point: ![An example geometry that has been modified using a Ramp block with a Point as the Scalar Field input.](https://files.learn.ntop.com/help-articles/implicit-modeling/25643229177619.png) ### Axis: ![An example geometry that has been modified using a Ramp block with an Axis as the Scalar Field input.](https://files.learn.ntop.com/help-articles/implicit-modeling/25643229184019.png) [Example File](https://files.learn.ntop/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/ramp_point_axis.ntop) ## **Example 2: Point Map or Field** In this example, we will convert a **Point Map** into a Field with the **Field from Point Map** ([How to use simulation results to create a Point Map or Field](/help-articles/knowledge-base/structures/how-to-use-simulation-results-to-create-a-point-map-or-field)) block. The Point Map was obtained from a **Static Analysis** to drive the thickness of a bike seat to increase reinforcement in those regions and keep the other regions light. The image below shows an example of using the Ramp block to drive the thickness and point spacing input. ![An example geometry that has been modified by the Ramp block. In this case, lattice thickness and density is being driven by point map results.](https://files.learn.ntop.com/help-articles/implicit-modeling/25643229190675.png) Home Screen Example - Bike Seat ## **Example 3: Combination of Fields** You can use the **Field from Point Map** block to create fields from imported point maps ([How to use simulation results to create a Point Map or Field](/help-articles/knowledge-base/structures/how-to-use-simulation-results-to-create-a-point-map-or-field)). You can also use Math blocks in this input, such as Abs, Mod or Add, Subtract, and Boolean operations. ## Download the Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/ramp%20block%20examples.7z) ## Keywords: *error ramps tutorial ramp modifier surface field color question max min out how-to units in distance surface plot plot* # How does nTop determine the material direction for an open profile Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-does-ntop-determine-the-material-direction-for-an-open-profile ## Question: I created an open profile and didn't specify a normal direction, but the material direction isn't what I was expecting. How does nTop determine the material direction for an open profile? ## Applies to: * Open profiles ## Answer: nTop profiles follow the same logic as the well known mathematics/physics "right hand rule". You can use this rule to understand how nTop determines the direction of material applied to an undefined open profile. Below are two examples to help explain: ## Example 1: This first example is using a straight vertical line. The Start Point is at the bottom, and the curve travels in the positive Y direction towards the End Point. The normal direction is positive X, so the vector would be coming out of your screen. Using the right hand rule: * Your thumb is the normal vector (positive X) * Your fingers should point in the orientation of the curve (positive Y) * Your fingers curl to the left, so the material direction (negative field) is to the left (positive Z) ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598723654163.png) ## Example 2: The second example is using a spline. This curve is inverted compared to the first example, with the Start Point at the top, and the line travels in the negative Y direction. The normal direction is negative Z, so the vector would be going into your screen. Using the right hand rule: * Your thumb is the normal vector (negative Z) * Your fingers should point in the direction of the curve (negative Y) * Your fingers curl to the left, so the material direction (negative field) is to the left (negative X) ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742009619.png) ## Keywords: *open profile closed curves profiles* # How to add fillets to lattices Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-add-fillets-to-lattices ## Question: Is blending edges or adding a fillet to lattice nodes and beams possible? ## Applies to: * Implicit modeling ## Answer: We recommend three methods for applying fillets to lattice structures. This article will walk through each method to help show their differing results. ## Method 1: Blend Intersections ***This method is only applicable for Graph Unit Cells.*** 1. Create your **Periodic Lattice** with a Graph Unit Cell or a 2D Unit Cell ([How to create a periodic lattice](/help-articles/knowledge-base/lattices/how-to-create-a-periodic-lattice) and [Guide to Rib Design](/help-articles/knowledge-base/rib-design/guide-to-rib-design)) ![The starting lattice that is unmodified.](https://files.learn.ntop.com/help-articles/implicit-modeling/49427878802707.png) 2. Add a **Blend Intersections** block. Lattice input is the Swept Ribs we created from the **Ribs from the Graph** block. Blend radius the filetting we are applying to the Ribs. ![The starting lattice with a blend intersections block applied.](https://files.learn.ntop.com/help-articles/implicit-modeling/43618889430803.png) 3. **Boolean Intersect** with **Offset Body** and the Height as distance input. ![An offset body is applied to the starting geometry. A boolean intersect is used with the offset body and blend intersections lattice. The result is a lattice with fillets between the nodes and beams. The offset body removes the spherical shape the nodes have, and the result is a flat node.](https://files.learn.ntop.com/help-articles/implicit-modeling/43618881494675.png) ## Method 2: Custom Unit Cell (Resource Intensive) 1. This method is based on smoothening an unit cell and then using that unit cell to create a lattice. For this example, we start with a generic **Rectangular Volume Lattice**. The lattice volume is scaled up to create a correctly proportioned unit cell later in the workflow. We convert some of the inputs from the workflow into variables for easy lattice modification at the end. > [!NOTE] > > *Note: The **Custom Unit Cell** Method requires significant computation power and takes longer to process.* ![A starting rectangular volume lattice.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197666830995.png) 2. Next, we use a **Trim Lattice** and **Box** block to create a sample section of the enlarged lattice. The **Box** is larger than the unit cell to ensure all of the necessary beams will be present when creating the lattice. ![A sample of the lattice created in step one. The sample is taken by trimming the lattice using a box as the domain.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197677027987.png) 3. Using the start and end points of the lattice sample, we can generate cylinders in place of the original beams. This will allow us to apply the radius to the sample when the cylinders are combined in the **Boolean Union**. ![A gif showing the extraction of the start and end points of the lattice sample. Using the start and end points of the lattice sample, we can generate cylinders in place of the original beams.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197677032211.png) 4. Now that we have the smooth sample lattice, we can create a **Box** the size of the unit cell. The **Bounding Box** of that **Box** is now the defining boundary of our **Custom Unit Cell**. ![Creating a box using the unit cell size. The box's bounding box is then extracted to use in creating the Custom Unit Cell of the Sample Lattice.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197666851987.png) 5. We can now generate the smooth lattice using the **Rectangular Volume Lattice**. For this example, we just used a **Box** as the body to generate the lattice from. Depending on your design, this may be the final necessary step. To close the open beams, continue with the last two steps. ![The rectangular volume lattice is then generated using the custom unit cell.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197677042579.png) 6. The Initial Smooth Lattice is made of the **Custom Unit Cell** we generated. This contains no beams because it is made of the merged **Cylinders**. To fix this in the next step, we can create a Reference Lattice using the original **Unit Cell**. Now that this lattice has beams, we can use the **Filter Beams by Connectivity** block to remove the open beams. ![Creating a reference lattice from the rectangular volume lattice. The reference lattice is then used in a Filter Beams by Connectivity block to remove any open beams.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197677046803.png) 7. The final step is to use a **Boolean Intersect** with the Initial Smooth Lattice and the Closed Reference Lattice. This results in the lattice having fillets at the nodes with the removed open beams. ![A Boolean Intersect block is used with the initial volume lattice and the closed beams lattice to create the final body.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197666869779.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Method 3: Spheres 1. Start with any lattice structure you want to thicken the nodes. For this example, we will be using a standard **Periodic Lattice**. You can see some of the inputs from the workflow have been turned into variables for easy lattice modification at the end. ![An example periodic lattice to start from.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197677010579.png) 2. We will extract the vertices from the properties panel using this lattice. These vertices are then used to generate **Spheres**, which we will **Boolean Union** together to create one body. ![The gif shows how to extract the lattice beam vertices. The vertex point list is inserted into the center point of a Sphere block. This generates a sphere list, the list is then merged into a single body using the Boolean Union block.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197666822803.png) 3. To generate the final lattice, we use a **Boolean Union** to combine the **Spheres** with the **Periodic Lattice**. Then, using a **Smoothen Body** block, we can create smooth fillets between the nodes and the beams. The fillet size can be adjusted using the Grid size and Smooth iterations inputs. A larger grid size makes more drastic fillets, while a smaller one will create gentler fillets, increasing run-time. ![A Boolean Union block is used to merge the original lattice with the spheres. The final step is to smoothen the merged body.](https://files.learn.ntop.com/help-articles/implicit-modeling/22197666826387.png) ## Download the Example file: * [Blend Intersections Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/fillet_ribs.ntop) * [Custom Unit Cell Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/custom_unit_cell_fillet.ntop) * [Spheres Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/fillet_spheres.ntop) ## Keywords: *implicit blend body offset smoothen geometry basic lattices edges fillet* # How to calculate surface area Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-calculate-surface-area ## Objective: How to calculate the surface area of your implicit body? How to calculate the surface area of your mesh? How to calculate the surface area of a profile? ## Applies to: * Surface Area ## Procedure: **1.** Start with the geometry you want to calculate. **2.** Add a **Surface Area** block. * * Drag and drop an implicit body, mesh, or profile, into the Body input field * Look at the calculated area in the top right of the block. This value is the surface area. And that's it! You've successfully calculated the surface area of your geometry. ![An example showing how to use the Surface Area block to calculate a body's surface area.](https://files.learn.ntop.com/help-articles/implicit-modeling/38643617110803.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *surface implicit hex how-to surface area thermal management* # How to calculate the mass or volume of a part Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-calculate-the-mass-or-volume-of-a-part ## Objective: Learn how to calculate mass and volume ## Applies to: * Mass Properties ## Procedure: * Insert the body you want to evaluate in the Body field * Apply a density value * The Relative Error input defaults to 0.01 You can then open the properties panel of the Mass Properties block and see the resulting values. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/49429106588179.png) And that's it! You've successfully obtained your values. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *volume how-to mass mass properties* # How to calculate the surface area of a cross-section Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-calculate-the-surface-area-of-a-cross-section ## Objective: Calculate the surface area of a cross-section. ## Procedure: **1. Section the Implicit Body** First, create the cross-section of your part. * Add a **Section Body** block. * In the Body input, insert the geometry you want to measure. * In the Plane input, define the sectioning plane. A **Plane from Normal** block is a common way to do this. You can use a list of Point inputs to create multiple planes. **2. Calculate the Surface Area** Next, measure the area of the cross-section you just created. * Add a **Surface Area** block. * Insert the **Section Body** block from the previous step into the Body input. The calculated area is now available in the block's output. * You can see the calculated surface area value in the header of the **Surface Area** block's information panel. * If you select a list of planes, open the block's **Properties** panel to view a list of all the calculated surface area values. . ![An image showing the properties panel of the Surface Area block. The block has been list processed using the list of Section Body profiles. The result is a list of surface areas for each of the section body profiles.](https://files.learn.ntop.com/help-articles/implicit-modeling/43679796605971.png) And that's it! You've successfully calculated the surface area of a cross-section in three simple steps. Are you still having issues? Reach out to the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/surface_area_cross_section.ntop) ## Keywords: *surface block slice tpms section body calculate math area cross thin* # How to create a quadratic ramp Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-create-a-quadratic-ramp ## Objective: Learn how to ramp a parameter using a quadratic equation. ## Procedure: To ramp your lattice thickness quadratically, you need to break down the equation and build it in nTop using the Math blocks. Be sure to watch for units while creating your equation. **1. Set-up:** Start with the geometry you want to ramp already created. In this example, we use a cylinder with a volume lattice infill. **2. Build your equation:** Use Math blocks to build your quadratic equation. We are going to build t = x^2. This initial equation will not have units. You can use the field viewer's Min and Max values to visualize the fields. > > > > > > > > >
    > ![The field view of the scalar field of the equation x^2.](https://files.learn.ntop.com/help-articles/implicit-modeling/43593257989139.png) > > ![The field view of the Evaluate Field block of the starting equation x^2.](https://files.learn.ntop.com/help-articles/implicit-modeling/43593237366035.png) >
    * To create 'X' we use an **Axis** block. * Point: (0,0,0) - Set to the centroid of our part (automatically assigns units) * Vector: (0,0,1) - Set from the Centroid pointing up in the Z-axis * Changing the Vector and the Point changes the region of effect for the quadratic equation * Add a **Square** block and input the **Divide** block from the last step ![An image of the equation field and nTop Notebook. Using the Evaluate Field block that our t value, which is x^2, is producing the correct result of 3600 mm^2 at x=60](https://files.learn.ntop.com/help-articles/implicit-modeling/43593237367059.png) We can see using the **Evaluate Field** block that our t value, which is x^2, is producing the correct result of 3600 mm^2 at x=60 **3. Create the In-min value for the ramp:** We want to set the In-min to be (0,0,0) mm, the middle of our equation. * Add an **Evaluate Field** block. * Scalar Field: Input the '**X^2**' block we built * Point: (0,0,0) **4. Create the In-max value for the ramp:** We want to set the In-max value to be the maximum at the circumference of our cylinder. Units are automatically added; there is no need to remove them. * Add a **Point** block * Open up the Properties panel of the Cylinder (starting geometry) and grab the 'radius' chip. Insert that chip into the Y input of the Point block. * Keep X and Y as 0 (this may change for your equation) * Add an **Evaluate Field** block * Scalar Field: Input the '**X^2**' block we built * Point: Insert the **Point** block with the radius chip **5. Build the ramp:** Insert the components we built and decide what values you want your lattice thickness to be at the In min and In max distances. * Add a **Ramp** block * Scalar Field: '**X^2**' block from Step 2 * In Min: Add the In Min Evaluate Field block from Step 3 * In Max: Add the In Max Evaluate Field block from Step 4 * Out Min: 1 mm * Out Max: 4 mm (these values correspond to what thickness we want the lattice struts to be at the In Min and In Max) * Continuity: Geometric ![The Ramp block being applied to the x^2 scalar field. This new modified field will be used as the Beam Thickness for the lattice.](https://files.learn.ntop.com/help-articles/implicit-modeling/43593546302355.png) **6. Quadratically ramp the lattice thickness:** Drag the **Ramp** block you just created into the Beam thickness input of the **Infill Volume Lattice** block. ![The Cylinder Volume Lattice with ramped beam thickness applied. The beams in the center have a smaller thickness than the beams towards the side walls of the cylinder.](https://files.learn.ntop.com/help-articles/implicit-modeling/360101166354.png) Below is a comparison of the quadratic ramp we just made with a linear ramp of the same values (the pink lattice is the linear ramp). ![a comparison of the quadratic ramp we just made with a linear ramp of the same values (the pink lattice is the linear ramp).](https://files.learn.ntop.com/help-articles/implicit-modeling/1500002333681.png) **7. Optional: Visualize the quadratic.** This optional step is useful if you want to see what your quadratic equation looks like. * Add a **Box** block * Length: 100 mm, Width 100 mm, Height 1 mm * Add an **Offset Body** block * Body: Input the **Box** we just made * Distance: Input the Quadratic Ramp ![ The image is a test to see if the x^2 ramped scalar field applies correctly. An Offset Body block is applied to a box, with the ramped scalar field applied to the offset distance. The resulting box has a curvature applied to its face, indicating the x^2 equation was successful.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500002334061.png) And that's it! You've successfully created a quadratic ramp. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/quadratic_ramp.ntop) ## Keywords: *ramp blocks field math linear how-to quadratic units visualize equation continuity square axis parabola coefficient constant* # How to create a smooth profile Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-create-a-smooth-profile ## Objective: Create a smooth profile polygon using a points list. ## Applies to: * Using a solid body to clean a hole * Custom curved profiles ## Procedure: 1. **Point List:** Enter point values that map out your general shape; you can edit these later to achieve a more precise result. ![An example notebook showing a point list.](https://files.learn.ntop.com/help-articles/implicit-modeling/40340482460563.png) 2. **Spline Through Points:** Insert the points list using the **Spline through the Points** block. This will generate a line connection between all of the points. The Degree input allows for adjusting the degree of the curve. ![A spline is generated from the initial point list using the Spline through Points block.](https://files.learn.ntop.com/help-articles/implicit-modeling/40340482461203.png) 3. Please use the **Profile from Curves** to create a profile from the Spline generated in the above step. ![A profile is created from the spline using the Profile from Curves block.](https://files.learn.ntop.com/help-articles/implicit-modeling/40340465562387.png) And that's it! You've successfully created a smooth profile polygon. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Smooth%20Profile%20Polygon%20Example.ntop) ## Keywords: *points smooth profile curve how-to round polygon hole* # How to Create Advanced Swept Surfaces with Conic and Cubic Bezier Sections Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-create-advanced-swept-surfaces-with-conic-and-cubic-bezier-sections ## **Objective:** This article explains how to generate advanced swept surfaces between two rail curves using a spine curve. By utilizing the **Conic Section Sweep**, **Conic Section Sweep by Tangent**, and **Cubic Bezier Section Sweep** blocks, you can create high-fidelity aerodynamic profiles and smooth transitions for complex modeling workflows ## **Applies to:** * Surfacing * Workflows: Aerodynamics, Fluid Flow Management, Architectural Design ## **Procedure:** ### 1. Prepare Your Curves Before using the sweep blocks, ensure you have the following curve inputs prepared: * **Rail 1 and Rail 2:** These define the outer boundaries of the sweep. Note that these cannot be closed curves. * **Spine:** This curve acts as the origin or axis for the sweep operation. ### 2. Select the Appropriate Sweep Block Choose the block that best fits your design requirements: * **Standard Control:** Use **Conic Section Sweep**. * This creates a swept conic section where the resulting geometry extends beyond the rails along the spine's tangents. * Use this for when Rails that are planar and orthogonal ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598706877075.png) * **Tangency Control:** Use **Conic Section Sweep by Tangent**. * Select this when you need precise control over the surface tangency to strictly define the "take-off" angle of the surface from the rails. * This block accepts tangent vector fields at each rail. * Use this when you want a conic (no inflection points) and control over tangents ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598706905875.png) * **Curvature and Smoothness Control:** Use **Cubic Bezier Section Sweep**. * Select this for high-fidelity control over surface continuity. * This block uses spatially varying tangent vector fields and magnitude fields at each rail to control smoothness. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598722152595.png) ### 3. Configure the Shape Parameters (Rho) For the conic sweep blocks, the cross-sectional shape is defined by the **Rho** value. You can define this as a constant value or use a **Ramp** block to vary the shape spatially along the sweep. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598706934803.png) >
    **Rho Value** **Resulting Curve Type** **Example**
    ρ\<0.5 Ellipse ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598722191379.png)
    ρ=0.5 Parabola ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598706992787.png)
    ρ>0.5 Hyperbola ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598707018131.png)
    ### 4. Adjust Tangency (Optional) If using the **Cubic Bezier Section Sweep**: * Adjust the **Tangent Magnitude** inputs. * Note that these values are relative to the in-plane distance between the rails. * A value of 1.0 indicates that the handle length equals the distance between the rails at that specific point. ### 5. Finalize the Body The output of these blocks is an implicit surface. To create a solid, closed body suitable for downstream operations: * Use the **Boolean Intersect** block to close the surfaces. ## Best Practices and Troubleshooting **Angle Thresholds** * **Avoid Steep Angles:** We recommend avoiding steep angles between the rail curves and the spine. This prevents unexpected results during shelling or offsetting downstream. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598707053587.png) * **Rule of Thumb:** Maintain an angle threshold between 45° and 60°. **Common Errors** * **"Rays from the axis..." Error:** This indicates that the rails are perpendicular to the spine at some point. Rails cannot be perpendicular to the spine. Ensure that rays projected from the axis along the specified direction intersect the curve only once. * **"Improperly configured inputs" Error:** This often indicates that the geometry is self-intersecting relative to the axis. * **Closed Rails:** Ensure Rail 1 and Rail 2 are open curves. If they are closed, replace them with open curves to resolve the error. ## Download Example File Download the example file to explore lofting by section sweep: [Lofting by Section Sweep](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/section_sweep_example.ntop) ## Keywords: *Conic Section Sweep Advanced Swept Surfaces Aerodynamics Conic Section Sweep by Tangent Cubic Bezier Section Sweep Surfacing* # How to create perforations on any part Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-create-perforations-on-any-part ## Objective: Learn how to create holes in your part that are varied in size and location. This workflow can be accomplished using the **Perforate Body** or **Perforate Body from CAD Face** toolkits. This tutorial goes through each step in the process to allow you to edit the workflow to your specific application and gain an understanding of what happens 'under the hood' in these toolkits. ## Applies to: * Implicit modeling ## Procedure: **1. Set up:** * Import your model. * Extract the faces you want to be perforated * This process is easier with a CAD model, due to face selection, but can also be done with a mesh using the [**Filter Mesh by Floodfill**](/help-articles/knowledge-base/meshing-workflows/how-to-filter-mesh) block to select specific areas. * Create an Implicit body of the entire model (to be used in Step 4) ![The imported CAD part of a bowl. The bowl is converted to an implicit body. ](https://files.learn.ntop.com/help-articles/implicit-modeling/4402296811283.png) **2. Mesh:** Mesh the faces that you want to perforate. These steps may look different depending on your geometry. * Add a **Mesh from CAD Body** block and insert the **CAD Face List** * Add a **Merge Meshes** block and insert the **Mesh from CAD Body** block to get rid of the [List](/help-articles/knowledge-base/user-interface/how-to-work-with-lists) * Add a **Remesh Surface** block and insert the **Merge Meshes** block to create a uniform mesh for better point creation **3. Create Points:** These points are where the final holes will be. They are used to help generate the lattice. * Add a **Random Points on Mesh** block * Mesh: **Remesh Surface** * Point Count: 600 * **To vary the point spacing:** Add a **Ramp** block to the Spatial Weighting input * Scalar Field: Add a **Sphere** block (The holes will vary spatially in distance using this sphere as the field) * Center Point: (0,0,0) * Radius: 20 mm * In min: 5mm, In max: 200 mm * Out min: 15 mm, Out max: 60 mm ![The implicit body bowl is meshed, and then a Random Points on Mesh block is applied to the mesh. The spatial weighting of the points is modified by a Ramp block.](https://files.learn.ntop.com/help-articles/implicit-modeling/4402296920723.png) **4. Set up the lattice:** This step creates a lattice beam at each hole location. The thickness of the lattice corresponds to the size of the hole. * Add a **Branched Lattice Body** block (this is a [beta](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) block) * Delete the auto-generated lists in the Start points and End points inputs **4a. Translate the Points outward:** The Random Points in step 3 are used to create the branched lattices. We need to translate these points inwards and outwards, using the model as our field. To do this, let's work backward from the **Evaluate Field Gradient** block and translate the points outward from the body. * Add an **Evaluate Field Gradient** block (this block evaluates the field of our implicit body at each point location) * Scalar Field: Use the Implicit Model we created of the entire body (in this workflow, it is called 'Bowl') * Point: Insert the **Random Points on Mesh** from Step 3 * Now that the points are evaluated on the field, we multiply them by the thickness of our part (the wall thickness is the minimum value if we want the holes to cut entirely through our part) * Add a **Multiply** block * Input A: **Evaluate Field Gradient** block * Input B: (right-click and select 'Create Variable' on this input) * Change the name to Wall Thickness * Set the value to 3 mm * Add a **Translate Object** block * Object: Insert the **Random Points on Mesh** from Step 3 * Vector: Insert the **Multiply** block * Insert the **Translate Object** block into the **Branched Lattice Body** Start Points input ![The gif shows how to create a second set of points that are offset the distance of the bowl wall thickness.](https://files.learn.ntop.com/help-articles/implicit-modeling/4402326582675.png) **4b. Translate the Points Inward:** To translate the points in the opposite direction, we duplicate the blocks we created and multiply the Wall Thickness by -1 to change the direction of the translation. * Right-click on the **Translate Object** block and select 'Duplicate' * Delete the Wall Thickness variable from the Operand B input * Add a **Multiply** block and insert it into the Operand B input * Set Operand A to -1 and Operand B to the Wall Thickness variable * Insert the Translate Object block into the End Points input of the **Branched Lattice Body** block ![A Branched Lattice Body block is used to create beams between the points on the interior of the bowl and the points on the exterior of the bowl.](https://files.learn.ntop.com/help-articles/implicit-modeling/4402334386963.png) **5. Layers and hole size** * Set the layer value to 1. This means the lattice created between the points will only have one branch * In the Thickness input, add a **Ramp** block to vary the size of the lattice, which will be the size of the holes * Use the same Scalar Field from Step 3, the Sphere. * In min: 25mm, In max: 250mm * Out min: 5mm, Out max: 15mm ![The branched lattice with a Ramp block applied to the beam thickness input.](https://files.learn.ntop.com/help-articles/implicit-modeling/4402334453011.png) **6. Turn the bowl into a colander** * Add a **Boolean Subtract** block * Set the Primary body to the 'Bowl' (the Implicit body of the entire model) * Open up the Properties of the Branched Lattice Body and take out the 'Implicit' chip. Insert it into the Subtraction Body input ![Using a Boolean Subtract block, the beams are subtracted from the bowl implicit. The result is a perforated bowl.](https://files.learn.ntop.com/help-articles/implicit-modeling/4402334507795.png) And that's it! You've successfully perforated the bowl with holes that vary in size and spacing. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Perforated%20Part%20Example.ntop) ## Keywords: *lattice body vary beta space how-to size perforate hole holes branch bowl colander* # How to extrude a curve Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-extrude-a-curve ## Question: How to extrude a cuve How to thicken a curve ## Answer: If you want to extrude or thicken **Curves**, **Splines**, **Lines**, or **Arcs**. * Use the Scalar Field from the properties panel ``` Curve.Scalar Field ``` * Use a **Thicken Body** block to extrude/thicken a curve ## A 2D spline converted to an implicit body using a Thicken Body block. ## Keywords: *part create geometry profile point curve issue polygon arc extrude base* # How to loft between profiles Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-loft-between-profiles ## Question: How do you loft between profiles? Why doesn't my loft have a smooth transition? It isn't lofting as I expected it to. > [!NOTE] > > **Note:** The older Loft between Profile blocks did not produce smooth results because it used the **Section Body** block as the input. We have since updated the **Regular Polygon** block to output Profile instead of Polygon type, which enables you to use Profile properties directly. ## Answer: We recommend you use the **Mix** block to loft between two profiles and intersect it with two planes in which the Profiles are located. A Profile is a set of coplanar curves. It has two field properties: the first is the Signed Distance field to the infinite extrusion relative to the profile's plane and the second is the unsigned distance field to the enclosed region. ![A gif showing how the field transitions from a square to a hexagon across a defined distance. The field was generated using the Mix method for lofting profiles.](https://files.learn.ntop.com/help-articles/implicit-modeling/42879318178707.png) ![The resulting implicit body generated from using the Mix method of lofting profiles.](https://files.learn.ntop.com/help-articles/implicit-modeling/42879328188563.png) ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/loft_profiles.ntop) ## Keywords: *modeling smooth profile working not issue lofting odd weird transition loft lofted polygon* # How to mirror an implicit body Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-mirror-an-implicit-body ## Objective: Learn how to mirror an Implicit Body ## Procedure: > [!NOTE] > > This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: > > * **Learning Center course:** > * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) > * **Articles:** > * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) > * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) 1. Insert **Mirror Body** block 2. Drag and drop the Implicit body you wish to mirror 3. Update the mirror **Plane** **![The gif shows how a cone block is mirrored using the Mirror Body block.](https://files.learn.ntop.com/help-articles/implicit-modeling/4535998721811.png)** And that's it! You've successfully mirrored your object. Mirror Body is a compound block that you can export to see what it is made up of. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *block field implicit translate body custom vector mirror transform* # How to select random points from a Point List by filtering with volume Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-select-random-points-from-a-point-list-by-filtering-with-volume ## Objective: Learn how to create a selection of random points from a List of Points by using surface roughness to filter the points based on volume. ## Note: To start, you will need to download and [import](https://support.ntop.com/hc/en-us/articles/360060151133) the [Custom Block: Filter Points by Volume.](https://ntopology.box.com/s/il5rcwaookyvphj2h7mv16zxecjblqaz) ## Procedure: **1. Set-up:** * [Import](https://support.ntop.com/hc/en-us/articles/360049994434) your part, * Convert it to a mesh * Input your mesh into a **Remesh Surface** block to create an even mesh **2. Create Random Points** * Add the block **Random Points on Mesh** * Set the spacing and amount to your desired value ![A mesh with the Random Points on Mesh block applied.](https://files.learn.ntop.com/help-articles/implicit-modeling/360099953474.png) **3. Create the Volume to filter with** Since we are filtering by volume, we want to create a volume that randomly covers some of the points. There are a few methods to do this with the different noise blocks such as **Simplex Noise**, **Cellular Noise 3D**, and **Surface Roughness**. * Add a **Surface Roughness** block * Insert your model as the Body * Edit the Roughness frequency, amplitude, and seed value to change your results ![The same mesh and random points as above. The implicit body used to generate the mesh is overlayed. The implicit has a texture applied using the Surface Roughness block.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500001053502.png) **4. Filter the points** * Add the **Filter Points by Volume** block * Use the Surface Roughness as the Volume input * Set the Region to Outside ![The mesh with overlayed textured implicit. A Filter Points by Volume block is applied to isolate the points that are outside of the textured implicit body.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500001131741.png) **5.** **Optional: Create a list from the remaining points** * Duplicate the **Filter Points by Volume** block * Set the Region to Inside to create the opposite selection of Points And that's it! You've successfully created two random selections from a list of Points. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Filter%20Points%20by%20Volume%20Example.ntop) * [Custom Block - Filter Points by Volume](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/CB%20-%20Filter%20Points%20by%20Volume.ntop) ## Keywords: *mesh surface texture volume list points selection filter point roughness random how-to* # How to separate characters from a decimal string to create labels Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-separate-characters-from-a-decimal-string-to-create-labels ## Objective: Learn how to separate characters from a three decimal (00.0) string to create labels from properties by using a Custom Block. **This Custom Block is designed by Raymond Weitekamp from Polyspectra.** ## Applies to: * Serialization * Implicit modeling ## Prerequisites: This Custom Block may have other uses, but for this tutorial, we are using it with the Serialization Custom Block. Follow along with this [nTop Live](https://ntopology.com/videos/video/ntop-live-labeling-design-variations-with-serial-numbers/) to learn how to use the Serialization Custom Block. > [!NOTE] > > This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: > > * **Learning Center course:** > * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) > * **Articles:** > * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) > * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) ## Procedure: Start with all required Custom Blocks imported. 1. Generate the property you want to turn into a label. * Ex. Create a **Box from Corners** and extract the X-value from the Max Point. 2. This Custom Block doesn't account for units and it doesn't work for negative values. * Divide the Max Point property by 1 mm. * Multiply by -1 if you need to remove a negative value. 3. Add the value to the Custom Block, **CB - 3 Decimal String** (created by Raymond Weitekamp from Polyspectra). 4. Add the **Serialize** Custom Block * Insert the CB - 3 Decimal String block in the ItemName input. * Set an Index value. * Define the Text Size, Letter Spacing, and String Position. * Edit the Directory to look at your own local folder. Make sure to have a '' at the end of the string. ![An example of using the Serialize and 3 Decimal String custom blocks to generate a label on a box.](https://files.learn.ntop.com/help-articles/implicit-modeling/49969842987155.png) And that's it! You've successfully separated the values into separate characters and created a label. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example Files](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Serialization%20Example%20Files.zip) ## Keywords: *add scalar value how-to text number 3 serial serialize decimal characters character integer* # How to sweep along two rails? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-sweep-along-two-rails ## Question: How does the **Sweep along Two Rails** block work? ## Answer: The **Sweep along Two Rails** block creates an implicit body by sweeping a section along a path defined by two rail curves and a spine. Because the section's position, rotation, and scale are all driven by the rails, the resulting shape can taper, twist, and change size along its length, rather than staying constant like a basic sweep. ### Definitions * **Rail:** The primary curves defining the trajectory of the swept section. They control the position, scale, and rotation of the section within the spine plane. * *Valid:* Linear, nonlinear, nonplanar, closed * *Invalid:* Non-monotonic with respect to the spine or another rail * **Spine:** Controls the orientation of the *plane* of the moving section. * *Valid:* Linear, nonlinear, nonplanar, closed * *Invalid:* Non-monotonic with respect to a rail * **Section:** The (implicit) planar shape at any given point along the sweep. ### Basic Controls * **Trajectory:** The path along which the section is swept, defined by the two guide rails. ![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-trajectory.png) * **Rotation:** The in-plane rotation of the section being swept, controlled by the rails. ![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-rotation.png) * **Orientation:** The orientation of the plane of the section at any point along the path. The orientation is always perpendicular to the spine. ![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-orientation.png) * **Scale:** The in-plane scale of the section at any point along the path, controlled by the second rail (or a law). Scaling is typically uniform, but if a third rail is provided, non-uniform scaling is applied. ![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-scale.png) ### Overloads and Trimming The block can sweep either a **Profile** or a planar section of an **Implicit Body**. A shape to sweep and a starting plane are both required for the sweep — the Profile overload fully defines these using the input Profile's own properties. ![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-profile-overload.png) > [!NOTE] > > *Note: The swept result is the exact planar slice of the body at the starting plane, not a profile created using Section Body.* The **Implicit Body** overload instead requires both the body and a plane that defines the planar section of the body to sweep. ![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-body-overload.png) * **Caps:** When checked, closes the swept body with planar caps at the start and end of the spine. ## Example: Sweeping an airfoil to create a wing To create a wing, the setup is as follows: * **Profile:** The airfoil to sweep. * **Spine:** A line in the spanwise direction. The airfoil sections remain orthogonal to this line, keeping them streamline-aligned. * **Rail 1:** Leading edge. * **Rail 2:** Trailing edge. * **Caps:** True, to create a trimmed wing. ![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-wing-labels.png)![](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-two-rails-wing-result.png) The block outputs an **Implicit Body** representing the swept geometry. > [!TIP] > > *Tip: If the swept result looks twisted or self-intersects, check that the Spine and Rail curves all start and end near the same relative locations, and that they run in a consistent direction. Rails that diverge significantly in length or shape from the spine can produce unexpected results.* ## Download: [Sweep along Two Rails Example](https://storage.googleapis.com/files-learn/help-articles/implicit-modeling/sweep-along-two-rails.ntop) # How to use boolean operations Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-use-boolean-operations Boolean operations are fundamental tools in implicit modeling that allow you to create complex geometry by combining, subtracting, or intersecting bodies. This guide explains how to use the **Boolean Union**, **Boolean Subtract**, and **Boolean Intersect** blocks in nTop. **Applies to:** * Implicit Modeling * Boolean Operations *** ## Boolean Union The **Boolean Union** block combines multiple Implicit Bodies into a single body, with an optional blend feature. ![A diagram showing how a Boolean Union works. Two bodies are merged together into one.](https://files.learn.ntop.com/help-articles/implicit-modeling/43870843279891.png) 1. Navigate to the **Modeling** tab in the ribbon and select the **Boolean Union** block. 2. In the **Implicit Body List**, drag your Implicit Bodies into the **0:** and **1:** inputs. 3. (Optional) To add more bodies, click the **+** icon in the **Implicit Body List**. 4. (Optional) To apply a fillet between the bodies, adjust the **Blend radius** value. > [!NOTE] > > > [!NOTE] > > > > **Note:** If you don't see real-time updates when changing the **Blend radius**, you may need to enable high-performance graphics. See [How to Enable High-Performance Graphics Card Settings](link-to-article) for instructions. *** ## Boolean Subtract The **Boolean Subtract** block removes the volume of one or more Implicit Bodies from a primary body. An optional blend can be applied to the resulting edge. *![A diagram showing how a Boolean Subtract works. One body is subtracted from the other body.](https://files.learn.ntop.com/help-articles/implicit-modeling/43870854463507.png)* 1. Navigate to the **Modeling** tab and select the **Boolean Subtract** block. 2. Drag the body you want to subtract from into the **Primary Body** input. 3. In the **Implicit Body List**, drag the body (or bodies) you want to use for subtraction into the **0:** input. 4. (Optional) To subtract with more bodies, click the **+** icon in the **Implicit Body List** and add them. 5. (Optional) To apply a fillet to the subtraction edge, adjust the **Blend radius** value. *** ## Boolean Intersect The **Boolean Intersect** block creates a new body from the shared, overlapping volume of two or more Implicit Bodies. ![A diagram showing how a Boolean Intersect works. A new body is created where the two initial bodies overlap.](https://files.learn.ntop.com/help-articles/implicit-modeling/43870854464531.png) 1. Navigate to the **Modeling** tab and select the **Boolean Intersect** block. 2. In the **Implicit Body List**, drag the Implicit Bodies you want to intersect into the **0:** and **1:** inputs. 3. (Optional) To intersect more than two bodies, click the **+** icon in the **Implicit Body List**. 4. (Optional) To apply a fillet to the intersection edge, adjust the *Blend radius* value. *** ## Example File * [Download the nTop file used in this guide.](link-to-file) *** ## See Also * [How to blend TPMS types together](link-to-article) * [How to Mirror an Implicit Body](link-to-article) * [Using the Filter and Sort Block](link-to-article) ## Keywords: *boolean operations union subtract intersect implicit blend body join parts* # How to use Conic and Cubic Bézier blocks Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-use-conic-and-cubic-b-zier-blocks ## **Applies to:** * #### [**Conic**](#h-01k776vxq0r3jcvwtjp5b1cq2z) * #### [**Cubic Bézier**](#h-01k776vxqdcf90hc45xd5vkg2p) **Conic** and **Cubic Bézier** blocks are used for: * Designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Modeling smooth transitions in components like ducts, inlets, and nozzles to manage fluid flow. * Creating architectural features like arches and curved facades. ## **Procedure:** 1. Create a 3D Position **Vector Field from Components** block (x,y, and z). This represents the spatial coordinates with units of length. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742047763.png) 2. Create Design Space, which will be used to bound the Conic sections. In this example, we will use **Box**. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598723732371.png) ### **Conic** >
    ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598723756307.png)
    • The **Conic** block creates a conic section (ellipse, parabola, or hyperbola) based on five inputs: ***Point 1** (P1), **Point 2** (P2), **Point 3** (P3), **Rho** (ρ),* and the ***Coordinate Space**. *
    • Point 4 is the midpoint of the chord between Point 1 and Point 3. Point 5 is where the curve intersects the chord between Point 4 and Point 2.
    * The **2D Vector Field** block creates a 2D vector field from scalar field components, defining the (x,y) coordinates of the control points. (Conceptually, you can imagine the z-component extending to infinity, (−∞,∞). If you need to visualize the 2D plane in a 3D space, use Lines.) * We need three points to control our **Conic** section, so we will create three different 2D Vector Fields for P1, P2, and P3. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598723788947.png) * The *Rho* Value defines the “bulge” or shape of the conic curve as it's pulled toward Point 2. >
    **Rho Value** **Resulting Curve Type** **Example**
    Rho \< 0.5 Ellipse ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742149779.png)
    Rho = 0.5 Parabola ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742163603.png)
    Rho > 0.5 Hyperbola ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742192531.png)
    * We have the Point 1, Point 2, and Point 3 inputs ready for the **Conic** block. The coordinate space input is the vector field representing the basis on which the curve is evaluated. For this example, it would be the XY field. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742204563.png) > [!TIP] > > *Tip: You can also vary the value of Rho using a Ramp block.* *![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742249619.png)* If you want to orient the **Conic** in different directions, you can use the *Coordinate Space* input to change the direction. ### **Cubic Bézier** >
    ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742276627.png)
    • The shape of the curve is controlled by four points: **Point 1** (P1), **Point 2** (P2), **Point 3** (P3), and **Point 4** (P4).
    • You can vary the control points (P1−P4) for dynamic control using blocks such as a **Ramp** block or a **Distance to Curve from Axis** block.
    * You will need four separate **2D Vector Field** blocks to define the inputs for **Point 1** (P1), **Point 2** (P2), **Point 3** (P3), and **Point 4** (P4). ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598723989651.png) A simple example file showing how you can vary the Y coordinate of one of the points using the **Ramp** block. ## **Example File** * [Conic Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/conic_demo.ntop) ## Keywords: *lofting cubic 2d wing conic bezier vector field* # How to use nTop to help design plumbing domains Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-use-ntop-to-help-design-plumbing-domains ## Objective: Learn how to utilize imported CFD data in nTop to help minimize turbulence within a fluid domain, generate plumbing geometries with near equivalent exit flowrates, or any number of design considerations and performance requirements driven by your CFD. The goal is to utilize CFD early in the design process. ## Applies to: * CFD Data * Plumbing Geometries * Field Driven Design ## Choosing the right CB version: Currently, there are two versions of the Field from Fluid Domain custom block. The complete list of differences between versions 6.0 and 6.1 is described below. Field from Fluid Domain Version 6.0 * Performs base field from fluid domain operation ![The Field from Fluid Domain - 6.0 block](https://files.learn.ntop.com/help-articles/implicit-modeling/50047965467027.png) Field from Fluid Domain Version 6.1 * Performs base field from fluid domain operation * Smoothen Grid Size input has been changed to Grid Size. This input now controls the Grid Size for both the Smoothen Field and Smoothen Body blocks. * Smooth Iterations controls both the Smoothen Field and Smoothen Body blocks * Interpolation Type has been removed and is set to Linear ![The Field from Fluid Domain - 6.1 block](https://files.learn.ntop.com/help-articles/implicit-modeling/50047972375187.png) ## Block Process: This section explains what is happening inside the custom blocks to produce the end result. For this example, we will be using Field from Fluid Domain Version 6.1. We use an imported three-dimensional velocity field from CFD results in this example. We truncate the low-velocity regions (i.e., where we may see eddies develop, have areas of low pressure, etc.) and generate a new implicit body from the truncated data. Any variable exported from your CFD tools in CSV format, either as scalar or vector point maps, can be used. **1. Field from Point Map** In this step, we turn the point map into a Field. Add a **Field from Point Map** block, and drag the **Import Scalar Point Map** block from Step 1 into the first input. From Version 5.0 and on, the Interpolation and Extrapolation were removed from the inputs section. For most cases, Interpolation and Extrapolation will remain the same; therefore, they are now predefined variables. These variables can still be changed when editing the custom block if necessary. Learn more about Interpolation and Extrapolation [here](https://support.ntopology.com/hc/en-us/articles/360049689373-Interpolation-and-Extrapolation-options-for-creating-a-Field-from-a-Point-Map). ![Converts the imported point map into a Field.](https://files.learn.ntop.com/help-articles/implicit-modeling/50047965472659.png) **2. Clamp and Ramp the Field** This cuts off the field outside the point list and lets us set all positive space (i.e., outside the part) as 0. **2.1.** Using a **Clamp** block, drag and drop the block from Step 1 into the Scalar field. From what we determined with the HUD, set the Lower and Upper bounds. **2.2.** Using two **Ramp** blocks, set the positive space. Drag in the Original Body or whichever iteration of your design proceeds this step. Use the Upper Bound for the In min and the Lower Bound for the In Max. The Out max will be the resolution you specified, and the Continuity will be Geometric. The Out min will contain the second **Ramp** block. The Scalar field is again the Original Body, while the Upper Bound variable is both the In min and max. Set the Out min and Out max values to -1 and 0, respectively. The Continuity should be set to geometric. **2.3.** The final sub-step is to multiply these two blocks using the **Multiply** block. ![A Clamp block with the Field From CSV variable in the Scalar Field input, the Lower Bound variable in the Min input, and the Upper Bound variable in the Max input.](https://files.learn.ntop.com/help-articles/implicit-modeling/5822416964627.png)![The Ramp Clamp variable is created from a Multiply block. The Multiply block uses the Clamp CSV variable and a Ramp block to set the bounds of the field.](https://files.learn.ntop.com/help-articles/implicit-modeling/5822415219347.png) **3. Bounding Box** Define the bounding box for the Implicit Body. Utilizing the **Set Field Bounding Box** block, we insert the block from Step 2.3 and the bounding box of the original imported point map. ![The Set Field Bounding Box limits the field to only inside the Bounding Box of the imported point map.](https://files.learn.ntop.com/help-articles/implicit-modeling/5822791479187.png) **4. Smoothen the Field** Our next step is to smooth out the Field and generate our Implicit. This is done by utilizing the **Smoothen Body** block. The first input is the block from Step 3. It is a matter of adjusting the Grid Size and Smooth Iterations as needed. Depending on the size of our part, the density of the imported points (i.e., mesh density form analysis) means the Grid Size especially may vary. The Smooth Iterations/Interpolation types have been removed and are now predefined variables. ![The Smoothen Field block smoothens the generated field to create a better end result. The Grid Size and Smooth Iterations can be controlled by the custom blocks inputs.](https://files.learn.ntop.com/help-articles/implicit-modeling/50047972377875.png) **5. Reapplying the Bounding Box and Extracting the Implicit Body** The resulting field of the **Smoothen Field** block is larger than our CSV bounding box. To contain the field, we can use another **Set Bounding Box** block. ![After smoothening the field, the resulting field is larger than desired. Another Set Bounding Box block is used to control the field size.](https://files.learn.ntop.com/help-articles/implicit-modeling/50047972379539.png) We then extract the Implicit Body property chip from the properties panel of the Smooth with BB variable. ![The Smooth with BB variable with its properties panel open. The implicit body property chip is extracted and placed in the notebook.](https://files.learn.ntop.com/help-articles/implicit-modeling/50047965481747.png) **6. Meshing for a Cleaner Implicit** The following step is to use a **Mesh from Implicit Body** block with our raw implicit from Step 5. This will allow us to apply the Tolerance and Minimum Feature Size inputs. The resulting mesh will be a cleaner result. ![Using a Mesh from Implicit block on the extracted implicit body.](https://files.learn.ntop.com/help-articles/implicit-modeling/50047965482387.png) **7. Resulting Implicit** The second to last step of the custom block is to convert the polished mesh into an implicit body. ![An Implicit Body from Mesh block converts the Mesh to implicit body.](https://files.learn.ntop.com/help-articles/implicit-modeling/50047972383251.png) **8. Final Smoothen** The final step is to smoothen the implicit body. ![The Smoothen Body block is used to create the final implicit body.](https://files.learn.ntop.com/help-articles/implicit-modeling/50047965486483.png) **Post-Processing** Additional steps can be taken to generate the 'final' implicit, of our fluid domain, either for our next iteration or to begin creating the piping geometry we intended to manufacture. The first thing we typically need to do is **Boolean Intersect** our block from Step 6 with the Original design space; during the truncation and smooth process, our Inlet and Outlets ports can get distorted. The **Boolean Intersect** step trims them off, and then we **Boolean Union** the intersected body to our desired inlet and outlet ports; see Image #2 below. ![A Boolean Union block with a Boolean Intersect nested inside of it. The block structure can be used to further post process the implicit body created from the Fluid Domain](https://files.learn.ntop.com/help-articles/implicit-modeling/4406701924115.png) Image #1: Boolean Operations to clean and generate final geometry. ![3 variations of the same fluid domain implicit body. The left image is the result from the custom block, the middle image has the ports removed, and the last image is a Boolean Intersect of the two other bodies.](https://files.learn.ntop.com/help-articles/implicit-modeling/4406706627859.png) Image #2: The image on the left is the output from Step 6 (Smoothen Body), the image in the center is the intersection with the original design space (trimming the ports and re-confining to design space), the image on the right is the 'final' geometry. Now that you have your final implicit model with the appropriate ports, our next steps are to mesh the implicit, evaluate how this iteration compares to the performance requirements, and either repeat the iterative process (i.e., the procedure above) or begin shelling operations of the fluid domain created above to generate the plumbing geometry we would eventually manufacture. Image #3 below shows the iterations and results from the case study presented in this article. Beginning with an oversized design space (the top left part) and defining the constraint to have Outlet Uniformity with one inlet and three outlets. After only four iterations, the part and process converged on a solution resulting in the three outlets within 3.5% of the mean exit flowrate. ![A diagram showing how the implicit body design evolves over the course of the workflow.](https://files.learn.ntop.com/help-articles/implicit-modeling/4407720142227.png) ![A data comparison of mass flow rate to the 3 ports of the fluid domain design.](https://files.learn.ntop.com/help-articles/implicit-modeling/4408274814867.png) Image #3: The top half of the image shows the iterations and velocity fields brought in from Ansys Fluent. The bottom half of the images show the final iterations' results (the pink part seen above). If you still have questions, the [support team](https://support.ntopology.com/hc/en-us/requests/new) would be happy to help you. ## Examples: Both current versions of this custom block are available for download. For a comparison of the two versions, please see step 1 of the procedure of this article. * [Field from Fluid Domain - 6.0](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/CB%20-%20Field%20From%20Fluid%20Domain%206.0.ntop) * [Field from Fluid Domain - 6.1](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/CB%20-%20Field%20From%20Fluid%20Domain%206.1.ntop) ## Keywords: *import imported map fluid point domain designs CFD computational plumbing* # How to use Remap Field to scale or translate an object Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-use-remap-field-to-scale-or-translate-an-object ## Objective: This guide explains using the **Remap Field** block to scale or translate an implicit body. While other blocks exist in nTop for these operations, this method provides a foundational understanding of how field remapping and coordinate systems work. ## Applies to: * Implicit modeling * Field remapping ## Procedure: **To gain a further understanding of fields and remapping in nTop, take a look at this** [**Field-Driven Design White Paper by George Allen, an nTop Fellow.**](https://ntopology.box.com/s/moloniur010po3gwi3v4otsyb9lr7xtg) In general, Remap Field allows you to warp geometry by supplying functions or fields to specify a replacement position for every point in the model. Let's start with a simple 2D analogy: We have a number line \[0, 1, 2, 3]. If you multiply this number by 10, you get \[0, 10, 20, 30]. Basically, you are stretching out these values. This is what happens with Remap Field, but we do it to 3D geometry across XYZ. **Ex. 1** Let's use the remap block to magnify a sphere. * * Add a Sphere block * Add a Remap Field block * Input the Sphere into the Field input * X: X\*10 (can also use a Multiply block) * Y: Y * Z: Z We stretch all the X values but keep the same Y and Z values of the sphere. Multiplication scales the model while addition and subtraction translate the model. ![A gif showing how to use the Remap Field block to modify a Sphere](https://files.learn.ntop.com/help-articles/implicit-modeling/1500004669302.png) In nTop, when you modify a field, you aren't directly modifying a shape; you change the **coordinate system** used to define that shape. This is a key difference between explicit and implicit modeling: * **Explicit geometry** transforms actively (you move the object itself). * **Implicit geometry** transforms passively (you move the coordinate system, and the object moves relative to it). #### **Understanding Remapping through Equations** If you want to plot a function in the form `z = f(x, y)`, you can implicitize it by moving all the terms to one side. e.g. `0 = z - f(x, y)`You want the expression opposite the zero to be negative where the part is solid. **Ex. 2** The unit circle centered at the origin has the equation `sqrt(x^2 + y^2) - r = 0` . We want to shift this circle by +1 unit along the x-axis, the new equation is `sqrt((x-1)^2 + y^2) - 1mm = 0mm` . To move the circle +1 in the x-direction, we replaced x by x-1, not by x+1. ![An example of how to create a circle using the equation for a circle.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500005154201.png) The blue circle is the translated object. ![The same circle that was created in the previous image, but the center has been moved 1 mm to the right](https://files.learn.ntop.com/help-articles/implicit-modeling/1500005041662.png) Example as shown using a primitive sphere block. * * Input a Subtract block into the X input * Set Operand A: x * Operand B: 1 ![Two implicit spheres that are overlapping. The blue sphere is the original and the grey sphere has been moved 1 mm to the right using Remap Field.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500004745822.png) **Ex. 3** We want to scale our unit circle by a factor of 3. The scaled-up circle has the equation `sqrt((x/3)^2 + (y/3)^2) - 1mm = 0mm`. To scale the shape by a factor of 3, we scale its coordinates by a factor of 1/3. ![A small circle inside a larger circle that have been generated from equations](https://files.learn.ntop.com/help-articles/implicit-modeling/1500005041722.png) Example as shown using a primitive sphere block. * * Input a **Divide** block into the X input * Set Operand A: X * Operand B: 3 * Input a **Divide** block into the Y input * Set Operand A: Y * Operand B: 3 * Input a **Divide** block into the Z input * Set Operand A: Z * Operand B: 3 ![A small sphere that has been remapped using Remap Field. The result is a sphere that has been scaled by 3 in the x, y, and z directions.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500004884001.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Remap%20Field%20to%20Scale%20or%20Translate%20Example.ntop) ## Keywords: *block field translate map scale fields remap math how-to re coordinates equation remapping sdf magnify scales* # How to use the Evaluate Expression block Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-use-the-evaluate-expression-block ## Question: How do I use the Evaluate Expression (BETA) block? ## Applies to: * Expressions/Equations/Formulas in nTop ## Answer: ![EE block.png](https://files.learn.ntop.com/help-articles/implicit-modeling/50598742933523.png) The Evaluate Expression (BETA) block allows you to write mathematical expressions using familiar syntax instead of constructing complex calculations using multiple interconnected blocks. This makes creating, reading, and editing engineering expressions easier. To use it, enter your desired formula in the Expression input. Once you complete your formula, you will notice that the variable input will change to the first variable listed in the equation. You can then press the “+” sign to add more variable inputs until they are all present. For the block to run successfully, the units used in the variables must equate to the units of the Dimensionality input. The GIF below shows that the block errors out initially because no units are associated with the Dimensionality. ![sphere expression.gif](https://files.learn.ntop.com/help-articles/implicit-modeling/44852847130131.png) ## Supported Functions: When inputting an equation into the Evaluate Expression block, the following functions are supported: * a+b * a-b * a\*b * a/b * a^b * a\*\*b, pow(a,b), a^b * square(a) * exp(a,b) * sqrt(a,b) * log(a,b) * mod(a,b) * abs(a,b) * min(a,b) * max(a,b) * sin(a) * cos(a) * tan(a) * asin(a) * asin(b) * asin(c) * e * Pi * Phi * select(condition, value\_if\_true, value\_if\_false) ## Creating Variable Names Variable names must conform to the following formatting rules: * You can't use spaces in a variable name * Variable names must start with a letter, not a number * You can't use parentheses or brackets in a variable name ## Overload: This block has a secondary overload that utilizes the Dictionary block. This allows users to enter the variable names and values separately. This overload is best utilized when you need to evaluate multiple expressions that use the same variables. By converting the Dictionary block into a variable, you can input the list into multiple Evaluate Expression (BETA) blocks without needing to retype them. ![EE overload.png](https://files.learn.ntop.com/help-articles/implicit-modeling/50598759013267.png) ## Tips: * The Evaluate Expression (BETA) block uses the same units as registered in your nTop system. So if you try to use a unit that is not configured, nTop will change it to the registered unit. For example, in the image below, nTop is registered to use Kelvin for Temperature values. If you enter a value in Fahrenheit, it will automatically change to Kelvin. ![incorrect unit.png](https://files.learn.ntop.com/help-articles/implicit-modeling/50598743739667.png) * The variables X, Y, Z, do not always need to be defined with a numerical value. As demonstrated in the sphere example above, you can match them one to one (x=x, y=y, etc.). ## Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Evaluate%20Expression%20Example.ntop) ## Keywords: *variable question math evaluate expression equation* # How to variable loft? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-variable-loft ## Question: How do you loft an airfoil from root chord to tip chord? ## Answer: To create a tapered loft, in this case for an airplane wing, we'll use the **Remap Field** block to scale the airfoil's profile along a path. The **Remap Field** block transforms geometry; for every point in 3D space, it provides a new coordinate location. This allows you to scale, stretch, twist, or otherwise warp a part's geometry ([How to use Remap Field to scale or translate an object](/help-articles/knowledge-base/implicit-modeling/how-to-use-remap-field-to-scale-or-translate-an-object)). To further understand fields and remapping in nTop, look at this [Field-Driven Design White Paper by George Allen, an nTop Fellow](https://ntop.app.box.com/s/moloniur010po3gwi3v4otsyb9lr7xtg). ## Example of Scaling with a Rectangle: Before applying this to an airfoil, let's look at a simple example: tapering a rectangle along the Y-axis. We begin with a Rectangle on the XZ plane. To create a loft, we first must define a Ramp along the Y-axis from Y=0 to Y=20mm, which applies the scaling factor for the rectangle. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598759176467.png) We can set the **Ramp** to have an output value of *x* (the initial scale) at Y=0 and an *x/2* (200% scale) at Y=20mm. We then use the **X Field** we created using the **Ramp** block as an input to the **Remap Field** block, which creates a tapered loft. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598743887507.png) > [!NOTE] > > **Note: The Remap Field block generates an infinite field. You must use a Boolean Intersect block to combine the remapped field with a bounding box to define your part's final geometry.** ## Applying the Concept to an Airfoil Here's the step-by-step process for lofting an airfoil from a root profile to a smaller tip profile. 1. Set up the Airfoil Profile and Guide Curves First, we'll import the root airfoil profile and create the guide curves that define the wing's shape. * Import your airfoil coordinates using the **Import Points** block, and then create a 2D profile using the **Profile from Points** block. * Use the **Rotate Object** and **Scale Object** blocks to set the final size and orientation for the airfoil. For this guide, we'll assume the profile lies on the YZ plane, centered at the origin. The Y-axis represents the chord direction, and the Z-axis represents the airfoil's height. * Next, use the **Line by Direction** block or other line-creation methods to create the wing's **Leading Edge** and **Trailing Edge** guide curves. These curves define the wing's span, sweep, and taper. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598743930899.png) At the end of this step, you will have a 2D airfoil profile and the guide curves for the wing's edges. 2. We now need to create the Y Field and the Z Field to vary the airfoil size across the wing. ### **X Field (Chord Field)** * We must create an X field that ensures that the chord length varies from Root Chord Length to Tip Chord Length in the same taper ratio as the wing. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598743968019.png) We create **Distance to LE** and **Distance to TE** using **Distance to Curve from Axis** blocks. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598744019987.png) ***Tip: Use the Implicit view to see the distances to visualise inside (+) and outside (-)*** This gives us the distance, but we need the leading edge and trailing edge to follow the guide curves, so we will add *-x*, which provides us with the field that follows the guide curves. Rename these variables as **A** and **B**. > > > > > > > > > > > > > > >
    > ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598744035347.png) > > ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598744061203.png) >
    > ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598744087059.png) > > ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598759453459.png) >
    We will now use the fields created in the above step to create a Two-Body field ([The Two-Body Field](https://www.blakecourter.com/2023/07/01/two-body-field.html)) by dividing the clearance field (A-B) with the midsurface field (A+B). In our case, this results in a field whose value varies from -1 to 1 edge to edge. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598759484307.png) Use the newly generated Y field in the **Remap Field** block. You can see the ratio is not maintained for the Z height, leading to a different profile in the end. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598759533075.png) ### **Z Field (Height Scaling Field)** Similar to the Y field, we will generate a Z field, which will be used to remap the airfoil's Z value to maintain the ratio. We need to define a field, which is the ratio of chord length divided by root chord length, to keep the taper ratio. > > > > > > > > >
    > ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598759556499.png) > > ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598744284179.png) >
    Once done, use the new Z field in the **Remap Field** block, and you should have a variable lofted wing. ![](https://files.learn.ntop.com/help-articles/implicit-modeling/50598744319379.png) We will then use **Mirror Body Symetrically** and **Boolean Intersect** blocks to trim our final wing. We highly recommend completing the [Parametric Aircraft Modeling](https://learn.ntop.com/courses/parametric-aircraft-modeling/) course to learn how to build a parametric aircraft model in nTop. ## Example File [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/variable_loft.ntop) ## Keywords: *variable design remap loft wing airfoil two-body field airplane* # How to work with CAD bodies Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies ## Objective: Learn how to extract bodies from imported CAD for use in workflows. ## Applies to: * CAD Parts * CAD Assemblies * CAD Faces ## Procedure: #### **Extraction by Properties** ## **Extraction by Properties:** 1. Open up the Properties Panel for the imported part 2. Use the "CAD View" checkbox to isolate the CAD bodies list 3. Use the drop-down arrow next to the bodies list to show the items in the list. 4. Drag out the single body property chip ![A gif showing how to extract a CAD body from the properties panel of the Import Part block. The gif highlights how the CAD View feature can be used to find the body property chip quickly.](https://files.learn.ntop.com/help-articles/implicit-modeling/29254610055827.png) #### **Common Mistake: Using the CAD Body List** We commonly see users experiencing issues downstream in their workflow where they can't insert a variable into an input. This is usually due to the variable being a list. Please ensure that the original CAD body that you extracted is a single body and not a list. ![A common mistake when extracting a CAD body from an import part block. Users shouldn't extract the CAD Body list, they should extract the single body property chip.](https://files.learn.ntop.com/help-articles/implicit-modeling/29254579517459.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Extraction by Manual Selection** ## **Extraction by manual selection on screen:** **To extract CAD Faces:** * * **Single:** Click on the face you want to extract * **Multiple:** Hold SHIFT or CTRL and click on the faces you want to select * R-click and choose the option "Create CAD Face Variable" or "Create CAD Face List Variable" if multiple selected ![A gif example showing how to create CAD face variables from an imported CAD part.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500001915341.png) **To extract CAD edges or vertices:** * * **Single:** Click on the edge or vertex you want to extract * **Multiple:** Hold SHIFT or CTRL and click on the edges or vertices you want to select * R-click and choose the option "Create CAD Vertex Variable" or "Create CAD Edge Variable." ![A gif example showing how to create CAD edge variables from an imported CAD part.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500001868802.png) **To create an Implicit Body or CAD Body:** * * **Single:** Double click on the body (or just select a face on the same body if converting to Implicit) * **Multiple:** Hold SHIFT or CTRL and double-click on the bodies you want (or choose just a face on the same body if converting to Implicit) * **Implicit:** Right-click and choose "Convert CAD Body to Implicit Body" or "Convert CAD Bodies to Implicit Bodies." * **CAD:** Right-click and select the option "Create CAD Body Variable" or "Create CAD Body List Variable." ![A gif example showing how to create Implicit Body variables from an imported CAD part.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500001915641.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Extraction by Blocks** In nTop 5.8, we released a series of new blocks that are designed to help users interact with CAD bodies more efficiently. **To extract CAD Faces:** Use the **Get CAD Faces** block: ![An image of the Get CAD Faces block being used to extract faces from an imported part.](https://files.learn.ntop.com/help-articles/implicit-modeling/38449123090579.png) **To extract CAD Bodies:** Use the **Get CAD Bodies** block: ![An image of the Get CAD Bodies block being used to extract bodies from an imported part.](https://files.learn.ntop.com/help-articles/implicit-modeling/38449065784595.png) You can also use the **Get CAD Bodies by Name** block to further refine your selections: > [!NOTE] > > *Note: When exporting CAD from other softwares, use STEP if you need to export with Color and Name properties.* ![An image of the Get CAD Bodies by Name block being used to extract bodies from an imported part based on a specified name.](https://files.learn.ntop.com/help-articles/implicit-modeling/38449123095059.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Extraction by Color** You can extract CAD Faces and CAD Bodies using our two color-based blocks: * **Get CAD Faces by Color** * **Get CAD Bodies by Color** > [!NOTE] > > *Note: When exporting CAD from other softwares, use STEP if you need to export with Color and Name properties.* In the GIF below, the Color property chip is extracted from the face/body. We recommend this method as it directly links to color, as opposed to inputting the RGB values of an empty **Color** block. ![A gif demonstrating how to use the Get CAD Faces by Color and Get CAD Bodies by Color blocks.](https://files.learn.ntop.com/help-articles/implicit-modeling/38449123096979.png) If you import your CAD part and it doesn't have any color, make sure you change the Display Mode to "CAD Color". ![A gif showing how to change the Display Mode in nTop using the Display tab in the Right Side Panel.](https://files.learn.ntop.com/help-articles/implicit-modeling/38449123104531.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) And that's it! You've successfully extracted parts from your imported CAD Body for other workflows. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *import cad face implicit part variable body edge use bodies working vertex vertices extract* # I converted my part to an implicit but it doesn't look like I expected it to Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/i-converted-my-part-to-an-implicit-but-it-doesn-t-look-like-i-expected-it-to ## Issue: * When I convert my model to an implicit body it is creating artifacts and fragmented pieces. * My part has gaps where they were none * My part looks smaller than the original part * I imported a surface and converted it to an implicit. The result is very fragmented. ## Cause: This can be caused by a few things, some of the most common are: * Tolerance too high * Errors in mesh/unclean mesh * Errors from CAD * Resolution too low * Surface or thin body converted into an implicit body ## Solution: * If your tolerance is too high, change it in the block where you are converting it to an Implicit body. This will re-calculate and should get rid of any artifacts. ![The implicit body from CAD Body block. The tolerance input is highlighted](https://files.learn.ntop.com/help-articles/implicit-modeling/1500001167822.png) * If this doesn't improve your part, another method is to convert it to a Mesh. Sometimes the artifacts will disappear in the mesh. * **Unclean Mesh:** The incomplete look may be caused by meshing errors, creating artifacts. Try using the [Split Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-extract-or-clean-up-mesh-bodies) block to separate out the small, fragmented parts. * **Converted a surface to an Implicit:** Thin implicit bodies don't show up well graphically. Add a thickness to your part by using the **Thicken Body** block to show a more accurate result. It is best to thicken the part as a first step after converting it to an implicit. * **Ran a process and it looks odd:** You may need to increase the resolution of your viewport by clicking the menu in the lower-right or using the hot-key CTRL-H to take a high-resolution snapshot of your part. * **The part has gaps where they shouldn't be any:** Use CTRL-H to see a high-resolution image and see that there aren't any gaps in the implicit, it is just how it shows up graphically. Still curious about why Implicits behave a little differently? [Check out this blog post](https://ntopology.com/blog/2019/03/12/understanding-the-basics-of-b-reps-and-implicits/) to learn more about them vs typical CAD parts. ## Keywords: *error mesh part model issue artifacts fragments extra fragmented tolerance low* # Introduction to the Remap Field block Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/introduction-to-the-remap-field-block ## Summary Watch the video (40:17) below to learn all about the **Remap Field** block and how to utilize it in your designs. The topics covered are: * Basics * Mirroring * Arraying * Orienting and Reorienting Bodies * Section and Extrude * Image on Body * Spatially-varying Shifting and Stretching * Warping by Shape Fields * Cylindrical Remap * Remap Field vs Remap Body Let's get started. If you still have questions the [support team](https://support.ntopology.com/hc/en-us/requests/new) would be happy to help you. Thanks for watching! ## Download the Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Implicit%20Modeling/Intro%20to%20Remap%20Field%20Example.ntop) ## Keywords: *field body scale fields remap warp mirror orient shift remapping stretch* # Invalid units in input position Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/invalid-units-in-input-position Issue: Why am I getting the error, Invalid units in input position 1? ![The invalid units error message](https://files.learn.ntop.com/help-articles/implicit-modeling/360099995053.png) ## Applies to: * Blocks that input different units depending on how it is used, such as the Ramp block. ## Cause: These blocks allow for various units in their inputs. By default, they don't have a set unit value. Without a defined unit an error will occur. ## Solution: Write in the units you need when there are no units shown in the far right of the input. Watch the gif below to see how it works with the Ramp block. ![The gif shows how adding units to a unitless input clears up the error message.](https://files.learn.ntop.com/help-articles/implicit-modeling/360099996273.png) ## Keywords: *error ramp block empty input invalid units in position* # My part doesn't Offset to the correct value Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/my-part-doesn-t-offset-to-the-correct-value ## Issue: The **Scaled Object/Remap Body** block doesn't offset to the correct value when I use the **Offset Body/Thicken Body** block. ## Applies to: * Remapping * Scaling * Warping ## Cause: An issue with the field. ## Solution: * Open up the properties or the Remap, Scale, or distorted part. * Expand the Field properties. * Grab the Normalized Field property and drag it into the Notebook.![A Remap Scale Body block with its properties panel open. The Normalized Field property chip is extracted and placed in the notebook.](https://files.learn.ntop.com/help-articles/implicit-modeling/4414893265043.png) * Use the Normalized Field as your body or open up its properties and use its Body chip instead.![Open the properties panel of the Normalized Field. Then extract the body property chip and place it in the notebook.](https://files.learn.ntop.com/help-articles/implicit-modeling/4414893266195.png) * By using the Normalized Field, the field is normalized and you can offset and thicken your part to the correct distance. ## Keywords: *field implicit body offset thicken scale remap object value issue normalize normalized* # Self-Training Guide Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/self-training-guide ## Objective: If you are new to nTop or looking to solidify the basics, this article is the place to start. Follow along to go through a series of recommended articles and tutorials to get up and running at your own pace. Select the heading to jump to that section if you want to skip ahead. #### [Set-Up](#h-01f09ns58243ayr0d0csc1qmkc) #### [Basics](#h-01f09nsn847keheamfh15761p0) #### [Meshing](#h-01f09nstz6d60d71zatk8k4yh9) #### [Lattices](#h-01f09nszwfz30smxzam3h04swj) #### [Field-Driven Design](#h-01f09nt53rbfpmkf7grdftzj55) #### [Automation](#h-01f09ntc7kw98ybta5yt6k2d0n) #### [Simulation](#h-01f09nthr334xzz60x7y5wr2gz) #### [Topology Optimization](#h-01f09nvvpkxdqhaeyyp6hvw68q) #### [Texturing](#h-01f09nw1xbhgv22c76wgakhp4d) ## 1. Get set up and download the program Before downloading nTop take a look at the [System Requirements](/help-articles/access-and-installation/system-requirements/system-requirements-guide) to make sure your machine can run the program. Read this tutorial ([Getting Started with nTop)](/help-articles/access-and-installation/setup-and-install-troubleshooting/getting-started-with-ntop) to learn how to set up your nTop account, download the latest release of the program, and install the software. If you are having issues with this step, check out the [Account Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-account-guide) and the[Account Troubleshooting Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-account-troubleshooting-guide). If problems persist, submit a Support Ticket using the Contact Support button, and our Product Support Team will help you get it sorted out. #### **Quick Resources:** * * [How do I get technical support?](/help-articles/access-and-installation/accounts-and-licensing/how-do-i-get-technical-support) * [Cloud Licensing FAQ](https://support.ntop.com/hc/en-us/articles/360052713954) ## 2. Learn the Basics ![An example of an nTop notebook to show the platform interface.](https://files.learn.ntop.com/help-articles/implicit-modeling/4418756406547.png) [nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/) is the first available course in a learning series designed to teach users the fundamentals of nTop. This first lesson covers the basics including: * * * Defining Implicit Modeling and Field Driven Design * nTop User Interface * Controls and Keyboard Shortcuts * Notebook and Blocks * Basic Operations #### **Quick Resources:** * * [Five common pitfalls to watch out for](https://support.ntop.com/hc/en-us/articles/4407659373203) * [What are beta blocks?](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) * [How do I measure my part?](https://support.ntop.com/hc/en-us/articles/360046093094) * [What file types can nTop import and export?](/help-articles/knowledge-base/interop/what-file-types-can-ntop-import-and-export) ## 3. Learn how to Mesh ![Examples of meshes](https://files.learn.ntop.com/help-articles/implicit-modeling/4418760282515.png) [Guide to Meshing](https://learn.ntop.com/courses/102-guide-to-meshing/) is the next course in the learning series. Meshing is an essential step in just about every workflow, so it's important to learn both basic and advanced meshing capabilities. This course covers: * * * Meshing Properties and Terminology * Converting CAD bodies to Mesh * Exporting Mesh * Refining/Cleaning Meshes * FE and Volume Meshes * Selecting Sections of Meshes #### **Quick Resources:** * * [Methods for creating surface meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-surface-meshes) * [Methods for refining meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) * [Methods for creating solid meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-solid-meshes) * [How to mesh complex parts](/help-articles/knowledge-base/meshing-workflows/how-to-mesh-complex-parts) ## 4. Introduction to Lattices ![Examples of a latticed bracket.](https://files.learn.ntop.com/help-articles/implicit-modeling/4418756285587.png) nTop's lattice features are another key aspect of the software. [Intro to Lattices](https://learn.ntop.com/courses/210-intro-to-lattices/) gives a thorough insight into: * * * Lattice Properties and Terminology * Periodic Latticing * Unit Cells and Cell Maps * Non-Periodic Latticing #### **Quick Resources:** * * [How to create a conformal lattice from a Quad mesh](https://support.ntop.com/hc/en-us/articles/1500003847722) * [How to create a periodic lattice](/help-articles/knowledge-base/lattices/how-to-create-a-periodic-lattice) * [How to warp a cell map using fields](/help-articles/knowledge-base/lattices/how-to-warp-a-cell-map-using-fields) * [How to convert CAD sketches into lattices](/help-articles/knowledge-base/lattices/how-to-convert-cad-sketches-into-lattices) ## 5. Introduction to Field Driven Design ![Examples of fields generated from implicit bodies.](https://files.learn.ntop.com/help-articles/implicit-modeling/4418762514195.png) Field Driven Design is a powerful method for creating complex part designs by overlaying fields. Our course, [Intro to Field Driven Design,](https://learn.ntop.com/courses/220-intro-to-field-driven-design/) teaches you how to use fields to get the most out of your designs. This lesson covers: * * * What are Fields * Different Types of Fields * Creating Fields * How to Apply Fields to Designs #### **Quick Resources:** * * [How do I use the Ramp block?](/help-articles/knowledge-base/implicit-modeling/how-do-i-use-the-ramp-block) * [How to create a quadratic ramp](/help-articles/knowledge-base/implicit-modeling/how-to-create-a-quadratic-ramp) * [Introduction to the Remap Field block](/help-articles/knowledge-base/implicit-modeling/introduction-to-the-remap-field-block) * [How to use remap field to scale or translate an object](/help-articles/knowledge-base/implicit-modeling/how-to-use-remap-field-to-scale-or-translate-an-object) ## 6. Introduction to Automation ![Some of the list blocks offered in nTop that can be used to automate workflows.](https://files.learn.ntop.com/help-articles/implicit-modeling/4418763101331.png) Custom blocks allow users to create repeatable workflows to use across multiple designs. [Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/) teaches how to create/use custom blocks to save time and effort. Using lists also helps create a more efficient workflow. Lists allow you to input multiple items in place of a singular item. Topics covered in this course include: * * * Overview of Automation and Custom Blocks * Creating Inputs and Outputs * Importing Custom Blocks * Creating Lists * List Processing #### **Quick Resources:** * * [How to open up a Custom Block or a Toolkit](https://support.ntop.com/hc/en-us/articles/4402068300435) * [How to work with lists](/help-articles/knowledge-base/user-interface/how-to-work-with-lists) * [How to create multiple lattice designs using lists](/help-articles/knowledge-base/lattices/how-to-create-multiple-lattice-designs-using-lists) * [How to filter and sort lists](https://support.ntop.com/hc/en-us/articles/360055600174) * [nTop Command Line (nTopCL)](https://support.ntopology.com/hc/en-us/sections/360010614574) ## 7. Simulation ![Example simulation results on a brake pedal.](https://files.learn.ntop.com/help-articles/implicit-modeling/4418776523155.png) Dive into simulation with the [Intro to Simulation](https://learn.ntop.com/courses/240-intro-to-simulation/) course. nTop has powerful simulation tools for analyzing the effects of forces on designs. Whether importing simulation results or using nTop to create them, these tools will allow you to gather valuable information about your designs. Some key topics of this course are: * * * FE Components * FE Models * Boundary Conditions * Forces * Static Analysis * Modal and Buckling Analysis * Importing and Exporting Simulation Data #### **Quick Resources:** * * [How can I set up a simulation?](/help-articles/knowledge-base/structures/how-can-i-set-up-a-simulation) * [What are the options for simulating lattices?](/help-articles/knowledge-base/structures/what-are-the-options-for-simulating-lattices) * [How to create an FE Model with multiple materials](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model-with-multiple-materials) * [How to find the maximum and minimum stress values](/help-articles/knowledge-base/structures/how-to-find-the-maximum-and-minimum-stress-values) * [How to use simulation results to create a Point Map or Field](/help-articles/knowledge-base/structures/how-to-use-simulation-results-to-create-a-point-map-or-field) ## 8. Topology Optimization ![A diagram showing an imported part that has a Topology Optimization run on it to create an optimized Final Part.](https://files.learn.ntop.com/help-articles/implicit-modeling/37420432196755.png) Topology Optimization (TopOpt) is a numerical design operation that determines the optimal shape of a part based on a set of objectives and constraints. TopOpt allows the user to design geometries that best achieve the desired objective while considering complex and multivariate design constraints. Learn how to run a TopOpt in this course [Topology Optimization](https://learn.ntop.com/courses/340-topology-optimization/) #### **Quick Resources:** * * [Users' Guide to Topology Optimization](/help-articles/knowledge-base/optimization/users-guide-to-topology-optimization) * [Understanding the Topology Optimization settings](/help-articles/knowledge-base/optimization/understanding-the-optimization-settings) * [How to use the overhang constraint in Topology Optimization](/help-articles/knowledge-base/optimization/how-to-use-the-overhang-constraint) * [How do I use geometric constraints?](/help-articles/knowledge-base/optimization/how-do-i-use-geometric-constraints) ## 9. Introduction to texturing ![Some example bodies with different textures applied.](https://files.learn.ntop.com/help-articles/implicit-modeling/4418777489939.png) nTop has an unprecedented range of tools to produce unique, field-driven surface textures. Learn all about adding texture to your part with the following articles: * * * [Generating surface textures with procedural modeling](/help-articles/knowledge-base/textures/generating-surface-textures-with-procedural-modeling) * [How to create a Voronoi surface texture](/help-articles/knowledge-base/textures/how-to-create-a-voronoi-surface-texture) * [How to create a knurled texture](/help-articles/knowledge-base/textures/how-to-create-a-knurled-texture) #### **Quick Resources:** * * [How to generate surface roughness](https://support.ntop.com/hc/en-us/articles/360060946514) * [How to generate random patterns on the surface of a part](/help-articles/knowledge-base/textures/how-to-generate-random-patterns-on-the-surface-of-a-part) * [How to generate surface roughness with varying amplitude or frequency](/help-articles/knowledge-base/textures/how-to-generate-surface-roughness-with-varying-amplitude-or-frequency) #### Thank you for following along with our Self-Training Guide! Now that you've gotten a taste for what nTop offers, we hope you feel confident to move to the next level in your learning. Check out the [Knowledge Base](https://support.ntopology.com/hc/en-us/categories/360003678133), the [Learning Center,](https://learn.ntopology.com/) and [nTopLives](https://www.youtube.com/c/nTopology) for further resources. ## Keywords: *cad mesh simulation ramp texture field lattice part list meshing export tpms create driven static analysis started how to learn beginner lists shell user interface design fe topology fill start model optimization texturing training command line onboard onboarding get self train quickstartguide* # Shelling a Boolean Union inward doesn't create the result I expect Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/shelling-a-boolean-union-inward-doesn-t-create-the-result-i-expect ## Issue: Shelling a Boolean Union inward doesn't create the result I expect. It adds a wall or a gap between the bodies. ## Applies to: * Shell * Implicit modeling ## Cause: A wall or a gap can appear between the two implicit bodies due to the fields of the bodies. When the two shapes are Boolean Unioned together, it adds their fields together. Therefore, when the Implicit Bodies are shelled inward, it follows the contour of the field, creating either a wall or a gap depending on the fields of the original bodies. If we use the **Shell** block on this **Boolean Union** of two boxes, the result lines up with the shape of the contours, depending on what Direction we choose Outward, Inward, and Center. Therefore, if we shell it inward, it adds a wall between the two objects. ![The image below shows the field of two neighboring boxes that have been combined and shelled. Despite the boxes being merged into a single body and then shelled, the field shows a wall between the boxes.](https://files.learn.ntop.com/help-articles/implicit-modeling/4403374764435.png) ![Two neighboring boxes that have been combined and shelled.](https://files.learn.ntop.com/help-articles/implicit-modeling/4403383116307.png) ## Solution: To shell inward without a wall or a gap, you need to make sure the boolean union objects are overlapping slightly, then you convert the **Boolean Union** into a mesh and then back into an implicit. When you do this, it won't have a wall or gap between the two shapes because it won't recognize the individual fields of the shapes from before they were unioned together. ![Two cubes that are overlapping are merged using a Boolean Union block. The single body is then meshed and then converted back into an implicit body. The field view of the body shows a single box with no wall dividing them.](https://files.learn.ntop.com/help-articles/implicit-modeling/4403559577235.png) If you want to learn more about implicit vs boundary representations, [check out this blog](https://ntopology.com/blog/2019/03/12/understanding-the-basics-of-b-reps-and-implicits/). ## Keywords: *boolean implicit Shelling shell between question fields field driven design wall inward* # Tips on creating equations from math blocks Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/tips-on-creating-equations-from-math-blocks ## Objective: Learn some tips on how to use Math blocks to create equations. ## Procedure: #### **Nesting** Each Math block computes an expression and can be nested together with other math blocks to create larger equations. The equation (X+2)\*Y=0 is shown below. ![An Add block inside the first input of a Multiply block. These blocks are used to create the equation The equation (X+2)\*Y=0](https://files.learn.ntop.com/help-articles/implicit-modeling/1500007303321.png) #### **Overloads** The math blocks can compute different types of data by using Overloads to change the type. Some blocks have more options than others. The Overloads can change automatically depending on what input is given. An example of available Overloads for the **Add** block is shown below: ![The dropdown menu of the available Add block overloads. ](https://files.learn.ntop.com/help-articles/implicit-modeling/1500006902302.png) #### **Results** Once you've entered the inputs for a math block, the result is shown in the upper right corner (depending on the overload type). You can see more results in the Property panel as well. ![A gif showing how once the operand inputs of an Add block are populated, the result can be found in the upper corner of the block. The result is also shown in the block's properties panel.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500006903082.png) #### **Units** One thing to look out for when creating equations is units. Sometimes you need to cancel units out by dividing by 1 of the same unit. If you encounter an error for an 'Incompatible units in input...', there is a chance you've forgotten to add units. In the example below, adding 'mm' to Operand B clears the error. ![If an operand input of a math block doesn't have applied units, the block will error out with the message "Incompatible units in input positions 0 and 1.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500006903482.png) #### **Variables** X, Y, and Z can be written in most math blocks directly but sometimes units don't allow them to be. If this occurs you can write in X/ 1mm or use an **Axis** block as your variable. You can check out the **Axis** method in the article: [How to create a quadratic ramp.](/help-articles/knowledge-base/implicit-modeling/how-to-create-a-quadratic-ramp) Below is an example of sin(x). The **Axis** needs to be divided by 1 mm to get rid of the units. ![An example of sin(x). The Axis needs to be divided by 1 mm to get rid of the units.](https://files.learn.ntop.com/help-articles/implicit-modeling/1500007317421.png) Here is an example of cos(x), using the method where we divide by mm. ![an example of cos(x), using the method where we divide by mm](https://files.learn.ntop.com/help-articles/implicit-modeling/4403375019027.png) ## Keywords: *block variable use multiply math tips equations how-to z x divide equation square y* # What is the difference between offset body and thicken body? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/what-is-the-difference-between-offset-body-and-thicken-body ## Question: What is the difference between the **Offset Body** block and the **Thicken Body** block? ## Answer: When working with parts in nTop, sometimes you may need to increase or decrease the size of the part. There are two main options for doing this: **Thicken Body** and **Offset Body**. ![ThickenBody.png](https://files.learn.ntop.com/help-articles/implicit-modeling/360072936413.png) *Thicken Body: Create a thickened hollow Implicit Body using an Implicit boundary as a mid-surface.* The **Thicken Body** block thickens the part in both directions, using the boundary of the body as the centerline of the thickness. **Thicken Body** is best to use for 1D or 2D parts, such as CAD surfaces or graph lattices. When thickening a lattice, the thickness value can be thought of as a diameter value. ![OffsetBody.png](https://files.learn.ntop.com/help-articles/implicit-modeling/360071743974.png) *Offset Body: Offset the surface boundary of an Implicit Body inward or outward.* **Offset Body** works best for objects that already have a volume. It adjusts the surface boundary of the part. A positive value increases the surface boundary, while a negative value decreases it. When offsetting a lattice, the distance value can be thought of as a radius value. ![thickness\_offset.png](https://files.learn.ntop.com/help-articles/implicit-modeling/360072936333.png) ## Keywords: *blocks lattice volume body offset thicken what is the difference between thick hollow* # What is the dimensional tolerance of implicit models? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/what-is-the-dimensional-tolerance-of-implicit-models ## Question: What is the dimensional tolerance of Implicit modeling? Do I need to watch for tolerance stack up? ## Answer: The dimensional tolerance of Implicits is exact up to floating-point precision. ## Keywords: *implicit model point up tolerance dimensional stack floating precision* # Why can't I see my block when it runs? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/why-can-t-i-see-my-block-when-it-runs ## Issue: I added a block, put in the inputs, but I can't see the result. I only see my original block. ## Applies to: * Adding blocks to the Notebook ## Cause: There is another visible block covering the results of the new block. Since the Notebook isn't linear, each block has its own visibility and effects, which usually have to be turned off to see downstream blocks. ## Solution: * Isolate your block view by selecting the block and pressing the 'i' key * Scroll up through the Notebook and turn off the visibility of previous blocks by pressing the 'o' symbol in the upper right-hand corner. A solid circle means on and a clear circle means off. ![A gif showing how to toggle the visibility of a block.](https://files.learn.ntop.com/help-articles/implicit-modeling/360098719074.png) ## Keywords: *error part view with working not run visibility visible can't see appear cover comes original appearing isolate show* # Why does my part appear to lose detail when it's converted to an implicit body? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/why-does-my-part-appear-to-lose-detail-when-it-s-converted-to-an-implicit-body ## Issue: When converting an imported CAD body to implicit using the Implicit Body from CAD Body block, the objects appear to lose detail / is tessellated but one would expect the implicit body to match the CAD body exactly. ## Applies to: * Importing ## Cause: This is happening because the Tolerance on the Implicit Body from CAD Body is too large to capture the details of the part. The details become merged into each other and are not representative of the true shape. ## Solution: Decrease the Tolerance to be small enough to capture all the details of your part. ![A gif showing how modifying the tolerance input of the Implicit Body from CAD Body block affects the resulting implicit geometry. ](https://files.learn.ntop.com/help-articles/implicit-modeling/360095052214.png) ## Keywords: *import implicit trouble view problem edges details distort graphical issue* # Why does thickening my part create rounded edges? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/why-does-thickening-my-part-create-rounded-edges ## Question: Why does thickening my part create rounded edges? Can I thicken my part without rounded edges? ## Applies to: * nTop * Thicken Body * Offset Body ## Answer: You cannot thicken your part without having rounded edges. This occurs because Implicits are made from Fields. When the implicit body is thickened, it follows the contours in its field. The image below shows a **Box** with contour lines on its field. ![An example of a box implicit body with its field displayed. The field surrounding the box has rounded counters emanating outwards from the box.](https://files.learn.ntop.com/help-articles/implicit-modeling/4402702529299.png) If we use a **Thicken Body** block on this box, the result lines up with the shape of the contours, depending on how much you are thickening the part. ![A thicken body block is applied to the box to add 2 mm of thickness. The box now has rounded edges.](https://files.learn.ntop.com/help-articles/implicit-modeling/4402702529043.png) If you want to learn more about implicits vs boundary representations, [check out this blog](https://ntopology.com/blog/2019/03/12/understanding-the-basics-of-b-reps-and-implicits/). ## Keywords: *field body offset thicken question edges rounded contour* # Why is the bounding box larger than my implicit model? Source: https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/why-is-the-bounding-box-larger-than-my-implicit-model ## Issue: Why is the bounding box larger than my implicit model? ## Applies to: * Implicit modeling ## Cause: This occurs because it isn't possible to create a guaranteed exact bounding box on all implicit operations. Computing tight bounding boxes for an arbitrary implicit is actually a non-trivial problem. Since we don't explicitly know where the surface is, we have to search for it, and doing this reliably and fast is hard. Sometimes we can use the objects used to construct the implicit to get a good guess and refine from there. ## Solution: There are two solutions for a more accurate bounding box: 1. Use the **'Refine Bounding Box'** with Grid Size value. ![The Refine Bounding Box block](https://files.learn.ntop.com/help-articles/implicit-modeling/21282803991315.png) 2. If you need an exact bounding box, convert the Implicit Body to a Mesh body. The Mesh part will have an exact bounding box. ## Keywords: *implicit body issue box too bounding exact oversize inaccurate big larger boxes bounds* # Knowledge Base Source: https://docs.ntop.com/help-articles/knowledge-base/index > **[Fluids](/help-articles/knowledge-base/fluids/how-to-run-a-conjugate-heat-transfer-cht-analysis)** > > nTop Fluids is a computational fluid dynamics (CFD) toolset > **[Lattices](/help-articles/knowledge-base/lattices/how-to-build-a-custom-lattice-unit-cell)** > > Find answers and how-to's regarding periodic structures. > **[Meshing Workflows](/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices)** > > Get solutions and best practices for creating surface and volume meshes. > **[Structures](/help-articles/knowledge-base/structures/how-to-import-and-use-superelements)** > > Explore knowledge regarding FE analysis. > **[Implicit Modeling](/help-articles/knowledge-base/implicit-modeling/how-to-variable-loft)** > > Get answers and how-to's regarding core modeling capability. > **[Rib Design](/help-articles/knowledge-base/rib-design/guide-to-rib-design)** > **[Optimization](/help-articles/knowledge-base/optimization/how-to-set-up-a-parameter-optimization)** > > Explore specific knowledge concerning optimization. > **[Textures](/help-articles/knowledge-base/textures/how-to-create-equidistant-planes-on-a-curve)** > > Find answers and how-to's about textures. > **[User Interface](/help-articles/knowledge-base/user-interface/adding-markdown-and-images-to-ntop-notebooks)** > > Find answers regarding Notebooks and the user interface. > **[nTop Connect](/help-articles/knowledge-base/ntop-connect/how-to-create-and-enable-a-connector-for-ntop)** > **[Interop](/help-articles/knowledge-base/interop/advanced-aircraft-design-with-suave-integration)** > > Find answers regarding the interoperability of CAD, CAE, and CAM data. > **[nTop Automate](/help-articles/knowledge-base/ntop-automate/how-to-track-progress-and-log-output-in-ntop-automate)** > > Find specific content regarding nTop's command-line interface. > **[Additive Manufacturing Preparation](/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-visualize-overhang-and-draft-angles)** > > Learn how to slice your parts and get them prepared for additive manufacturing > **[FDM Fixture Generator](/help-articles/knowledge-base/fdm-fixture-generator/fdm-fixture-generator-video-walkthrough)** > > Create and automate custom jigs and fixtures, with workflows specifically developed for FDM 3D printing in collaboration with Stratasys. # Advanced Aircraft Design with SUAVE Integration Source: https://docs.ntop.com/help-articles/knowledge-base/interop/advanced-aircraft-design-with-suave-integration nTop has developed a comprehensive integration framework with [Stanford University's Aerospace Vehicle Environment (SUAVE)](https://suave.stanford.edu/) to accelerate conceptual aircraft design and optimization workflows. This integration bridges the gap between nTop's field-based modeling capabilities and SUAVE's aerospace analysis tools. ## **What is SUAVE?** SUAVE is a modular, conceptual-level aircraft optimization platform that handles aerodynamics, propulsion, mission profiles, and multi-disciplinary optimization (MDO). The platform takes structured input data to define vehicles, operating conditions, and mission parameters for comprehensive aerospace analysis. ## **Integration Overview** Our SUAVE integration consists of nTop custom blocks and Python scripts that standardize aircraft configuration data and enable seamless export to SUAVE's analysis environment. This workflow transforms the traditional aircraft design process by: * **Streamlining Data Transfer**: Automated export of complex aircraft configurations from nTop to SUAVE-compatible formats * **Ensuring Design Consistency**: Standardized parameter definitions across all aircraft components * **Accelerating Iteration Cycles**: Direct integration eliminates manual data translation steps * **Enabling Optimization**: Parametric nTop models feed directly into SUAVE's optimization algorithms ![](https://files.learn.ntop.com/help-articles/interop/50598742907923.png) ## **Capabilities** ### **Aircraft Configuration Blocks** Our integration includes comprehensive blocks for defining complete aircraft systems: | Vehicle Design | | - | * **Wing** geometry with full aerodynamic parameterization (aspect ratio, taper, sweep, twist distribution) * **Fuselage** configuration including passenger layout and structural parameters * **Landing gear systems** with tire, strut, and ground operation specifications * **Turbofan engine system** modeling including engine mounting and positioning, component-level configuration (fan, compressor, combustor, turbine, nozzles), performance parameters and operating conditions, and rotational dynamics analysis * **Mass properties** breakdown for performance and structural analysis | Mission Planning | | - | * **Airport** environmental conditions and atmospheric parameters * **Flight segment** definitions for climb, cruise, and descent phases * **Performance envelope** limits and operational constraints ### **Export and Analysis Pipeline** Seamless data export capabilities that generate SUAVE-compatible files for: * Complete vehicle configuration analysis * Mission profile optimization * Multi-disciplinary design studies * Performance prediction and validation ## **Applications** This integration enables advanced aerospace design workflows including: * **Conceptual Design Studies**: Rapid exploration of aircraft configurations and their performance implications * **Mission Optimization**: Analysis of flight profiles and operational efficiency * **Parametric Studies**: Systematic investigation of design parameter effects * **Multi-disciplinary Optimization**: Integration of aerodynamics, structures, and propulsion considerations ## **Getting Started** To leverage this advanced aerospace design capability, the nTop Team can offer: * The complete SUAVE integration library * Custom workflow development for specific aircraft types * Training and implementation support [Contact our team](https://design.ntop.com/request-a-demo/) to collaborate on specific design requirements and customize implementation accordingly! # An unexpected error occurs upon opening files. Source: https://docs.ntop.com/help-articles/knowledge-base/interop/an-unexpected-error-occurs-upon-opening-files ## Issue: When opening a file, the software displays the error "nTop encountered an unexpected error processing the file." Files with a size of 0 kb usually mean the data is corrupt. ![errorunexpected.jpg](https://files.learn.ntop.com/help-articles/interop/errorunexpected.jpg) ## Applies to: * nTop ## Cause: This error generally occurs due to the software unexpectedly exiting during the Save process. ## Solution: Regrettably, a file size of 0 kb usually means the data is corrupt. We cannot restore the file. The best suggestion is to check the Autosave folder for a backup copy. 1. Open nTop 2. Go to **File > Settings** 3. On the left side, click **File Backup.** 4. Check the box to make sure Autosave is active. 5. Next to the Autosave folder, click the icon to browse to the backup directory. We can potentially restore files with a size larger than 0 kb. Contact support with the problematic file and report any useful details. More on this topic: * [nTop Troubleshooting Guide](/help-articles/access-and-installation/setup-and-install-troubleshooting/ntop-troubleshooting-guide) * [An error message displays when importing a custom block](https://support.ntop.com/hc/en-us/articles/1500002495541) ## Keywords: *error file processing process encountered unexpected zero bytes corrupt autosave backup recover* # Can I export a mesh file with colors? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/can-i-export-a-mesh-file-with-colors ## Question: Is it possible to preserve the object color when exporting mesh formats? ## Applies to: * nTop * Mesh export ## Answer: Regretfully, we don't export colors. This is a popular request; our team is exploring options. ## Keywords: *stl mesh obj export 3mf colors* # Can I Export an FE Model with varying thickness shell elements? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/can-i-export-an-fe-model-with-varying-thickness-shell-elements ## Question: Can I export an FE Model with varying thickness shell elements? ## Answer: No. Unfortunately, we don't support the **Export FE Model** block, with a field used to define the thickness, due to its potentially huge file size caused by the material data of the elements. ## Keywords: *thickness export shell question variable thickness shell elements FE Model* # Can I import a CAD sketch? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/can-i-import-a-cad-sketch ## Question: Can I import a CAD sketch? ## Applies to: * Import * Export ## Answer: Yes, you can import a CAD sketch into nTop. You can import it by itself or with a CAD Body. Sketches are imported as a Curve type. To extract the curves from your CAD Body, open up the Properties panel and drag out the Curves chip into your Notebook. ![An Import Part block with its properties panel open. The Curves property chip can be extracted and placed in the notebook.](https://files.learn.ntop.com/help-articles/interop/40340470529939.png) ## Keywords: *import cad question curve line sketch segment* # Can I use relative paths instead of absolute paths? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/can-i-use-relative-paths-instead-of-absolute-paths ## Issue: Can I use relative paths instead of absolute paths? ## Cause: When you input a relative path (such as a standalone filename like file\_name.ext or a path starting with a dot like ./xyz/file\_name.ext), nTop resolves this location relative to its official software installation directory. By default, the software looks for or saves relative file paths in: \**C:\Program Files\nTopology\nTopology\** Because nTop evaluates relative paths based on the parent installation folder rather than the directory where your current .ntop notebook file is saved, using short relative paths can easily lead to missing file errors or misplaced exports. ## Solution: To prevent broken file links and ensure your workflows remain portable, we recommend using absolute paths **(e.g., C:/Users/your\_username/Downloads/file\_name.ext).** When you provide the complete directory path, nTop accesses the file correctly regardless of where your project file is saved. If you need to construct flexible or dynamic file paths to easily share workflows across different computers, you can use the **Concatenate Text** block to build a pseudo-relative path system. ![](https://storage.googleapis.com/files-learn/help-articles/interop/relative-path.png)![]() ## Keywords: *list export file question element path text absolute relative concatenate folder* # Can lattice shell elements be exported as 3MF? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/can-lattice-shell-elements-be-exported-as-3mf ## Question: Can lattice shell elements be exported as 3MF? I.E. a thickened "Rib Lattice from Beams"? ## Applies to: * nTop * Mesh export ## Answer: No, 3MF currently only supports beam lattices, therefore shell elements can't be exported. ## Keywords: *lattice export shell 3mf element rib beam elements 3MF Magics exporting* # CSV import error: Could not find Output Object Source: https://docs.ntop.com/help-articles/knowledge-base/interop/csv-import-error-could-not-find-output-object ## Issue: When trying to import a CSV file, this error pops up: Error: Could not find output object. ## Applies to: * Import Point Map ## Cause: The CSV file encoding is the wrong type. ## Solution: All CSVs need to be encoded with UTF-8. This setting can be changed in programs such as Notepad++ or Excel. ![The Encoding menu of Notepad ++. The menu shows how the imported CSV is currently UTF-8 encoded.](https://files.learn.ntop.com/help-articles/interop/360081840014.png) ## Keywords: *import error export data csv point object could not find output encoding encode UTF 8 delimited comma* # Exporting a list of CAD parts as a CAD file doesn't perform as expected Source: https://docs.ntop.com/help-articles/knowledge-base/interop/exporting-a-list-of-cad-parts-as-a-cad-file-doesn-t-perform-as-expected ## Issue: Some workflows require exporting multiple CAD bodies to a single CAD file. When entering a CAD body list into the Export part, only the last item in the list is exported as a body. ## Applies to: * CAD * Parasolid * STEP * Export part * nTop ## Cause: nTop doesn't currently support exporting multiple body CAD parts. When trying to export the list of objects, the system exports the list items separately. However, each file will overwrite the previous list item, so only the final object successfully exports. ## Solution: This functionality is a popular request, and we are exploring potential solutions. A workaround is to export each part separately, use your CAD software to import them into a single file, then export again. ## Keywords: *cad part export parasolid step bodies multiple issue multibody* # How can I export the displacement results from a simulation? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-can-i-export-the-displacement-results-from-a-simulation ## Question: How can I export the displacement results from a Simulation? ## Applies to: * Simulation * Design Analysis ## Answer: You can do this by using the **Displacement Point Map** block and then using the **Export Point Map** block. With the **Export Point Map** block, you need to change the Overload to allow for Vector Point Maps. You can do this by selecting the drop-down arrow on the **Export Point Map** block. ![An example of changing the Export Point Map overload from Scalar to a Vector Point Map. Once Vector Point Map is selected, the block can export a Displacement Point Map.](https://files.learn.ntop.com/help-articles/interop/41633585861523.png) Once the Overload is changed, insert the **Displacement Point Map** and choose the Units. Then save the file in .CSV format. ## Keywords: *analysis simulation export map file design results max min point scalar displacement overload vector path length* # How do I embed my imported part/mesh? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-do-i-embed-my-imported-part-mesh ## Question: How do I embed my imported part? How do I embed my imported mesh? ## Applies to: * Importing * Part * Mesh * Embedding ## Answer: Embedding your imported file makes sure you don't run into any issues with links to files or folders that may not be on your computer. To embed an imported file, follow these steps: * Right-click on the Import block **(Import Part/Import Mesh)** * Select the **"Embed"** option ![An imported mesh with the right click menu open. The Embed option is highlighted.](https://files.learn.ntop.com/help-articles/interop/4416556192531.png) If you wish to embed a mesh that is created in the file, you need to export it out and then import it back to embed. Embedding removes all import options that are normally available from the Import block, saving (embedding) the part into your nTop file. To un-embed, your file, delete the embedded block. ## Keywords: *import part export file question save embed* # How to export a mesh and lattice to 3MF format Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-a-mesh-and-lattice-to-3mf-format ## Objective: Learn how to set up a part for exporting to 3MF. Once in 3MF, the part can be easily opened in programs like Materialize Magics. The 3MF Export block accepts a mesh of the non-lattice regions of the part, along with the option to add a lattice or a thickened lattice. If a lattice without a thickness is used, the block will automatically apply a 1mm thickness to all beams. Only beam-based lattices are supported for 3MF lattice export, so face-based lattices like hexagonal honeycomb cannot be used. ## Applies to: * Meshing * Import * Export ## Procedure: ![The Export 3MF block](https://files.learn.ntop.com/help-articles/interop/14481791374611.png) In this example, we export a wrench with a lattice infill. Instead of using a Boolean Union to merge the two parts together, we keep them as separate types. The 3MF Container will combine them when we export it. We start out with an Implicit body and a thickened lattice. ![A 3MF model that was exported with the outer body separate from the inner lattice.](https://files.learn.ntop.com/help-articles/interop/14482188299411.png) ### 1. Convert Main Body to Mesh format Convert the main body of your part to a mesh format. Use the **Mesh from Implicit Body** block and set an appropriate feature size. If your part is more complex, you may need to run further meshing operations to capture all the details. ![Mesh the exterior body.](https://files.learn.ntop.com/help-articles/interop/14482201374611.png) ### 2. Keep the Lattice Format Drag and drop the Thick Graph property chip from the **Trim Lattice** block. > [!NOTE] > > **Note:** The 3MF format can't import surface lattices. Only beam lattices work with this method. ### 3. Add 'Export 3MF' block Insert an **Export 3MF** block. Drag the Thick Graph and the Mesh block into the inputs. Set the units, choose a file path, and your part is exported. ![Inserting the meshed outer body into the Mesh input of the Export 3MF block. Extract the Thick Graph property chip from the Trim Lattice properties panel. Place the Thick Graph property in the Lattice input of the 3MF block.](https://files.learn.ntop.com/help-articles/interop/14482297257875.png) ### 4. Further Processing Now that we've exported our part, we can open it up in a program like Materialize Magics. In the current version of Magics 24.01, the graph of the beams is visualized, but not the thickness. However, when you slice the lattice, you will see that the beam thickness is accurately represented in the slices. To see the thickened slices, use the 'Official Machine' build space and not the 'Magics Default' build space. Supports can be added to the mesh, and the lattice beams in Magics support generation modules and then sent to build processors. ![The 3MF file opened in Materialize Magics.](https://files.learn.ntop.com/help-articles/interop/14482911432979.png) And that's it! You've successfully exported your part using the 3MF file type. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Interop/Export%20Mesh%20and%20Lattice%20to%203MF%20Example.ntop) ## Keywords: *mesh lattice part export 3mf format thickened interop magics materialize mashing* # How to export a Simplified Body Representation of Implicit as a CAD part Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-a-simplified-body-representation-of-implicit-as-a-cad-part ## Objective: Export a high complexity implicit design as a simple CAD envelope with the mass properties of implicit designs. > [!NOTE] > > **Note:** Lattice or texture designs with millions of faces are too complex to be consumed by traditional CAx systems. In case of any downstream CAD functions requiring the mass properties of implicit designs, nTop has a function for exporting the simplified body of implicit design. This simplification includes an envelope shape that can be used in clearance analyses. We also export a collection of smaller bodies whose densities are chosen to produce correct weight, center of gravity, and moment of inertia results in CAD system calculations. ## Applies to: * Export to PTC Creo * Export to Siemens NX * Export to Solidworks ## Procedure: **1.** **Simplified Body Representation:** Provide a CAD envelope and the implicit body that you would like to simplify as well as the density of the material. ![An example of exporting a Simplified Body Representation from nTop.](https://files.learn.ntop.com/help-articles/interop/7388299175443.png) **2. Optional:** Use a **Refine Mesh** block to refine the Quad Mesh and capture further details and reduce the amount of rounding near sharp edges. >
    Options Detail
    ![The Simplified Body Representation block with a specified CAD Envelope, Implicit Body, and Density. With this configuration, the CAD Envelope will be assigned with a modified density value to match the mass of the implicit part.](https://files.learn.ntop.com/help-articles/interop/7388067720851.png) CAD Envelope will be assigned with a modified density value to match the mass of the implicit part.
    ![The Simplified Body Representation block with a specified CAD Envelope, Implicit Body, Density, and the Match Inertia input being used. With this configuration, the CAD Envelope will be converted to surface bodies and small solid spheres with uniform radius and modified density values will be generated inside of the envelope to match the mass, center of mass, and principal moment of inertial of the implicit part.](https://files.learn.ntop.com/help-articles/interop/7388055118611.png) CAD Envelope will be converted to surface bodies and small solid spheres with uniform radius and modified density values will be generated inside of the envelope to match the mass, center of mass, and principal moment of inertial of the implicit part.
    ![The Simplified Body Representation block with neither the Match Inertia or Uniform Density inputs being used. With this configuration, the CAD Envelope will be converted to surface bodies and small solid spheres with varying radii and uniform modified density values will be generated inside of the envelope to match the mass, center of mass, and principal moment of inertial of the implicit part. This option is required for Solidworks only.](https://files.learn.ntop.com/help-articles/interop/7388070368915.png) CAD Envelope will be converted to surface bodies and small solid spheres with varying radii and uniform modified density values will be generated inside of the envelope to match the mass, center of mass, and principal moment of inertial of the implicit part. This option is required for Solidworks only.
    **3.** **Export Part:** Export the simplified part as a Parasolid file with the **.x\_t** file extension. ![Using the Export Part block to export the Simplified Body Representation.](https://files.learn.ntop.com/help-articles/interop/7388007131411.png) **4.** **Mass Properties:** Use **Mass Properties from Body** block to compute the mass properties that you would expect in CAD. Import the simplified part in CAD to confirm if the mass properties match between nTop and CAD. ![The Mass Properties panel of the Simplified Body Representation in NX.](https://files.learn.ntop.com/help-articles/interop/7387990550419.png) And that's it! You've successfully exported your part as a simplified CAD design. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Export%20Simplified%20Body%20Example.ntop) ## Keywords: *export body of representation mass moment simplified inertia* # How to export an implicit body? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-an-implicit-body ## Question: Can I export an implicit body? ## Applies to: nTop 4.3 ## Answer: We have added a new **Export Implicit Body (**[**Beta**](/help-articles/knowledge-base/user-interface/what-are-beta-blocks)**)** that lets you export Implicit Body as a **nTop Implicit (\*.implicit)** file. You can learn more about Implicit Interop [here](https://www.ntop.com/software/capabilities/implicit-interop/). ![The Export Implicit Body block.](https://files.learn.ntop.com/help-articles/interop/17574296983187.png) ## Keywords: *implicit export body question* # How to export an STL Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-an-stl ## Objective: Learn how to export STL, OBJ, or PLY files. ## Procedure: In order to export STL, OBJ, or PLY files, you will need a mesh since these are mesh formats. **1.** Convert your part to a Mesh. Common blocks for conversion are: * * **Mesh from Implicit Body** * **Mesh from CAD Body** * **Mesh from Voxel Grid** **2. Optional:** Refine the mesh using one or more of the following blocks: * * **Remesh Surface** * **Refine Mesh** * **Simplify by Amount** * **Simplify by Threshold** * Find more tips on refining [here](/help-articles/knowledge-base/meshing-workflows/how-to-mesh-complex-parts) **3.** Export the Mesh * * **Add an Export Mesh** block. This allows you to define units, file locations, and file types for a repeatable workflow. * OR * Right-click the final mesh block and select *Export* for fast one-off exports And that's it! You've successfully exported a mesh file. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Export%20an%20STL%20Example.ntop) ## Keywords: *Export stl mesh ply obj meshing 3mf remesh refine simplify exporting* # How to Export Curves from nTop to NX for CAD reconstruction Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-curves-from-ntop-to-nx-for-cad-reconstruction ## Objective This article explains how to export curve and point data from nTop to rebuild surface geometry inside Siemens NX. ## Applies to * **nTop** * **Siemens NX** * CAD Interop and Geometry Reconstruction Workflows ## Supported File Formats When transferring curve and point data from nTop to Siemens NX, select the file format that best suits your downstream workflow: * **Curves:** nTop supports STEP (.stp), Parasolid (.x\_t), and IGES (.iges) formats via the Export Part block. * **Points:** Siemens NX supports point cloud and coordinate imports in ASCII text format via the **Export Points** custom block. [https://www.youtube.com/embed/lxhE\_5VoL1s](https://www.youtube.com/embed/lxhE_5VoL1s) ## ## Procedure ### Step 1: Export Curves and Points from nTop 1. Open your workflow in nTop and locate your wing and duct curve lists. 2. Add an Export Part block to export your wing and engine curves. Specify a file path ending in .stp, .x\_t, or .iges. 3. Add an Export Points block to export point data. Set the destination file path to export in ASCII text format (.txt or .csv). ![nTop interface displaying a flying wing and duct model with the Export Part and Export Points blocks active in the left notebook panel.](https://storage.googleapis.com/files-learn/help-articles/interop/wing_curve_export.png)![]() ### Step 2: Import Files into Siemens NX 1. Launch Siemens NX and open your working part file. 2. Navigate to **Home** > **Import** > **IGES** (or select **STEP** / **Parasolid** depending on the format exported from nTop). 3. Select your exported nTop curve file to import the geometry into your NX workspace. 4. Import your ASCII point file using the NX Point Constructor or Point import tool. ### Step 3: Reconstruct the Surfaces In Siemens NX, utilize the imported geometry for surface and body construction. * Imported curves can be used as Section and Guide curves in Sweeps, Extrusions, Revolutions, and other solid and surface features. * Linear curves can be used as axes and vectors. * Imported points can be used for constructing curves and datums. And that's it! You've successfully exported curves from nTop and reconstructed your geometry in Siemens NX. Are you still having issues? Contact the support team, and we'll be happy to help! ### **Download the Example file:** [nTop to NX Curve Export Example File](https://files.learn.ntop.com/help-articles/interop/flyingwing_simple_ntop_nx.zip) # How to export designs from nTop for CFD Analysis in Siemens StarCCM+? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-designs-from-ntop-for-cfd-analysis-in-siemens-starccm This video demonstrates a workflow to export a heat exchanger geometry from nTop for CFD (Conjugate heat transfer) analysis in Star-CCM+. The workflow involves the generation of surface meshes of the solid and fluid regions as STL files, with the surface sets representing boundary conditions written into the file. This way, these surface sets can be accessed easily in Star-CCM+ for boundary condition and contact assignment, followed by volume meshing and analysis. Before watching the video, we recommended the following courses on [nTop Learn](https://learn.ntop.com/) to understand the process of designing and meshing complex geometry in nTop : 1. [Multicourse: Heat Exchanger Design](https://learn.ntop.com/courses/intro-to-two-channel-heat-exchangers-in-ntop/) 2. [102: Guide to Meshing](https://learn.ntop.com/courses/102-guide-to-meshing/) 3. [Surface Meshing Best Practices](https://learn.ntop.com/courses/surface-meshing-techniques/) [https://www.youtube.com/embed/-jrrkdrzjPo](https://www.youtube.com/embed/-jrrkdrzjPo) **Relevant Files** [nTop Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Export%20to%20Siemens%20StarCCM%20Example.ntop) [Solved Star-CCM+ File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Solved%20StarCCM%20Example.sim) ## Keywords: *boundary cfd name siemens starccm starccm+* # How to export geometry as a CAD part (STEP or Parasolid) Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-geometry-as-a-cad-part-step-or-parasolid ## Objective: Convert a Topology Optimized part into a CAD format and export it to a CAD program. Convert an implicit model into a CAD format and export it to a CAD program. ## Applies to: * Export to CATIA * Export to ANSYS * Export to PTC Creo * Export to Siemens NX * Export to Solidworks ## Overview There are two ways to produce a b-rep in nTop. Your model complexity determines which of the procedures below to use. If you have a low-complexity model, such as a part generated from Topology Optimization, unfilled shells, or parts with very coarse patterns or ribs, use Procedure 1. For lattices and other medium-complex parts, use Procedure 2. Note that depending on your use case for exporting your models to your CAD system, other data types, such as a quad or tri mesh or a simplified representation, may be sufficient. If you would like more information on which data type to use for which activity and how part complexity is defined, please read [this article](https://support.ntopology.com/hc/en-us/articles/360048784874-How-to-export-geometry-Overview-of-export-workflows). ## Procedure 1: Procedure 1 is targeted at low-complexity models. The result is a b-rep in which the NURBS are nicely aligned with the body's features. This typically produces fewer faces and makes the b-rep model easier to edit in a CAD system. However, this approach only works reliably on fairly simple models, such as those produced by topology optimization. If your model is more complex, see [Procedure 2.](#h-01g6v1xka4f7x6z2yrddsdv3px) **1.** **Convert to a Mesh:** Convert your topology-optimized part to a mesh. **2.** **Refine Mesh:** Refine your mesh by using **Remesh Surface**, **Simplify by Threshold**, **Simplify by Amount,** or other simplification methods. This step allows for easier conversion to a quad mesh. Make sure your mesh has no [meshing errors](https://support.ntopology.com/hc/en-us/articles/360052000554). Take a look at these articles for tips on refining and creating a mesh: * [Methods for refining meshes](https://support.ntopology.com/hc/en-us/articles/360061372374) * [How to mesh complex parts](https://support.ntopology.com/hc/en-us/articles/360040769654) **3. Quad Mesh:** Convert the refined **Mesh** to a quad mesh using the **Quadrangulate Mesh** block. The quad mesh allows easier and faster conversion to a CAD Body format. * A quad mesh is a very useful model and a step for converting. The mesh can be exported into other systems using the **Export Mesh** block. * Check out this article if you encounter errors when converting to a Quad Mesh[.](https://support.ntopology.com/hc/en-us/articles/1500000013521) ![A gif demonstrating how to Remesh an existing mesh for a more uniform element size. The new mesh is then converted to quad elements using the Quadrangulate Mesh block.](https://files.learn.ntop.com/help-articles/interop/27847377818643.png) **4. Optional:** Use a **Refine Mesh** block to refine the Quad Mesh, capture further details, and reduce rounding near sharp edges. ![The Refine Mesh block.](https://files.learn.ntop.com/help-articles/interop/27847377836435.png) **5.** **Convert to CAD:** Convert the refined (or un-refined) quad mesh into a CAD Body using the **CAD Body from Quad Mesh** block. ![The CAD Body from Quad Mesh block.](https://files.learn.ntop.com/help-articles/interop/27848050456211.png) ![The Quadrangulate mesh is refined using the Refine Mesh block. Then the refined mesh is converted into a CAD part using the CAD Body from Quad Mesh block.](https://files.learn.ntop.com/help-articles/interop/27847377882259.png) **6.** **Export:** Add an **Export Part** block and choose your save location and file type, \*.STEP or \*.x\_t (Parasolid). If you are exporting to SolidWorks or Siemens NX, we recommend using the Parasolid format so that no translations are needed. Once your part is exported, you can import it into any program that accepts STEP or Parasolid inputs. The part can have further operations applied, added to a larger assembly, and more. ## Procedure 2: For more complex models that have lattice structures in them, we recommend the approach described below. It produces NURBS surfaces that are not necessarily nicely arranged, but it's much more likely to work on complex models. 1. **CAD Body from Implicit Body (Beta):** Use this block to convert simpler structures to CAD format easily. You can then export the generated CAD body to STEP or Parasolid format using the **Export Part** block. ![An example of using the CAD Body from Implicit Body block to create a CAD body.](https://files.learn.ntop.com/help-articles/interop/27848073052179.png) > [!NOTE] > > *Note: The optional **Preserved CAD** input lets you provide a list of CAD Bodies, and the block will attempt to sew in faces from the CAD Bodies into the final result. If the face extends outside the implicit boundary, or if the algorithm doesn't succeed in sewing, the face will be ignored.* ![Two images showing the difference in results when using the Preserved CAD input of the CAD Body from Implicit Body block. The body on the left doesn't utilize Preserved CAD and the body on the right does.](https://files.learn.ntop.com/help-articles/interop/27848073116051.png) And that's it! You've successfully exported your part in a CAD format. Do you still need help? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Procedure 1 Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Export%20Geometry%20Example%201.ntop) * [Procedure 2 Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Export%20Geometry%20Example%202.ntop) ## Keywords: *cad lattice part export body parasolid step geometry preserved* # How to export geometry: Overview of export workflows Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-geometry-overview-of-export-workflows ## Objective: Learn how to export nTop models to CAD systems. ## Applies to: * Exporting geometry from nTop ## Solution: There are different pathways for you to export your geometry out of nTop, you can choose the pathway based on your activity and part complexity from the table below: >
    **Activity** **Part Complexity**
    [Low](#h_01G63D2SQYXF06DMZ8GM3B4MZ0) [Medium](#h_01GXXM35GE8NWHGK3ADDZ4P5BQ) [High](#h_01G63D375Q1REY9JXZ6NC8S67A)
    \ >   ![A low complexity part](https://files.learn.ntop.com/help-articles/interop/7588138935059.png)  ![A medium complexity part.](https://files.learn.ntop.com/help-articles/interop/7567805101203.png) ![A high complexity part.](https://files.learn.ntop.com/help-articles/interop/7567505355923.png)
    Top Opt parts, Unfilled Shells Graph Lattices with \< 10k beams TPMS Lattices with \< 1k cells Graph Lattices with > 10k beams TPMS Lattices with > 1k cells
    [Visualization](#h_01G63CZHWH7EGHBBCB0N3JT7HZ) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    [Clearances](#h_01G63CZVVHYM8C81B32H3Z5VZK) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y)  [Simplified Body Representation ](#h_01G6JX17K05Q0JHRT81WEKWDK4)or [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    [Weight studies](#h_01G63D05J38X8S6T5DE7YCX0Z9) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) or [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    [Assemblies](#h_01G63D0D6MN4Z0V3EQFTK0SZV9) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    [Part additions](#h_01G63D0P9CHQ8W6CRQ9WNBYT2Y) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) (or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) in NX) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) or [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    [Part mods](#h_01G63D0ZS9BFW2T4YV6R9T30CJ) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Quad Mesh](#h_01G6JX3RQ35RKH8TFFQ3KC4Q0P) N/A (in lattice region) N/A (in lattice region)
    [Drawings](#h_01G63D1A020VGGSAMDDC0GNS9Q) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) or [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) or [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    [FE modeling](#h_01G6BKCMCKDJYBPB6VWZKBMTXV) [FE Data](#h_01G6BKCMCKDJYBPB6VWZKBMTXV) [FE Data](#h_01G6BKCMCKDJYBPB6VWZKBMTXV) [FE Data](#h_01G6BKCMCKDJYBPB6VWZKBMTXV)
    [Complex CAM](#h_01G63D21WVEPPKNJMJG2VAFA7T) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W), or very fine [Tri Mesh](#h_01G6JWYAGH7NGDYZ77HTPXK37Y) N/A (in lattice region) N/A (in lattice region)
    [Archiving](#h_01G63D2AA19B3PMGRT4K6ZC44P) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) (native CAD format) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) (native CAD format) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    [Delivery](#h_01G63D2HR40329X8KMF39MR6M4) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) (native CAD format) [CAD](#h_01G6JWW0Z8CPKX3X1SEFG60T1W) (native CAD format) [Simplified Body Representation](#h_01G6JX17K05Q0JHRT81WEKWDK4)
    ## Part Complexity: In this context, complexity refers to the number of faces in the CAD Body. This determines the usability of the model within traditional CAD systems. ### Low * Parts that are generated from Topology Optimization, unfilled shells, and parts with very coarse patterns or ribs. These usually have a few hundred to a few thousand faces. ### Medium * These are parts with medium-coarse textured models or lattices containing beams, faces, or TPMS cells: * Beam or face-based lattices: up to 10k beams or faces * TPMS: up to 1k unit cells * Implicit models at this level of complexity can be converted into CAD Bodies with 50k or fewer faces, so their detailed geometry can be consumed by traditional CAD systems. ### High * These are parts with fine-grain textures, beam or face-based lattices with over 10k beams or faces, or TPMS lattices with over 1k unit cells. Typically these have many thousands or even millions of faces, so their detailed geometry can not be consumed by traditional CAD systems. ## Activities **:** ### Visualization * The 3D Model is visualized, usually in the context of the product(s) in which it is used, to judge aesthetics, fit, and accessibility. The target system might be a rendering app like Keyshot, rather than a CAD system. nTop has Precision Render that can be used to save High Resolution renders as images. ### Clearances * Checking that required clearances are present between parts. In particular, checking that parts do not interfere. Rough clearance checks can be performed with mesh models, but accurate interference checking requires CAD models. ### Weight studies * The most common study is a “weight roll-up”, which just involves adding up the weights of the individual parts in an assembly. To perform balance studies of parts we would need the center of mass of each part. In the case of rotating parts, moments of inertia are also important. ### Assemblies * Incorporating the part into an assembly, and defining mating relationships and joints. This requires analytic curves and surfaces, mostly circles, planes, and cylinders. ### Part additions * Adding further geometry to the nTop part, such as bosses, holes, and fillets. ### Part mods * Editing operations that modify the shape of the nTop part. ### Drawings * Producing engineering drawings and other types of illustrations. Generating dimensions on engineering drawings requires analytic geometry. ### FE modeling * Generating finite element models (i.e. meshes with special properties) ### Complex CAM * Surface milling using 3-axis or 5-axis motions. ### Archiving * Saving models for future re-use or for legislative/compliance reasons. Usually, the file formats are either STEP or native CAD formats. At many companies, CAD files in the corporate PDM system are the official repository of all product data. ### Delivery * Delivery of models to satisfy some contractual commitment. Usually, the file formats are either STEP or native CAD formats. ## Data Transfer Paths As outlined below, nTop can transfer geometry to CAx systems in many ways. ### Tri Meshes Meshes of triangles, such as STL or 3MF files. The STL format is helpful because a wide variety of systems support it. However, its design leaves much to be desired, and 3MF meshes are preferable in situations where they are supported. Triangle meshes are the natural format for visualization and many digital mockup studies, such as clearance analysis, weight roll-ups, etc. Very fine triangle meshes can also be used for NC milling, though this is not ideal. These articles have detailed instructions on generating meshes. * [Methods for creating surface meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-surface-meshes) * [How to mesh complex parts](/help-articles/knowledge-base/meshing-workflows/how-to-mesh-complex-parts) * [Methods for creating solid meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-solid-meshes) ### Quad Meshes Meshes of quadrilaterals (4-sided shapes). These are usually in the OBJ format. These are useful because some CAD systems interpret them as the "cages" of subdivision surfaces upon import. The CAD system can then edit the subdivision surfaces to refine their shape. Examples of this capability are the NX "Realize Shape" module, Catia Imagine & Shape, and Creo Freestyle. This article has detailed instructions on generating a quad mesh. * [How to create a quad mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-a-quad-mesh) ### CAD (B-rep) Triangle and quad meshes are just special kinds of boundary representations. Still, we're talking about the boundary representation here, the classical ones with curved surfaces, as typically used in CAD systems. It is worth noting that some CAD systems (especially NX, SolidWorks, and others based on Parasolid) treat triangle meshes more-or-less the same as classical curvy b-reps. So, when communicating with these systems, the extra step of producing a classical b-rep may not be necessary. There are two ways to produce a b-rep in nTop, and your model complexity will determine which approach you should take: #### Low For low complexity models, use the approach described [here](/help-articles/knowledge-base/interop/how-to-export-geometry-as-a-cad-part-step-or-parasolid). NURBS are nicely aligned with the body's features. This typically produces fewer faces and makes the b-rep model easier to edit in a CAD system. However, this approach only works reliably on pretty simple models, such as those produced by topology optimization. #### Medium For more complex models, we recommend the method described [here](/help-articles/knowledge-base/interop/how-to-export-geometry-as-a-cad-part-step-or-parasolid). It makes NURBS surfaces that are not necessarily nicely arranged, but the output is G1, tangent continuous. * [How to export geometry as a CAD part (STEP or Parasolid)](/help-articles/knowledge-base/interop/how-to-export-geometry-as-a-cad-part-step-or-parasolid) ### Simplified Bodies Lattice or texture designs with millions of faces are too complex to be consumed by traditional CAx systems. In case of any downstream CAx functions requiring the mass properties of implicit designs, nTop has a block for exporting the simplified body of implicits. This simplification includes an envelope shape that can be used in clearance analyses. We also export a collection of smaller bodies whose densities are chosen to produce the correct weight, the center of gravity, and the moment of inertia results in CAD system calculations. For information about creating simplified bodies in nTop, please see here. * [How to export a Simplified Body Representation of Implicit as a CAD part](/help-articles/knowledge-base/interop/how-to-export-a-simplified-body-representation-of-implicit-as-a-cad-part) ## Keywords: *mesh CAD implicit part export how to nx convert geometry from STEP Parasolid quadrangulate quad refine NX Solidworks Creo inventor ANSYS Catia how to export CAD export mesh quad export mesh to cad ptc Siemends* # How to export shelled part as a single CAD file Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-shelled-part-as-a-single-cad-file ## Objective: How to export the shelled part as a single CAD file ## Procedure: 1. First, create a hollow part by shelling a body using a **Shell** block or other methods ([nTop Learn Course](https://learn.ntop.com/courses/320-data-driven-design/)). 2. Use the **Mesh from Implicit Body** block to convert your shelled body into a mesh. 3. Next, use the **Split Mesh** block to separate the mesh into inner and outer layers. 4. Use the **Quadrangulate Mesh** block to convert the separated triangular meshes into quad meshes. 5. Use the **CAD Body from Quad Mesh** block to transform the quad mesh layers into solid CAD bodies. 6. Combine the inner and outer CAD bodies into a single part with the **Merge CAD Bodies** block. 7. Export your completed part using the Export Part block. ![](https://files.learn.ntop.com/help-articles/interop/50598744373651.png) ## Example file [Merge CAD Bodies Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Interop/merge_cad_bodies_example.ntop) ## Keywords: *cad mesh export shell bodies merge quad* # How to export variables in CSV format from Ansys CFD Post Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-variables-in-csv-format-from-ansys-cfd-post ## Objective: Learn how to generate and export a variable from Ansys CFD Post in CSV format to import into nTop. ## Applies to: * ANSYS CFD Post * Importing ## Procedure: With Ansys CFD Post Open: 1. File > Export > Export... 2. Options: Define desired inputs, the primary three are: * Set file path and name * Location (i.e. Named Selection(s)) * Variable(s) ![The export menu of Ansys CFD Post. The Options tab is shown.](https://files.learn.ntop.com/help-articles/interop/4406857211667.png) Image #1: Export Window, Options Tab 3. Formatting * Vector Variables * Components (i.e. vector) or Scalar * Separator * Ensure that **Include Header** is turned **off,** this will allow nTop's Import Scalar Point Map or Import Vector Point Map blocks to read in the CSV file ![The export menu of Ansys CFD Post. The Formatting tab is shown.](https://files.learn.ntop.com/help-articles/interop/4406849866003.png) Image #2: Export Window, Formatting Tab 4. Click Save The GIF below shows the steps described above. ## A gif showing how to generate and export a variable from Ansys CFD Post in CSV format. That should do it! If you followed the steps above you should have a CSV ready to import into nTop! If you still have questions the [support team](https://support.ntopology.com/hc/en-us/requests/new) would be happy to help you. ## Keywords: *CFD CSV CFD Post Ansys Fluent CFX* # How to export your design to Ansys Fluent Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-your-design-to-ansys-fluent Here is a video demonstrating the workflow to export surface meshes of heat exchanger geometry from nTop for conjugate heat transfer analysis in ANSYS Fluent. This video covers assigning boundary conditions in nTop and volume meshing the solid and fluid domains in ANSYS Fluent. Prior to watching the video, it is recommended to go through the following courses on [nTop Learn](https://learn.ntop.com) to understand the process of designing and meshing complex geometry in nTop : 1. [Multicourse: Heat Exchanger Design](https://learn.ntop.com/courses/intro-to-two-channel-heat-exchangers-in-ntop/) 2. [102: Guide to Meshing](https://learn.ntop.com/courses/102-guide-to-meshing/) 3. [Surface Meshing Best Practices](https://learn.ntop.com/courses/surface-meshing-techniques/) [https://www.youtube.com/embed/wWQTxQ4IfrI](https://www.youtube.com/embed/wWQTxQ4IfrI) **Merge** Here are the TUI Commands for merging multiple surfaces into a water-tight domain that can be pasted in the ANSYS Console for this example : * objects/merge cold\_wall cold\_solid\_int cold\_inlet cold\_outlet () cold\_fluid * objects/merge hot\_wall hot\_solid\_int hot\_inlet hot\_outlet () hot\_fluid * objects/merge solid\_wall solid\_hot\_int solid\_cold\_int () solid\_hex The general syntax is “*objects/merge \[boundary name 1] \[boundary name 2] () \[desired domain name]*” . The boundary names will have to correspond to names assigned in nTop. The desired domain name is the name of the merged object. ![The Ansys console](https://files.learn.ntop.com/help-articles/interop/34046744850835.png) **Label** Here are the TUI Commands for extracting the zone labels of the water-tight domain that can be pasted into the ANSYS Console for this example : * objects/labels/create-label-per-zone cold\_fluid cold\_solid\_int.1 cold\_outlet.1 cold\_inlet.1 cold\_wall.1 () * objects/labels/create-label-per-zone hot\_fluid hot\_solid\_int.1 hot\_outlet.1 hot\_inlet.1 hot\_wall.1 () * objects/labels/create-label-per-zone solid\_hex solid\_cold\_int.1 solid\_hot\_int.1 solid\_wall.1 () The general syntax is “*objects/labels/create-label-zone \[boundary name 1].1 \[boundary name 2].1 ()*” **Relevant Files** [nTop Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Export%20to%20Ansys%20Fluent%20Example.ntop) [Solved ANSYS File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Solved%20Ansys%20Fluent%20Example.zip) ## Keywords: *analysis export ansys fluent cfd* # How to export your design to ANSYS Workbench Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-export-your-design-to-ansys-workbench ## Objective: Learn how to export FE Data to ANSYS Workbench using different FE data options. ## Procedure: There are different options to choose from while exporting FE data. Based on the requirement, you can choose the most appropriate option. | **Block** | **Nodes** | **Elements** | **Materials** | **Element Sets** | **Node Sets** | **Boundary Conditions** | **Analysis Settings** | | - | - | - | - | - | - | - | - | | [Export FE Mesh - no sets](#h-01fdamqaabmcsnpdjfchgyz4e1) | **🗸** | **🗸** | | | | | | | [Export FE Mesh - with sets](#h-01fdamqaabmcsnpdjfchgyz4e1) | **🗸** | **🗸** | | | **🗸** | | | | [Export FE Model - no sets](#h-01fdamqr737d23sw0mzeys512r) | **🗸** | **🗸** | **🗸** | **🗸** | | | **🗸** | | [Export FE Model - with sets](#h-01fdamqr737d23sw0mzeys512r) | **🗸** | **🗸** | **🗸** | **🗸** | **🗸** | | **🗸** | | [Export Static Analysis](#h-01fdamr6jv36hv2pa17sn7m11f) | **🗸** | **🗸** | **🗸** | **🗸** | | **🗸** | **🗸** | ## ## Exporting FE Mesh with Sets 1. Generate a [FE Mesh](https://support.ntopology.com/hc/en-us/articles/360037005234-How-to-create-an-FE-Volume-Mesh) for the model and [Boundary conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions). 2. Use the **Export FE Mesh** block. * Input the Mesh and add the Boundaries in the sets field. * Update the Path for Mesh Export. * Select the file type as **Ansys Mechanical Input** **(.cdb)** ![A gif showing how FE Boundaries can be exported using the Sets input of the Export FE Mesh block.](https://files.learn.ntop.com/help-articles/interop/4402711116819.png) ![The FE Mesh with the boundaries highlighted. ](https://files.learn.ntop.com/help-articles/interop/4402706549651.png) 3. Import the exported **Ansys Mechanical Input** **(.cdb)** file into Ansys Workbench. ![Importing the External Model into Ansys Workbench.](https://files.learn.ntop.com/help-articles/interop/4405434951443.png) 4. Open **Setup** to modify properties in the Schematic for the External Model * Select cell **2A** to expose the properties pane * Uncheck **“Check Valid Blocked CDB File”** **![The properties of the imported external model. The data source file name is highlighted, as well as the Check Valid Blocked CDB File option.](https://files.learn.ntop.com/help-articles/interop/4402706601491.png)** 5. Open the **Model** in Mechanical Model/Static Structural. * Update it to see the Mesh and Sets are imported as **Named Selections.** The material for all elements is selected by default when importing a FE Mesh. **![The FE Mesh with the boundaries highlighted in Ansys Workbench. ](https://files.learn.ntop.com/help-articles/interop/4402706617363.png)** 6. Apply Boundary Conditions to the Named Selections using **Direct FE** in the Environment Ribbon. Note that node sets only support boundary conditions in the **Direct FE** dropdown. Other boundary conditions are can be applied to geometry which Ansys detects from the mesh. ![The Direct FE options menu is highlighted. These Boundary Conditions can be applied to the imported boundary selections.](https://files.learn.ntop.com/help-articles/interop/4405398254995.png) 7. Solve the FE Setup and add plots you wish to visualize. See examples of this below: ![The top image shows the static analysis run in Ansys and the bottom image shows the same analysis run in nTop.](https://files.learn.ntop.com/help-articles/interop/4405401323667.png) ## Exporting FE Model with Sets 1. Generate [FE Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) and [Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) 2. Use the **Export FE Model** block * Insert the **FE Model** * Update the Unit system * Add the boundaries in sets * Select the file type as **Ansys Mechanical Input** **(.cdb)** ![An FE Model with specific boundaries highlighted.](https://files.learn.ntop.com/help-articles/interop/4402711262483.png) 3. Open the exported FE Model (.cdb) file in your preferred code editor. * Scroll down to the bottom or find "**SOLUTION**". * Comment out the last 4 APDL analysis commands by typing **C\*\*\*** before the command. ![The exported FE Model cdb file open in Notepad ++.](https://files.learn.ntop.com/help-articles/interop/4405448340499.png) 4. Import the FE Model (.cdb) file into Ansys Workbench. * Double click **Setup** (this opens up the Outline for the Schematic for the External Model). * Click Cell "**C2"** and uncheck the **“Check Valid Blocked CDB File”.** * **Connect to Model and Engineering Data cells.** ![The External Model cdb file imported into Ansys Workbench, the file's properties panel is open.](https://files.learn.ntop.com/help-articles/interop/4405448475027.png) ![Importing the External Model into Ansys Workbench.](https://files.learn.ntop.com/help-articles/interop/4405457545619.png) 5. Apply **Direct FE** Loads and Restraints using the Named Sets. * Refer to Step 7 in the instructions above. * Solve the Static Structural Analysis on the FE Setup. ![A static structural analysis run in Ansys Workbench.](https://files.learn.ntop.com/help-articles/interop/4405450599827.png) ## Exporting a Static Analysis 1. Run Static Structural Analysis in nTop. You can find detailed instructions on FE Model Preparation, Generating Boundary Conditions, and applying Loads here [How to run a static analysis](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis). 2. Use the **Export Static Analysis** block. * Update the input fields with the necessary **FE Model**, Boundary Conditions, and Unit System. * Select the file type as **Ansys Mechanical Input** **(.cdb)** ![An example of exporting a static analysis from nTop.](https://files.learn.ntop.com/help-articles/interop/4405462899987.png) 2. Open the exported **Static Analyis** (.cdb) file in your preferred code editor. * Scroll down to the bottom or Find "**SOLUTION**". * Comment out the last 4 APDL analysis commands by typing **C\*\*\*** before the command. ![The exported static analysis cdb file open in Notepad ++.](https://files.learn.ntop.com/help-articles/interop/4405463771027.png) 1. Import the **Static Analysis** (.cdb) file onto Ansys Workbench. * Double click Setup (this opens up the Outline for the Schematic for the External Model). * Click Cell "**C2**" and uncheck the **“Check Valid Blocked CDB File”**. * Connect to Model and Engineering Data cells. * Check Step 4 in the Export FE Model section for reference. 2. Update the Solution in the Static Structural Block to solve the FE Setup. * Element sets come over in the Named Selection branch. * There are node sets when importing a Static Analysis, unlike FE Mesh and Model. * The material model is assigned to the element set. * Boundary conditions can be viewed in its folder. ![The Static Analysis imported into Ansys Workbench.](https://files.learn.ntop.com/help-articles/interop/4405458134291.png) And that's it! You've successfully learned to export FE Data to ANSYS Workbench. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Export%20to%20Ansys%20Workbench%20Example.ntop) ## Keywords: *FE mesh export static analysis ansys model FEA ANSYS how-to workbench* # How to identify the version of nTop used to create an exported .implicit file Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-identify-the-version-of-ntop-used-to-create-an-exported-implicit-file ## Question: How to identify the version of nTop used to create an exported .implicit file. ## Applies to: * .implicit files ## Answer: To determine the software version associated with an implicit body file: 1. Locate the file, right-click it, select **Open with**, and choose a standard text editor (such as **Notepad** or **Notepad++**). 2. Look at the very first line of the file header. 3. Find the "app\_version" metadata field. Example: In the header \{"app\_name":"nTop","app\_version":"5.44.2"...}, the file was created using nTop version 5.44.2. And that's it! You've successfully identified the nTop version used to generate your implicit file. ## Keywords: *question* # How to import and use a Point Map Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-import-and-use-a-point-map ## Objective: Learn how to import and use a point map. ## Applies to: * Fields * Ramping * Data-Driven Design ## Procedure: **1. Set up your CSV file** If importing a **Scalar Point Map**, ensure your format is X, Y, Z, S, where S is the desired value at each point. If importing a **Vector Point Map**, ensure your format is X, Y, Z, U, V, W, where U, V, and W represent the vector at each point. > [!NOTE] > > **Note: Your table should not have headers, just the data points; it should not have blank rows at the bottom of the file.** >
    ![An incorrectly formatted csv file for importing into nTop.](https://files.learn.ntop.com/help-articles/interop/32509338859795.png) ![A correctly formatted CSV file that will import into nTop.](https://files.learn.ntop.com/help-articles/interop/32509293885971.png)
    It will not import correctly because of the header and blank row at the bottom Will import correctly
    **2. Import the Point Map** * Add an **Import Scalar Point Map** block (or **Import Vector Point Map** block) * Set the file path * Choose units to correspond to the points * Optional: Set a scale for the Point map ![The Import Scalar Point Map block on top, and the Import Vector Point Map block on the bottom.](https://files.learn.ntop.com/help-articles/interop/34952524895891.png) **3. Convert the Point Map to a Field** This step is necessary to convert the point or vector data into a field. The field can then be used to edit your desired part. * Add a **Field from Point Map** block * Drag and drop the imported Point Map block from Step 2. * Choose the [Interpolation options](/help-articles/knowledge-base/structures/what-are-interpolation-options-for-creating-a-field-from-a-point-map) ![Both overload options of the Field from Point Map block. One imports a scalar point map and the other imports a vector point map.](https://files.learn.ntop.com/help-articles/interop/34952556748307.png) **4. Optional: Use the field to create a Ramp** One of the most popular reasons for importing point maps is to create a ramp and use it to vary a parameter. If you would like to learn more about data-driven design, you should check out this [course](https://learn.ntop.com/courses/320-data-driven-design/). * Add a **Ramp** block * Input the **Field from Point Map** block as the Scalar Field * Set the *In Min* and the *In Max* to correspond to the imported 'S' values from your CSV. Don't add units to these values * Set the *Out Min* and the *Out Max* to correspond to the parameter you want to vary. If you are varying thickness, for example, add 'mm' to these values * Set the *Continuity* to your desired option * Insert the **Ramp** block into the parameter you want to vary. For example, insert the Ramp into the Thickness input of a [Periodic Lattice block.](/help-articles/knowledge-base/lattices/how-to-create-a-periodic-lattice) ![An import Scalar Point Map block inside the Point Map input of a Field from Point Map block. The Field from Point Map block is inside the Scalar Field input of a Ramp block.](https://files.learn.ntop.com/help-articles/interop/34952556750611.png) *This is an example of using a Pressure Map to drive the lattice thickness of the Bike Seat. You can access this file from the Home Screen.* ![A bike seat model that has lattice applied based on field from point map.](https://files.learn.ntop.com/help-articles/interop/34952524904339.png) And that's it! You've successfully imported and used a point map. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *import ramp field map point scalar interpolation extrapolation vector how-to size* # How to import and use a Table Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-import-and-use-a-table ## Objective: Learn how to import and use a table ## Applies to: * Tables * Lists ## Procedure: **1. Set up your CSV file** * The CSV must be a rectangular *MxN* table. * The file type must be a CSV using UTF-8 or UTF-16 encoding with a list separator of a comma. **2. Import the Table** * Add an **Import Table** block * Set the file path * You can use the *Include headers:* input to choose whether to include headers. If checked, this input then makes the first row of the Table as column headers. ![The import table block.](https://files.learn.ntop.com/help-articles/interop/14488007337235.png) * To embed your Table, Right click and select Embed. > [!NOTE] > > **Note:** You can access the header names in the properties of the Table as a Text list. The block will ignore duplicate and invalid (or empty) headers. **3. Access the Columns from the imported Table** Add an **Extract Column** Block. The **Extract Column** block extracts a single column of data from a Table as a Text list. The overload lets you choose the column index integer or column header name as input. The Index input starts from 0. ![Two extract column blocks with the Table variable inserted into the Table input.](https://files.learn.ntop.com/help-articles/interop/14488167151635.png) **4. Convert the Text into Scalar** Add a **Scalar from Text** block. This block converts the text list output from the **Extract Column** block to a scalar list. Use the Multiply block to set the appropriate units before using it downstream. ![The Extract Column block inserted into the Text input of a Scalar from Text block.](https://files.learn.ntop.com/help-articles/interop/14488505030675.png) > [!NOTE] > > **Note:** Units will not be recognized and will cause conversion issues. No punctuation other than periods or letters is allowed. If using exponential notation, ensure no spaces exist before or after the letter `e`. Positive and negative exponents are allowed. The common use cases of this block are to store and extract non-linear material data and design parameter sets. ![A lattice generated using the table data to set the beam thickness.](https://files.learn.ntop.com/help-articles/interop/14488645775763.png) And that's it! You've successfully imported and used a table. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *import list parameter design extract column table doe scalar from text non-linear data* # How to import and use compensation data Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-import-and-use-compensation-data > [!NOTE] > > This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: > > * **Learning Center course:** > * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) > * **Articles:** > * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) > * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) ## What is build compensation? We can use the build simulation data to adjust the design to account for factors during manufacturing, such as material shrinkage and machine inaccuracies that affect the part's final dimensions. Offsetting the initial design to compensate for these factors would increase the accuracy and precision of the printed part. ## What are the different types of data that are supported for import? We have built two custom blocks to make importing the build simulation data easier. ## Simulation Compensation Data imported as UNV file This custom block takes a ***\*.unv*** file of original (nominal) geometry and a .unv file of compensated geometry from Simufact (or other distortion prediction software) and outputs an implicit body of the compensated geometry. ![Simulation Compensation Data imported as UNV file custom block.](https://files.learn.ntop.com/help-articles/interop/FpE2Xuy9lEl1f_rdNhXdA_yeo4oLnSne9P-bJudfOiw-_jVVrf1nEs2KoJJOXPpW9kxX_NVyGq40QWoV2Uk6-IhXMugHGfqhRDxf5SbzbXtT1p4bHgPRgeqVQg_A8URbzXKaiEdb8gnoLn9u7TYgpKI.png) ### How to export the \*.unv file from Simufact? #### Exporting Distortion Data for Variant ![A diagram showing how to export distortion data for variant from Simufact.](https://files.learn.ntop.com/help-articles/interop/RTxKPQUUoBf1OGKSVW2LuHFanbBmqFu8f9g5WyL6tpJ8VjHUh1AUdgnVUapsQLZwJ6sjXFIBlnUWoS1EEWr-Ir4rZLHALlbhgPWz_85VqxwOkp2VF2xQUIe0GNGMYZLk14d69QYCPLEyqVbWnZK-nBk.png) #### Exporting Distortion Data for Nominal ![A diagram showing how to export distortion data for nominal from Simufact.](https://files.learn.ntop.com/help-articles/interop/JXx6TJwRDyWowqkq8FXNAHgpywwfPb90rtzV-Tx8ZjNZ1o3Gu2HDfXXovYcr8T5v_-2BpQrbF5S7cYTDfTst7qpduY1ljD9VYsWyzOMywwpJSFk2BHqKy1xO5QhXc2yuF17RBRL26JtxrQ5E1MQUu_0.png) ## Laser Scan Data or Distortion Data imported as CSV file This custom block compensates original (nominal) geometry in the opposite direction and magnitude of the displacement vector point map input (***\*.csv***). The point map input is most commonly generated from distortion simulation software or an aligned evaluation of laser scan data from metrology programs such as PolyWorks. ![Laser Scan Data or Distortion Data imported as CSV file custom block.](https://files.learn.ntop.com/help-articles/interop/jGKBgsRFvrv0TLLRrwoJ8566VMxPxZISIUMBFckbzCa6hkms-g6VmTOpyh9Eed3GlhFw2Wmiu7RPd6WuPlXpoRBJQvYiEg8zobpm27ppl4QPJAPKM4Df3cH04iXO1H9wSzSEjXx7nymbumv3BfomfNY.png) ## Download: * [Custom Blocks](https://storage.googleapis.com/files-learn/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Compensation%20Data%20Example.zip) ## Keywords: *file data remap build unv simufact compensation polyworks distortion* # How to import topology optimization results from Altair Optistruct® into nTop Source: https://docs.ntop.com/help-articles/knowledge-base/interop/how-to-import-topology-optimization-results-from-altair-optistruct-into-ntop ## Objective: Learn how to import Topology Optimization results from Altair Optistruct into nToplogy. ## Applies to: * Simulation * Analysis * Altair Optistruct ## Procedure: Importing topology optimization results into nTop requires setting a few parameters before your analysis in Altair Optistruct®. To make the required changes and import the results into nTop do the following: **1.** Open your Altair Optistruct® analysis. **2.** In the panel on the bottom right of the screen, select **Analysis.** **3.** Select **Control Card.** **4.** Find and enable the **OUTPUT card.** **5.** In the **OUTPUT card** in your tree set **OUTPUT1 to SHRES**, and **OUTPUT2 to OP2.** ![The Analysis screen in Altair Optistruct.](https://files.learn.ntop.com/help-articles/interop/1500000165321.png) **6.** With these changes made, you can now run the analysis in Altair Optistruct® and it will result in an OP2 file. Inside nTop use the **Import Topology Optimization Results** block. **7.** Add an **Import Topology Optimization Results** (if you don't have beta blocks turned on, [go here](/help-articles/knowledge-base/user-interface/what-are-beta-blocks)). **8.** In the first input specify the **path** to the OP2 file that was generated by Altair Optistruct®. **9.** In the second input specify the **unit system** used within Altair Optistruct®. **10.** After loading you can now use the results just like nTop native topology optimization results. And that's it! You've successfully imported your results into nTop. *Optistruct® is the trademark of Altair Engineering, Inc.* Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *import topology results from optimization importing altair optistruct* # Implicit Modeling Best Practices for Materialise Source: https://docs.ntop.com/help-articles/knowledge-base/interop/implicit-modeling-best-practices-for-materialise ## Overview This document is a reference for nTop engineers preparing implicit files for slicing in Materialise Magics or the Materialise Build Processor. It covers how to validate your design in nTop before export, and which modeling practices help avoid issues downstream. The recommended workflow is: **design in nTop → validate in the nTop Field Viewer → export → slice in Materialise**. Problems caught in the Field Viewer are straightforward to identify and fix. The same problems discovered after slicing can be difficult to trace back to their source. When unexpected artifacts appear in a toolpath — extra walls, holes, or geometry that doesn't match the intended design — they are almost always the result of avoidable modeling choices, not errors in nTop or Materialise. These issues can be avoided with a few modeling best practices, and they apply regardless of part complexity. This document focuses on the field quality issues that most commonly affect slicing output: * **Field discontinuities** caused by edge-to-edge boolean operations * **Fake zeros** caused by coincident surfaces during booleans * **Distorted fields** from certain shape types or custom equations It does not cover Materialise software settings, build parameters, or material-specific considerations. *** ## Using the Field Viewer to Validate Before Export Before exporting your implicit file, use the nTop Field Viewer to check the health of your field. A healthy field will show contour lines that are parallel and equally spaced — this indicates the field is behaving as a proper Signed Distance Field (SDF) and will produce predictable results in slicing. ### Enabling Show Defects and Highlight Zero The Field Viewer has two toggles that are essential for pre-export validation: * **Show Defects** — highlights discontinuities in the field as red zones. These are areas where the field value changes abruptly, which can cause artifacts in slicing, such as unexpected walls or holes in toolpaths. ![](https://files.learn.ntop.com/help-articles/interop/51026501061011.png) * **Highlight Zero** — identifies fake zeros, points where the field value is zero but should not be. Fake zeros can cause extra surfaces to appear when slicing inward. ![](https://files.learn.ntop.com/help-articles/interop/51026501061907.png) Both toggles are found in the Field Viewer panel under the Tools tab. Enable both as a standard step before every export. ### What to Look For | **What you see** | **What it means** | **Likely cause** | | - | - | - | | Red zone on or near the surface | Field discontinuity | Boolean between coincident or touching surfaces | | Unexpected zero surface away from the part boundary | Fake zero | Boolean where two bodies touch edge-to-edge | | Contour lines that are uneven or non-parallel | Distorted field | Custom equations, remaps, or elliptical shapes | ### If You See a Defect Check the order of operations in your notebook. Work backward from the flagged implicit body to identify which operation is introducing the defect. The most common sources are: * A Boolean where two bodies share a coincident face or touch edge-to-edge * An imported mesh or CAD body that contains a defect carried into the implicit Once the source is identified, the fix is typically adjusting the boolean so the tool body extends well beyond the target, eliminating the coincident condition. See the Modeling Best Practices section for guidance on structuring booleans correctly. ### When to Check Run a Field Viewer check after any boolean operation, not just at the end of the modeling process. Catching a defect close to where it was introduced makes it much easier to trace. *** ## Common Field Quality Issues and What Causes Them "Bad field" is a vague term. There are several distinct types of field quality issues, each with different causes and different effects on slicing output. Understanding which type you're dealing with makes it much easier to fix. Field quality issues matter more when they occur in implicit bodies (the geometry itself) than in scalar fields (fields used to drive parameters like beam diameter or temperature distribution). The issues below are all relevant to implicit bodies. ### False Zeros **What it is:** The field value is zero at points that are clearly inside or outside the intended body, not on its boundary. These are false surface boundaries. **What causes it:** Performing a boolean union on two bodies that touch externally, or a subtraction where two bodies touch internally (edge-to-edge or face-to-face coincident surfaces). **What you'll see in slicing:** Extra walls appear, particularly when slicing inward. The slicer interprets the fake zero as a real surface boundary. **Classic example:** Subtracting an inner cylinder from an outer cylinder to create a pipe, where both cylinders are the same length. The ends of the cylinders touch each other internally, creating false zeros along that boundary. The fix is to make the inner cylinder longer than the outer — eliminating the coincident condition. Alternatively, revolve a rectangular profile to create the pipe shape entirely, thereby avoiding the Boolean operation altogether. > > > > > > > > > > > > > > >
    > ![](https://files.learn.ntop.com/help-articles/interop/51026473590675.png) > > ![](https://files.learn.ntop.com/help-articles/interop/51026473593491.png) >
    ### Discontinuities **What it is:** The field value changes abruptly at certain points rather than transitioning smoothly. This shows up as a red zone in the Field Viewer when Show Defects is enabled. **What causes it:** Boolean operations between touching bodies, imported mesh or CAD geometry that carries surface defects, or manually constructed fields using math or If-Else blocks. Beta blocks in your workflow can also cause this field discontinuity. **What you'll see in slicing:** Rendering artifacts, unexpected holes, or irregular toolpaths near the affected region. ***Note:** Discontinuities far from the part's surface may not affect the slicing output. Discontinuities on or near the surface will.* ### Distorted Fields (Non-Unit Gradient) **What it is:** The field gradient magnitude is not equal to 1, meaning the field is not a proper Signed Distance Field. Contour lines in the Field Viewer will be uneven or non-parallel. **What causes it:** Certain shapes — ellipses, ellipsoids, TPMS lattices — cannot be represented as true SDFs without additional processing. Custom implicit equations defined with math blocks can also produce this if not carefully constructed. **What you'll see in slicing:** Wall thickness will not match what was specified. The actual thickness follows the field's contour lines, which may vary across the part. > > > > > > > > > > > > > > >
    > ![](https://files.learn.ntop.com/help-articles/interop/51026473595283.png) > > ![](https://files.learn.ntop.com/help-articles/interop/51026501064979.png) >
    *** ## Modeling Best Practices These practices apply throughout the modeling process, not just at export time. Building these habits from the start will prevent most field-quality issues before they occur. ### 1. Avoid Coincident Surfaces During Booleans Boolean operations are the most common source of field quality issues. The tool body should always extend well beyond the target body — never let two bodies share a face or touch edge-to-edge during a boolean. * When subtracting, use a tool body that is larger than needed — ideally, much larger than the target * Make complex shapes by extruding or revolving profiles instead of performing multiple booleans where possible **Example:** To create a hollow pipe, do not subtract an inner cylinder that is the same length as the outer. Instead, use an inner cylinder that extends well beyond the outer, or revolve a rectangular profile to create the pipe shape in a single operation. ### 2. Trim and Intersect as Late as Possible Keep bodies larger than necessary for as long as possible during the modeling process. Trimming and intersecting early introduces constraints that can cause unexpected behavior in downstream operations like offsetting and shelling. Overbuild first, then trim at the end. ### 3. Build Fillets and Blends During Booleans, Not at the End In implicit modeling, fillets and blends are applied at the time shapes are combined — not as a final step. Attempting to add fillets to arbitrary edges at the end of the process is unlikely to produce the result you want. Plan blend radii as part of each boolean operation, not as a finishing pass. ### 4. Match Boolean Radius to Downstream Offset Distance If you are performing a Boolean between two finite bodies and plan to offset or shell the result, the penetration distance between the two bodies should be at least as large as the offset distance you intend to use. When booleaning into a thin wall, specifically, aim to overlap up to the center of the wall for the best results. ### 5. Avoid Beta Features for Production Workflows Beta features are subject to change and may produce unexpected results. For files intended for Materialise slicing, use only stable, released functionality. ## Pre-Export Checklist Run through this before exporting any implicit file to Materialise. **Field Viewer** * Open the Field Viewer and enable **Show Defects** — confirm no red zones on or near the part surface. If they are far away from the surface, it will not cause any issues. * Enable **Highlight Zero** — confirm no unexpected zero surfaces away from the part boundary * Contour lines are parallel and equally spaced across the part **Booleans** * No boolean operations involve coincident or touching surfaces * All tool bodies extend well beyond their target bodies * Boolean's blend radius is at least as large as any intended offset or shell thickness * Thin-wall booleans overlap up to the center of the wall **Modeling Process** * Blends were applied during Boolean operations, not added as a final step * Trimming and intersecting are performed late in the process * Avoid using beta features in the workflow **Imported Geometry** * Any imported mesh or CAD geometry was inspected in the Field Viewer by converting into Implicits before use in booleans ## Keywords: *implicit export false zero show materialise defect fake zero* # nTop Plugin for EOSPRINT - Overview Source: https://docs.ntop.com/help-articles/knowledge-base/interop/ntop-plugin-for-eosprint-overview ## What is the EOSPRINT Plugin? The EOSPRINT Plugin is an add-on plugin that enables your EOSPRINT instance to import parts designed in nTop directly. This eliminates the need for meshing and allows the user to prepare the part for manufacturing directly from an nTop Implicit file (\*.implicit). The nTop Implicit file (\*.implicit) format offers advantages over existing B-rep or mesh-based data formats in the following ways: nTop Implicit files are accurate and lossless geometry representations based on mathematical functions, not surface approximations. nTop Implicit files are generated faster, are significantly smaller (up to 99%), and can be loaded more quickly in the receiving software compared to the mesh files. nTop Plugin for EOSPRINT does not require an nTop license but is only compatible with EOSPRINT 2.14 or later. ### How do you install it? 1. Go to *nTop Dashboard (app.ntop.com)* 2. Click on the *Add-Ons* Tab on the ribbon on the left side. 3. Download the *Installer* (\*.msi) and the *License* file (\*.lic) by clicking the buttons below the nTop Plugin for the EOSPRINT card. ![The Add Ons tab on app.ntop.com showing the nTop Plugin for EOSPRINT.](https://files.learn.ntop.com/help-articles/interop/17367210202387.png) 4. Execute the *nTopPluginForEOSPRINT-0.X.X.X.msi* file for the Plugin. 5. Follow the instructions on the Installation screen and install the plug in the same place as the EOSPRINT. > > > > > > > > > > > > > > >
    > ![The welcome window for the nTop Plugin for EOSPRINT installation wizard.](https://files.learn.ntop.com/help-articles/interop/17319379526803.png) > > ![The destination folder window for the nTop Plugin for EOSPRINT installation wizard.](https://files.learn.ntop.com/help-articles/interop/17319400401555.png) >
    6. Once the installation has finished, navigate to the folder where you have installed the EOSPRINT plugin. (*C:\Program Files\EOS\EOSPRINT 2\2\_14\plugins\ntop*) 7. Copy and paste the license file you downloaded from Step 3 into this folder, where you have installed the plugin (*C:\Program Files\EOS\EOSPRINT 2\2\_14\plugins\ntop*), and rename the license file to *eosprint-plugin.lic*. 8. Open EOSPRINT to verify that you have installed the plugin correctly. Click *Import Part* on the left ribbon to see if you can import the *\*.implicit* file. ![The file explorer showing a .implicit file.](https://files.learn.ntop.com/help-articles/interop/17320024690195.png) Now, you can open nTop, export your implicit body using the Export Implicit Body (Beta) block, and import it directly into your EOSPRINT software. That's it. You have successfully installed the nTop Plugin for EOSPRINT. > [!NOTE] > > **Note: Before updating plugin versions, please uninstall the previous version before installing the updated plugin.** Note: We have updated the nTop Plugin for EOSPRINT to 0.5.0.7. Users can now adjust the slicing tolerance by adding 'config.json' (see below) in the plugin installation folder. ``` {  "slice_feature_size": 0.00025,  "slice_algorithm": "Marching squares" } ``` 1. The feature size is in meters. The above would set the slicing tolerance to 0.25 mm. 2. The available algorithms are "Marching squares" and "Dual contouring". The default option when none is specified will be Dual contouring. ### How do you use and troubleshoot it? You can open nTop, export your implicit body using the **Export Implicit Body** block, and import the nTop Implicit File (*\*.implicit*) directly into your EOSPRINT software. ![An implicit body that has been imported into the nTop Plugin for EOSPRINT.](https://files.learn.ntop.com/help-articles/interop/29217069495187.png) You must be on these nTop versions to export supported implicit files for the plugin. | **nTop Plugin for EOSPRINT Version** | **nTop Version** | | - | - | | 1.1.0.14 | 5.7.2 | | 1.0.0.10 | 5.0.4 | | 0.4.0.5 | 4.13.3 | | 0.3.0.4 | 4.8.2 | | 0.2.1.3 | 4.5.3 | If you are running into a FailedToLoadPart error on EOSPRINT 2.15 or 2.16, Please check if C:\Program Files\EOS\EOSPRINT 2\2\_15\plugins\ntop contains the current version. If not, replace the ntop folder with the one from C:\Program Files\EOS\EOSPRINT 2\2\_14\plugins. If you happen to have any issues, please email [support@ntop.com](mailto:support@ntop.com). We will be happy to resolve them with you. ## Keywords: *implicit ntop eos print interop plugin* # Quadrangulate mesh fails when meshing my lattice Source: https://docs.ntop.com/help-articles/knowledge-base/interop/quadrangulate-mesh-fails-when-meshing-my-lattice ## Issue: The Quadrangulate Mesh block stops at 50% or fails when meshing lattice structures. ## Applies to: * Quadrangulate Meshing * Exporting CAD ## Cause: The **Quadrangulate Mesh** block isn't meant for lattice conversion. With lattices being so complex, the Quad mesh will try to run but most likely get stuck or fail. The **Quadrangulate Mesh** block was designed to use with Topology Optimization workflows. ## Solution: The **Quadrangulate Mesh** block isn't part of the recommended lattice to CAD conversion workflow with our recent addition of the **CAD Body from Implicit Body (Beta)** block. This block is capable of converting low to medium complexity lattice structures to CAD Bodies, which can then be exported using the **Export Part** block. For more information, we recommend following [procedure 2 of this article](https://support.ntopology.com/hc/en-us/articles/7323484481555-How-to-export-geometry-as-a-CAD-part-STEP-or-Parasolid-). If you are trying to export a high complexity lattice as a CAD part, check out [this article](https://support.ntopology.com/hc/en-us/articles/7170769142291-How-to-export-a-Simplified-Body-Representation-of-Implicit-as-a-CAD-part) on the **Simplified Body Representation** block. ## Keywords: *cad error mesh CAD lattice part meshing export body step parts lattices STEP quadrangulate quad issue stop fail* # The info panel shows a "Stream error" message when trying to import a mesh file Source: https://docs.ntop.com/help-articles/knowledge-base/interop/the-info-panel-shows-a-stream-error-message-when-trying-to-import-a-mesh-file ## Issue: **Import Mesh** block displays the message "Stream error" when trying to open an STL file. ## Applies to: * ASCII STL ## Cause: This error occurs if an STL was created using an ASCII representation, and the Header exceeds 100 characters. ## Solution: 1. Make a copy of the STL as a backup. 2. Right-click the STL file and select **Open with > Notepad** 3. On the first line, after the word "solid," eliminate some text until the Header contains fewer than 100 characters. 4. Click **File > Save** ## Keywords: *stl mesh file 2.22 stream stream error import mesh* # What file types can nTop import and export? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/what-file-types-can-ntop-import-and-export ## Question: Can nTop export STEP files? Can users export to CAD? What file types can I import? ## Applies to: nTop 5.45 ## Answer: * ### [CAD Geometry](#h-01exft1zdd4ahwmp47mcqet9y0) * ### [Mesh Geometry](#h-01exft26qhcnnnh56fj8e5jkve) * ### [Implicit Geometry](#h-01jazs2ed7w9n7taewqa9ybqf6) * ### [Finite Element Data](#h-01exft2emnnz0jegy3sx4sghhn) * ### [Lattice Structure](#h-01exft2ne63vh897t59s6f2f7v) * ### [Point Data](#h-01exft2wtm9twecvbcnecj05pt) * ### [Voxel Grid](#h-01exft32w8vm4t0m8r2z048fks) * ### [Slices](#h-01exft38t3m3j6w59h1xmav2ad) * ### [Bitmap](#h-01exft32w8vm4t0m8r2z048fks) * ### [Tables](#h-01gthvcrjnmsj5mwwrbc0vggd4) ## CAD Geometry Parasolid formats tend to yield the most dependable results. CAD and STEP inputs of single-part or multi-body files are also typically robust. CAD Assembly files can be directly imported into nTop. **Import:** | File Type | File Extension | Versions | | - | - | - | | ACIS | \*.sat, and \*.sab | R1 - 2025 1.0 | | CATIA V5 | \*.CATPart, and \*.CATProduct | V5 R8 - V6 R2025 | | Pro/E or Creo | \*.prt \*.prt. \*.asm | 16 - Creo 11.0 | | Autodesk Inventor | \*.ipt (V6 - V2025) .\*iam (V11 - V2025) | V6 - 2025 | | Siemens NX | \*.prt | 11 - NX 2412 | | Parasolid | \*.x\_t and \*.x\_b | 9.0 - 38.0.163 | | SolidWorks | \*.sldprt \*.sldasm | 98 - 2025 | | STEP | \*.step and \*.stp | AP 203, AP 214, and AP 242 | CAD File types available for Import **Export:** | File Type | File Extension | | - | - | | Parasolid | \*.x\_t and \*.x\_b | | STEP 242 | \*.step | | IGES | \*.iges and \*.igs | CAD File types available for Export How-to: * [How to Import a Part](https://support.ntop.com/hc/en-us/articles/360049994434) * [How to Export a CAD Part (STEP or Parasolid)](/help-articles/knowledge-base/interop/how-to-export-geometry-overview-of-export-workflows) ## Mesh Geometry **Import:** | File Type | File Extension | | - | - | | STL | \*.stl, \*.stla, \*.stlb | | OBJ | \*.obj | | Standard Polygon File Format | \*.ply | | 3MF | \*.3mf | | Object File Format | \*.off | Mesh file types available for Import **Export:** | File Type | File Extension | | - | - | | STL | \*.stl, \*.stla, \*.stlb | | OBJ | \*.obj | | Standard Polygon File Format | \*.ply | | 3MF | \*.3mf | Mesh types available for Export How-to: * [How to Export an STL](/help-articles/knowledge-base/interop/how-to-export-an-stl) * [Export Mesh and Lattice to 3MF Format](/help-articles/knowledge-base/interop/how-to-export-a-mesh-and-lattice-to-3mf-format) * [Can lattice shell elements be exported as 3MF?](/help-articles/knowledge-base/interop/can-lattice-shell-elements-be-exported-as-3mf) ## Implicit Geometry **Import and Export:** | File Type | File Extension | | - | - | | nTop Implicit File | \*.implicit | How-to: * [Can I export an implicit body?](/help-articles/knowledge-base/interop/how-to-export-an-implicit-body) ## Finite Element (FE) Data **FE Mesh** **Import:** | File Type | File Extension | Notes | | - | - | - | | Abaqus | \*.inp | The format supports node, element, face, and edge sets. | | ANSYS Mechanical | \*.cdb | Format only supports node and element sets. | | ANSYS Fluent | \*.msh | Only mesh export is currently supported. | | LS-DYNA | \*.k | | | Nastran | \*.bdf | | | Patran | \*.pat | | | CGNS CFD Data File | \*.cgns | | | Universal File Format | .unv | | FE Mesh file types available for Import **Export:** To see a full overview of what data is supported for export, go [here](https://support.ntopology.com/hc/en-us/articles/360039792513). **FE Results** **Import:** | Result Type | File Type | File Extension | | - | - | - | | Static Structural Result, Modal Result, Buckling Result, and Time-Dependent Structural Result | Ansys Structural Result | \*.rst | | NASTRAN Output File | \*.op2 | | | Static Thermal Result and Time-Dependent Thermal Result | Ansys Thermal Result | \*.rth | | NASTRAN Output File | \*.op2 | | | CFD Analysis Results | Fluent Case File | \*.cas, and \*.cas.gz | | Fluent Data File | \*.dat, and \*.dat.gz | | | Topology Optimization Result | NASTRAN Output File | \*.op2 | FE Results available for Import **Export:** To see a full overview of what data is supported for export, go [here](https://support.ntopology.com/hc/en-us/articles/360039792513). How-to: * [How to Export your Design to Ansys Fluent](https://support.ntop.com/hc/en-us/articles/360062127673) ## Lattice Structure **Import & Export:** | File Type | File Extension | | - | - | | Lattice Graph Interchange Module | \*.ltcx | | 3MF | \*.3mf | Lattice file types available for Import and Export How-to: * [Export Mesh and Lattice to 3MF Format](/help-articles/knowledge-base/interop/how-to-export-a-mesh-and-lattice-to-3mf-format) * [Can lattice shell elements be exported as 3MF?](/help-articles/knowledge-base/interop/can-lattice-shell-elements-be-exported-as-3mf) ## Point Data, Vector, and Scalar Point Map **Import & Export:** | File Type | File Extension | | - | - | | Comma Separated Values | \*.csv | Point Data, Vector, and Scalar Point Map file types available for Import and Export How-to: * [How can I Export the Displacement Results from a Simulation?](/help-articles/knowledge-base/interop/how-can-i-export-the-displacement-results-from-a-simulation) * [How to import and use a Point Map](/help-articles/knowledge-base/interop/how-to-import-and-use-a-point-map) * [How to use simulation results to create a Point Map or Field](/help-articles/knowledge-base/structures/how-to-use-simulation-results-to-create-a-point-map-or-field) ## Voxel Grid **Import & Export:** | File Type | File Extension | | - | - | | VDB | \*.vdb | Voxel Grid file types available for Import and Export ## Slicing for Additive Manufacturing **Import** | File Type | File Extension | | - | - | | Common Layer Interface | \*.cli | Slicing file types available for Import **Export:** | File Type | File Extension | | - | - | | Common Layer Interface | \*.cli | | Common Layer File | \*.clf | | Renishaw CLI | \*.cli | | Renishaw RenExposure(Point Data) | \*.cli | | EOS CLI | \*.cli | | Arcam ABF | \*.abf | | Concept Laser v4 | \*.cls | | 3D Systems | \*.slc | | Stratasys Layer | \*.ssl | | B\&W Image Stack | \*.png | Slicing file types available for Export How-to: * [Slicing and Exporting Walk-through](/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-create-and-export-slices) ## Bitmap **Import** | File Type | File Extension | | - | - | | PNG | \*.png | Image file types available for Import and Export How-to: * [How to deboss an image](/help-articles/knowledge-base/textures/how-to-deboss-an-image) ## Tables **Import and Export** | File Type | File Extension | | - | - | | CSV | \*.csv | Table file types available for Import and Export #### ## Keywords: *import cad stl mesh ply obj fea points export eos arcam cli clf ssl solidworks nx catia parasolid step 3mf ansys nastran abaqus iges voxel ltcx csv vdb inventor fluent inp cdb unv pat msh universal patran dyna acis ptc cre autodesk siemens prt ipt sat sab stp ls* # What format is *.msh Ansys Fluent Mesh exported in? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/what-format-is-msh-ansys-fluent-mesh-exported-in ## Question: What format is \*.msh Ansys Fluent Mesh exported in? ## Applies to: Export Mesh ## Answer: The **.msh (Ansys Fluent Mesh)** files that are exported using the **Export FE Mesh** block are in **ASCII** format. ## Keywords: *mesh fe question ansys fluent msh acsii ASCII* # What types of FE data can I export? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/what-types-of-fe-data-can-i-export ## Question: What type of FE data can I export? ## Applies to: * Exporting to Simulation software ## Answer: ### [FE Volume Mesh (Linear & Quadratic)](#h-01fts7p6j540yesca4nm84vcxt) ### [FE Surface Mesh (Linear & Quadratic)](#h-01fts7pf90knrjfrpnx6q3668h) ### [FE Lattice Mesh (Linear)](#h-01fts7pp6bg0ye0dk5766yvfqj) ### [FE Lattice Mesh (Quadratic)](#h-01fts7q1wdvsj2wp04cszkyngd) ### [Material Properties](#h-01fts7q9nvgd27a1bz4dhbpdax) ### [Connectors](#h-01fts7qg583kx6z3bx5fmrp8ym) ### [Loading Boundary Conditions](#h-01fts7qrkgbg215pkjq3exxzyv) ### [Thermal Boundary Conditions](#h-01fts7qz6b8qep28fjf1ps009n) | **FE Volume Mesh (Linear & Quadratic)** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | FE Volume Mesh | **X** | **X** | **X** | **X** | **X** | **X** | **X** | | FE Volume Mesh + Node set | **X** | | | **X** | **X** | **X** | | | FE Volume Mesh + Edge set | | | | | | | | | FE Volume Mesh + Face set | **X** | | | | | | | | FE Volume Mesh + Element set | **X** | **X** | | **X** | **X** | **X** | | | **FE Surface Mesh (Linear & Quadratic)** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | FE Surface Mesh | **X** | **X** | **X** | **X** | **X** | **X** | | | FE Surface Mesh + Node set | **X** | | | **X** | **X** | **X** | | | FE Surface Mesh + Edge set | | | | | | | | | FE Surface Mesh + Face set | **X** | | | | | | | | FE Surface Mesh + Element set | **X** | **X** | | **X** | **X** | **X** | | | **FE Lattice Mesh (Linear)** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | FE Lattice Mesh | **X** | **X** | **X** | **X** | **X** | **X** | | | FE Lattice Mesh + Node set | **X** | **X** | | **X** | **X** | **X** | | | FE Lattice Mesh + Edge set | | | | | | | | | FE Lattice Mesh + Element set | **X** | **X** | | **X** | **X** | **X** | | | **FE Lattice Mesh (Quadratic)** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | FE Lattice Mesh | **X** | **X** | **X** | | **X** | **X** | | | FE Lattice Mesh + Node set | **X** | **X** | | | **X** | **X** | | | FE Lattice Mesh + Edge set | | | | | | | | | FE Lattice Mesh + Element set | **X** | **X** | | | **X** | **X** | | | **Material Properties** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | Isotropic Elastic Property | **X** | **X** | **X** | **X** | | | | | Isotropic Thermal Property | **X** | **X** | **X** | | | | | | Isotropic Thermal Expansion Property | **X** | **X** | **X** | | | | | | Orthotropic Elastic Property | **X** | **X** | | | | | | | Orthotropic Thermal Property | **X** | **X** | | | | | | | Orthotropic Thermal Expansion Property | | | | | | | | | Density | **X** | **X** | **X** | **X** | | | | | Beam Thickness | **X** | **X** | | | | | | | Shell Thickness | **X** | **X** | **X** | **X** | | | | | Multiple Attributes | **X** | **X** | **X** | **X** | | | | | **Connectors** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | Solid - Solid | **X** | **X** | **X** | | **X** | **X** | | | Solid - Shell | **X** | **X** | **X** | | **X** | **X** | | | Solid - Beam | **X** | **X** | **X** | | **X** | **X** | | | Shell - Solid | **X** | **X** | **X** | | **X** | **X** | | | Shell - Shell | **X** | **X** | **X** | | **X** | **X** | | | Shell - Beam | **X** | **X** | **X** | | **X** | **X** | | | Beam - Solid | **X** | **X** | **X** | | **X** | **X** | | | Beam - Shell | **X** | **X** | **X** | | **X** | **X** | | | Beam - Beam | **X** | **X** | **X** | | **X** | **X** | | **\*If you want to export BC with Ansys Fluent, check out** [**this article**](https://support.ntop.com/hc/en-us/articles/360062127673) | **Loading Boundary Conditions** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | Force (Solid Nodes) | **X** | **X** | **X** | | **X** | **X** | | | Force (Solid Edges) | | | | | | | | | Force (Solid Faces) | **X** | **X** | **X** | | | | | | Force (Shell Nodes) | **X** | **X** | **X** | | **X** | **X** | | | Force (Shell Edges) | | | | | | | | | Force (Shell Faces) | **X** | **X** | **X** | | | | | | Force (Beam Nodes) | **X** | **X** | | | **X** | **X** | | | Force (Beam Edges) | | | | | | | | | Pressure (Solid Faces) | **X** | **X** | **X** | **X** | **X** | **X** | | | Pressure (Shell Faces) | **X** | **X** | **X** | **X** | **X** | **X** | | | Remote Force | **X** | **X** | **X** | | | | | | Remote Moment | **X** | **X** | **X** | | **X** | | | | Displacement Restraint | **X** | **X** | **X** | **X** | **X** | **X** | | | Acceleration Load | **X** | **X** | | | | | | | **Thermal Boundary Conditions** | | | | | | | | | - | - | - | - | - | - | - | - | | | Abaqus (.inp) | ANSYS (.cdb) | Nastran (.bdf) | LS-Dyna (.k) | Universal (.unv) | Patran (.pat) | Fluent (.msh) | | Temperature Restraint | **X** | **X** | **X** | | **X** | **X** | | | Heat Flux | **X** | **X** | **X** | | **X** | **X** | | | Heat Generation | **X** | **X** | **X** | | | | | | Radiation Boundary Load | **X** | | | | | | | | Convection Boundary Load | **X** | **X** | **X** | | **X** | **X** | | | Initial Temperature | | | | | | | | | Applied Temperature | | | | | | | | #### ## A Note on Sets: The FE Sets (e.g., FE Boundary and FE Region) created in nTop can be made of up nodes, elements, edges, or faces, but only certain target formats support all of these. In general, the Abaqus .inp format is very robust and well-supported and even works well when translated into other tools including ANSYS Workbench using the "External Model" system. If applicable, this format is generally recommended when communicating FE data for mechanical applications. **\*You can only export one FE Mesh at a time when exporting it with FE Sets.** ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/FE%20Data%20Export%20Example.ntop) ## Keywords: *analysis mesh simulation fea export fe ansys nastran abaqus cae fluent inp cdb bdf k unv pat msh universal patran LS-Dyna dyna* # When importing SOLIDWORKS/CATIA or STEP files the error message "The CAD interoperability libraries were unable to be located" appears Source: https://docs.ntop.com/help-articles/knowledge-base/interop/when-importing-solidworks-catia-or-step-files-the-error-message-the-cad-interoperability-libraries-were-unable-to-be-located-appears ## Issue: Some users encounter the error message "The CAD interoperability libraries were unable to be located" when attempting to import CAD data. ## Applies to: * SolidWorks * CATIA * CATPart * STEP * CAD * Parasolid ## Cause: This error message occurs when there is a conflict or missing file relating to nTop's translators in your computer. ## Solution: We are still addressing this issue. * Download the latest Windows update: Users have reported updating their Windows to have solved the problem of importing their parts. * As a workaround, try exporting a **Parasolid (.x\_t)** from your CAD tool. Parasolid will always yield more reliable results than STEP or native CAD files. * If this error is occurring with a Parasolid file, try changing the extension from .x\_t to .x\_b. * Try saving your file as a different support file type * Make sure you only have one version of nTop installed. ## Keywords: *import cad error to file step be interop located library issue unable interoperability libraries translators* # When importing SOLIDWORKS or STEP files the error message "Unable to translate any data from selected part" appears Source: https://docs.ntop.com/help-articles/knowledge-base/interop/when-importing-solidworks-or-step-files-the-error-message-unable-to-translate-any-data-from-selected-part-appears ## Issue: Some users encounter the error message "Unable to translate any data from the selected part." when attempting to import CAD data. This defect is specific to the user's system specifications. ## Applies to: * nTop 3.13 * SolidWorks * STEP * CAD ## Cause: This error message occurs when there is a conflict or missing file relating to nTop's translators. ## Solution: Users have reported the issue to be resolved on updating to the latest version of Windows 10. It is also suggested to have the file saved in Local instead of importing from OneDrive. As a workaround, try exporting a Parasolid (.x\_t) from your CAD tool. Parasolid will always yield more reliable results than STEP or native CAD files. ## Keywords: *import cad error part translate to solidworks step from data issue unable selected integrations* # Why are there errors when exporting a Mesh from Voxel Grid as a 3MF? Source: https://docs.ntop.com/help-articles/knowledge-base/interop/why-are-there-errors-when-exporting-a-mesh-from-voxel-grid-as-a-3mf ## Issue: Some workflows require the **Mesh from Voxel Grid** block, and users may want to export the results to 3MF. The resulting 3MF file displays incorrectly after importing to third-party applications. ## Applies to: * nTop * Exporting ## Cause: 3MF file formats support only triangle polygons, whereas voxel grids produce quadrangle mesh elements. ## Solution: Use the **Remesh Surface** block to convert the quadrangles to triangles, creating geometry compatible with 3MF. ## Keywords: *import mesh export 3mf remesh voxel* # Can I build a lattice from the edges of a part? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/can-i-build-a-lattice-from-the-edges-of-a-part ## Question: Can I build a lattice on the edges of a part? I have an existing lattice and I want to connect it by creating beams from the edges of the part it is created from. ## Answer: To build a lattice from the edges of a part, use the **Lattice from Surface Mesh** block and choose the **Mesh Edges** setting in the Method input. This setting creates lattice beams from the edges of the part. ![A gif showing the different methods of creating a lattice using the Lattice from Surface Mesh block](https://files.learn.ntop.com/help-articles/lattices/4409012162323.png) ## Keywords: *mesh boolean union surface lattice part create edge question of join edges features* # Can I change the phase of my TPMS part? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/can-i-change-the-phase-of-my-tpms-part ## Question: Can I change the phase of my TPMS part? ## Answer: You can change the phase of your TPMS or Walled TPMS part by creating a large TPMS and trimming it with a primitive or the part you want to be infilled. * * Method 1: Adjust the Frame * Edit the **Frame** origin of the Cell Map or in the Volume Lattice blocks to adjust the period/phase of the TPMS unit cell. ![A rectangular volume lattice with a TPMS unit cell. The image is highlighting the origin point of the Frame input.](https://files.learn.ntop.com/help-articles/lattices/6433074165395.png) * * Method 2: Use Trim Lattice or Boolean Intersect * Create a **Cube** that is the size you want your lattice to be (you can also use any object). * Add a **Trim Lattice** block to trim the TPMS to your desired phase. * You can also do this with a **Boolean Intersect** block. ![A rectangular volume lattice with a TPMS unit cell. There is also a cube block used to highlight a specific section of the TPMS](https://files.learn.ntop.com/help-articles/lattices/6432836554899.png) ## Keywords: *intersect thickness walled tpms translate gyroid edit question change object phase period* # Can I create a rounded Voronoi structure? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/can-i-create-a-rounded-voronoi-structure ## Question: Can I create a rounded Voronoi lattice structure? ## Answer: Yes, this is possible. Start with a **Voronoi Surface Lattice** or **Voronoi Volume Lattice** and input it into a **Smoothen Body** block. Make sure the Grid size of the Smoothen Body is smaller than the thickness of your Voronoi lattice. ![A voronoi lattice structure with rounded beams](https://files.learn.ntop.com/help-articles/lattices/6016708915347.png) ## Keywords: *mesh voronoi lattice structure volume boundary body smoothen question edges rounded round* # Can I create Periodic Lattices using hexagonal or triangular packing? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/can-i-create-periodic-lattices-using-hexagonal-or-triangular-packing ## Question: Can I create Periodic Lattices using hexagonal or triangular packing? ## Applies to: * Lattices ## Answer: Currently, our Periodic Lattices are built using cube packing. You can get triangular lattices by using some of the lattices from mesh blocks, such as **Lattice from Surface Mesh**. You can also use **Voronoi Surface Lattice** to create lattices that will have a slightly hexagonal shape. These two methods use the underlying mesh to create the lattice, so the shape of the lattice may vary depending on the mesh. ## Keywords: *lattice question cell unit build hexagonal packing triangular* # Can I define the pattern of adjacent unit cells in a lattice? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/can-i-define-the-pattern-of-adjacent-unit-cells-in-a-lattice ## Question: Can I define the unit cell pattern in a lattice? ## Applies to: * Lattices * Beta blocks ## Answer: No, you can't define the pattern of adjacent unit cells in a lattice. You can only define overall unit cell placement by using Cell Maps. ## Keywords: *edit question pattern cell unit adjacent* # Can I export Line Segments from a lattice as a CSV? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/can-i-export-line-segments-from-a-lattice-as-a-csv ## Question: Can I export Line Segments from a lattice as a CSV? ## Applies to: * Export * Lattices * CSV ## Answer: Yes, you can export Lattice Line Segments as a CSV by using the Line Segment properties and Point Maps. You would need to use multiple Point Maps and combine them in Excel or another spreadsheet program after. Depending on what information you need, your Point Maps could look like this: **Point Map 1** * * Points: Line Segments > Start Point * Values: Line Segments > Direction **Point Map 2** * * Points: Line Segments > Start Point * Values: Line Segments > Length **Point Map 3** * * Points: Line Segments > Start Point * Values: Line Segments > End Point We use the same Points in each map so it is easier to map them together. ## Keywords: *export map question start csv point vertex line direction valency segment* # Can I make non-rounded lattice beams? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/can-i-make-non-rounded-lattice-beams ## Question: Can I make non-rounded lattice beams? ## Applies to: * Lattices * Meshing * Export ## Answer: We currently don't offer this in Implicit format, but you can create a mesh with non-rounded lattice beams. We recommend using the V2 of the **Mesh from Implicit Body** block to do this, with the *Sharpen* and *Simplify* option checked on. For example, if your lattice has 0.5 mm thickness and you set the tolerance to 0.5 mm, the result creates a hexagon shape instead of rounded edges. We don't recommend using a tolerance larger than the lattice thickness, as you will lose too many details. ![An example of lattice beams with a hexagonal cross section](https://files.learn.ntop.com/help-articles/lattices/4776073040787.png) You can continue to use the **Simplify Mesh by Amount** or **Simplify Mesh by Threshold** blocks to further simplify your lattice beams. ![An example of lattice beams with a hexagonal cross section](https://files.learn.ntop.com/help-articles/lattices/4776214958739.png) ## Keywords: *mesh export question beam simplify rounded non square hexagon* # Guide to Conformal Latticing Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/guide-to-conformal-latticing ## Summary: This article provides multiple workflow options for creating conformal lattices. We recommend trying several of them to see which method works best for your situation. ## Applies to: * Conformal Latticing * Lattices * Textures > [!NOTE] > > This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: > > * **Learning Center course:** > * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) > * **Articles:** > * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) > * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) ## Methods: >
    CB - Conformal Lattice Skin
    • Custom block approach best used for bodies with curvature and few sharp edges
    ![An example of a lattice created using the custom block Conformal Lattice Skin](https://files.learn.ntop.com/help-articles/lattices/29894547163155.png)
    1. Start by converting the imported CAD body into an implicit. The body was rotated for convenience, this block is not necessary. ![The imported CAD part that has been converted to an implicit body](https://files.learn.ntop.com/help-articles/lattices/29689268230419.png) 2. Next we create a surface mesh of the implicit. The surface mesh will be used later to define the boundary of the body for trimming. ![The implicit body has been converted to a mesh](https://files.learn.ntop.com/help-articles/lattices/29689268246547.png) 3. For this example we will be using a **Rectangular Cell Map** to generate our **Periodic Lattice**. The volume lattice is then trimmed using the original implicit body. ![A periodic lattice is generated to create the volume lattice structure for the body. Then the lattice is trimmed to fit inside the Coli Implicit domain.](https://files.learn.ntop.com/help-articles/lattices/29689282983443.png) 4. We can now generate the surface lattice using our [CB - Conformal Lattice Skin](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20Conformal%20Lattice%20Skin.ntop). This block utilizes the original implicit body as a solid reference, the surface mesh as a boundary, and the trimmed lattice for its boundary points. These inputs, coupled with the tolerance inputs, generate a surface lattice that matches the internal volume lattice beams. ![The Conformal Lattice Skin generates a surface lattice.](https://files.learn.ntop.com/help-articles/lattices/30009496149651.png) 5. The final blocks are used to clean the lattice. We merge the Volume Lattice with the Surface Lattice into one body. At this point, the lattice has many overlapping beams, so we can use the **Collapse Vertices** block to reduce the number of vertices. This eliminates excess beams and results in a cleaner lattice. The final step is to filter out any open beams that may exist. ![The gif below shows how to use the Merge Lattices block to combine the surface and volume lattices into one. Then the Collapse Vertices block is used to simplify the lattices and remove unnecessary vertices. Finally the Filter Beams by Connectivity block is used to remove any unconnected beams.](https://files.learn.ntop.com/help-articles/lattices/29857207802643.png) The example file also includes another section demonstrating how the lattice adapts to different shapes. You can modify the Roughness amplitude input to change the shape of the original Torus. ![Another example of the Conformal Lattice Skin block.](https://files.learn.ntop.com/help-articles/lattices/29689282999443.png) ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Conformal%20Lattice%20Skin%20Example%20File.ntop) * [CB - Conformal Lattice Skin](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20Conformal%20Lattice%20Skin.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) >
    Ribbing Blocks
    • Toolkit blocks with a large variety of uses for creating conformal ribs from CAD Faces
    ![A block with a conformal rib lattice](https://files.learn.ntop.com/help-articles/lattices/48554737393683.png)
    3 toolkit blocks exist in nTop for creating custom ribbing using reference CAD Faces: * Structural Ribbing block * Voronoi Structural Ribbing block * Honeycomb Ribbing block All of these blocks function the same, by generating ribbing based on an input CAD face and ribbing parameters. The gif below shows the results of generating ribs using the 3 different blocks. > [!TIP] > > **Tip: If you generate ribs using multiple CAD faces like in the gif below, you will need to join these ribs using the Merge Lattices block to create a single lattice. The lattices shown below are lists as denoted by the value shown next to them (in this example (6), one lattice for each side of the box).** ![A gif showing the results of using the Structural Ribbing, Voronoi Structural Ribbing, and Honeycomb Ribbing blocks.](https://files.learn.ntop.com/help-articles/lattices/48554737402131.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) >
    Delaunay Lattice
    • A Periodic Lattice approach best used for simple and uniform shapes
    ![A cylinder that has been cut in half to show its internal and external lattice structure.](https://files.learn.ntop.com/help-articles/lattices/29894532837395.png)
    1. Extract all of the vertices of your trimmed lattice. * Go to the Properties tab of your lattice body and locate the lattice property. The lattice property contains information about the graph of your lattice. * Expand this property and drag the vertices into your notebook. * Convert the thickness value of your lattice into a design variable called "Lattice Beam Thickness" to reuse in other steps throughout the workflow. In this example, the Lattice Beam Thickness value is constant. ![A periodic lattice generated using a cylinder. The lattice has been trimmed to only remain inside the cylinder.](https://files.learn.ntop.com/help-articles/lattices/29689268357267.png) ![The lattice vertices extracted from the properties panel of the trimmed lattice.](https://files.learn.ntop.com/help-articles/lattices/29689268369427.png) 2. Use these vertices to create a volume mesh using the **Delaunay Volume Mesh** block. This function creates a mesh composed of tetrahedral elements based on all of the vertices of the trimmed lattice. * Extract the surface mesh chip from the properties panel of the **Delaunay Volume Mesh** block to derive a new exterior network of beams to join to our trimmed lattice. ![A delaunay volume mesh generated using the lattice vertices.](https://files.learn.ntop.com/help-articles/lattices/29689268374291.png) 3. Use the **Lattice from Surface Mesh** block to extract the edges of each mesh face and convert them into beams in a new lattice body. * Change the Method input to view different arrangements of lattice beams. * Use the Lattice Thickness variable to apply the same thickness to this lattice body as your original trimmed lattice body. ![A surface lattice generated from the Lattice from Surface Mesh block.](https://files.learn.ntop.com/help-articles/lattices/29689268378899.png) 4. The resulting lattice from this operation may require some additional fine-tuning to get the desired outcome you're looking for. We have a handful of useful lattice beam filters currently available. In this specific example, we'll use the **Filter Beams by Containment** block to remove the top and bottom beams of our cylindrical lattice. If filtering beams by volume isn't the best approach for your application, you can also filter by a beam's angle, length, connectivity (closed, floating, open), and thickness. ![The Filter Beams by Containment block is used to remove any beams located inside the designated region.](https://files.learn.ntop.com/help-articles/lattices/29689268388755.png) 5. Now that we have a network of beams to fully close off our original trimmed lattice, use the **Merge Lattice** block to arrive at one single lattice body. Then we will remove any open beams using the **Remove Open Beams** block to create our final lattice. * Input the original trimmed lattice and the new exterior lattice into the Lattices input. ![Using the Merge Lattices block to combine the surface lattice with the interior volume lattice.](https://files.learn.ntop.com/help-articles/lattices/29689283113747.png) ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Delaunay%20Conformal%20Latticing.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) >
    Voronoi Lattice
    • A Voronoi Lattice approach for any voronoi applications
    ![A voronoi lattice that has a section cut applied to show the internal lattice structure.](https://files.learn.ntop.com/help-articles/lattices/29894532847379.png)
    1. For this example, we will use a lattice cube with a sphere cutout. The goal is to eliminate the open beams from where the sphere was removed. ![A voronoi volume lattice that has a half sphere cut out from it. The beams end where the sphere was removed.](https://files.learn.ntop.com/help-articles/lattices/29689283127059.png) 2. As opposed to how it was shown in Step 1, we instead want to use a **Boolean Subtract** block to remove the **Sphere** from the **Cube** initially. ![A cube with a half sphere subtracted from one of the faces.](https://files.learn.ntop.com/help-articles/lattices/29689283131411.png) 3. The next step is to create a mesh of the new body using the **Mesh from Implicit Body** block. ![A mesh is created using the cube with half sphere cutout.](https://files.learn.ntop.com/help-articles/lattices/29689268436371.png) 4. Use the **Random Points in Body** block to generate points for the lattice. ![Random points are generated inside the volume of the body.](https://files.learn.ntop.com/help-articles/lattices/29689268441491.png) 5. Finally, input everything into a **Voronoi Volume Lattice** block to create your closed beams lattice. ![A voronoi volume lattice is created using the points. The Surface Lattice conforms to the shape of the body.](https://files.learn.ntop.com/help-articles/lattices/29689283155091.png) ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Conformal%20Voronoi%20Lattice.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) >
    Quad Mesh
    • Creates a Conformal Surface Lattice using a Quadrangulate Mesh
    ![A conformal surface lattice created using a quad mesh.](https://files.learn.ntop.com/help-articles/lattices/30008566154643.png)
    1. Create a mesh, import a mesh, or [extract mesh faces.](/help-articles/knowledge-base/meshing-workflows/how-to-filter-mesh) 2. Add a **Filter Mesh by Flood Fill** block and input your mesh to filter it. ![The imported CAD part is converted into a mesh. The Mesh is filtered using the Filter Mesh by Flood Fill block to isolate the face to create the lattice on.](https://files.learn.ntop.com/help-articles/lattices/30008549638803.png) 3. Convert your mesh into a Quad Mesh. * * Add a **Quadrangulate Mesh** block. * Input your **Filter Mesh by Flood Fill** block. * Edit the Quad Mesh settings until you are happy with the result (Each quad will be a lattice unit cell). ![The mesh face is converted to a quadrangulate mesh.](https://files.learn.ntop.com/help-articles/lattices/30008566165523.png) 4. Convert the Quad Mesh into a lattice. * * Add a **Periodic Lattice** block. * Add a **Cell Map from Quad Mesh** block. * Add a **Walled TPMS Unit Cell** block (You can use custom, graph, or TPMS). * **For desired results, make sure your unit cell is symmetrical.** * Edit the Height, Layer count, and Unit cell parameter 1 until you are happy with the results. ![A conformal lattice is generated using the meshed face.](https://files.learn.ntop.com/help-articles/lattices/30008549649171.png) Test out the different unit cells and settings to see what you can create. > [!NOTE] > > **Note:** Since there are many different faces within a quad mesh, the UVW of those faces may not align perfectly. This can be an issue if you are using a unit cell that isn't the same in every direction, like the gyroid unit cell. In this case, the **Surface Lattice from CAD Body** block may be a better option. ![Two examples of conformal surface lattices generated using the quad mesh approach.](https://files.learn.ntop.com/help-articles/lattices/30008566195091.png) ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Conformal%20Lattice%20from%20Quad%20Mesh.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Keywords: *mesh voronoi surface lattice volume conformal quadrangulate quad delaunay document latticing projection skin* # How can I tell the size of a Voronoi cell? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-can-i-tell-the-size-of-a-voronoi-cell ## Question: How can I tell the size of a Voronoi cell? ## Applies to: * nTop 3.44.4 ## Answer: To determine the size of only the full Voronoi cells: Use the **Voronoi Volume Lattice** block properties to determine the cell size of each full Voronoi cell. Open up Properties > cell diameters > values to see the value of each cell size. ![Individual Voronoi cells to view their individual sizes. The cell sizes are found in the properties panel of the voronoi lattice](https://files.learn.ntop.com/help-articles/lattices/15050601564947.png) To determine the size of all the Voronoi cells: Use the **Lattice Pore Size** (beta) block. You can see the values in Properties > values. The pore diameters can also be visualized as a scalar point map. Press the Learn More button in the block info to see more tips and an example featuring this block. ![Results of the Lattice Pore Size block to view the size of each cell](https://files.learn.ntop.com/help-articles/lattices/15050596353299.png) ## Keywords: *voronoi question point cell scalar value size pore determine* # How can I vary the cell size of a Voronoi surface lattice? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-can-i-vary-the-cell-size-of-a-voronoi-surface-lattice ## Question: * What parameters allow me to vary the cell size of a Voronoi Surface Lattice? * How can I vary the cell to change along the length of my part? ## Answer: To create a **Voronoi Surface Lattice**, we usually use the block **Random Points on Mesh**. This block has the input **'Spatial Weighting'**. Adding a [Ramp](/help-articles/knowledge-base/implicit-modeling/how-do-i-use-the-ramp-block) to this input will allow you to change the spacing between the points. Changing the spacing then affects the cells of the Voronoi lattice. Check out the image below to see the example. > [!TIP] > > **Tip:** Make sure your mesh is Remeshed (**Remesh Surface**) to allow an optimal surface for creating and ramping points. If it isn't remeshed, your Ramp won't work as you expect it to since the Random Points are dealing with a tougher mesh surface. ![A voronoi surface lattice that has a Ramp block applied to its spatial weighting. This creates a smaller cell size at the top of the body and it gradually becomes a larger size towards the bottom](https://files.learn.ntop.com/help-articles/lattices/4409013519763.png) ## Keywords: *ramp voronoi lattice points body question cell vary random in porosity parameters size spatial weighting modify* # How do I create a ribbed lattice perpendicular to the surface? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-do-i-create-a-ribbed-lattice-perpendicular-to-the-surface ## Question: How do I create a ribbed lattice perpendicular to the surface? ## Applies to: * Lattices * Implicit modeling ## Answer: The best option would be to use one of nTop's ribbing blocks like: **Honeycomb Ribbing**, **Structural Ribbing**, or **Structural Voronoi Ribbing.** These blocks allow you to generate conformal ribbing using a specified CAD face. You can then adjust the parameters of the ribbing using the additional input options. ![Ribbing blocks that allow you to generate conformal ribbing using a specified CAD face](https://files.learn.ntop.com/help-articles/lattices/47448488761619.png) If you aren't using CAD geometry, another option is to use the **Extrude Lattice** block. You can use this block with any surface lattice to extrude it outward and create ribbing. To create a ribbed lattice that is perpendicular to the surface, use the Implicit Body that created that lattice as the Direction. The Direction input allows for Field types, and the implicit body is a field where the positive direction is outwards from the body. ![An example of creating ribs using the Extrude Lattice block on a surface lattice](https://files.learn.ntop.com/help-articles/lattices/5968600439571.png) ## Keywords: *field lattice question rib normal direction ribbed perpendicular* # How does the branched lattice block work? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-does-the-branched-lattice-block-work ## Question: How does the branched lattice block work? ## Applies to: * Lattices ## Answer: The Branched Lattice block has an input for Start points, End points, Layers, and Thickness. The Start points refer to where the lattice begins from and the End points are where the lattice ends. The Layers input refers to the number of times the lattice can 'branch' or 'split' to achieve the most optimal lattice structure. Zero layers create a lattice with no branches. Higher values try to create branches equal to the Layer value, but it is limited by the number and location of the End points. The block is also intending to create the most optimized structure given the input variables, so the structure may not always change when the Layers variable is changed. It won't add another branch if it's not needed. The image below shows a simple setup with one Start point, five End points, and no layers. Zero Layers mean we don't want any branches coming out of the original lattice beams. ![An example of using the Branched Lattice block. This example has one starting point, five end points, and zero layers.](https://files.learn.ntop.com/help-articles/lattices/34851184523923.png) We can then change the Layer value from zero to one. This means that the lattice can now branch off one time from the main beam to reach the end points. ![An example of using the Branched Lattice block. This example has one starting point, five end points, and 1 layer.](https://files.learn.ntop.com/help-articles/lattices/34851227186835.png) Changing the Layers to two only slightly changes the lattice structure. This is because there isn't an optimal solution to create two branches with the given End points. ![An example of using the Branched Lattice block. This example has one starting point, five end points, and 2 layers.](https://files.learn.ntop.com/help-articles/lattices/34851184536339.png) When you change the Layers input to 3, we can see that the block now utilizes the ability to add extra branches. It now starts from one main beam before branching off, instead of starting from two main beams. ![An example of using the Branched Lattice block. This example has one starting point, five end points, and 3 layers.](https://files.learn.ntop.com/help-articles/lattices/34851184539155.png) Now if we add multiple start points, you can see how the block will react to create an optimized structure. ![An example of using the Branched Lattice block. This example has three starting points, five end points, and 2 layers.](https://files.learn.ntop.com/help-articles/lattices/34851227199891.png) Sometimes the Branched Lattice block merges two lattices together when you aren't expecting it. To work around that, we suggest using a Custom Block. The Custom Block processes Lists differently, which eliminates any merging. You can download the custom block [here](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/branched_lattice_cb.ntop). ## Keywords: *lattice question start merge point end branch branched layers* # How to blend TPMS types together Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-blend-tpms-types-together ## Objective: Learn how to use the **Mix** and **Ramp** block to blend two different types of TPMS together. ## Procedure: The **Mix** block is what we use to blend the bodies together. To get a nice blend we need the bodies to be overlapping each other (so the block can use geometry from both to mix them). You decide the mixing factor, 0-1, where 0 is Scalar Field A and 1 is Scalar Field B. Using a Ramp block with the Mix block allows you to vary the mix factor along the part. **1. Set up the part and variables** * Import your CAD body and then convert it to an Implicit Body. * Create a variable of the **Implicit Body** and name it "Body Shape". * Open the Properties of the **Implicit Body**, and drag the Bounding Box chip into the Notebook to create a [Variable](/help-articles/knowledge-base/user-interface/how-to-create-variables) of this parameter (this will be used in the final step). **2. Set up the Gyroid details** * Add a **Periodic Lattice** block. * Unit cell: Walled TPMS Unit Cell. * Unit cell: Gyroid. * Cell map: Rectangular Cell Map. * Approx. thickness 1 mm. * Duplicate the variable and change the Unit cell: Schwarz. ![Create two rectangular volume lattices that should be blended together.](https://files.learn.ntop.com/help-articles/lattices/6655721088787.png) **3. Set up the mixing parameters** * Add a **Ramp.** * Create a **Plane from Normal** for the Real Field input. * Use the *Min Point* property from the **Implicit Body** "Body Shape" for the plane origin to place it at the bottom of the part. * Set In min: 0 mm, In max: 10 mm, Out min: 0, Out max: 1. * *Check the Plane from Normal and set the In and Out values based on the location of the plane.* * * Add a **Mix.** * Real Field A: Drag and drop the Implicit chip from the Gyroid Lattice. * Real Field B: Drag and drop the Implicit chip from the Schwarz Lattice. * Set the Factor to the **Ramp.** **4. Clean it up** * Add a **Set Field Bounding Box.** * Set the Real Field to the **Mix** block. * Set the Bounding Box to the bounding box variable made at the beginning. ![The final configuration for blending the two implicits together.](https://files.learn.ntop.com/help-articles/lattices/6017765219859.png) And that's it! You've successfully mixed two TPMS types together. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Gyroid%20Blend.ntop) ## Keywords: *ramp TPMS ramping gyroid blend variable Mix smooth blending* # How to build a custom lattice unit cell Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-build-a-custom-lattice-unit-cell ## Objective: Learn how to create a custom lattice unit cell. ## Procedure: There are two overloads on the **Custom Unit Cell** block. One with an Implicit Body input and the other with a Graph input and a Bounding Box for both. ![The custom unit cell block has either an Implicit Body input or a Graph input depending on which overload is selected.](https://files.learn.ntop.com/help-articles/lattices/50487339384339.png) To create a **Custom Unit Cell**, insert a Body or Graph and define the domain with a Bounding Box. The Unit Cell Domain defines the boundary of the Unit Cell and its spatial information within that boundary. **1. Unit Cell Domain** Let's take a closer look at the Unit Cell Domain before looking at the Body or Graph. One method for defining the domain is using the Bounding Box Chip, a Property of the Implicit Body or Graph. This Bounding Box matches the input boundary and will fit the Unit Cell perfectly. Another method is to define the Bounding Box separately using the block. In the example below, the implicit is floating in the Unit Cell and is cut off by the Bounding Box. The space below it will be a part of the Unit Cell. The two images below use the Bounding Box chip from the Implicit Body and also using a custom Bounding Box. ![A custom unit cell created from two implicit bodies. The bounding box of the merged bodies is used to define the bounds of the unit cell.](https://files.learn.ntop.com/help-articles/lattices/18431945562259.png) ![A custom unit cell created from two implicit bodies. The bounding box of the merged bodies is defined by two corner points.](https://files.learn.ntop.com/help-articles/lattices/18431970599571.png) **2.** **Unit Cell** **i. Body** The Body input can be any Implicit Body or Lattice Type. It can be created in nTop or imported and converted into an Implicit Body. An example of using a Body input is when creating a Custom Unit Cell from fields or equations ([How to create a TPMS from an equation](/help-articles/knowledge-base/lattices/how-to-create-a-tpms-from-an-equation)). ![A custom unit cell generated from an equation. A Boolean Intersect is used with the equation field to generate the solid implicit body.](https://files.learn.ntop.com/help-articles/lattices/18431475883667.png) > [!TIP] > > *Tip: When creating your custom unit cell, it is ideal to have it be of equal size in X, Y, and Z directions to be easily scalable.* **ii. Graph** **Graph from Line Segments** The Graph from Line Segments block converts line segments to a Graph type. The block is a utility block for creating a Custom Graph Unit Cell and is also used for support structure generation. ![A custom unit cell generated from line segments.](https://files.learn.ntop.com/help-articles/lattices/18392188352403.png) **Face-Based Unit Cells** Using the **Graph from Mesh Faces** block, you can create custom face-based unit cells, sometimes called Honeycomb. This block generates a Graph from an input mesh. The mesh can be imported or created within nTop. **![A custom unit cell generated from mesh faces. The mesh faces must be converted to a graph before they can be used to create the unit cell.](https://files.learn.ntop.com/help-articles/lattices/18392226518419.png)** The image below demonstrates creating a custom face-based unit cell within nTop. First, create a mesh using the **Mesh Face from Points** and **Merge Faces** blocks. Then pass the mesh into the **Graph from Mesh Faces (Beta)** block, input your Graph into the Customer Unit Cell block, and provide a Bounding Box. ![A custom unit cell generated from mesh faces. The mesh faces must be converted to a graph before they can be used to create the unit cell. The mesh faces are created using points and the Mesh Face from Points block.](https://files.learn.ntop.com/help-articles/lattices/18431578739987.png) **CAD Sketch to** **Unit Cell** ([How to convert a CAD sketch into a Custom Unit Cell](/help-articles/knowledge-base/lattices/how-to-convert-cad-sketches-into-lattices)) You can import a CAD sketch and extract the curves from the properties panel and use it with our **Line** block to generate a custom beam-based graph unit cell from the CAD sketch. ![A custom unit cell created from an imported CAD sketch.](https://files.learn.ntop.com/help-articles/lattices/18392039097107.png) **Hybrid Face-Beam** You can create a Hybrid Face-Beam lattice using the **Merge Graphs** block to combine a Face and a Beam lattice. ![A custom unit cell created using a hybrid approach for the graphs. One portion of the graph is created using a mesh face and the other is created using line segments.](https://files.learn.ntop.com/help-articles/lattices/18431664811923.png) ## What is the difference between **Graph** overload and **Implicit** overload? When should one be used vs. the other? * When you construct a lattice using the Graph Unit Cell data type, the result will contain explicit geometry, and you'll have access to the underlying *beams*, *thick graph,* and *graph* property chips. If your unit cell is beam-based, you can apply any beam-filtering utility functions to filter by angle, length, etc. For face-based, you can access the *faces as mesh* property, which can be used for simulation. The *thick graph* and *graph* properties can also be used as input to the Export Lattice block to export \*.LTCX or \*.3MF * Any Implicit Body can be provided as the input to the implicit overload. For example, constructing your field via an equation. However, I'd like to point out that the beams, thick graph, and graph properties are *unavailable.* Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CustomUnitCellExamples.ntop) ## Keywords: *import cad block lattice implicit boundary create body map custom graph cell unit beta uvw domain box* # How to build a custom unit cell from CSV Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-build-a-custom-unit-cell-from-csv ## Question: How can I build a custom unit cell with a line segment's start and end points? How do you build a custom unit cell from CSV? ## Applies to: * Custom Unit Cell * Lattices ## Answer: 1. Create your input CSV file. In this example, I will use a CSV file with the following Header where (x1,y1,z1) are the start points and (x2,y2,z2) are the endpoints of the line segments. ``` x1,y1,z1,x2,y2,z2 ``` 2. Open nTop, and add an **Import Table** block to import your CSV file into nTop ![The import table block](https://files.learn.ntop.com/help-articles/lattices/22754979309715.png) 3. Now, use a combination of **Extract Column** as Text and **Scalar from Text** blocks to get the values in CSV as Scalars and **Multiply** with units of your choice. ![Using the Scalar from Text and Extract Column as Text blocks to extract the data from the imported table. The Multiply block is used to apply units to the values](https://files.learn.ntop.com/help-articles/lattices/22754979342099.png) 4. Repeat the above step by copy-pasting the above block and changing the Header to the respective ones for all six columns, and you will have x1, y1, z1, and x2, y2, z2. ![Generating line segments from the imported CSV data](https://files.learn.ntop.com/help-articles/lattices/22755025935507.png) 5. We now have to convert the Line Segments into graphs to use them as input to the **Custom Unit Cell** block. ![A custom unit cell being generated from the line segments](https://files.learn.ntop.com/help-articles/lattices/22754979363219.png) And that's it; you have successfully made your Custom Unit Cell from a CSV file. ## Keywords: *question custom csv unit cell table* # How to build a structural lattice on a CAD face Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-build-a-structural-lattice-on-a-cad-face ## Objective: Learn how to build a honeycomb lattice on a CAD face. ## Applies to: * Lightweighting ## Procedure: **1. Set-Up:** [Import your CAD Part.](https://support.ntop.com/hc/en-us/articles/360049994434) **2. Extract Faces:** * Turn the surface of the CAD Body into a [CAD Face Variable.](/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies) **3. Apply a Honeycomb Lattice to the Nozzle:** * Generate a lattice with the **Periodic Lattice** block. * Unit cell: **Graph Unit Cell.** * Unit cell: Triangular honeycomb. * Orientation: UVW. * Cell map: **Cell Map from CAD Face.** * Face: Nozzle Face (*The face selected from the above step*). * UVW count: 40 X 30 X 1 (*Number of cells in the three directions*). * Height: 1 mm (*Cell height from the surface*). ![A Periodic Lattice created using a Cell Map from CAD Face.](https://files.learn.ntop.com/help-articles/lattices/6014606406931.png)![The cell map on the surface of the CAD Face.](https://files.learn.ntop.com/help-articles/lattices/6014711042195.png) ![The Periodic Lattice on the surface of the CAD Face.](https://files.learn.ntop.com/help-articles/lattices/6014742799891.png) And that's it! You've successfully created a honeycomb lattice on a CAD Face. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Structural%20Ribbing.ntop) ## Keywords: *cad face lattice conformal body offset map structural cell uvw honeycomb reparameterize coordinates lightweighting cell map on cad face* # How to calculate and export the angles of lattice beams Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-calculate-and-export-the-angles-of-lattice-beams ## Objective: Learn how to calculate the angles of lattice beams, based on a plane, and export them as a text file for further processing. ## Procedure: This workflow uses the **Filter Beams by Angle** block and edits the block to only calculate the lattice beams instead of filtering them. **1.** Add a **Filter Beams by Angle** block **2.** Right-click on the block and select 'Export block' and save the block to your computer. This saves the block as a nTop file that you can open up and see what blocks it is made of. **3.** Open the Filter Beams by Angle nTop file that you just saved **4.** Edit the Filter Beams by Angle file: * In the input section, delete the Condition and the Angle * In the Body section, delete the **Filter** block and the **New Lattice Body** block * Drag the Abs block into the Output section * Rename the Notebook and give it an appropriate description (in this tutorial, it is named Analyze\_angles) * Save the nTop file ![How to modify the Filter Beams by Angle block to only calculate the angle without filtering. ](https://files.learn.ntop.com/help-articles/lattices/360103442593.png) **5.** Open a new nTop file **6.** Import the new custom block you just created **7.** Add a **Cylinder** block * Point 1: (0,0,0) mm * Point 2: (0,0,15) mm * Radius: 30 mm **8.** Add a **Random Points in Body** block * Insert the **Cylinder** * Set the Point spacing to 8 mm * Set the Random Seed to 1 mm **9.** Add a **Voronoi Volume Lattice Body** * Insert the **Random Points in Body** block * Set the Thickness to 0.5 mm **10.** Insert the **Voronoi Volume Lattice Body** into the Custom Block, **Analyze\_angles** **11.** Add a **Plane from Normal** and insert it into the Plane input of the **Analyze\_angles** block ![A voronoi volume lattice.](https://files.learn.ntop.com/help-articles/lattices/6655878694803.png) **12.** Add a **Text from Scalar** block (in order to convert the scalar angles into a format we can export) * Insert the **Analyze\_angles** block into the Value input * Set the Reference to 1 deg * Set the Precision to 2 (or whichever value works best for you) **13.** Add an **Export Text** block * Add the **Text from Scalar** block into the Text input * Choose a path to save the .txt file to **14.** Open up the .txt file and copy the contents to a graphing program of your choice to analyze the angle of each lattice beam And that's it! You've successfully exported the angles of lattice beams. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [CB - Analyze Angles](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20Analyze%20Angles.ntop) * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Calculate_Export_angles.ntop) ## Keywords: *block lattice export calculate custom angle filter graph scalar beam how-to values degrees analyze txt text excel* # How to calculate the average valency for a lattice Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-calculate-the-average-valency-for-a-lattice ## Objective: Learn how to calculate the average valency for a lattice ## Procedure: **1. Create your lattice** To calculate this, you need to use one of the new [Beta](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) lattice blocks. In this example, we are starting with a **Voronoi Volume Lattice** block. **2. Extract the Property chips** * Open up the Properties of the **Voronoi Volume Lattice** block by clicking the question mark icon. * Expand the **"Lattice"** property and then expand the **"beams"** * Expand the **"> Properties"** chevron underneath the **"beams"** * Drag out the **"end point valency"** chip and the **"start point valency chip"** into the Notebook section. ![Extract the lattice end point valency and start point valency property chips.](https://files.learn.ntop.com/help-articles/lattices/5938738607763.png) **3. Combine the Lists** * Add a **Concatenate List** block * Insert the two property chips, **"end point valency"** and **"start point valency"**, into the inputs **4. Calculate the Average** * Add an **Average** block * Delete the auto-populated list * Insert the **Concatenate List** block * Select the Overload to change the type to Scalar List * The average valency now appears at the top right of the block ![Change the Average block overload to scalar list.](https://files.learn.ntop.com/help-articles/lattices/5938866230291.png) ![The Average block computes the average valency.](https://files.learn.ntop.com/help-articles/lattices/5938868309139.png) And that's it! You've successfully calculated the average valency of your lattice. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *lattice calculate start point lattices beam amount end how-to connection average valency* # How to calculate the infilled percentage of a shelled and filled body Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-calculate-the-infilled-percentage-of-a-shelled-and-filled-body ## Objective: Learn how to calculate the infilled percentage of a shelled and filled body ## Applies to: * Lightweighting * Lattice * Math blocks ## Procedure: Creating a Shelled and Infilled Body is the first step toward calculating the infill percentage. 1. \*\*Import CAD Part and convert to Implicit:\*\*You must start with geometry to create a shell. **Import Part** block lets you import CAD geometry into nTop ([How to import parts and data into nTop](https://support.ntop.com/hc/en-us/articles/360049994434)). Use the **Implicit Body from CAD Body** block to convert your imported geometry into an implicit body. Then create a variable out of the Implicit body to be used in multiple places ([How to create variables](/help-articles/knowledge-base/user-interface/how-to-create-variables)). ![Import the CAD part and convert the CAD Body to an implicit body.](https://files.learn.ntop.com/help-articles/lattices/4408814824851.png) 2. \*\*Shell and Infill:\*\*Shelling and infill can be done by using one block, Do this by \*\*Shell and Volume Lattice block.\*\*Drag and drop the Implicit Body variable from the above step into the Body field. Choose your preferred Lattice type, Cell size, Rotation, Lattice thickness, Shell thickness, and Blend radius. In this step, you can also create variables of the input field to be used in multiple places. ![Use the Shell and Volume Lattice block to infill the implicit body shell with latice.](https://files.learn.ntop.com/help-articles/lattices/4408814984339.png) I have used the Section Cut to show a preview of the BCC infill ([How can I section cut my part to see inside?](/help-articles/knowledge-base/user-interface/how-can-i-section-cut-my-part-to-see-inside)) 3. \*\*Shell:\*\*Use the **Shell** block to create an empty shell that will be used to calculate the infill percentage of the original and infilled bodies. ![Use a Shell block on the original implicit body to create just the shell.](https://files.learn.ntop.com/help-articles/lattices/4408821247379.png) 4. **Calculating Volume of Body**: Calculate the volume of all bodies individually using **Mass Properties** block. ![Use the Mass Properties block on the original implicit body, the shelled body, and the shell and infill body.](https://files.learn.ntop.com/help-articles/lattices/50496189501331.png) 5. \*\*Calculate Infill Percentage:\*\*To calculate the infill percentage, we need to obtain the *Total Inner Volume, Infill Volume.* * *Infill Shell Vol - Empty Shell Vol =**Infill Volume*** * *Original Body Vol - Empty Shell Vol =**Total Inner Volume*** Use the **Subtract** block, drag and drop volume chip from Properties panel of **Mass Properties** block of required bodies. Use **Divide** and **Multiply** to obtain the infilled percentage from the volumes. ![Use the Subtract block, drag and drop volume chip from Properties panel of Mass Properties block of required bodies. Use Divide and Multiply to obtain the infilled percentage from the volumes.](https://files.learn.ntop.com/help-articles/lattices/50496189504147.png) And there you go! You should now have calculated your infill percentage if you've followed the instructions. Now, you'll be able to navigate math blocks with ease. If you still have questions, the [support team](https://support.ntopology.com/hc/en-us/requests/new) would be happy to help you. ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Infill%20Percentage.ntop) ## Keywords: *block lattice tpms shell of infill fill percentage calculate infilled math* # How to convert CAD sketches into lattices Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-convert-cad-sketches-into-lattices ## Objective: Convert imported CAD sketches into lattices. ## Applies to: * Graph Lattices * Custom Graph Unit Cell ## Procedure: ### 1. Start by importing your CAD sketch * * nTop imports all CAD sketches as a **'Curve'** type. > [!NOTE] > > **Note:** If your part only has sketches without models, it may appear blank in the graphic window. To access the curves, open up the properties and drag out the *curves* property chip. ![The properties panel of an imported CAD part. The curves property has been extracted and placed in the notebook](https://files.learn.ntop.com/help-articles/lattices/40340523483667.png) ### 2. Convert the Curves into Line Segments If you have imported Line Segments but they are imported as a Curve type, you can access the properties and then drag and drop the *Start Point* and *End Point* into a **Line** block. ![Convert the extracted curves to line segments by using the start and end points of the curves](https://files.learn.ntop.com/help-articles/lattices/40340523490067.png) ### 3. Convert Line Segments into a Graph Lattice Now, we need to convert our line segments into a lattice type. The best method for this is using the **Graph from Line Segments** block. ![Creating a graph from the line segments ](https://files.learn.ntop.com/help-articles/lattices/40340523491731.png) Place the result as input for the **Custom Unit Cell** block. ![A custom unit cell generated from the Graph from Line Segments block](https://files.learn.ntop.com/help-articles/lattices/40340523492627.png) And that's it! You've successfully converted your sketch into a lattice type. There are several options on what you can do with your lattice. One option is turning the lattice into a Custom Implicit Unit Cell ([How to build a custom lattice unit cell](/help-articles/knowledge-base/lattices/how-to-build-a-custom-lattice-unit-cell)). Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *cad lattice convert curve line how-to branch sketch segment branched curves sketching* # How to create a lattice structure for only a specific region of my design Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-create-a-lattice-structure-for-only-a-specific-region-of-my-design ## Objective: Learn how to apply lattices to only specific regions of a design. ## Applies to: * Latticing ## Procedure: There are several ways to accomplish this task, but the most straightforward is to use your CAD system to split the part into multiple regions before importing it to nTop. If you can isolate the region you want to lattice as its own CAD body, it will make the process easier and provide better control over your design. 1. Import your multi-body CAD part and extract helpful variables. For this example, we're going to extract the following CAD features: * The CAD Body of the area we want to lattice * The CAD Body we want to keep * The CAD Faces we are using to generate the lattice cell map. ![Extract the CAD Bodies from the imported CAD part.](https://files.learn.ntop.com/help-articles/lattices/43174602770451.png) 2. Convert the CAD bodies to implicit bodies. We will use these later downstream in the workflow. ![Convert the CAD Bodies to implicit bodies.](https://files.learn.ntop.com/help-articles/lattices/43174602771859.png) 3. Create a cell map using the **Cell Map Between CAD Faces** block, and the two faces we extracted earlier. ![Create a cell map using the Cell Map between CAD Faces block.](https://files.learn.ntop.com/help-articles/lattices/43174611035411.png) 4. Use the new cell map and a **Graph Unit Cell** block to generate the **Periodic Lattice**. ![Generate the Periodic Lattice using the cell map and a Graph unit cell.](https://files.learn.ntop.com/help-articles/lattices/43177710353171.png) 5. Using the **Trim Lattice** block, we can reduce the lattice structure to only remain within our REPLACE IMPLICIT region. ![Use a Trim Lattice block to confine the lattice to only beams inside the specified domain.](https://files.learn.ntop.com/help-articles/lattices/43174611038995.png) 6. Finally we can use a **Boolean Union** block to merge the lattice with the original frame of the CAD body to create our finished part! ![Use a Boolean Union block to merge the trimmed lattice with the original CAD frame.](https://files.learn.ntop.com/help-articles/lattices/43174602775571.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Lattice%20Specific%20Region.ntop) ## Keywords: *cad lattice bodies multiple region prepare how to area specific* # How to create a periodic lattice Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-create-a-periodic-lattice ## Objective: Learn how to create a Periodic Lattice and use Unit Cells and Cell Maps. ## Applies to: * Lightweighting ## Procedure: The **Periodic Lattice** is a building block for all periodic lattices. It accepts all Unit Cells and Cell Maps. The parameters update based on which Unit Cell is chosen. ![A diagram showing how a unit cell and a cell map generate a periodic lattice](https://files.learn.ntop.com/help-articles/lattices/6130760484627.png) **1.** **Choose your Unit Cell** There are several options for Unit Cells. These include Graph, TPMS, or Custom. * * When selecting your cell type, a Unit Cell Preview pops up. You can toggle between Implicit View and Graph View, preview the relative thickness, and toggle the bounding box on or off. The relative thickness is just a preview of what that value would look like, it doesn't set the thickness. ![An implicit view of a 1 parameter unit cell](https://files.learn.ntop.com/help-articles/lattices/6131217709459.png)![A graph view of a 1 parameter unit cell](https://files.learn.ntop.com/help-articles/lattices/6131178771731.png) **2. Choose your Cell Map** The Cell Map is the next building block in the process. It is created independently from the Unit Cell. Its purpose is to create the layout of the Unit Cells. There are two main types of Cell Maps: Geometric and Face/Mesh Dependent. Check out all of the Cell Maps within the Lattice tab in the Ribbon. * * The Geometric Cell Maps allow you to edit the size, radius, and cell counts. Each map has a Volume input that defines its extent and an optional **Frame** input to edit the starting point and the orientation of the map. * The Volume input uses an Implicit body. The Cell Map tries to fit the Unit Cells within the volume depending on the size of the Unit Cells. See the figure below as an example of when the Unit Cells are larger than the volume. * If you need a precise fit with larger Unit Cells, use the **Trim Lattice** block once you've completed your **Periodic Lattice**. * If you want to trim the Cell Map itself, without creating cut off Unit Cells, use the **Trim Cell Map** block. ![A diagram showing how different unit cell sizes look in a rectangular cell map](https://files.learn.ntop.com/help-articles/lattices/4408549659923.png) When creating a **Cell Map**, you can view the Full map or Navigate the Map using the heads-up display (HUD). The navigate map allows you to take a closer look at each unit cell location. ![a spherical cell map](https://files.learn.ntop.com/help-articles/lattices/6131110202131.png) **3. Build your Periodic Lattice** The **Periodic Lattice** is where you combine all of the elements and assign values to any parameters. * * Add a **Periodic Lattice** block. * Insert the Unit Cell. * Insert the Cell Map. * Define any parameters. ![A periodic lattice generated from a spherical cell map](https://files.learn.ntop.com/help-articles/lattices/6131293601683.png) ![Periodic lattice examples using different cell map shapes. From left to right, a rectangular periodic lattice, spherical periodic lattice, and a cylindrical periodic lattice ](https://files.learn.ntop.com/help-articles/lattices/360080916814.png) If you don't need to tweak the Cell Map too much, another method for creating lattices is to use the following blocks: * * **Rectangular Volume Lattice** * **Cylindrical Volume Lattice** * **Spherical Volume Lattice** **![A periodic lattice generated from the rectangular volume lattice block](https://files.learn.ntop.com/help-articles/lattices/6131372959635.png)** **![A periodic lattice generated from the cylindrical volume lattice block](https://files.learn.ntop.com/help-articles/lattices/6131435546771.png)** **![A periodic lattice generated from the spherical volume lattice block](https://files.learn.ntop.com/help-articles/lattices/6131460134291.png)** **4. Using the Periodic Lattice in your workflow** To use the **Periodic Lattice** body downstream, insert it directly into blocks that accept Implicit or Lattice types. The **Periodic Lattice** block contains implicit, thick graph, and beam properties. You can extract these by opening up the Properties panel and dragging the chips into the Notebook. You can read more about the new lattice data types here: [Understanding the lattice data types.](/help-articles/knowledge-base/lattices/understanding-the-lattice-data-types) ![The properties panel of a periodic lattice block](https://files.learn.ntop.com/help-articles/lattices/46035673704467.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *ramp blocks lattice thickness TPMS body update map frame graph cell periodic unit lattices mapping cylindrical spherical rectangular* # How to create a TPMS from an equation Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-create-a-tpms-from-an-equation ## Objective: Learn how to create a TPMS by using math equations. This example creates a Schwarz TPMS ## Applies to: * TPMS * Math ## Procedure: **1. Build the equation using math blocks** The equation for the Schwarz TPMS is **cos(x)+cos(y)+cos(z)**. Equations in nTop are built out by individual blocks. Some equations can quickly become complicated. Due to this, we recommend turning these workflows into Custom Blocks, so you only have to build it once. It is also useful to name each block as the function it is representing. * * Add 3 **Cos** blocks * In the first **Cos** block, write in 'X/1 mm'. This gets rid of the units associated with X and allows it to work with **Cos**. ![The Cosine block](https://files.learn.ntop.com/help-articles/lattices/47544632149523.png) * * Repeat this for the remaining **Cos** blocks using Y and Z instead of X. * Add an **Add** block * Insert Cos(X) and Cos(Y) into the Add block ![An Add block with two cosine blocks in the inputs](https://files.learn.ntop.com/help-articles/lattices/47544653284499.png) * * Add another **Add** block * Insert the Add block with Cos(X) + Cos(Y) * Insert Cos(Z) ![The equation blocks used to create the TPMS field](https://files.learn.ntop.com/help-articles/lattices/47544653286931.png) You can now view the results of your equation in the Field Viewer (F). ![A visualization of the scalar field that was created](https://files.learn.ntop.com/help-articles/lattices/47544653289235.png) **2. Give your TPMS units** The TPMS field we generated in the above step needs units to be used in other operations. Add units by multiplying the field by 1 mm. * * Add a **Multiply** block * Insert the equation from Step 1 into Operand A * In Operand B, write 1 mm ![The TPMS equation created above, multiplied by 1mm to give it units](https://files.learn.ntop.com/help-articles/lattices/47544653290643.png) **3. Trim your TPMS down to size** Use the **Boolean Intersect** block to edit the size of the TPMS * * Add a **Boolean Intersect** block * Insert the **Multiply** block from Step 2. * Insert a body with which you want to intersect the TPMS. In this example, we use a small **Box**. ![The implicit body TPMS generated from the TPMS field](https://files.learn.ntop.com/help-articles/lattices/47544632155411.png) And that's it! You've successfully created a TPMS using math blocks. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/schwarz_eqn.ntop) ## Keywords: *TPMS variable math build cos how-to x equation schwarz* # How to create a valency point map Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-create-a-valency-point-map ## Objective: Learn how to create a valency (number of beams per node) point map from a lattice and export the data. ## Applies to: * Exporting valency data ## Procedure: **1. Start with your lattice** To calculate this, you need to use one of the new lattice blocks. In this example, we are starting with a **Voronoi Volume Lattice** block. **2. Extract the Property chips** * Open up the Properties of the **Voronoi Volume Lattice** block * Expand the "beams" property * Expand the "> Properties" underneath the "beams" * Drag out the "end point valency" chip and the "end point" chip into the Notebook Why are we using the end point values? You can use either the end points or the start points. Every unique node has the same valency, regardless if it is an endpoint or a start point. ![The properties panel of the Voronoi Volume Lattice block. The End Point and End Point Valency property chips are extracted and placed in the notebook.](https://files.learn.ntop.com/help-articles/lattices/4409002986643.png) **3. Create the Point Map** * Add a **Point Map** block * Points: Insert the "End Points" chip * Values: Insert the "End Valency" chip Now you can view the Point Map and toggle the upper and lower bounds. These values correspond to the number of connected beams at each node. ![The valency point map visualized.](https://files.learn.ntop.com/help-articles/lattices/1500011424261.png) **4. Export the Point Map** To use this data in Excel or another program, add an **Export Point Map** block. And that's it! You've successfully created a valency point map. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/valency_pointmap.ntop) ## Keywords: *lattice map node of calculate point beam beams nodes how-to valency connectivity connections number* # How to create evenly distributed points on a surface Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-create-evenly-distributed-points-on-a-surface ## Objective: To create evenly distributed points on a surface ## Applies to: * Latticing ## Solution: This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: * **Learning Center course:** * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) * **Articles:** * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) 1. This [Custom Block](https://ntopology.box.com/s/foz8dd0z9i661x1ki94w03coyooi2wh6) runs off of a few required inputs. A few things to note about these are: * The mesh input must be a surface mesh of the body. * A unit must be specified in the point spacing input. * The relaxation iterations input controls the number of iterations that are run to evenly distribute the points * The random seed input specifies the seed value. Each seed value is essentially a different layout of the points. ![A cube with many points on its surface generated from the Max Evenly Spaced Points custom block](https://files.learn.ntop.com/help-articles/lattices/7187839402515.png) And that's it! You've successfully created evenly distributed points on a surface. ## Attachment: * [CB - Max Evenly Spaced Points](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20Max%20Evenly%20Spaced%20Points.ntop) ## Keywords: *surface points body custom block spacing space equal evenly distributed* # How to create multiple lattice designs using lists Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-create-multiple-lattice-designs-using-lists ## Objective: Learn how to create multiple lattice designs at the same time with lists. ## Procedure: **1. Create a list of numbers.** * Add a Sequence block. This block creates a list of numbers that increment by a constant amount. * Start: 0 mm * Increment: 12 mm * Count: 6 ![A Sequence block set up to create a list of 6. The Sequence starts at 0mm and ends at 12mm.](https://files.learn.ntop.com/help-articles/lattices/360104468573.png) **2. Create an array of points.** * Add a **Point List** block * Insert the **Sequence** block into the X input of the **Point List**. This creates a point at each spot specified in the sequence. **3. Create volumes.** * Add a **Box** block * Insert the **Point List** block into the Center Point input. This creates an object at each point. ![By inserting the Sequence list of 6 into the x input of a point block, 6 points are created in an evenly spaced line along the x direction. Then by inserting the point list into the center point input of a Box block, a Box is created at each of the 6 points.](https://files.learn.ntop.com/help-articles/lattices/1500003430262.png) **4. Fill the boxes with a lattice.** * Add a **Volume Lattice** block * Insert the **Box List** into the Volume input. By default, this fills each box with the same lattice. In order to fill each box with a different lattice, we need to use the **Volumetric Rule List** block and select six lattices. * Insert a **Volumetric Rule List** into the Unit type input. Choose 6 different lattices to iterate the box design ![Inserting the Box List into the Volume input of a Volume Lattice block, we can generate 6 lattices. The unit type input has a list of 6 different unit cells, which results in each lattice having a different unit cell configuration.](https://files.learn.ntop.com/help-articles/lattices/360104469073.png) And that's it! You've successfully created multiple lattices on your design using lists. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Multiple%20Lattice%20Designs%20using%20Lists.ntop) ## Keywords: *Lattice volume list points sequence lists fast multiple point processing volumetric process rule designs* # How to curve a gyroid? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-curve-a-gyroid ## Question: How to curve a gyroid? ## Applies to: * Remap Field * Gyroid * Lattice ## Answer: This article uses a **Remap Field** to create our desired outcome. If you are new to using Remap, start with the following resources: * **Learning Center course:** * [Intermediate Field Driven Design](https://learn.ntopology.com/intermediate-field-driven-design) * **Articles:** * [Introduction to the Remap Field block](/help-articles/knowledge-base/implicit-modeling/introduction-to-the-remap-field-block) * [How to use Remap Field to scale or translate an object](/help-articles/knowledge-base/implicit-modeling/how-to-use-remap-field-to-scale-or-translate-an-object) 1. Start with the Centerline which you would like the gyroid to follow ![The centerline curve that will be used to map the gyroid](https://files.learn.ntop.com/help-articles/lattices/40340096640659.png) You can use a combination of Line Segments and Arcs to create your centerline or import it from CAD software as well. 2. We would now need to generate the Gyroid structure that we will use to Remap to follow the Centerline. We recommend creating an infinite length (50x of what is needed) gyroid structure. ![The gyroid structure that will be mapped to the centerline curve](https://files.learn.ntop.com/help-articles/lattices/40340080345747.png) 3. We will use the **Remap Field** block to remap the TPMS's direction. We will be Remapping the Gyroid in two directions: **X:** We will use the distance to extrusion property of the path profile we created to ensure the x-direction is filled based on the Path generated using the **Profile from Curves** block. ![Generating the path profile using the Profile from Curves block and the centerline path](https://files.learn.ntop.com/help-articles/lattices/40340096645907.png) **Y:** We will use the curve's arc length field property to determine the periodicity. Then, let's move the Gyroid using an **Add** block. **![The properties panel of the Extend curve block](https://files.learn.ntop.com/help-articles/lattices/40340080350355.png)** 7. Finally, **Boolean Intersect** the obtained lattice structure with the Channel. ![The final curved gyroid following the centerline path](https://files.learn.ntop.com/help-articles/lattices/40340080353427.png) And that's it. You have learned how to curve a gyroid. ![The curved gyroid in a plate](https://files.learn.ntop.com/help-articles/lattices/40340096661011.png) ## Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Curvy%20Gyroid.ntop) ## Keywords: *gyroid how to question curve curvy* # How to determine the number of cells in a cell map Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-determine-the-number-of-cells-in-a-cell-map ## Question: I want to know how many individual cells are in my cell map. How can I determine this without manually counting? ## Applies to: * Cell Maps * Unit Cells ## Answer: While there isn't currently a built-in cell counter, this method is a simple workaround to determining the number of cells in a cell map. 1. Starting with any cell map, add a **Periodic Lattice** block and a **Graph Unit Cell** block to your workflow. ![A cylindrical cell map generated from a base cylinder](https://files.learn.ntop.com/help-articles/lattices/14704900143379.png) 2. Set the Unit cell type to "Column" and put both blocks into the **Periodic Lattice** block inputs. The thickness parameter is irrelevant for determining the count. ![A periodic lattice generated using a graph unit cell and the cylindrical cell map](https://files.learn.ntop.com/help-articles/lattices/14704959690515.png) 3. Locate the Beams chip using the Periodic Lattice block's properties panel. The amount of beams in the lattice is the number of cells in your cell map. ![Viewing the properties panel of the periodic lattice to determine the number of cells in the cell map. ](https://files.learn.ntop.com/help-articles/lattices/14705112519315.png) ## Keywords: *lattice map question cell unit amount cells count number cell map quantity* # How to generate randomized lattice thickness Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-generate-randomized-lattice-thickness ## Objective: Learn how to create a variable lattice thickness driven by **3D** **Simplex Noise** in a [**Ramp**](/help-articles/knowledge-base/implicit-modeling/how-do-i-use-the-ramp-block). This technique is useful for creating Stochastic foam. ## Procedure: 1. Start with any Implicit Body. 2. Add a **Ramp** to use as a thickness modifier. * In the Scalar Field of the Ramp, add **Simplex Noise 3D.** * Change the frequency to vary the thickness. * Set the Ramp values: * In Min: -0.5, In Max: 0.75. * Out Min: 0.17 mm, Out Max: 0.8 mm (right-click on the Out Min and Out Max input names to turn them into variables, allowing you to easily change the beam thickness). ![A Simplex Noise 3D block in the Scalar Field input of a Ramp block. This modifies the Simplex Noise 3D field based on the input values.](https://files.learn.ntop.com/help-articles/lattices/6015388794387.png) 3. Add a **Voronoi Volume Lattice.** * Seed points: **Random Points in a Body.** * Thickness: Ramp created from the above step. **![A Voronoi Volume Lattice block. This creates a voronoi lattice using points inside the body. The beam thickness is modified by the Ramp field created in step 2.](https://files.learn.ntop.com/help-articles/lattices/6015398636051.png)** 4. Add a **Trim Lattice.** * Voronoi lattice: Voronoi Lattice. * Volume: Implicit Body. * Lattice to remain: Inside. * Feature tolerance: 0.1mm. ![A Trim Lattice block. This block trims the voronoi lattice to remain only inside the defined body.](https://files.learn.ntop.com/help-articles/lattices/6015470914963.png) ![The trimmed voronoi lattice.](https://files.learn.ntop.com/help-articles/lattices/6015512963475.png) And that's it! You've successfully created a lattice with a randomized beam thickness. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Variable_Voronoi_Lattice_Thicken_Simplex_Noise.ntop) ## Keywords: *ramp Variable Lattice Thickness Simplex Noise texture offset lattices trim random stoichastic 3d* # How to measure TPMS wall thickness Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-measure-tpms-wall-thickness ### [1. Why do we measure the TPMS wall thickness?](#h-01h5qhndzv2vxa9fanqz583sr0) ### [2. How do we measure the TPMS wall thickness?](#h-01h5qhnqbah3rbb2wyhvhrdvke) ### [3. How do we post-process these thickness values?](#h-01h5qhp65733bv8x22nk7vccg0) ## 1. Why do we measure the TPMS wall thickness? We need to ensure that the wall thickness is above the minimum printable threshold and that the thickness is uniform. Uniform walls help mitigate weak points, stress concentrations, and the risk of deformation or failure under applied loads. The TPMS can maintain its structural integrity and perform as intended by ensuring the appropriate thickness. ## 2. How do we measure the TPMS wall thickness? In this support article, we will take a Heat Exchanger and measure the wall thickness of the lattice structure in it. The Heat Exchanger is taken from the learning center course ([https://learn.ntop.com/path/heat-exchangers](https://learn.ntop.com/path/heat-exchangers)). ![An example of a heat exchanger with the cold fluid, hot fluid, and hex core all labeled.](https://files.learn.ntop.com/help-articles/lattices/18687238822931.png) Before we start, verify that your Walled TPMS Unit Cell or Walled TPMS Unit Cell with Offest block is on the second overload with the Exact thickness input and that the input is checked. > [!NOTE] > > *Note: Lattices will generate much faster when the Exact thickness is unchecked. Use this setting when fast iterations are needed or for scenarios where you do not require exact wall thickness. At later stages in the process, once you have finalized the design, check the Exact thickness. This will refine the lattice's wall thickness to match your input value.* ![Changing the overload of the Walled TPMS Unit Cell block to enable Exact Thickness.](https://files.learn.ntop.com/help-articles/lattices/18693953553427.png) 1. First, define a sample area where you want to measure the thickness. The small sample size reduces the time required to get a result. You can repeat this process over multiple different samples to validate your part. We will use **Box** and **Boolean Intersect** to get the sample lattice structure from which to measure the thickness. ![Boolean Intersecting a sample box with the heat exchanger TPMS. This creates a sample portion to measure.](https://files.learn.ntop.com/help-articles/lattices/18694038468499.png) 2. We need to mesh the generated sample of the lattice using the **Mesh from Implicit Body** block. > [!TIP] > > *Tip: The general recommendation for **Tolerance** is 1/3rd of the minimum feature size, which would be 1/3rd of the TPMS thickness we used, and toggle the overload to enable Sharpen iterations input and set it to 3.* ![The sample TPMS converted to a mesh.](https://files.learn.ntop.com/help-articles/lattices/18688866002963.png) 3. In this step, we will generate points on the Mesh to measure the thickness values. We can use the Nodes directly or the **CB - Max Evenly Spaced Points** to generate evenly spaced points on the mesh. Enter the appropriate parameters for the inputs in the custom block. You can download the CB - **Max Evenly Spaced Points** from [here](https://ntop.app.box.com/file/974620524338?s=foz8dd0z9i661x1ki94w03coyooi2wh6) and learn more from [here](/help-articles/knowledge-base/lattices/how-to-create-evenly-distributed-points-on-a-surface). ![Using the custom block Max Evenly Spaced Points to create points on the mesh surface.](https://files.learn.ntop.com/help-articles/lattices/18688989328531.png) 4. To measure the thickness, we will use the **Field from Mesh Thickness** block to get the values and combine the **Evaluate Field** and **Point Map** block to plot the mesh thickness at those points. The **Field from the Mesh Thickness** block measures the thickness of a Mesh and creates a Scalar Field of the values. Mesh thickness is twice the distance from a point on the Mesh's medial axis to its surface. This block only supports objects with medial axes. > [!NOTE] > > *Note: Spheres and other objects with degenerate medial axes are not supported.* ![Using the Field from Mesh Thickness block to generate a field of the meshed tpms.](https://files.learn.ntop.com/help-articles/lattices/18692776805779.png) The **Evaluate Field** block evaluates the field at a specified point (or multiple points) and returns the value as a property within the block. The **Point Map** block assigns values, in scalar, vector, or temperature formats, to locations in space defined by a Point list. The block takes in a Point list and a Value list. The first point in the Point list is assigned the first value from the Value list. This pattern repeats for all remaining points and values. > [!NOTE] > > *Note: We* *recommend* *offsetting the sample box with a negative offset to skip the outliers* *measured* *at the boundaries.* *![Using the Evaluate Field block to find the thickness values. Combining the field with the surface mesh points creates visual data for analyzing the thickness.](https://files.learn.ntop.com/help-articles/lattices/18693855438099.png)* You can now visualize the Mesh thickness values as a Point Map, and we can see that it is uniform and within an acceptable range from our input of 0.5mm. ## 3. How do we post-process these thickness values? You can leverage a couple of Custom Blocks to understand your results easily. The **Percentiles** block displays the values as a percentile. Use the **Average** and **STDEV** blocks to measure the average and standard deviation values. [CB - STDEV](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20STDEV.ntop) ![The STDEV custom block is used to calculate the standard deviation of the Evaluate Field points.](https://files.learn.ntop.com/help-articles/lattices/18694496210707.png) Average ![The Average block is used to calculate the average thickness of the Evaluate Field values.](https://files.learn.ntop.com/help-articles/lattices/18694513864851.png) [CB - Percentiles](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20Percentiles.ntop) ![The Percentiles custom block displays values as a percentile.](https://files.learn.ntop.com/help-articles/lattices/18694586781331.png) You have successfully measured the TPMS wall thickness. You can now directly slice your Implcit Body ([How to create and export slices](/help-articles/knowledge-base/additive-manufacturing-preparation/how-to-create-and-export-slices)) and send it to the printer. ## Example File * [Example File](https://storage.googleapis.com/files-learn/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/TPMS%20Thickness.ntop) ## Keywords: *thickness tpms measure point map hex wall wall thickness evaluate field* # How to model a gyroid using the Periodic Lattice block Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-model-a-gyroid-using-the-periodic-lattice-block ## Objective: Learn how to model a gyroid lattice structure by using the **Periodic Lattice** block. ## Procedure: Gyroids are Triply Periodic Minimal Surfaces (TPMS). They are frequently used in engineering applications because they possess a high surface area relative to their volume, which significantly increases heat transfer efficiency. 1. **Define the Design Space:** Start with any Implicit Body to serve as the volume you wish to fill with the lattice. In this example, we will use a Cylinder block as the design space. * In this example, we will use a simple **Cylinder** block as the design space. **2. Select the Unit Cell:** * Add a **Walled TPMS Unit Cell** block to the *Unit Cell* input of the **Periodic Lattice** block. * Set the Unit Cell type to **Gyroid**. * Enter an *Approx. Thickness* of **1 mm**. **3. Define the Cell Map:** * Add a **Rectangular Cell Map** block to the *Cell Map* input. * Set the *Cell Size* to **5, 5, 5 mm** (or your desired periodicity). * *Note:* You can drag your initial Design Space (Cylinder) into the *Volume* input of the Cell Map to ensure the map covers the part geometry. **4. Trim the Lattice:** * Add a **Trim Lattice** block. * Drag and drop your **Periodic Lattice** block into the *Lattice* input. * Drag and drop your Design Space (**Cylinder**) into the *Body* input. > [!TIP] > > **Tip:** If you require a solid body for Boolean operations (like a union with a solid shell), you can use a Boolean Intersect block instead of Trim Lattice, but note that this converts the lattice immediately to an Implicit Body. ![the image shows the design space created using a cylinder block, a lattice structure created with gyroid unit cell and periodic lattice block with Boolean intersect in the end to trim it.](https://files.learn.ntop.com/help-articles/lattices/46843475830931.png) And that's it! You've successfully created a gyroid infill. If you want to build a complete Heat Exchanger, follow this [course](https://learn.ntop.com/courses/intro-to-two-channel-heat-exchangers-in-ntop/). Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/how_to_model_a_gyroid.ntop) ## Keywords: *Gyroid boolean intersect lattice TPMS create body example with model working periodic creating TPMS structure heat exchanger infill* # How to offset TPMS walls Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-offset-tpms-walls ## Objective: I am designing a heat exchanger and need to offset the TPMS walls using two different offset values. I need to model a TPMS defined by multiple iso-contour level set inequalities. > [!NOTE] > > *Note: If you are offsetting equally in both directions, you can use either the **TPMS Unit Cell with Offset** or the **Walled TPMS Unit Cell with Offset** blocks **.*** ## Applies to: * TPMS * Heat Exchangers * Lattices ## Procedure: 1. For this example, we will use a cube cutout of TPMS composed of a **Gyroid Body** and a **Set Bounding Box** block. ![A starting TPMS gyroid body defined by a bounding box.](https://files.learn.ntop.com/help-articles/lattices/20698187783059.png) 2. Next is to define the required offsets for the TPMS walls by inputting your values. Offset bodies are then created for each side using the **Offset Body** block. For this example, we will refer to the offset sides as 'Red' and 'Blue.' To help illustrate and define each of these, we altered the color and transparency of the offset bodies. > [!NOTE] > > *Note: It is not mandatory to create the offset bodies; they are used to visualize the objective result.* ![A diagram showing the range of TPMS Offset.](https://files.learn.ntop.com/help-articles/lattices/20852438349075.png) ![Creating the two offsets for the TPMS body for two fluids, a red and blue fluid.](https://files.learn.ntop.com/help-articles/lattices/20698177568659.png) 3. Using an **Add** and **Divide** block, we can calculate the average of the two offsets. This 'Center Offset' value is then used to offset the 'Starting TPMS' body. The TPMS center has now shifted into its correct position. Our last calculation uses a **Subtract** and an **Abs** block to calculate the TPMS thickness. ![To create the new TPMS centerline, the red and blue offsets are used to find the average value. This value is then used in the Offset Body block for the TPMS. The thickness value is equated by subtracting the red and blue values and then taking the absolute value.](https://files.learn.ntop.com/help-articles/lattices/20698155629843.png) 4. The final steps are to use a **Shell** block with the new 'Centerline' TPMS body, the calculated 'Thickness,' and the *Direction* set to Center. When this **Shell** result is used to **Boolean Intersect** with the solid body conversion of the **Bounding Box**, the result is your 'Final TPMS.' ![The Final TPMS structure being created by intersecting the shell with the original implicit box of the bounding box.](https://files.learn.ntop.com/help-articles/lattices/20698187794195.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/TPMS_Offset_Walls_Example.ntop) ## Keywords: *tpms gyroid offset question heat exchanger value wall walls* # How to perforate on any surface with unit cell meshes Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-perforate-on-any-surface-with-unit-cell-meshes ## Objective: Perforate using a unit cell on any surface ## Applies to: * **Orienting Unit Cells** ## Procedure: 1. Preparing the **Geometry** and **Unit Cell** * Drag and drop the CAD Body variable from the properties panel of the **Import Part** block. * Convert the CAD body to Implicit Body and make it a variable to be reused. * Create an **Axis** at the center of the face and normal to the CAD face. > [!TIP] > > **Tip:** If you are unable to achieve the desired orientation try orienting the unit cell to align with the axis. ![Perforation\_2.jpg](https://files.learn.ntop.com/help-articles/lattices/4418339608979.png)**![Perforation\_1.jpg](https://files.learn.ntop.com/help-articles/lattices/4418335025299.png)** 2. Import the custom blocks: * **CB - Orient Unit Cell to Plane v2-3** * **CB - Orient Unit Cell to Plane v3.4** 3. Selecting Geometry for the CB * Select the CAD Face on which you would want to place the unit cell and CAD Edge list for the Keep Out Zone to be used in the CB ([How to work with CAD bodies](/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies)) ![A gif showing the extracted CAD geometry that will be used as inputs for the custom blocks.](https://files.learn.ntop.com/help-articles/lattices/50494248285203.png) > [!TIP] > > **Tip:** Don't worry if you select an additional CAD Face while selecting CAD Edges, you can easily delete it later from the Notebook. 4. Insert the Custom block by searching **CB - Orient Unit Cell to Plane** in the Search box and choose the version you would like to use based on the inputs below: ![The Orient Unit Cell to Plane v2-3 custom block.](https://files.learn.ntop.com/help-articles/lattices/50494248292243.png)![The Orient Unit Cell to Plane v3.4 custom block.](https://files.learn.ntop.com/help-articles/lattices/50494239360275.png) * **Unit Cell (UC):** The unit cell that was prepared by aligning to Z-axis in the above step. * **UC Spacing (mm):** The spacing between two unit cells/perforations. Make sure you enter **"mm"** after the value for the block to not throw an invalid units error. * **Radii: UC Xsec (mm):** The value can be chosen between the minimum and maximum radii of an inscribed circle or circumscribed circle on a cross-section of your unit cell. The random points are generated based on the hexagonal packaging to ensure the unit cells don't overlap each other. The Radii values chosen can be anywhere between the inscribed radii and circumscribed radii. ![A diagram explaining the inscribed radii and circumscribed radii inputs.](https://files.learn.ntop.com/help-articles/lattices/4430452530835.png) * **Object to Perforate:** This input is for the implicit body that you wish to perforate with the unit cell. * **CAD Face Mesh:** Use the CAD Face Mesh selected to place your unit cell. * **Relaxation Iterations and Random Seed:** These inputs are to evenly distribute and add randomness to the point distribution. * **Angle to twist:** The angle at which the unit cell has to be twisted about its own axis. * **'draft' vector and Angle to 'draft':** The vector in which you want to rotate/tilt your unit cell and the handle to rotate your unit cell on the defined vector. * **Nominal part thickness of the section you are perforating (mm):** The thickness of the body being perforated. This can be used as a translation distance from the surface along with its axis. * **Rotate 'object':** The primary axis of the object you want to perforate **CB - Orient Unit Cell to Plane v3.4** * **CAD Edge KOZ:** Use the CAD Edges where you wish to keep out the unit cell from. This will be used to remove the points near the edges. * **Radius of KOZ:** The radius you want to define the exclusion zone is the CAD edge. After populating the inputs of the CB - Orient Unit Cell to Plane v3.4 block, we can see the resulting mesh. All of the unit cells have been oriented in the direction of the center face at the specified angle. ![Unit cells oriented toward the center of the CAD Face using the CB - Orient Unit Cell to Plane v3.4 block.](https://files.learn.ntop.com/help-articles/lattices/50494248307859.png) Once the unit cells are in place, we can convert the mesh to an implicit body, and then use a Boolean Subtract to perforate the surface. ![The final implicit body with the unit cells subtracted from the surface.](https://files.learn.ntop.com/help-articles/lattices/50494239370259.png) Feel free to right-click and export the custom block to see what's inside and that's it! You've successfully perforated with unit cell mesh. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Perforation.ntop) * [CB - Orient Unit Cell to Plane v2-3](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20Orient%20Unit%20Cell%20to%20Plane%20v2-3.ntop) * [CB - Orient Unit Cell to Plane v3-4](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CB%20-%20Orient%20Unit%20Cell%20to%20Plane%20v3-4.ntop) ## Keywords: *mesh cut perforation cell unit out space how-to orient perforate hole* # How to vary density to create a custom shoe sole Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-vary-density-to-create-a-custom-shoe-sole ## Objective: How to drive density in a shoe sole based on a foot pressure jet map. ## Applies to: * Lattices * Custom shoes and insoles ## Procedure: **1. Set-up** To use the foot pressure data, you need a pressure map image of the data. The pressure map image must be converted into a Scalar Point Map in a CSV file type. The file should have the X, Y, Z, locations, and intensity. Converting this is beyond the scope of this tutorial, but it can be accomplished through Python or other programming languages. The image needs to be scaled to match the size of the shoe sole model. **2. Create the Pressure Map** * Add an **Import Scalar Point Map** block, import the CSV file, and choose the proper units for the data. Nothing will show up after importing this. * Add the block **Field from Point Map** to create a field from the data. * Insert the Scalar Point Map variable and set Interpolation to Natural and Extrapolation to Nearest. * Press 'F' or go to View > Field Viewer to view the field of the imported pressure map. ![An imported pressure map.](https://files.learn.ntop.com/help-articles/lattices/360102193833.png) **3. Import the Shoe Sole Model** Use the **Import Mesh** block to import the Shoe Sole model. After importing, add a **Remesh Surface** block to clean up the mesh. It's best practice to always mesh imported meshes. **4. Create a Ramp to Modify the Geometry** Now that we have our Field Map and Shoe Sole imported, we need to link them together. In order to do this, we need to add a [Ramp](/help-articles/knowledge-base/implicit-modeling/how-do-i-use-the-ramp-block) block. * In the Real Field of the **Ramp** block input the Foot Pressure Map variable from Step 1. This will allow the **Ramp** to vary any value according to the Foot Pressure Map. For the In min and max values, the allowable range for the Jet Map is 0 - 255, with 0 being dark blue and 255 being dark red. In this tutorial, set the values to: * In Min: 14 * In Max: 200 * The Out Min and Max values will be in mm, with the Min being larger and the Max being smaller. This will allow values closer to the dark red hue (higher pressure) to be smaller and denser, increasing the density where it is needed the most. Set the values to: * Out Min: 5 mm * Out max: 2.5 mm ![A Ramp block is used to modify the imported pressure map.](https://files.learn.ntop.com/help-articles/lattices/42788521189011.png) **5. Vary the Density of the Surface Mesh based on the Field Map:** * Add a **Remesh Surface** block. * Use the Remesh Sole as the Surface. * Use the **Ramp** density modifier as the Edge Length (this will change the size of the triangles based on the field map values). * Set the Shape to Triangles. **6. Vary the density of the Volume Mesh:** Add a **Volume Mesh** block and use the **Ramp** as the Edge Length and the Driven Remeshed Surface as the Domain. This will allow the entire volume mesh to vary based on the field values. **7. Turn the Field Driven Volume Mesh into a Lattice:** Add a **Lattice from Volume Mesh** block to turn the mesh into a lattice. ![The Lattice from Volume Mesh block creates a lattice from an input volume mesh.](https://files.learn.ntop.com/help-articles/lattices/6015826288147.png) ![The final lattice created from the volume mesh.](https://files.learn.ntop.com/help-articles/lattices/360100013714.png) And that's it! You've successfully created a custom shoe sole. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Field_Driven_Sole.ntop) ## Keywords: *ramp field lattice points field from point map driven density shoe sole edge length jet map custom csv point scalar pressure* # How to warp a cell map using fields Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-warp-a-cell-map-using-fields ## Objective: Learn how to warp a Cell Map using a field. ## Applies to: * Lattices * Warp Cell Map ## Procedure: 1. **Preparing the field to warp the cell map:** Point Maps can be used as fields with the **Field from Point Map** block. ![A Field from Point Map block. The point map is created from a Topology Optimization Density Point Map block.](https://files.learn.ntop.com/help-articles/lattices/4410246118035.png) * Point Map: **Topology Optimization Density Point Map** * Result: Topology Optimization * Interpolation and Extrapolation ([Interpolation and Extrapolation options for creating a Field from a Point Map](/help-articles/knowledge-base/structures/what-are-interpolation-options-for-creating-a-field-from-a-point-map)) Another method is to obtain the field by dragging and dropping the chip from the properties menu. ![Another method for obtaining the density field is to extract it from the Topology Optimization properties panel.](https://files.learn.ntop.com/help-articles/lattices/4410238474899.png) 2. **Set up the Ramp:** Add a **Ramp** block ([How do I use the Ramp block?](/help-articles/knowledge-base/implicit-modeling/how-do-i-use-the-ramp-block)) * Scalar field: **Set Field Bounding Box** * Scalar field: Density Field * Bounding box: Bounding Box of the Body created from Topology Optimization Result * In min: 0 * In max: 1 * These values are set based on the field that is used as input and can be obtained on HUD. * Out min: 0.5 * Out max: 2 * The values here are the scaling factors for the cell size. * Contunuity: Geometric (C0) ![A Ramp block being used to Ramp the density field values.](https://files.learn.ntop.com/help-articles/lattices/4410252157587.png) 3. **Create your base Cell Map:** This is the cell map that we are warping. * Add a **Rectangular Cell Map** block (in this example, we use the **Rectangular Cell Map** block, but you can use whichever cell map you prefer) * Volume: In this example, we are trying to create a lattice structure using the topology optimized body. Add a **Smoothen Body** and **Implicit Body from Topology Optimization.** * Cell size: 5,5,5 > [!TIP] > > **Tip:** To learn more about converting the result into implicit body follow the instructions here ([How to run a topology optimization](/help-articles/knowledge-base/optimization/how-to-run-a-topology-optimization)) 4. **Warp Cell Map:** * Cell Map: Base Cell Map * Discretization: 100,100,100 * We choose a bigger number here for the grid size to increase the details that could be captured from sizing fields. * U, V, W scale: Ramp ![Creating the periodic lattice using the warped cell map. The warped cell map is visualized to show the effects of the density modifier.](https://files.learn.ntop.com/help-articles/lattices/42787857282579.png) ![The final lattice design created using the warped cell map.](https://files.learn.ntop.com/help-articles/lattices/4410277722003.png) ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Warp%20using%20Fields.ntop) ## Keywords: *Top Opt density point map fields warp how-to cell map* # How to warp a lattice with sine wave spacing Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-warp-a-lattice-with-sine-wave-spacing ## Objective: Learn how to warp a lattice using a sine wave field. ## Applies to: * Lattices * Remap field ## Procedure: **1.** **Create a design space:** * * Import or create the geometry where you want the lattice to fill (this will be used at the end) * Create a **Box** * Length: 50 mm * Width: 10 mm * Height: 10 mm **2.** **Generating a lattice in a region larger than the design space:** (this allows us to create the sine field in a larger area and trim it down after) * * Add a **Periodic Lattice** block * Insert a **Graph Unit Cell** * Unit Cell: Body-Centered Cubic * Insert a **Rectangular Cell Map** * Volume: Insert your own larger design space or add a **Box** with a length of 500 mm, a width of 10 mm, and a height of 10 mm (this is a lot longer than the design space created in Step 1a) * Cell Size: 1 x 1 x 1 mm * Thickness: 0 mm ![A periodic lattice created using a graph unit cell and a rectangular cell map](https://files.learn.ntop.com/help-articles/lattices/5996401367315.png) **3. Create the Sine wave field:** * Add a **Sin** block * Insert a **Divide** block into the Operand input * Operand A: x * Operand B: 1mm * Add a **Multiply** block * Operand A: Insert the **Sin** block * Operand B: 1 mm The **Divide** and **Multiply** blocks remove and re-assign units. The values of 1 mm can be changed to alter the wavelength and the amplitude. ![Creating the Sin field and applying units to the field](https://files.learn.ntop.com/help-articles/lattices/360103261413.png) To preview the field, select the **Multiply** block and hit 'f' to bring up the [Field Viewer](/help-articles/knowledge-base/user-interface/how-to-use-the-field-viewer). Set the Colormap to 'Turbo'. Below, you can see the visualization of the sine wave. ![The sin field visualized](https://files.learn.ntop.com/help-articles/lattices/360101102254.png) * * Add a **Remap Field** block (this re-maps the lattice field with the sine wave on the x-axis) * Scalar Field: Insert the Implicit Property chip from the **Periodic Lattice Body** in Step 1 * X: Insert the **Multiply** block * Y: Y * Z: Z ![Remapping the field of the lattice body using the sin field](https://files.learn.ntop.com/help-articles/lattices/5996428370835.png) **3. Normalize the Field:** This block is useful for remapping fields with severe deformations. It helps make the thickness more accurate. Without it, the underlying field can be stretched. > [!NOTE] > > **Note:** You can now grab a Normalize field chip from the block's Properties panel. * * [Download the Custom Block](https://ntopology.box.com/s/gvstffta0tayhcu9of70k9h41uwywj5d) Normalize Field and [import](https://support.ntop.com/hc/en-us/articles/360060151133) it into your notebook * Add the **Normalize Field** block * Insert the **Remap Field** block from Step 2 **4. Thicken the Lattice:** * * Add a **Thicken Body** block * Insert the **Normalize Field** block from Step 3 * Set the Thickness to 0.25 mm **5. Trim the Lattice:** * * Add a **Boolean Intersect** block * Body 0: Thickened Lattice * Body 1: Design Space ![A boolean intersect of the sin wave generated lattice and the design space to trim down the lattice size](https://files.learn.ntop.com/help-articles/lattices/1500002206502.png) In the image below, we compare the lattice to the sine wave field. You can see the lattice is elongated where the sine wave is at the min and max values. ![The sin wave remapped lattice overlayed over the sin wave field](https://files.learn.ntop.com/help-articles/lattices/360103264213.png) And that's it! You've successfully warped your lattice with a sine wave. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Sine%20Lattice%20Spacing.ntop) ## Keywords: *field lattice thicken view cell periodic unit remap multiply math beta mapping trim warp how-to size re sine sin wave normalize divide turbo* # How to warp the cell size of a Cell Map Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/how-to-warp-the-cell-size-of-a-cell-map ## Objective: Learn how to warp the cell size of a Cell Map using the Ramp block. ## Applies to: * Lattices * Cell Maps ## Procedure: **1. Create your base Cell Map:** This is the cell map that we are warping. * Add a **Rectangular Cell Map** block (in this example, we use the **Rectangular Cell Map** block, but you can use whichever cell map you prefer) * Input a Cube to use as the Volume * Set the Cell size to 10 x 10 x 10 ![Creating a Rectangular Cell Map from a cube.](https://files.learn.ntop.com/help-articles/lattices/4409012530323.png) **2. Warp your Cell Map** ![The Warp Cell Map block.](https://files.learn.ntop.com/help-articles/lattices/42787632335379.png) * Add a **Warp Cell** **Map** block * Insert the Base Cell Map from Step 1 The **Warp Cell** **Map** block has scale inputs for U, V, and W, which warp the cells in the cell map. Since the block prevents out-of-plane warping at the boundaries of the Cell Map, the amount of local stretching and compression that can take place is restricted. This means that local cell size depends on how large the weight field is locally relative to the weight field in the rest of the domain. Hence, there is no direct correlation between the inputs of U, V, and W scale fields and the output cell size. Positive values stretch out the cells and negative values compress them. To scale the values, you need to use a field. Some examples of fields that you can use include, but aren't limited to: * Extracting the U, V, or W fields from the original Cell Map. * If you use the U, V, or W fields, you need to use that field in the corresponding U, V, or W scale inputs to see results. ![Using the Warp Cell Map block to modify the cell map in the U direction.](https://files.learn.ntop.com/help-articles/lattices/42787616727059.png) * Using a Ramp with any field ![Using the Warp Cell Map block to modify a cell map in all directions. The field used to warp the cell map is created using a Ramp block.](https://files.learn.ntop.com/help-articles/lattices/42787616732691.png) **3. Build the Lattice:** Build up your lattice now that the cell map is warped and ready to go. * Add a **Periodic Lattice** * Input a **Unit Cell** block and choose the unit cell you want * Input your **Warp Cell Map** block (for this example, we used the Ramped cell map) * Set the Unit cell parameter 1 to 1mm ![A lattice generated using the warped cell map.](https://files.learn.ntop.com/help-articles/lattices/4405766419347.png) A few more representations are displayed in the example file, a linear warp and a radial warp. ![The top lattice is created with a regular rectangular cell map, while the bottom lattice uses a warped cell map.](https://files.learn.ntop.com/help-articles/lattices/20194329970323.png) ![The left lattice is created with a regular rectangular cell map, while the right lattice uses a warped cell map.](https://files.learn.ntop.com/help-articles/lattices/20194329976083.png) And that's it! You've successfully warped and ramped your Periodic Lattice. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Warp%20Cell%20Map%20Example.ntop) ## Keywords: *ramp lattice volume ramping body edit scale cell periodic vary warp how-to graded warping U V W size* # I ran into "Only cubic unit cells are currently supported" error. Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/i-ran-into-only-cubic-unit-cells-are-currently-supported-error ## Issue: Only cubic unit cells are currently supported. ![The Graph Unit Cell block with the Lattice Error: Only cubic unit cells are currently supported](https://files.learn.ntop.com/help-articles/lattices/32550563245459.png) ## Applies to: * **Periodic Lattice** * Hex prism diamond, Hex prism edge, Hex prism vertex centroid, Hex prism central axis edge, Hex prism laves phase, Tet oct vertex centroid, Oct vertex centroid ## Cause: **Periodic Lattice** block only supports cubic unit cells. ## Solution: Before we start, you need to enable *"Show deprecated blocks"* option from Settings > General ([What is a deprecated block?](/help-articles/knowledge-base/user-interface/what-is-a-deprecated-block)). 1. Add in the **Volume Lattice** \[Deprecated] block 2. Enter the following parameters * Volume: Box (Unit Cell Box) * Unit type: Graph Unit Cell * Scale: same as the Box dimensions ![The deprecated volume lattice block generated from a box](https://files.learn.ntop.com/help-articles/lattices/32550563258515.png) 3. Add a **Graph from the Line Segments** block, dragging and dropping the ***line segments*** property chip from the **Volume Lattice** block. ![Using the line segments from the volume lattice block as an input for the Graph from Line Segments block](https://files.learn.ntop.com/help-articles/lattices/32550573278355.png) 4. Add a **Custom Unit Cell** block and use the Graph Lattice generated in the previous step as the first input and the Bounding Box from the **Volume Lattice** block as the Bounding Box input. ![Using the Graph from Line Segments block as the graph input to generate a Custom Unit Cell](https://files.learn.ntop.com/help-articles/lattices/32550573306643.png) And that's it you can now successfully use the non-cubic unit cell in the **Periodic Lattice** block. ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/non_cubic_unit_cell.ntop) ## Keywords: *tet cell unit hex issue cubic prism* # Methods for blending TPMS (and lattices) without the mix block Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/methods-for-blending-tpms-and-lattices-without-the-mix-block ## Objective: Learn how to blend TPMS (and lattices) without using the **Mix** block. ## Applies to: * Modeling * Lattices ## Procedure: ### Using a Sine Wave transition ![](https://files.learn.ntop.com/help-articles/lattices/49892873453843.png) 1. Create two bodies with the TPMS or Lattice of your choice. Make these the same size. 2. Add a **Ramp** block * For the Field input: * Create the equation sin (x/10) using Math blocks. * Add an Absolute (**Abs**) block and insert your equation so only the absolute values are returned. * Set the In min to 0 * Set the In max to 1 * Set the Out min to your TPMS body * Set the Out max to your second TPMS body When the value is 0, it will be the first TPMS body. When it is at 1, it will be the second TPMS body. You can change the TPMS body for any lattice body. With this method, you can get creative and change the equation around. ![](https://files.learn.ntop.com/help-articles/lattices/49892904559763.png) ### Inverse Distance Weighting This method uses [inverse distance weighting](https://en.wikipedia.org/wiki/Inverse_distance_weighting). You provide points (corresponding to the interpolation centers) and an exponent which controls the decay. As the exponents go to minus infinity, one gets a sharp **Boolean Union** of the Voronoi regions of the points. In the gif, you can see how the wiggling of the exponents changes the transition regions. ![A gif showing a blended gyroid structure that utilizes inverse distance weighting](https://files.learn.ntop.com/help-articles/lattices/4412652927891.png) Custom block, the [Shepard Equation](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Shepard.ntop) * * Interpolation Point input: the interpolation center for that TPMS. * Decay Exponent input: the decay exponent. (These values can be the same for each body or vary, depending on the blend you want). For two TPMS bodies, the equation looks like this: ``` (TPMS1 * Shepard Equation1) + (TPMS2 * Shepard Equation2) / (Shepard Equation1 + Shepard Equation2) ``` For three TPMS bodies, the equation looks like this: ``` (TPMS1 * Shepard Equation1) + (TPMS2 * Shepard Equation2) + (TPMS3 * Shepard Equation3) / (Shepard Equation1 + Shepard Equation2 + Shepard Equation3) ``` Follow the pattern to add more bodies. #### **To create this method in nTop:** 1. Create three bodies with the TPMS or Lattice of your choice. Make these the same size. 2. Create a Point for each interpolation center. We are using a Polygon to create three points on the same plane, but any method for creating points works. 3. Import the Shepard Equation custom block. * * Right-click on the Decay Exponent to create a variable (we are going to use the same value for each body) 4. Create a Shepard Equation block for each TPMS body. Use the Interpolation point that relates to each body. 5. Create the equation from above to build the TPMS transitions. ![The shepard equation recreated using nTop blocks](https://files.learn.ntop.com/help-articles/lattices/4412654257427.png) ### Advanced - Using Equations You can use TPMS equations with an interpolator to create a blend. We want to interpolate from "x" to "a \* x + b". Therefore, we introduce a parameter t in \[0, 1] and produce: ``` t * a * x + (1 - t) * x + t * b or (t * a + (1 - t)) * x + t * b When t = 0, the expressions reduce to "x". When t = 1, it's "a * x + b". ``` Using the Split P Expression defined in [this article.](https://support.ntopology.com/hc/en-us/articles/360053267814) ``` 1.1*(sin(2*x)*sin(z)*cos(y)+sin(2*y)*sin(x)*cos(z)+sin(2*z)*sin(y)*cos(x)) -0.2*(cos(2*x)*cos(2*y)+cos(2*y)*cos(2*z)+cos(2*z)*cos(2*x))-0.4*(cos(2*x) + cos(2*y) +cos(2*z)) ``` This method implements the expression above, with an interpolator, so it's equivalent to the Gyroid at param = 0 and the Split P at param = 1. ![A blended gyroid and Split P tpms structure using equations](https://files.learn.ntop.com/help-articles/lattices/4414288526995.png) And that's it! You've successfully learned several different methods to blend TPMS without the mix block. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Example File: * [Sine Wave Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Blend%20Lattice%20with%20Sine.ntop) * [Inverse Distance Weighting Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Inverse%20Distance%20Weighting%20Example.ntop) * [Equation Based Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/Gyroid%20to%20Split%20P.ntop) ## Keywords: *tpms blend how-to weighting distance equation mix inverse* # Orthofoam lattice doesn't work with planar points Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/orthofoam-lattice-doesn-t-work-with-planar-points ## Issue: I tried to create an Orthofoam lattice with all of my points on the same plane, but when the block runs, there is no visible result. ## Applies to: * Lattices * Orthofoam Lattice ## Cause: This occurs when you use planar points in an **Orthofoam Lattice** block. The block runs, but it builds a lattice with zero beams. ![The image shows the Properties panel of the Orthofoam Lattice having 0 beams when using Planar Point List as Vertices input.](https://files.learn.ntop.com/help-articles/lattices/46866144675219.png) ## Solution: Add in a Point that is off the plane of the other points to create an Orthofoam Lattice with more beams. ![The image highlights an additonal point added to the list which is away from the Planar Points which results in generating a lattice structure with the new vertices.](https://files.learn.ntop.com/help-articles/lattices/46866158214547.png) Once you have your lattice generated, you can use one of the Filtering options available to filter the beams that are built using the Points you need. In this example, we can use the Filter Beams by Angle and then use the Plane in which the rest of the points are. ![Images shows an example of Filtering the beams that are on the plane that is needed to be filtered to achieve their intended result with Filter Beams by Angle block](https://files.learn.ntop.com/help-articles/lattices/46866158216723.png) ## Keywords: *lattice points planar run plane beams zero issue orthofoam* # The asymmetrical unit cells in the Cell Map on Quad Mesh block are aligned in different orientations Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/the-asymmetrical-unit-cells-in-the-cell-map-on-quad-mesh-block-are-aligned-in-different-orientations ## Issue: The asymmetrical unit cells in the **Cell Map on Quad Mesh** block are aligned in different orientations. ## Applies to: * * * Lattices ## Cause: This occurs when there are one or more extraordinary vertices present in the **Quadrangulate Mesh** block, where the faces come together. An extraordinary vertex occurs when the edge count coming from a vertex is not equal to four. Generally, extraordinary vertices exist when surfaces of high angle curvature are present. ![A mesh with extraordinary vertices](https://files.learn.ntop.com/help-articles/lattices/10111468009491.png) ![A mesh with no extraordinary vertices](https://files.learn.ntop.com/help-articles/lattices/10111483141267.png) The helmet on the left contains extraordinary vertices while the helmet on the right does not. ## Solution: This functionality may be available in the future. We recommend sticking to symmetrical unit cells until this is built into the block. If the mesh does contain extraordinary vertices, then unit cells will not be consistently oriented. Also, lattices with asymmetric unit cells will be discontinuous. In this case, you can try using the Refine Mesh block with Refinement Steps = 1. If still inadequate, try Refinement Steps = 2. However, if you use this method to refine the mesh, the unit cells will be smaller. ## Keywords: *mesh map cell unit quad issue orientation* # The lattice from CAD face doesn't match up with the CAD face shape Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/the-lattice-from-cad-face-doesn-t-match-up-with-the-cad-face-shape ## Issue: The lattice from CAD face doesn't match up with the CAD face shape as I expected it to. ## Applies to: * Cell Map * Lattices * CAD faces ## Cause: nTop will use the UVW parameterization provided in the CAD file we receive. A face that is trimmed still carries the underlying UVW of its untrimmed "parent"; therefore, you'll see that the cell map extends past your face. Trimming the lattice may result in partial/cut-off unit cells. ## Solution: To achieve a more desirable cell map, we recommend trying the following options: 1. The best solution is to modify the original CAD creation. We recommend changing the design process to avoid the use of trimming. Tools like lofts, sweeps, and revolves will improve UVW parameterization. In the two images below, you can see how the CAD body appears to be the same. However, the original body is trimmed, and the modified body was created with a sweep. This results in an ideal cell map versus the over-extending cell map.![A Cell Map from CAD Face block used to create a cell map. The cell map extends past the CAD face.](https://files.learn.ntop.com/help-articles/lattices/22893675766291.png) ![A Cell Map from CAD Face block used to create a cell map. The cell map fits correctly on the CAD face.](https://files.learn.ntop.com/help-articles/lattices/22893699150099.png) 2. The other option is to modify the surface in nTop. We can create a quad mesh of the surface to conform more to our intended result. Increasing the **Quadrangulate Mesh** block's target count will result in a finer mesh that is more conformal around boundary curves, but this will also reduce the size of the quads. However, this solution has the drawback of being unable to control the UV inputs directly, and depending on the curvature of the CAD Face, the resulting cell map may be a disordered, non-uniform grid. ![Creating a cell map using a quad mesh.](https://files.learn.ntop.com/help-articles/lattices/22893699155731.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Lattices/CAD%20Face%20UVW%20Example.ntop) ## Keywords: *cad face surface trimmed up u v w line issue x para parameterization reparameterization untrimmed patch rectangle* # Understanding the lattice data types Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/understanding-the-lattice-data-types ## Objective: Learn about the new lattice data types. ## Applies to: * nTop 3.26+ ## Content: With the release of nTop 3.26, we've updated our Lattice Data Types. These updates include a new name change that won't affect your work due to our backward compatibility. ### The new data type names are: | Old | New | | - | - | | Thick Lattice | Thick Graph | | Lattice | Graph | | Lattice Body | Lattice | The Graph type is still accessible to you. You can find the property chip in the Property panel of a lattice block. * * If you expand the 'thick graph' property, you can find the 'graph' property. This property will work with the deprecated lattice blocks. To use this property, drag it from the Properties panel into the Notebook or a block input. ![lattice\_property.png](https://files.learn.ntop.com/help-articles/lattices/lattice_property.png) * * Expand the graph property to see properties on valencies, edge counts, and more. ![graph\_property.png](https://files.learn.ntop.com/help-articles/lattices/graph_property.png) ### Why the change? * * We renamed them to better describe what the type represents and its functionality. * We wanted to eliminate the confusion between Lattice and Lattice Body. * In the new lattice technology, there is the same underlying workflow for lattice creation, regardless if you're using Graph, TPMS, or custom implicit Unit Cells. Consolidating all of this under the same data type gives us the necessary foundation for what we're building next. ## Keywords: *lattice property body update new thick data graph type types latticing* # What equations are used to create the TPMS types? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/what-equations-are-used-to-create-the-tpms-types ## Question: What equations are used to create the TPMS types used in nTop? ## Answer: Below is the table of standard TPMS available as Unit Cells with their corresponding equations. To build your own TPMS from an equation, go [here](https://support.ntopology.com/hc/en-us/articles/4403371438611). >
    **Image**   **Type** **Equation**
    ![An implicit view of a gyroid unit cell](https://files.learn.ntop.com/help-articles/lattices/360089813273.png)   **Gyroid** sin(x) cos(y) + sin(y) cos(z) + sin(z) cos(x)
    ![An implicit view of a schwarz unit cell](https://files.learn.ntop.com/help-articles/lattices/360088662394.png)   **Schwarz** cos(x)+cos(y)+cos(z)
    ![An implicit view of a diamond unit cell](https://files.learn.ntop.com/help-articles/lattices/360088662414.png)   **Diamond** sin(x)\*sin(y)\*sin(z)+sin(x)\*cos(y)\*cos(z)+cos(x)\*sin(y)\*cos(z)+cos(x)\*cos(y)\*sin(z)
    ![An implicit view of a lidinoid unit cell](https://files.learn.ntop.com/help-articles/lattices/360089813293.png)   **Lidinoid** sin(2\*x) \* cos(y) \* sin(z) + sin(2\*y) \* cos(z) \* sin(x) + sin(2\*z) \* cos(x) \* sin(y) - cos(2\*x) \* cos(2\*y) - cos(2\*y) \* cos(2\*z) - cos(2\*z) \* cos(2\*x) + .3
    ![An implicit view of a split p unit cell](https://files.learn.ntop.com/help-articles/lattices/360089813313.png)   **Split P** 1.1\*(sin(2\*x)\*sin(z)\*cos(y)+sin(2\*y)\*sin(x)\*cos(z)+sin(2\*z)\*sin(y)\*cos(x))-0.2\*(cos(2\*x)\*cos(2\*y)+cos(2\*y)\*cos(2\*z)+cos(2\*z)\*cos(2\*x))-0.4\*(cos(2\*x) + cos(2\*y) +cos(2\*z))
    ![An implicit view of a neovius unit cell](https://files.learn.ntop.com/help-articles/lattices/360088662434.png)   ** Neovius** 3\*(cos(x)+cos(y)+cos(z))+4\*cos(x)\*cos(y)\*cos(z)
    ## Keywords: *TPMS gyroid equations lidinoid diamond Split P Neovius* # What types of graph lattices are available? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/what-types-of-graph-lattices-are-available ## Question: What types of graph lattices are available when I use a graph lattice unit cell? ## Answer: >
    **Name** **Image**
    **Simple cubic** ![Simple Cubic Unit Cell](https://files.learn.ntop.com/help-articles/lattices/1500005096682.png)
       
    **Body-centered cubic** ![Body-Centered Cubic unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096662.png)
       
    **Face centered cubic** ![Face Centered Cubic unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096622.png)
       
    **Column** ![Column unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096602.png)
       
    **Columns** ![Columns unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206601.png)
       
    **Diamond** ![Diamond unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206581.png)
       
    **Fluorite** ![Fluorite unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096582.png)
       
    **Octet** ![Octet unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206561.png)
       
    **Truncated cube** ![Truncated Cube unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206541.png)
       
    **Truncated Octahedron** ![Truncated Octahedron unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206521.png)
       
    **Kelvin cell** ![Kelvin cell unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096562.png)
       
    **Isotruss** ![Isotruss unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206501.png)
       
    **Re-entrant** ![Re-Entrant unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096542.png)
       
    **Weaire-Phelan** ![Weaire-Phelan unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206481.png)
       
    **Triangular Honeycomb** ![Triangular Honeycomb unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206461.png)
       
    **Triangular Honeycomb Rotated** ![Triangular Honeycomb Rotated unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096522.png)
       
    **Hexagonal Honeycomb** ![Hexagonal Honeycomb unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206441.png)
       
    **Re-entrant  Honeycomb** ![Re-Entrant Honeycomb unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206421.png)
       
    **Square Honeycomb** ![Square Honeycomb unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206401.png)
       
    **Square Honeycomb Rotated** ![Square Honeycomb Rotated unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096502.png)
       
    **Face-Centered Cubic Foam** ![Face-Centered Cubic Foam unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096482.png)
       
    **Body-Centered Cubic Foam** ![Body Centered Cubic Foam unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206381.png)
       
    **Simple Cubic Foam** ![Simple Cubic Foam unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096462.png)
       
    **Hex Prism Diamond** ![Hex Prism Diamond unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206361.png)
       
    **Hex Prism Edge** ![Hex Prism Edge unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206341.png)
       
    **Hex Prism Vertex Centroid** ![Hex Prism Vertex Centroid unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206321.png)
       
    **Hex Prism Central Axis Edge** ![Hex Prism Central Axis Edge unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096422.png)
       
    **Hex Prism Laves Phases** ![Hex Prism Laves Phases unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096442.png)
       
    **Tet Oct Vertex Centroid** ![Tet Oct Vertex Centroid unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005096402.png)
       
    **Oct Vertex Centroid** ![Oct Vertex Centroid unit cell](https://files.learn.ntop.com/help-articles/lattices/1500005206281.png)
    ## Keywords: *lattice graph simple cell unit hex diamond centered honeycomb cubic column fluorite kelvin octet octahedron isotruss reentrant weaire hexagonal foam prism laves* # Which lattices are chiral? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/which-lattices-are-chiral ## Question: What unit cells are chiral? ## Applies to: * Lattice ## Answer: All **Graph Unit Cells** are non-chiral and all **TPMS Unit Cells** are chiral. ## Keywords: *lattice question chiral chirality graph unit cell tpms unit cell* # Why can't I create a conformal lattice from stitched CAD faces? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/why-can-t-i-create-a-conformal-lattice-from-stitched-cad-faces ## Issue: Can I create a continuous isogrid over multiple CAD surfaces? Can I UV map continuously over multiple CAD surfaces? Why can't I create a conformal lattice from multiple CAD faces? ## Applies to: * **Conformal Lattice from CAD Face** or **Cell Map from CAD Face** * **Conformal Lattice between CAD Faces** or **Cell Map between CAD Faces** ## Cause: This is a current limitation in the program today that we are working on. Due to this, we are unable to reparametrize multiple CAD faces that are stitched together. Each face needs to be reparametrized individually. Due to this, **Conformal Lattice from CAD Face** or **Conformal Lattice between CAD Face** blocks won't accept **Stitched CAD Faces**. ## Answer: The **Conformal Lattice from CAD Face** block now accepts CAD Face Lists. This enables you to use multiple CAD Faces in your lattice. ![A Cell Map from CAD Face list that is generated using a CAD Face List](https://files.learn.ntop.com/help-articles/lattices/6372558737171.png) If possible, the best route is to re-create the CAD surface as a single CAD patch in the software it was created in. The next best approach is to reparametrize each face individually. This results in different UVW divisions for each face. ## Keywords: *cad face surface lattice map question isogrid continuous uv* # Why isn't the TPMS/Lattice thickness constant when I distort it? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/why-isn-t-the-tpms-lattice-thickness-constant-when-i-distort-it ## Issue: I've distorted my TPMS and the thickness isn't constant after I've distorted it. ## Applies to: * Varying cell size * Warping * Remapping ## Cause: We are currently working on fixing this issue. ## Solution: A **normalized** field is a first-order approximation of the implicit function. **Method:** Normalize the Field of the TPMS by using the field property Normalized Field. This property is found in every field. * Add a **Periodic Lattice** block * Unit cell: **Walled TPMS Unit Cell** * Unit Cell: Gyroid * Orientation: UVW * Cell map: **Rectangular Cell Map** * Volume: Cube (Size: 10) * Cell size: 10 x 10 x 10 mm * Approx. thickness: 0mm ![A Periodic Lattice created from a Walled TPMS Unit Cell and a Rectangular Cell Map.](https://files.learn.ntop.com/help-articles/lattices/6014149695379.png) * Use the **"normalized field"** chip or use the **Normalize Field** block. ![Extract the normalized field property chip from the periodic lattice.](https://files.learn.ntop.com/help-articles/lattices/6014131275155.png) * Thicken the Normalized Field to your intended thickness * Use the **Thicken Body** block * Body: Normalized Field * Thickness: 1mm * Set Body Bounding Box to trim off the excess outside the design space. * Bounding Box: Bounding Box from the Periodic Lattice block![Creating the normalized TPMS by applying a bounding box to the thickened normalized field.](https://files.learn.ntop.com/help-articles/lattices/6014391864723.png) ## Keywords: *field thickness TPMS gyroid remap thickened warp distort issue normalize constant* # Why isn't the Unit Cell size constant in a Conformal Lattice? Source: https://docs.ntop.com/help-articles/knowledge-base/lattices/why-isn-t-the-unit-cell-size-constant-in-a-conformal-lattice ## Issue: * Why isn't the Unit Cell size constant in a Conformal Lattice? * Can I constrain the Unit Cell size in a Conformal Lattice? ## Applies to: * Lattices ## Cause: When you apply a conformal lattice onto a CAD surface, the Unit Cell is restricted to the CAD surface size and the UVW divisions. These drive the unit cell layout and stretch or shrink it based on those factors. It can't lock in the unit cell size, since it wouldn't be able to create a conformal lattice without stretching or shrinking it to fit the surface and the UVW divisions. In the image below, the unit cell size varies in certain areas to match up with the surface curves and the UVW divisions. ![A periodic lattice that is conforming to the imported CAD Body. The unit cell size is not equal due to the curvature of the CAD body](https://files.learn.ntop.com/help-articles/lattices/5965965943955.png) ## Answer: This is a limitation that results from the constraints in the conformal lattice design. There is no current workaround for curved surfaces. If your surface is flat, and you need the cell to be a certain size, then it's recommended to use a different Cell Map that isn't restricted by the CAD surface shape. ## Keywords: *lattice conformal constraint cell unit uvw issue size restrict* # Can I create two FE meshes with a matching triangle at their interface? Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/can-i-create-two-fe-meshes-with-a-matching-triangle-at-their-interface ## Question: Can I create two FE meshes with a matching triangle at their interface? ## Applies to: * FE Meshes * Meshing ## Answer: At the moment, we aren't able to produce a matching mapped mesh in nTop. Instead, we recommend using a program like Ansys Fluent and using their "node mapping" to mathematically tie together two different meshes. ## Keywords: *mesh node fe question ansys meshes mapping mapped triangle* # How to create a quad mesh Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-create-a-quad-mesh ## Objective: Export a quadrangulate mesh (a mesh made up of quadrilaterals) by remeshing a triangular mesh. ## Applies to: * Quad Mesh ## Procedure: **1.** **Surface Mesh:** Create the surface mesh using the **Mesh from Implicit Body** block. * [How to create a surface mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-a-surface-mesh) * [How to mesh complex parts](/help-articles/knowledge-base/meshing-workflows/how-to-mesh-complex-parts) ![A surface mesh of a bracket.](https://files.learn.ntop.com/help-articles/meshing-workflows/7206046587539.png) **2.** **Refine Mesh:** Refine your mesh using **Remesh Surface**, **Simplify by Threshold**, **Simplify by Amount,** or other simplification methods. This step allows for more straightforward conversion to a quad mesh. Make sure your mesh has no [meshing errors](/help-articles/knowledge-base/meshing-workflows/input-mesh-must-be-manifold) in it. Take a look at these articles for tips on refining and creating a mesh: * [Methods for refining meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) **3. Quad Mesh:** Convert the refined **Mesh** to a quad mesh using the **Quadrangulate Mesh** block. The quad mesh allows easier and faster conversion to a CAD Body format. * A quad mesh is not just a step for converting but is also a very beneficial model. * [Cell Map on Quad Mesh](https://support.ntop.com/hc/en-us/articles/1500003847722) is used to generate a lattice structure that is conformal to the quad mesh. * [Check out this article](/help-articles/knowledge-base/interop/quadrangulate-mesh-fails-when-meshing-my-lattice) if you encounter errors when converting to a Quad Mesh. ![A quadrangulate mesh created from the initial mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/7206048223379.png) > [!TIP] > > **Tip:** Use a **Refine Mesh** block to refine the Quad Mesh, capture further details, and reduce the amount of rounding near sharp edges. ![A refined quad mesh created using the Refine Mesh block.](https://files.learn.ntop.com/help-articles/meshing-workflows/7206020812307.png) **4..** **Export:** Add an **Export Mesh** block and choose your save location and file type: STL, OBJ, 3MF, or PLY. And that's it! You've successfully exported your part as a quadrilateral mesh. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Quad_Mesh.ntop) ## Keywords: *cad mesh meshing export quadrangulate quad quadrilateral* # How to create a surface mesh Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-create-a-surface-mesh ## Objective: Learn how to create a Surface Mesh. ## Applies to: * Modeling * Simulation * Manufacturing * Optimization ## Procedure: Based on your workflow, you usually start with either an Implicit Body or a CAD Body. In this example, we will start from an Implicit Body. We recommend using the **FE Volume Mesh from CAD** if you plan to generate an FE Volume Mesh for Simulation or Optimization. ![A flow diagram showing that an implicit or cad body can be converted to a mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/29375920355859.png) The **Mesh from Implicit Body** generates robust and error-proof meshes for complex geometries. ![The Mesh from Implicit Body block.](https://files.learn.ntop.com/help-articles/meshing-workflows/29375807582355.png) If you wish to use the older version of the Mesh from Implicit Body block, you should use the **Mesh from Implicit Body by DC** block, which uses the Dual Contouring and has lesser computational overhead. However, the result may contain self-intersections and non-manifold edges. The inputs for the **Mesh from Implicit Body** block are listed below: * **Tolerance:** Translates to the voxel size. The voxel size is given by half the input tolerance. Using a tolerance equal to **0.5 times the thickness of the smallest feature is recommended**. This value will typically exceed the accuracy of most additive manufacturing processes. ***Note:** As a rule of thumb, the number of triangles in the unsimplified output mesh quadruples whenever the tolerance input is halved. Keep that in mind to avoid generating unreasonably large meshes. If you only use this input, the output mesh is guaranteed to be watertight and manifold.* * **Min. feature size:** If you provide a feature size, the block performs a filtering step to remove any features or holes smaller than the provided input. You can use this input if the output mesh captures details that are not manufacturable. * **Sharpening option:** Enable this to reconstruct sharp features in the implicit body. Typically, enabling the sharpening option improves the mesh's approximation quality significantly. Thus, in practice, decreasing the tolerance input and enabling sharpening to obtain a given target tolerance between the mesh and the implicit is often possible. ***Note:** Enabling this option will substantially increase the block's runtime; typically, it will take more than twice as long.* * **Simplification option:** This option produces a mesh with the fewest triangles while still conforming to the input tolerance. Enabling this option will substantially increase the block's runtime. ***Note:** Similar to the old version, the simplification process can introduce new mesh defects (self-intersections and overfolds). The Simplification option forcibly decimates and combines **\~ 90%** of the elements, which can result in a loss of geometry fidelity. The **Simplifying Mesh By Threshold** block allows you to tune the decimation percentage.* ![Left: Mesh from Implicit Body with sharpening and simplification option enabled. Right: Mesh from Implicit Body by DC with adaptivity set to 0.5.](https://files.learn.ntop.com/help-articles/meshing-workflows/29375807601427.png) *Left: Mesh from Implicit Body with sharpening and simplification option enabled. Right: Mesh from Implicit Body by DC with adaptivity set to 0.5.* The block has an overload, which provides even more inputs. In particular, it gives a “Sharpening Extent” input. This can be used to localize the sharpening to some mesh areas. It also provides a “Sharpening iterations” parameter, which can potentially be used to run the sharpening algorithm multiple times to increase the quality of the sharp feature reconstruction. ![Selecting a the second overload of the Mesh from Implicit Body block.](https://files.learn.ntop.com/help-articles/meshing-workflows/29375885487891.png) We often don't need every edge in our model to remain sharp when using the *Sharpen* option. Generally, we are concerned with specific regions where we apply boundary conditions for analysis and have GD\&T requirements for machining, assembly, and other applications. Therefore, using the Overload to expose the *Sharpen Extents* option and the *Sharpen Iterations* is recommended. This option helps decrease the time spent meshing and reduces the overall element count. When generating the implicit body that encloses the region where we want to keep edges sharp, we suggest it be as localized as possible (i.e., enclose just the area you intend to stay sharp rather than having an oversized implicit). When using either the *Sharpen* or *Sharpen Extents* options, the mesh near the edges defined to remain sharp can sometimes have skinny triangles. Image #1 below shows a 0.5mm thick walled T PMS with a thin green body encloses the edges, which remain sharp. Image #2 below (left) shows the overall mesh of the part, and (right) shows a zoomed-in section at one of the edges. Encircled in red are fragile triangular elements. These small elements can cause a few issues downstream. ![A TPMS lattice on a plate.](https://files.learn.ntop.com/help-articles/meshing-workflows/29375807610003.png) Image #1: Body to mesh (grey) and implicit used (green) to enclose the edges where we want to preserve sharpness. ![Mesh from Implicit Body (with extents). Left: Full mesh. Right: Zoomed in on edge, encircling thin elements.](https://files.learn.ntop.com/help-articles/meshing-workflows/29375834956819.png) Image #2: Mesh from Implicit Body (with extents). Left: Full mesh. Right: Zoomed in on edge, encircling thin elements. >
    **Block** **Mesh**
    Mesh from Implicit Body ![A mesh generated from the Mesh from Implicit Body block.](https://files.learn.ntop.com/help-articles/meshing-workflows/43197628675731.png)
    Mesh from Implicit Body with Sharpen enabled ![A mesh generated from the Mesh from Implicit Body block with Sharpen enabled.](https://files.learn.ntop.com/help-articles/meshing-workflows/43197657500435.png)
    Mesh from Implicit Body with Sharpen Extents overload ![A mesh generated from the Mesh from Implicit Body block with Sharpen extents enabled.](https://files.learn.ntop.com/help-articles/meshing-workflows/43197657512723.png)
    And that's it! You've successfully created a surface mesh on your part. Do you still need help? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/surface_mesh_example.ntop) ## Keywords: *cad Mesh STL Export mesh surface implicit meshing create body how to convert remesh* # How to create an FE Volume Mesh Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh ## Objective: Learn how to create a Finite Element (FE) Mesh from an existing model. ## Applies to: * Simulations ## Procedure: **1. Import or create geometry:** To create an FE Mesh, you need a starting body that can be meshed. You can import a CAD part, or you can create an Implicit body. If you're using CAD, you will need to extract the CAD Body from the part ([How to work with CAD bodies](/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies)). ![An imported CAD Part.](https://files.learn.ntop.com/help-articles/meshing-workflows/43205746700179.png) **2. Create an FE Mesh:** Use the **FE Volume Mesh from CAD** block to generate the FE Mesh. ![Use the FE Volume Mesh from CAD block to convert the CAD Body to an FE Mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/43205746704147.png) **2b. Implicit Body:** If you are starting from an Implicit Body instead of CAD, you can use the second section of the workflow. ![Use the FE Volume Mesh from Implicit block to convert the implicit to an FE Mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/43205775713555.png) And that's it! You've successfully created an FE Mesh. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *Mesh FE analysis mesh simulation surface static volume create design topology convert remesh optimization refine tetrahedral 3D* # How to deal with extraordinary vertices in meshes Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-deal-with-extraordinary-vertices-in-meshes ## Issue: An imported/generated mesh contains extraordinary vertices causing downstream workflow issues. ## Applies to: * Meshes with extraordinary vertices ## Cause: An extraordinary vertex is created when either less than four or more than four edges form a vertex. These vertices are most likely to occur in areas of irregular or high-angle curvatures. ![An image showing the difference between an extraordinary vertex and a standard vertex](https://files.learn.ntop.com/help-articles/meshing-workflows/14423168502291.png) Below is an example of how an extraordinary vertex can cause downstream issues in latticing. Most of the lattice is equal, however; once it encounters the extraordinary vertices, the structure changes to account for them. ![An image of a periodic lattice that has extraordinary vertices. The extraordinary vertices are highlighted to show how they cause irregularities in the lattice](https://files.learn.ntop.com/help-articles/meshing-workflows/14456462542483.png) ## Solution: There are two options for dealing with extraordinary vertices: a solution and a workaround. ## Option 1: A proper solution is to remove the extraordinary vertices from the mesh. This method is ideal for parts that are symmetric across a plane. Below is our starting mesh containing extraordinary vertices where the two halves meet. We will begin by working with only half of the mesh. ![A meshed body containing extraordinary vertices](https://files.learn.ntop.com/help-articles/meshing-workflows/14448613395091.png) 1. Using nTop or another CAD software, you will first want to cut the mesh in half. This removes the extraordinary vertices, allowing us to quadrangulate the mesh cleanly. The warnings on both blocks aren't a problem, just a notification that the output mesh is not closed. ![Half of the original imported mesh. The mesh is then converted to a quadrangulate mesh](https://files.learn.ntop.com/help-articles/meshing-workflows/14449141707155.png) 2\. Convert the **Quadrangulate Mesh** into an **FE Surface Mesh** to set up for mirroring. Then use a **Mirror FE Mesh** block to mirror the half-mesh over the set plane. ![The quadrangulate mesh mirrored over a plane](https://files.learn.ntop.com/help-articles/meshing-workflows/14449738299411.png) 3\. Using the properties panel of the **Mirror FE Mesh** block, pull out the surface mesh chip and place it into a **Merge Meshes** block. The other mesh to merge is our original **Quadrangulate Mesh** half. After joining, we use a **Collapse Mesh Vertices** block to remove duplicate vertices. ![The two halves of the quadrangulate mesh being merged together using the Merge Meshes block. Then a collapse mesh vertices block is used to remove unnecessary vertices.](https://files.learn.ntop.com/help-articles/meshing-workflows/14450104720659.png) 4\. The final step is creating an example lattice to test whether the part was correctly mirrored. In the image below, you can see that the lattice has no extraordinary vertices and that the pattern is consistent. ![A periodic lattice generated from the quadrangulate mesh. The cells are perfectly mirrored on both sides with no irregularities.](https://files.learn.ntop.com/help-articles/meshing-workflows/14449728841747.png) ## Option 2: While this doesn't remove the extraordinary vertices, this option is about adapting your design around the unavoidable. If Option 1 isn't a possibility based on your part, this may be a helpful alternative. Below is an image of our starting quad mesh containing the extraordinary vertices. ![A quadrangulate mesh with extraordinary vertices](https://files.learn.ntop.com/help-articles/meshing-workflows/14450900130451.png) Our recommendation is to use a symmetric unit cell. While the lattice will still contain extraordinary vertices, the result is aesthetically pleasing and less noticeable than the original lattice. An asymmetric unit cell will be far more complicated and unappealing. ![A periodic lattice with extraordinary vertices.](https://files.learn.ntop.com/help-articles/meshing-workflows/14451446330771.png) ## ## Attachment: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Extraordinary%20Vertices%20Workarounds.ntop) ## Keywords: *mesh meshes vertex vertices issue extraordinary* # How to export multiple mesh objects as a single STL Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-export-multiple-mesh-objects-as-a-single-stl ## Objective: When trying to export a mesh file from nTop, it may be necessary to export a multibody part as a single mesh file. ## Applies to: * Merge Meshes * Export Mesh * STL * OBJ * 3MF ## Procedure: 1. Convert the bodies into meshes using a meshing block like our **Mesh from Implicit Body** block. 2. Add the **Merge Meshes block** to your Notebook and insert the meshed bodies. This will combine the individual meshes into a single mesh. 3. Add an Export Mesh block and insert the new merged mesh. This will export the multibody mesh as a single mesh file. And that's it! You've successfully exported multiple mesh objects with a single STL file. Are you still having issues? Contact the support team and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/export_multibody_mesh.ntop) ## Keywords: *stl mesh obj body multiple merge how-to multibody* # How to extract or clean up mesh bodies Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-extract-or-clean-up-mesh-bodies ## Objective: Learn how to separate a part with multiple bodies using the Split Mesh block Learn how to clean up a part using the Split Mesh block. ## Applies to: * This procedure will also work to separate Implicit bodies, just convert the result back to Implicit * Cleaning up meshing artifacts ## Procedure: **1. Set-Up**: Start with a Mesh with multiple bodies * * **Ex.** Boolean Subtract a **Walled TPMS** from a **Cube** of the same size. **2.** Add a **Split Mesh** block and input your Mesh **3.** Open up the Properties of the **Split Mesh** block and scroll to the bottom. The Meshes are organized by size. Drag the chip out into the Notebook to extract the meshes from the **Split Mesh.** *This process works when you have one large mesh and multiple mesh artifacts. Input your **Mesh** into the **Split Mesh** block and take the top Chip to cut out any artifacts.* ![Extracting two meshes from the Split Mesh properties panel](https://files.learn.ntop.com/help-articles/meshing-workflows/4431832462099.png) And that's it! You've successfully extracted your meshes using the Split Mesh block. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *mesh implicit TPMS meshing properties bodies split meshes how-to extract size chip* # How to filter mesh Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-filter-mesh ## Objective: Learn how to select/filter mesh from a larger mesh body (surface or solid). ## Applies to: * Meshing ## Procedure: 1. Start by creating a body to mesh. For this example, we will be using a Shelled Cube to help highlight the functionality of our mesh filtering blocks. ![A cube that has been shelled using the Shell block.](https://files.learn.ntop.com/help-articles/meshing-workflows/43226998125075.png) 2. Create a **Cube** that we will use to filter the mesh. The cube should intersect your mesh body where you want to filter. ![A second cube overlapping a portion of the shelled cube. The new cube will be used for filtering.](https://files.learn.ntop.com/help-articles/meshing-workflows/43226998126483.png) 3. Use a **Mesh from Implicit Body** block to mesh the Shell Cube. ![Mesh the shelled cube.](https://files.learn.ntop.com/help-articles/meshing-workflows/43227004576403.png) 4. The first option for filtering meshes is using the **Filter Mesh by Flood Fill** block. Insert your Shell Mesh into the Mesh input. Then adjust the Origin and Angle inputs until the block highlights the area you want to isolate. ![Use the Filter Mesh by Flood Fill block to select portions of a larger mesh. The angle and origin location control how much of the mesh is selected.](https://files.learn.ntop.com/help-articles/meshing-workflows/43227004577299.png) 5. The second option is using the **Remove Mesh Faces by Body** block. Insert the Shell Mesh into the Mesh input. Then add the Filter Cube to the Body input. This isolates the portion of the mesh that is intersecting with the Filter Cube. Alternatively, you can check the Reverse input to see the portion of the mesh that doesn't intersect with the Filter Cube. ![Using the Remove Mesh Faces by Body block, we can remove the face where the Filter Cube is overlapping.](https://files.learn.ntop.com/help-articles/meshing-workflows/43227004577811.png) And that's it! You've successfully selected mesh faces from a mesh. Do you still need help? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Filter%20Mesh%20Example.ntop) ## Keywords: *cad select face mesh surface lattice conformal selection fill filter join quad how-to extract flood* # How to mesh complex parts Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-mesh-complex-parts ## Objective: You will learn how to reduce the complexity of a mesh while retaining the intended shape of the geometry. Meshing complex geometry is one of the most critical factors for simulation and manufacturing. However, there is a delicate balance between generating an accurate mesh and creating a file that is too large for practical application. ## Applies to: * Manufacturing * Meshing ## Procedure: We suggest you check these [best practices](/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices) for a detailed analysis of input parameters and the meshing computation time. This will help you better understand different parameters and generate a mesh while managing computational power. This article discusses generating a mesh for a TPMS structure with a high surface area. The steps and suggestions in this article can also be followed for other complex geometries. ### 1. Create a Surface Mesh We can use the **Mesh from Implicit Body** block to generate a surface mesh. This article discusses the inputs and when to use them ([How to create a surface mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-a-surface-mesh)). This mesh is very detailed and conforms well to the geometry. The issue is that it contains more than 5 million faces, and when exported the file size is 245,891 KB. This size is too large to work with, so we need to make it smaller without compromising the details of the geometry. ![Using the Mesh from Implicit Body block to create a surface mesh of the TPMS structure. The properties panel of the mesh is open, with the face count property highlighted.](https://files.learn.ntop.com/help-articles/meshing-workflows/50037932031507.png) The properties panel shows the face count, self-intersecting, and other necessary parameters to check. To check the mesh quality, you can use our **Mesh Quality** block. ### 2. Filtering Meshes The original mesh contains unwanted small bodies that were generated when creating the lattice. By using the **Split Mesh** block, we can separate the mesh elements. You can see in the image below how using the **Split Mesh** block creates a list of 3 meshes. ![Using the Split Mesh block to separate the mesh bodies. Two small floating bodies are highlighted.](https://files.learn.ntop.com/help-articles/meshing-workflows/50037932035603.png) We can then use the **Filter Mesh List** block to isolate the mesh we want to keep. This block is still a list, so you want to make sure you extract the single mesh from the properties panel. ![A gif showing how to extract the single mesh from the properties panel of the Filter Mesh List block.](https://files.learn.ntop.com/help-articles/meshing-workflows/50037932038419.png) ### 3. Simplifying your Mesh Now that we have a single mesh with the unwanted bodies removed, we need to focus on reducing face count. There are two blocks in nTop for simplifying meshes: * **Simplify Mesh by Amount**: Simplifies a mesh by a target percentage amount between 0-1. An input value of 0.4 will attempt to remove 40% of the mesh faces. * **Simplify Mesh by Threshold**: Reduces the number of faces in a mesh as much as possible while keeping the distance between the surfaces of the input and output meshes below the specified Threshold. This block works best when a **Remesh Surface** block is used first. For our example, we will be using **Simplify Mesh by Amount** block. Using a value of 0.5, we are removing 50% of the mesh faces. The issue is the resulting mesh still has too many faces, and a non uniform edge length. The interior curved faces still have a very small edge length, while the flat front faces have a large edge length. ![The Simplify Mesh by Amount block is used to reduce the face count of a mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/50037932040467.png) ### ### 4. Remeshing To create a uniform edge length mesh, we can use the **Remesh Surface** block. This block allows you to control many aspects of the mesh composition. For more information on what each input controls, please review our [Methods for refining meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) article. After Remeshing, the result is a mostly uniform edge length mesh. You may notice smaller edge lengths towards geometry boundaries or small details, these are kept small to maintain the correct geometry shape. This new mesh also has a face count of 682,800, which is much more reasonable than our starting amount of over 5 million faces. ![Using the Remesh Surface block to create a mesh with uniform edge length.](https://files.learn.ntop.com/help-articles/meshing-workflows/50037932044947.png) By exporting the original surface mesh and our new final mesh, we can compare the file sizes. The new mesh is 87% smaller than the original! ![Comparing the file size of the original exported mesh to the new simpler mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/50037932045715.png) ## Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Mesh_Complex_Parts.ntop) ## Keywords: *mesh simulation fea tet surface volume implicit meshing remesh guide techniques voxel grid Remesh Body simplify split tetrahedral robust* # How to mesh small-scale parts Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-mesh-small-scale-parts ## Objective: Learn some tips on how to mesh small-scale parts. ## Applies to: * Meshing * Small parts ## Procedure: If you have a small part, with details in the 0.001 mm range, it may be difficult to try the various meshing techniques we suggest due to the lower limit of some of the inputs. For example, the **Voxel Grid from Implicit Body** block has a minimum voxel size of 0.015 mm. To overcome this, we suggest scaling up your part and then meshing it. Once you are happy with your mesh, scale it back down. * * **Scale Object** * ex. Factor 10 * Follow a Mesh workflow of your choosing * [How to mesh complex parts](/help-articles/knowledge-base/meshing-workflows/how-to-mesh-complex-parts) * [Methods for refining meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) * **Scale Object** * ex. Factor 0.1 And that's it! You've successfully meshed your small part. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *mesh part meshing scale mm voxel up how-to small detail down um micro scaling* # How to spatially vary the edge length of a surface mesh Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-spatially-vary-the-edge-length-of-a-surface-mesh ## Objective: * * Use a **Ramp** block to control the Mesh spacing of a **Remesh Surface**. * **Ramp** the Edge length of your part. ## Procedure: **1. Set-up:** Start with a meshed part. **2. Remesh:** Add a **Remesh** block. **3. Ramp:** Use a **Ramp** block for the Edge length (controls the size of the mesh elements) * * Create a **Plane from Normal** block to use as the Scalar Field. This will allow the elements to ramp up from the bottom of the dome to the top. * Set the In min and In max values to correspond with the area you want the Ramp to occur. This example uses an In min of 0 mm and an In max of 100 mm. * Set the Out min and Out max values to correspond with the sizes you want the Edge Length to be in those areas. This example uses an Out min of 10 mm and an Out max of 1 mm. **Don't forget to add units to this step.** ![A meshed dome that has it's edge length varied in size using a ramp block](https://files.learn.ntop.com/help-articles/meshing-workflows/1500000193102.png) And that's it! You've successfully varied the spacing of your mesh. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Spatially%20Vary%20Edge%20Length.ntop) ## Keywords: *mesh ramp ramping meshing edge remesh from normal spacing max min vary out space plane control how-to length in* # How to turn Multiple CAD Faces into a Single Surface Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/how-to-turn-multiple-cad-faces-into-a-single-surface ## Objective: Stitch together CAD faces into a single surface. ## Applies to: * Texturing * Defining boundary conditions ## Procedure: **1.** Start with an [Imported Part](https://support.ntop.com/hc/en-us/articles/360049994434) **2.** Select the faces you want to merge by holding CTRL (they will highlight up as blue). * * Once you have selected all of the faces, Right-Click and choose the option "**Create** **CAD Face List Variable**". This will create a list that is the size of the number of faces you selected. In this example, we choose 6 faces, so the block will have a (6) behind its name, with 6 being the size of the list. ![Creating a CAD Face List by selecting faces of the imported CAD body](https://files.learn.ntop.com/help-articles/meshing-workflows/360097972434.png) **3.** Add a **Stitch CAD Surface Bodies** block. This block merges multiple sheets within a tolerance range and outputs the results as a list. However, this block comes auto-populated with a list. You **cannot input a list into a list.** You need to delete the auto-populated list in order to input the CAD faces from Step 2. ![Stitching together the CAD face list using the Stitch CAD Surface Bodies block](https://files.learn.ntop.com/help-articles/meshing-workflows/360100240873.png) **4.** Add a **Mesh from CAD Body** block to turn the stitched surfaces into a Mesh. This step will make a Mesh that has a list of (1). If you get an Invalid Input Error, go to this [article](https://support.ntop.com/hc/en-us/articles/1500000953901), or see Step 5 for how to fix it. ![A mesh created using the Mesh from CAD Body block](https://files.learn.ntop.com/help-articles/meshing-workflows/360097997734.png) **5.** Add a **Remesh Surface** block to create a single surface with uniform polygons. This will clean up the mesh. Instead of inputting the **Mesh from CAD Body (1)** block from the previous step, we want to open up its Properties and take out the Mesh \[0] Property to use are our input. This gets rid of the [lists of one](/help-articles/knowledge-base/user-interface/how-to-work-with-lists), which will be helpful for downstream workflows. ![Remeshing the surface mesh that was extracted from the Mesh from CAD Body properties panel](https://files.learn.ntop.com/help-articles/meshing-workflows/360100262793.png) And that's it! You've successfully merged multiple CAD Faces into a single surface. Are you still having issues? Reach out to the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/How%20to%20turn%20Multiple%20CAD%20Faces%20into%20a%20Single%20Surface.ntop) ## Keywords: *cad Mesh face surface CAD faces list meshing variable beginner remesh multiple merge join one single stitch* # Input Mesh must be Manifold Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/input-mesh-must-be-manifold ## Issue: ![An error message stating that the input mesh must be manifold](https://files.learn.ntop.com/help-articles/meshing-workflows/360084383173.png) I'm trying to create a Quad Mesh, but I keep getting the error: "Input mesh must be manifold." ## Applies to: * Quad Meshing * Export to CAD * Mesh export ## Cause: #### **What is Manifold?** A topological space that resembles Euclidean space up close. For example, the Earth looks like a plane when you are standing on the surface but from far away it is actually spherical. Manifold objects are continuous without any beginning or end. An example of this is a sphere or a cube. A non-manifold object would be a Plane. Non-manifold geometry can't exist in real life, which makes this error one we need to solve if we want to 3D print our part. #### **Why would a mesh be non-manifold?** A mesh can be non-manifold due to many reasons. Some of the most common occurrences are: * An edge connected to more or less than two faces (including internal faces) * Separate regions connected through a single vertex * Loose geometry (discontinuous) * Plane normals pointing in opposite directions for adjacent faces #### **Check to see if your mesh is manifold** To check if your mesh is manifold or not, click on the info (?) panel and go to Properties. There will be a property called Manifold. If it says False, then it is not manifold and if it says True, then it is. ![A mesh from implicit body properties panel with the manifold property highlighted](https://files.learn.ntop.com/help-articles/meshing-workflows/360084385953.png) ## Solution: If your mesh isn't manifold, you need to refine your mesh further. This can include using blocks like **Remesh Surface**, **Refine Mesh**, **Simplify Mesh by Threshold**, **Simplify Mesh by Amount**, or editing the Adaptivity and Feature Size. Take a look at this [article](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) for further methods and tips on refining meshes. If your mesh is still non-manifold after trying these steps, you may have to go back to your original part in a different program and try cleaning it up. Sending it to another program like Magics for cleaning up may also be necessary. If you are trying to create a Quad Mesh using the **Quadrangulate Mesh** block, you will always want to use one of the refinement blocks mentioned above. Inputting a **Mesh from Implicit Body** or **Mesh from CAD Body** block will most likely cause an error when used without a refinement step. ## Keywords: *cad error mesh meshing export property quadrangulate quad refine simplify threshold amount vertex input must be manifold euclidean topological space false plane discontinuous normals* # Methods for creating solid meshes Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/methods-for-creating-solid-meshes ## Objective: Learn how to create a solid mesh. ## Applies to: * Exporting, Manufacturing, Analysis, Topology Optimization ## Procedure: To build a solid mesh you need to start off with a [surface mesh](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-surface-meshes). Depending on the complexity of your part, you may want to [refine](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) your mesh before converting it to a solid mesh to avoid longer computing times and processing errors. If you are going to be running an FEA analysis, you need to create a solid mesh in order to create an FE mesh. Once your part is refined, there are two blocks available to create a solid mesh from, Volume Mesh and Robust Tetrahedral Mesh. #### **Volume Mesh** Is the preferred method for simple geometry, as it is speedy but less tolerant of defects. Volume Mesh may also work after taking steps to repair input errors. If you get an error while using Volume Mesh, you may want to use the Robust Tetrahedral Mesh instead. | **Pros** | **Cons** | | - | - | | - Fast | - Can only handle simple geometry - Not very tolerant of input defects | #### **Robust Tetrahedral Mesh** Is exceptionally tolerant of low-quality inputs and ensures FEA quality elements. While this technique is remarkably robust, speed is a tradeoff. | **Pros** | **Cons** | | - | - | | - Can handle complex parts | - Slow | No matter which solid mesh block you are using, you want to keep the **Edge Length** the same for the **input** and the **solid** mesh if you are using the **Remesh Surface** block (recommended for easier conversion). This allows the tetrahedrons to be computed faster. ![A comparison between the Remesh Surface, Robust Tetrahedral Mesh, and Volume Mesh blocks. The Robust Tetrahedral Mesh block is visualized showing a meshed torus](https://files.learn.ntop.com/help-articles/meshing-workflows/360102010774.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Solid%20Mesh%20of%20Implicit%20Body.ntop) ## Keywords: *error mesh volume meshing fe solid refine tetrahedral robust methods* # Methods for creating surface meshes Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/methods-for-creating-surface-meshes ## Objective: Learn the different methods available for creating surface meshes. If you want to create a surface mesh, go [here](/help-articles/knowledge-base/meshing-workflows/how-to-create-a-surface-mesh). ## Applies to: * Exporting * Design Analysis * Simulation * Topology Optimization * Manufacturing ## Procedure: #### [Mesh from Implicit Body](#h-01eyvahbxjzn9tdgetz27bk7zh) #### [Mesh from Implicit by DC](#h-01eyvagn0wrs61g6s87mqsjvkw) #### [Mesh from CAD Body](#h-01eyvagy47844w46sg6zn77dva) #### [Surface Mesh from a Volume Mesh block](#h-01h3svxh3w8y7kay53mex3fm7v) #### [Quadrangulate Mesh](#h-01eyvaht8xytyjh9sgvvg9fy93) #### #### **Mesh from Implicit Body:** *(Previously known as Mesh from Implicit Body by Voxels)* **Mesh from Implicit Body** version 2.4.0 creates a Mesh from an Implicit Body. You can preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. We have an overload for the block with more inputs, including Sharpening iterations and a region to localize sharpening. This version has a higher computational overhead than **Mesh from Implicit by DC block** but can handle more complex geometry and produces cleaner meshes. * * **Tolerance:** We recommend 1/3rd of the minimum feature size as the input. Translates to the voxel size. Half the input tolerance gives the voxel size. As a rule of thumb, the number of triangles in the unsimplified output mesh quadruples whenever the tolerance input is halved. Keep that in mind to avoid generating unreasonably large meshes. If you only use this input, the output mesh is guaranteed to be watertight, manifold, and without self-intersections. * **Min. feature size:** This input is very different from the min feature size of v1 and should not be confused. If you provide a feature size, the block performs a filtering step to remove any features or holes which are smaller than the provided input. Use this input if the output mesh captures small details which are not manufacturable. * Apart from the “Min. feature size” input, the block automatically removes any connected component with a surface area smaller than 0.1% of the surface area of the largest connected component. This step differs from the filtering step in that this cleans up artifacts produced by the meshing step, while the filtering step works directly on the (voxelized) implicit surface. * **Sharpening option:** Enable this to reconstruct sharp features present in the implicit body. Typically, enabling the sharpening option improves the approximation quality of the mesh by a lot. Thus, in practice, it is often possible to decrease the tolerance input and enable sharpening to obtain a given target tolerance between the mesh and the implicit. * In most cases, the output mesh should not have defects (i.e., closed, no self-intersections, and manifold). However, in rare occurrences, the resulting mesh may have self-intersections, be non-manifold, or have pockets (i.e., two triangles with an extremely small dihedral angle). * Enabling this option will substantially increase the runtime of the block. Typically, it will take more than twice as long. * **Simplification option:** The old version provides an "adaptivity" input that can be used to obtain a mesh with fewer elements in areas of low curvature. Similarly, the new version has a "simplify" option that produces a mesh with the least amount of triangles while still conforming to the input tolerance. Like the old version, the simplification process can introduce new mesh defects (self-intersections and overfolds). Enabling this option will substantially increase the runtime of the block. * **Overloads:** The block has an overload that provides even more inputs. In particular, it provides a “Sharpening Extent” input. This can be used to localize the sharpening to certain mesh regions. It also provides a “Sharpening iterations” parameter which can be used to run the sharpening algorithm multiple times to potentially increase the quality of the sharp feature reconstruction. | **Pros** | **Cons** | | - | - | | - High-Quality meshing that produces clean manifold meshes without self-intersections - Very robust and useful for capturing detail in complex parts - Captures details on TPMS and lattices well - Can be exported without further refinement | - Eliminates sharp edges to a tolerance. Fix this by lowering the tolerance and simplifying the mesh\* **This can be fixed when used with the Sharpen option.** | #### **Mesh from Implicit by DC:** This block converts an Implicit Body to a Mesh using dual contouring. This version has lower computational overhead than Mesh from Implicit Body. However, the result may contain self-intersections and non-manifold edges or vertices. Use **Mesh from Implicit Body** when a clean mesh is required and/or for the option to sharpen specific regions. | **Pros** | **Cons** | | - | - | | - Captures sharp features. - Lesser computational overload. | - This might result in self-intersections depending on the geometry. - Typically requires further refinement. | The feature size input of this block should be **less than the minimum feature size** you want to capture in your implicit body. It is the minimum feature size to preserve and not an exact mesh size. Since all future meshes will be based on this, consider using a very small feature size for intricate implicit bodies and re-mesh to a coarser mesh later. Suggested Feature sizes: * * Lattices: ≤ 1.0 x thickness * Curved thin wall: \< 0.6 x thickness * Flat thin walls: No constraint (use adaptivity > 0) The adaptivity input takes in a number greater than 0, which controls if mesh elements will increase in size over flat areas. Low values will result in a more uniform and accurate mesh, while larger values will result in lower element counts. * * 0: Uniform mesh * 1: Maximum decimation (fewer triangles) #### #### **Mesh from CAD Body:** The **Mesh from CAD Body** block takes in a CAD body and converts it into a surface mesh. | **Pros** | **Cons** | | - | - | | - Discretizes CAD geometry when implicit nTop geometry is not required. | - If the imported CAD part has errors or holes, this may cause issues with the resulting mesh. - Typically requires further refinement. | * The tolerance is a scalar input that determines the maximum allowable distance from the mesh to the surface of the CAD body. * The Max edge length input is the maximum allowable length of each edge in the mesh. #### #### **Surface mesh from a volume mesh block** *Extract Volume Mesh Boundary (Deprecated)* You can drag and drop the surface mesh chip from the properties panel of any Volume mesh block. Reduces a volume mesh to a surface mesh by extracting the outer triangles. **Robust Tetrahedral Mesh** block is often used to fix the imported meshes with self-intersection. | **Pros** | **Cons** | | - | - | | - Guarantees no meshing issues such as holes or intersections. - Useful for complex parts. - Cleans up input surface meshes that have errors | - Dependent on the time it takes to generate a tetrahedral mesh using the **Robust Tetrahedral Mesh** block. | ![A gif showing how to extract a volume mesh property chip from a Robust Tetrahedral Mesh block](https://files.learn.ntop.com/help-articles/meshing-workflows/17913377517843.png) #### **Quadrangulate Mesh**: The **Quadrangulate Mesh** block re-meshes a triangular or quad mesh and outputs a quad mesh. | **Pros** | **Cons** | | - | - | | - Used as the input to the \*\*CAD Body from Quad Mesh\*\* block when converting a low-complexity model to a CAD part. - Used to generate a quad mesh for export. - Used to generate the input quad mesh for the \*\*Cell Map from Quad Mesh\*\* block. | - It only works on manifold meshes. - Meshes may need further refinement before being converted into a Quad mesh. - Not for use with lattices or TPMS structures. | * When using this block to convert a tri mesh to a quad mesh, we recommend using the tri mesh's face count as the value for the block's Target count input. We recommend this value because it may be the fastest and return cleaner results. * If the output mesh is self-intersecting, please try increasing the Target count value. ![A refined mesh](https://files.learn.ntop.com/help-articles/meshing-workflows/17913254449171.png) ## Keywords: *mesh surface volume implicit meshing boundary create from voxel grid quadrangulate quad methods extract voxels* # Methods for refining meshes Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes ## Objective: Learn what blocks are available for refining meshes and how to use them. ## Applies to: * Exporting, Manufacturing, Analysis, Topology Optimization ## Procedure: #### [Remesh Surface](#h-01ez85b5ywcm7hy42tnfjddbkc) #### [Refine Mesh](#h-01ez85bgea6knggavtvx9kg3j2) #### [Split Mesh](#h-01ez85brvb4m5zxwr7ktmg06dv) #### [Filter Mesh List](#h-01ez85c31svqyazazbwx4tzxcv) #### [Merge Mesh and Merge FE Mesh](#h-01ez85c8vwh503fydkjztmte58) #### [Simplify Mesh By Amount](#h-01ez85cfcgvvrcjfbft3w9w1y9) #### [Simplify Mesh by Threshold](#h-01ez85cnf1tgg9ezj6xjwnbs6y) Meshes typically need further refinement (or cleaning) before they can be useful down the road. These blocks help reduce file size, reduce triangle count, and capture fine details. Try using these blocks in combinations to mesh complex parts. At the end of cleaning your meshes, you want to be sure that there are no self-intersections, that the mesh is manifold, and that all faces are oriented correctly. To check these properties, open up the Property panel on the mesh block and scroll down. You want to see: * * Manifold: True * Oriented: True * Self-intersecting: False ![An image of a mesh properties panel with the manifold, oriented, and self intersections properties highlighted](https://files.learn.ntop.com/help-articles/meshing-workflows/4407074699283.png) #### **Remesh Surface**: Cleans up defects in a mesh, consolidates meshes into fewer elements, and/or spatially varies the mesh density. Gives more control over the size, shape, and uniformity of the original mesh. Use this block to generate FEA quality meshes for downstream analysis. > [!TIP] > > **Tips:** * Useful in converting a surface mesh to a [solid mesh](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-solid-meshes). When doing this, make sure the Edge Length is the same size for the Remesh Surface block and the Solid Mesh block to allow for the creation of tetrahedral elements. * The Edge Length should be ≥ to the feature size of the input Mesh. Start high and reduce it until you are happy with how it looks. * **Minimum Feature Size:** If you are setting a minimum Feature Size, it's recommended to use 5% of the chosen Edge Length. * **Remesh Shape** * Triangular: is the most commonly used and most efficient * Quad and Quad-dominated: Can't be converted to a volume mesh in nTop but can be used in CAD Body from Mesh. It is preferred to use the Quadrangulate Mesh block instead. * You want to balance fidelity and computing time * Too many elements = long computing time and not enough elements = low fidelity >
    ![Two meshes with different edge length values](https://files.learn.ntop.com/help-articles/meshing-workflows/360103837233.png) **Edge length: ** Specifies the approximate edge length of the mesh elements. Can be a singular, consistent value, or a scalar field, meaning you can spatially vary the size of the mesh. 
    ![Two meshes with different span angle input values](https://files.learn.ntop.com/help-articles/meshing-workflows/1500002833341.png) **Span Angle:** Refines elements that lie on curves. It signifies the maximum allowed angle that elements on curved surfaces are allowed to span. With a smaller span angle, elements on the curve are more refined to fit the span angle. 
    ![Two meshes with different growth rate input values](https://files.learn.ntop.com/help-articles/meshing-workflows/1500002833401.png) **Growth Rate:** Specifies the ratio of element size from one element to another. The number can be anything greater than 1. The smaller the number, the more uniform the mesh. In the image to the right, you can see how changing the growth rate from 2 to 1.05 creates a more uniform mesh.
    ![Two meshes with different feature angle input values](https://files.learn.ntop.com/help-articles/meshing-workflows/360103837413.png) **Feature Angle:** Controls the degree to which curved surfaces are converted to flat edges in a mesh. The value represents the maximum allowed angle between two adjacent planes that define an edge. A lower value results in more planar regions of the mesh where an input surface is curved.
    **Troubleshooting:** * **When you have mesh elements clustering together:** * Increase the Growth Rate, add a Minimum Edge Length * **When high fidelity is needed on curved surfaces:** * Lower the Chord height, lower the Span angle * **If you have surface divots or self-intersections:** * Lower the Chord height * **For a more uniform mesh:** * Lower the Growth Rate, lower the Edge Length * **Why is the progress bar getting stuck?** * Need to adjust your inputs: Chord height, Span angle, and Growth rate * **Why is it taking so long?** * Try increasing mesh size * **Why isn't my texture captured in the mesh?** * Check that the initial mesh is detailed enough and add a minimum feature size #### **Refine Mesh**: Refines a mesh using subdivision. Increases the size of any mesh to be exported, by increasing the triangle count. > [!TIP] > > **Tips:** * Creates subdivided meshes that can be converted into lattices (Lattice Body from Surface Mesh). * Useful for refining Quad meshes before converting to a CAD part. ![A gif showing how a refine mesh result changes as you increase the number of refinement steps](https://files.learn.ntop.com/help-articles/meshing-workflows/1500002835361.png) #### **Split Mesh**: Splits a mesh into multiple mesh objects. Learn how to use it [here](/help-articles/knowledge-base/meshing-workflows/how-to-extract-or-clean-up-mesh-bodies). > [!TIP] > > **Tips:** * Used in separating disconnected parts. * Used in separating fragmented mesh pieces from a larger mesh. Even if you can't see the fragments they may be there when you use the Split Mesh block. * Need to open the Properties panel to extract the meshes. The largest mesh is always at the top of the list. ![A split mesh properties panel that highlights the largest mesh in the mesh list](https://files.learn.ntop.com/help-articles/meshing-workflows/1500002806942.png) #### **Filter Mesh List**: Filters the **Split Mesh** results, based on a volume, to remove small disconnected pieces from the mesh. > [!TIP] > > **Tips:** * Commonly used for minor mesh fixing. ![A filter mesh list being used to filter the split mesh block to remove a small mesh](https://files.learn.ntop.com/help-articles/meshing-workflows/360101936794.png) #### **Merge Mesh** and **Merge FE Mesh:** Merges multiple mesh objects together. FE Meshes are merged by collapsing nodes within a given tolerance. > [!TIP] > > **Tips:** * Commonly used to export one mesh object that may have disconnected pieces. * Useful for merging a list of meshes together for downstream use. #### **Simplify Mesh By Amount:** Reduces the number of triangles on the surface mesh depending on the amount entered (in a range from 0-1, but not including 0 or 1). > [!TIP] > > **Tips:** * Amount input of 0.5 removes half of the mesh elements. * Doesn't take surface tolerance into account (the distance between the original input mesh surface and the new surface). * Helps shrink the size of the file. ![A mesh being simplified using the Simplify Mesh by Amount](https://files.learn.ntop.com/help-articles/meshing-workflows/360104101933.png) #### **Simplify Mesh by Threshold**: Reduces the number of triangles on the surface mesh. The block ensures that the distances between the surface input mesh and the surface of the new mesh are below the defined threshold amount. > [!TIP] > > **Tips:** * The Threshold amount has to be larger than 0. * Helps shrink the size of the file. ![A mesh being simplified using the Simplify Mesh by Threshold](https://files.learn.ntop.com/help-articles/meshing-workflows/360101941674.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *FE mesh surface list remesh merge filter quad refine simplify threshold split tetrahedral amount clean triangle cleaning* # What are surface meshing best practices? Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices ## Summary This training covers advanced meshing techniques. We recommend this information as a guide for successfully and currently surface-meshing in nTop for virtually any downstream operations. We highly recommend going through the[Learning Center course](https://learn.ntop.com/courses/102-guide-to-meshing/) to learn more about meshing. An overview of the steps is: * How to export for simulation or printing * **Mesh from Implicit Body** block and varying levels of sharpening * Merging and splitting meshes * **Simplify Mesh by Amount** block * **Collapse Mesh Vertices** block * **Remesh Surface** block * **Create Single Face Mesh** block Now let's get started! [https://www.youtube.com/embed/LRFcwMNDTAE](https://www.youtube.com/embed/LRFcwMNDTAE) ## Downloads [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Surface_Meshing_Techniques.ntop) ## Keywords: *mesh surface meshing tpms remesh hex complex best practices mesh size* # What are the different filter options in Smoothen Voxel Grid? Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/what-are-the-different-filter-options-in-smoothen-voxel-grid ## Question: What are the different filter options in Smoothen Voxel Grid? ## Applies to: * Smoothen Voxel Grid ## Answer: The different filter options are: * **MeanCurvature:** Moves the surface in a normal direction by an amount equal to the mean curvature * **Laplacian:** Applies Laplacian flow, This applies a weighted average of the voxel and its neighbors. * **Dilate:** Moves the surface outward by the amount specified. * **Gaussian:** Applies a gaussian flow, a weighted average of the voxel and its neighbors where a Gaussian determines the weights. * **Median/Mean:** Median/Mean flow. This is an averaging procedure where voxel values are replaced by the median/mean of a neighborhood. * **Eikonal:** Re-distances the voxel grid so that the result is an SDF. ## Keywords: *meshing smoothen question voxel grid curvature mean* # What is a mesh? Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/what-is-a-mesh ## Objective: Learn what a mesh is and how they work in nTop. ## Applies to: * Additive manufacturing * Rendering * Simulation * Exporting ## Procedure: #### **What is a mesh?** It is a discretization of surface geometry using vertices, edges, and faces. Meshes are saved as their own file types (STL, OBJ, PLY, 3MF...) and used for analysis, manufacturing preparation, and exporting to other programs. #### **Meshes in nTop** ![A flow diagram showing how to create an FE Mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/360104182493.png) There are three kinds of meshing blocks in nTop. Surface meshes, solid meshes, and Finite Element (FE) volume meshes. In nTop we refer to surface meshes as simply 'meshes', while volume meshes are specified as volume or solid meshes. Typically meshes start as a surface mesh, get refined, and can be converted to solid and FE meshes depending on your goal. If you want to export your mesh, you can keep it as a surface mesh, but if you want to analyze it in nTop or another program, you will need to create a volume mesh and then an FE volume mesh. #### **Surface Meshes** Implicits and CAD bodies can both be converted into surface meshes. The two articles below teach you how to build a surface mesh in nTop and the various methods for creating them. * [How to create a surface mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-a-surface-mesh) * [Methods for creating surface meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-surface-meshes) #### **What is a clean mesh?** A clean mesh means that it is closed, oriented, manifold, and not self-intersecting. All of these properties can be checked in the Property Panel of a mesh block. A clean mesh is necessary to ensure there are no errors with further operations. * Closed: Has no boundary edges. * Oriented: Normal vectors of all mesh faces are consistently facing outward or inward. * [Manifold](/help-articles/knowledge-base/meshing-workflows/input-mesh-must-be-manifold): A continuous surface that resembles Euclidean space up close. * Self-Intersecting: A part of a surface mesh collides with another part of itself. ![An example properties panel of a mesh.](https://files.learn.ntop.com/help-articles/meshing-workflows/43194650940819.png) #### **Refining Surface Meshes** Refining meshes is a complex process and can vary for different parts. Read the article below to learn about the methods available in nTop for refining. * [Methods for refining meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) #### **Solid Meshes** Solid meshes convert surface meshes into tetrahedrons to fill the volume of the mesh. Read the article below to learn more about solid meshes. * [Methods for creating solid meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-solid-meshes) #### **FE Meshes** FE Meshes are created by adding linear or quadratic nodes to a solid mesh. This enables the mesh for analysis. * [How to create an FE Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) ## Keywords: *mesh volume what is fe solid manifold self discretization clea closed intersecting oriented* # Why is Robust Tetrahedral Mesh slower than Volume Mesh? Source: https://docs.ntop.com/help-articles/knowledge-base/meshing-workflows/why-is-robust-tetrahedral-mesh-slower-than-volume-mesh ## Question: Why is Robust Tetrahedral Mesh slower than Volume Mesh? ## Applies to: * Robust Tetrahedral Mesh * Volume Mesh ## Answer: The Robust Tetrahedral Mesh uses a different algorithm that uses precise computations to optimize the mesh quality which takes longer than the Volume Mesh block. The Robust Tetrahedral Mesh block uses only one core which might result in your CPU using less power compared to other meshing blocks. ## Keywords: *mesh meshing question tetrahedral robust design and manufacturing* # A runtime error has occurred Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/a-runtime-error-has-occurred ## Issue: When I run a file in nTop Automate, I get the error "A runtime error has occurred." ## Applies to: * nTop Automate ## Cause: This is happening because you are trying to use an input JSON file with a different input type than the nTop file. ## Solution: You can fix this issue by checking the input.json to ensure all the types are correctly mapped, or use the -- template command to generate your input and output JSON files. ## Keywords: *error ntop automate type runtime* # Can I export nTop Automate JSON files in different units? Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/can-i-export-ntop-automate-json-files-in-different-units ## Question: When opening the output file, the value is always in mm, but I want it to be in inches. Is it possible to change the units in this file to give the desired unit? ## Applies to: * nTop Automate * JSON ## Answer: Our internal data structure uses **kg, m** to calculate and represent the stored value to display as the user's unit to maintain consistency and manage the computational risks. nTop Automate JSON output only exports as it is because it pulls directly from the original data, not the displayed data. If you need to export the value in your own unit, we suggest exporting the value as a text file using a combination of **Export Text** and **Text from Scalar** block. ![An example showing how to export a mass properties value as text using the Text from Scalar block and Export Text block.](https://files.learn.ntop.com/help-articles/ntop-automate/4401981003667.png) ## Keywords: *file question unit output ntopcl python script command line json units* # How to Debug an nTop Automate Error in Python Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/how-to-debug-an-ntop-automate-error-in-python ## Objective: Learn how to debug errors in your nTop Automate process from Python when an error is shown based on your inputs. ## Applies to: * Automating nTop notebooks for repeatable and intelligent workflows * Interacting with external software suites and databases ## Procedure: * Set up your Python script for modifying inputs and calling nTop, as shown [here.](https://support.ntopology.com/hc/en-us/articles/360052703693-Running-nTop-Command-Line-in-Python-scripts) * Find the 'exePath' variable used to point to the nTopCL executable ``` exePath =r"C:/Program Files/nTopology/nTop Platform/nTopCL.exe" #nTop Automate path ``` * Change the exePath variable to refer to nTop.exe, instead of nTopCL.exe. This is the standard nTop Platform executable, so running the script will open up the nTop window with the inputs specified by the command line process. ``` exePath = r"C:/Program Files/nTopology/nTop Platform/nTop.exe" #nTop Automate path ``` * Run the script, and the nTop GUI will open up, allowing you to check that the inputs are placed correctly and where there are errors in the nTop notebook. * Correct any errors and reset the exePath variable in your Python script to the original (nTopCL.exe) ``` exePath =r"C:/Program Files/nTopology/nTop Platform/nTopCL.exe"#nTop Automate path ``` * You can also set up an IF statement to quickly switch back before the standard and nTop Automate versions. ``` OpenGUI = 1 exePath =r"C:/Program Files/nTopology/nTop Platform/nTopCL.exe"#nTopCL path if OpenGUI == 1: exePath = r"C:/Program Files/nTopology/nTop Platform/nTop.exe" #nTop path ``` Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *error ntop troubleshoot ntopcl python command line cl debug* # How to set up a DOE in Python for nTop Automate Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/how-to-set-up-a-doe-in-python-for-ntop-automate ## Question: How to set up a DOE in Python for nTop Automate ## Applies to: * nTop Automate * DOE * Python ## Answer: 1. Prepare your nTop notebook by setting up the Inputs and Outputs for running in nTop Automate ([Preparing an nTop Notebook for nTop Command Line](/help-articles/knowledge-base/ntop-automate/preparing-an-ntop-notebook-for-ntop-automate)). The inputs for this example are Unit Cell Size and Thickness, which we wish to change for multiple values and get the relative density values as output. ![An example notebook setup for running the notebook using Python and nTop Automate.](https://files.learn.ntop.com/help-articles/ntop-automate/17802688369171.png) ![A walled TPMS Unit Cell. The Thickness, Unit Cell Size, and Bounding box are labeled.](https://files.learn.ntop.com/help-articles/ntop-automate/17802688370963.png) > [!TIP] > > **Tip:** These learning center courses have step-by-step instructions and examples for automating your nTop files ([https://learn.ntop.com/courses/230-intro-to-automation/](https://learn.ntop.com/courses/230-intro-to-automation/)and [https://learn.ntop.com/courses/330-ntop-automate/](https://learn.ntop.com/courses/330-ntop-automate/)) 2. Run the -t template command in ntopcl with the nTop file to generate the *input\_template.json* and *output\_template.json* * [input\_template.json](https://ntop.box.com/s/2o84yxvhbw4hzsbjcxmukoj16zmdb6xw) * [output\_template.json](https://ntop.box.com/s/75ip22vtx625kwp3phjgmnqiizphswot) 3. Open your preferred code editor and create a new .py file to run the script to generate multiple input JSON files for running multiple values. This article ([Running nTop Command Line in Python scripts](/help-articles/knowledge-base/ntop-automate/running-ntop-automate-in-python-scripts)) has a Python template file you can use as a base and modify for your use case. *Tips: There are two important things to remember while using a list of values to run multiple iterations. You can use a list directly for one of the inputs; see below for how we have used thickness values. To use another list input, we will create multiple input.json files to run DOE; see below how we have used cellsize\_values.* [Python Script to download](https://ntop.box.com/s/oqk8foftbmdm3uxyolljg6ougqjzfb7a) ``` import os import subprocess import json # Assuming this script, ntop file, and json files will be in the same folde Current_Directory = os.path.dirname(os.path.realpath('__file__')) exePath = r"C:/Program Files/nTopology/nTopology/nTopCL.exe" # nTopCL path nTopFilePath = r"RelDensity.ntop" # nTop notebook file name Output_Directory = r"C:\Users\ajayprasad\Downloads\RelDensity" # Output directory path Input_File_Name = "input{}.json" # JSON input file name template Output_File_Name = "out{}.json" # JSON output file name template # Input variables in JSON structure thickness_values = [round(x * 0.1, 1) for x in range(1, 21)] # List of thickness values from 0.1 to 2 with increments of 0.1 cellsize_values = [round(x * 0.5, 1) for x in range(1, 21)] # List of L values from 0.5 to 10 with increments of 0.5 # Iterate over each cell size value for i, cellsize in enumerate(cellsize_values): Inputs_JSON = { "description": "", "inputs": [ { "description": "", "name": "Output directory", "type": "text", "value": Output_Directory }, { "description": "", "name": "Unit cell", "type": "enum", "value": 0 }, { "description": "", "name": "L", "type": "real", "units": "mm", "value": 10.0 }, { "description": "", "name": "Unit Cell Size", "type": "real", "units": "mm", "value": cellsize }, { "description": "", "name": "Thickness", "type": "real", "units": "mm", "values": thickness_values } ], "title": "Relative Density of Walled TPMS" } # Create input.json file input_file_name = Input_File_Name.format(i + 1) with open(input_file_name, 'w') as outfile: json.dump(Inputs_JSON, outfile, indent=4) # nTopCL arguments in a list Arguments = [exePath] # nTopCL path Arguments.append("-j") # json input argument Arguments.append(input_file_name) # json path Arguments.append("-o") # output argument output_file_name = Output_File_Name.format(i + 1) Arguments.append(output_file_name) # output json path Arguments.append(nTopFilePath) # .ntop notebook file path Arguments.append("-v2") # nTopCL call with arguments print("Running nTopCL with input file: {}".format(input_file_name)) print(" ".join(Arguments)) output, error = subprocess.Popen(Arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() # Print the return messages print(output.decode("utf-8")) ``` 4. When you run this script, the folder will have multiple input and output JSON files generated. ![After running the script, a JSON file is generated for each input and output configuration of the unit cell.](https://files.learn.ntop.com/help-articles/ntop-automate/17802864210707.png) 5. You can then write a script to read the output JSON files to plot as needed. ![3D Plotting the JSON file results to compare Thickness, Relative Density, and Cell Size.](https://files.learn.ntop.com/help-articles/ntop-automate/17803158109715.png) ![A 2D plot showing Relative Density as a function of Thickness.](https://files.learn.ntop.com/help-articles/ntop-automate/17803120085907.png) ## Attachments [RelDensity.ntop](https://ntop.box.com/s/kfjjidq9r9th2jxoxrgaku8ymr4l5v4x) ## Keywords: *lattice question ntopcl python json doe relative density ntop automate loop* # How to setup nTop Automate with MDO Platforms Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/how-to-setup-ntop-automate-with-mdo-platforms ## **Question** How can I set up nTop Automate for a multidisciplinary design optimization (MDO) platform without hardcoding my password? Using my credentials directly in the MDO project files is a security risk, is not scalable if my password changes, and fails on machines where my credentials aren't cached. I'm looking for a secure and robust way to manage authentication for automated workflows across multiple users and machines. ## **Applies to** * nTop Automate * MDO Platforms (e.g., HEEDS, Isight, ModeFrontier) ## **Answer** The recommended best practice is to use a dedicated, non-personal **service account** for nTop and store its password securely in a **system environment variable**. This method separates the secret (password) from the configuration (your MDO project). ### **Step 1: Create a Dedicated nTop Service Account** Create a single nTop user account for running automated jobs (e.g., [ntop-automation@your-org.com](mailto:ntop-automation@your-org.com)). You can add a new user using the Org Admin Dashboard ([https://app.ntop.com/org/users](https://app.ntop.com/org/users)). * **Floating Licenses:** The service account can check out a license from your organization's or team's license pool. * **Named-User Licenses:** You must assign a specific nTop Automate license to this service account. If you have any questions, refer to the [nTop Org. Admin Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-org-admin-guide) and email [support@ntop.com](mailto:support@ntop.com) for further assistance! ### **Step 2: Configure the Execution Machine(s)** This setup must be performed on every computer running the nTop Automate jobs. **A. Set the Environment Variable (One-time setup per machine)** This command creates a secure, system-wide variable to store the password. 1. Open **Command Prompt** as an **Administrator**. 2. Run the following command, replacing the placeholder with your service account's actual password: ``` setx NTOP_PASSWORD "YourServiceAccountPassword" /M ``` 3. Restart your Command Prompt session or log out/in for the change to take effect. ![](https://files.learn.ntop.com/help-articles/ntop-automate/50598759144467.png) **B. Create a Wrapper Script** This batch script (.bat) acts as a bridge, calling nTop Automate using the securely stored password. 1. Create a new text file and save it as run\_ntop\_secure.bat in a shared location. 2. Copy the following code into the file, updating the path to **ntopcl.exe** and the service account email as needed. You can also create the user email as an environment variable. ``` @echo off rem This script runs nTop Automate using a dedicated service account rem and a password stored securely in an environment variable. "C:\Program Files\nTopology\nTop\ntopcl.exe" -u "ntop-automation@your-org.com" -w %NTOP_PASSWORD% -i %1 -o %2 ``` The %1 and %2 Your MDO tool will use placeholders to pass in the input and output file paths. These are optional, and you can set these up based on your requirements. **C. Configure Your MDO Tool** In your MDO analysis process, configure the execution command to call the run\_ntop\_secure.bat wrapper script instead of ntopcl.exe directly. ## Keywords: *account password design automate mdo service mdao store study* # How to track Progress and log output in nTop Automate Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/how-to-track-progress-and-log-output-in-ntop-automate ## **Objective:** This article explains how to view the real-time runtime progress of nTop Automate and how to save that data to a log file for debugging and record-keeping purposes. This is particularly useful for monitoring long operations and identifying the specific causes of file failures. ## **Applies to:** * nTop Automate ## **Procedure** When running nTop Automate (nTopCL), you may want to see the step-by-step execution progress similar to the Console view in the Desktop application. By default, nTopCL runs quietly to optimize performance. However, you can adjust the verbosity to see runtime progress and export these details to a log file. ### 1. View Progress in Real-Time (Verbosity) To view progress directly in your command prompt or terminal window, use the `--verbose` argument (or the shorthand `-v`) followed by an integer (INT) to set the level of detail. The available verbosity levels are: * **0:** Logs **Errors** only. * **1:** Logs **Warnings** and **Errors** (Default). * **2:** Logs **Warnings**, **Errors**, and **Runtime Progress**. To replicate the output you typically see in the nTop **Log** (located in the bottom panel of the UI), use level **2**. **Example Command:** ``` ntopcl -v 2 -i input_file.ntop -o output_file.json ``` ### 2. Export Progress to a Log File To save the execution history for troubleshooting or auditing, use the `--logfile` argument. This duplicates the terminal output into a text file. * **Default Behavior:** If you use the flag without a path, it creates a file named `ntopcl.log` in the current working directory. * **Custom Path:** You can specify a filename or a full file path. **Example Command (Specifying a path):** ``` ntopcl -v 2 --logfile="C:\Path\To\MyLogFile.txt" -i input.ntop ``` And that's it! You've successfully configured nTop Automate to display runtime progress and save execution logs. **Are you still having issues?** Contact the support team, and we'll be happy to help! ## **More on this topic:** * [Running nTop Automate in Python scripts](/help-articles/knowledge-base/ntop-automate/running-ntop-automate-in-python-scripts) * [Preparing an nTop Notebook for nTop Automate](/help-articles/knowledge-base/ntop-automate/preparing-an-ntop-notebook-for-ntop-automate) * [What types are supported in nTop Automate?](/help-articles/knowledge-base/ntop-automate/what-types-are-supported-in-ntop-automate) # How to use nTop Automate in ModeFrontier DOE workflows Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/how-to-use-ntop-automate-in-modefrontier-doe-workflows ## Objective: Learn to use nTop Automate in ModeFrontier's Design of Experiment (DOE) workflows. ## Procedure: **1. Prepare your nTop Notebook:** The sample nTop Notebook is created for running a simple DOE on the Lattice Type to meet the mass criteria. Please, check out our tutorial on [preparing nTop Notebook for nTop Automate](/help-articles/knowledge-base/ntop-automate/preparing-an-ntop-notebook-for-ntop-automate) if needed. ![An example notebook that has been set up for nTop Automate.](https://files.learn.ntop.com/help-articles/ntop-automate/49964863484435.png) **2. Run the nTop Notebook using nTop Automate in ModeFrontier** The below video explains the rest of the steps in ModeFrontier. And that's it! You've successfully learned how to use nTop Automate in ModeFrontier. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/nTop%20Automate/Mode%20Frontier%20Example.zip) ## Keywords: *workflow automate ntopcl script nTOPCL modeFrontier DOE mdo code cl mode frontier* # How to use nTop Automate License? Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/how-to-use-ntop-automate-license If you're here, you're probably trying to figure out how to get started with the nTop Automate License, and this guide explains how to check for your available license and log into nTop Automate. After reading this tutorial, you should be able to: * [Check for the nTop Automate License in the nTop User Dashboard](#h-01fwhayae99nz0q97em93v2jyf) * [Login to nTop Automate](#h-01gyqq88wjaf60965295a5mkgs) * [Cloud License](#h-01hamknq6g755s8g5ezyk8bf1r) * [FNP License](#h-01hamn2pz12aqc34kr2x4gfzad) ## 1. License Information in nTop User Dashboard After you have purchased our nTop Automate, you can check the license information from your User Dashboard (*app.ntop.com*) * Login to app.ntop.com using your email address and new password. * You are now logged in to the nTop User Dashboard. Note: If your link to set up your new account has expired, you can generate a new link by selecting **Request.** A new email will be sent to your email address. Navigate to the *Account Settings* tab to see your available licenses under the My Licenses heading. ![Account Settings tab of a user account on app.ntop.com.](https://files.learn.ntop.com/help-articles/ntop-automate/20813230683155.png) ## 2. Logging into nTop Automate The next step would be to log in to nTop Automate based on the licensing system. ## Cloud or Named User License If you have Named User or Floating licenses on the dashboard, you would have to follow the steps below. In the Command Prompt or Powershell, you should enter ntopcl --license followed by the same cloud credentials you used to log in. ``` ntopcl --username [username@gmail.com](mailto:username@gmail.com) --password P@$$W0RD ``` ## FlexNet Publisher (FNP) Floating License If your organization has purchased a FlexNet Floating license, you need to enter the server address following --license in Command Prompt or Powershell along with the Server Address similar to the above step, and it should log you in. ``` ntopcl --license PORT@HOSTNAME ``` Feel free to reach out to [support@ntop.com](mailto:support@ntop.com) if you run into any issues while trying to access to login to nTop Automate. ## Keywords: *ntop license automate ntopcl* # I ran into "[E] Expired local license" error. Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/i-ran-into-e-expired-local-license-error ## Issue: **"\[E] Expired local license"** error ## Applies to: * nTop Automate * Local License ## Cause: Using a local license before and need to switch that to cloud licensing. ## Solution: * You must remove the file (**%APPDATA%\Roaming\nTopology\license.lic**), launch nTop, and log in. This will ensure that the next time you launch nTop Automate, it runs with the saved nTop login. ## Keywords: *error license local expired ntopcl issue* # nTop Automate for Linux - Update Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/ntop-automate-for-linux-update ## Objective nTop Automate, formerly Command Line Interface or nTop CL, is a headless version of nTop. This allows command-line programming to be an alternative to the desktop GUI experience. Customers use nTop Automate to run multiple nTop workflows without manual intervention. Some of the typical use cases are applications requiring mass customizations and the design of experiments. ## What is happening? nTop Automate for Linux has reached general availability. Authorized users can access the install file from their user dashboard at [https://app.ntop.com/](https://app.ntopology.com/). ## What is different in nTop Automate for Linux? nTop Automate for Linux and nTop Automate for Windows is one product. However, a separate install file for the Linux version is available on the User's Dashboard. ## Frequently Answered Questions ### 1. What are the recommendations for Installation? 1. Find the download file on your user dashboard 2. Download 'nTop Automate for Linux' 3. On a Red Hat 8 machine, install the following dependencies: ``` sudo yum install libglvnd-glx libxkbcommon-x11 mpfr ``` 4. Extract the tar ball into the destination path ``` tar -xzvf nTop-.tar.gz sudo cp -r nTop- /usr/local/ ``` 5. Set environment variables for calling **ntopcl** ``` export PATH="/usr/local/nTop-:$PATH" export LD_LIBRARY_PATH="/usr/local/nTop-/interop/dependencies/code/bin:$LD_LIBRARY_PATH" export NTOP_LBM_PATH="/usr/local/nTop-/lbm/ntoplbm.bin" ``` > [!NOTE] > > *Note: The compressed package is portable and doesn't strictly need to be installed under /opt.* If running ntop from a location other than the suggested '/opt', please remember that the new PATH and LD\_LIBRARY\_PATH variables above must be updated accordingly in the previous export commands. 6\. Call **ntopcl** from anywhere in the terminal. ### 2. Does the GUI work with Linux? The graphical user interface is not supported in the current version. It may be considered for a future release. ### 3. Does it include all the same features as the Windows build? It includes many of the same features as the Windows build. However, please note that there may be some differences in some of the features or results compared to the Windows version. ### 4. Why is nTop launching a Linux version? Many of our customers interested in nTop Automate have access to High-Performance computing that runs on the Linux platform due to cost and performance advantages. nTop is offering the Linux version to provide these customers the option to run nTop Automate on their preferred platform. ### 5. How do I use nTop Automate for Linux? You must prepare a workflow for nTop Automate using nTop UI in Windows (see this support [article](/help-articles/knowledge-base/ntop-automate/preparing-an-ntop-notebook-for-ntop-automate)). Then transfer the workflow to a Linux environment and invoke nTop Automate's execution. This can be from a command line terminal or any programmatic environment. nTop Automate in Linux is a native Linux application, so paths to all input files must follow traditional Linux filesystem conventions. E.g., a path is written like ***folder\mymesh.stl*** won't work since it follows Windows-only conventions. Paths like ***folder/mymesh.stl*** work in both Windows and Linux and can be safely used in a portable fashion. ### 6. What are the supported Linux operating systems? It is currently supported for Red Hat Enterprise v8 (RHELv8). As of June 2024, we have transitioned our Linux support to RHEL 8 moving forward to ensure ongoing security and stability, as RHEL 7 has reached the End of Maintenance (please see the [announcement here](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/rhel-7-end-of-maintenance)) and will no longer receive critical security updates and bug fixes. If your systems are currently on RHEL 7, you are recommended to stay on our final RHEL 7 compatible version (nTop 4.26.4) until migrating your systems to RHEL 8, and update to nTop 5 or later versions only after the migration is complete. ### 7. What are the system requirements for running nTop Automate for Linux? Besides nTop's standard [System Requirements Guide](/help-articles/access-and-installation/system-requirements/system-requirements-guide), a minimum of 2 CPU cores are required to run an nTop notebook using nTop Automate for Linux. ### 8. Are other Linux distros supported? While other Linux distributions (CentOS, Rocky, Wine, etc.) may function with nTop, we don't officially support them and can't provide technical support for troubleshooting potential issues. ### 9. How will users access it? The install file will be available on your user dashboard. ### 10. How will users know they have been granted access to nTop Automate for Linux? You will see the download link for 'nTop Automate for Linux' on your user dashboard. ### 11. Can it run using WSL? It is not officially supported. ### 12. If I have a Windows license, do I need an additional license to run Linux? No. Currently, a Windows license also grants you access to the Linux version. ### 13. What is the current limit of license requests per minute? It is currently limited to one user, one device (not on multiple machines), with up to 100 requests per minute. ### 14. What are the supported features in this release? Here is a list of supported features: * CAD Interoperability * Implicit Modelling * Latticing * FE Meshing * Topology Optimization * Surface Meshing * Triangular Meshing * Boundary Selection Blocks * Static Analysis * Red Hat Enterprise 8 ### 15. What are some of the known issues? Some of the behaviors that might be different than 'nTop Automate for Windows' include, but are not limited to, the following: 1. 1. The resulting mesh from Volume Meshing may be different. 2. Lattices produced by the **Cell Map from CAD Face** and **Cell Map between CAD Faces** blocks may have a different number of edges, beams, line segments, and vertices when the non-linear option is selected. 3. After running the **Trim Lattice** block, the index order of the lattice's property lists, including beams, line segments, and vertices, will be different. This difference will also be observed when exporting the lattice as a .3MF file. 4. The principal frame property of the **Mass Properties from Body** block is flipped for some primitives. 5. Spatial Interoperability and loading of CAD file formats; SolidWorks and CATIA import. 6. The output of the Stochastic lattice blocks may have slight geometric deviations (within 1e-3 mm). 7. Random numbers generated in blocks will be different. 8. The output for the Voronoi and Branched lattice would be different. ## Keywords: *ntop automate linux ntopcl* # ntopcl.exe running into MSVCR100.dll error Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/ntopcl-exe-running-into-msvcr100-dll-error ## Issue: * The error occurs when opening nTop for the first time after installation * Error message: "The code execution cannot proceed because MSVCR100.DLL was not found. Reinstalling the program may fix this problem" ## Applies to: * nTopCL * nTop Automate * Windows EC2 * nTop 3.10.3 ## Solution: * Download the DLL file from [https://www.dll-files.com/msvcr100.dll.html](https://www.dll-files.com/msvcr100.dll.html) * Place the DLL file in the nTop installation directory * Restart nTop ## Keywords: *error vm dll issue installation msvcr100* # Preparing an nTop Notebook for nTop Automate Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/preparing-an-ntop-notebook-for-ntop-automate ## Objective: Learn how to prepare your nTop Notebook for nTop Automate (ntopcl). ## Procedure: **1. Prepare Inputs:** Right-click on block inputs to declare them as the Notebook input variables. * Scalar and Text variable types are supported for passing input variables in the execution command. * Boolean, Integer, Scalar, Text, File Path, Vector, Point, and Enum types are supported for passing input variables as JSON files. * File import/export blocks work well with the Text or File Path variable. * An enum type makes block drop-down lists as the Notebook input variables. ![Creating an input to set up a file for nTop Automate.](https://files.learn.ntop.com/help-articles/ntop-automate/49964341542163.png) **2. Prepare Output:** Type the block object name in the output section. ![Use the Surface Area variable as the output for the notebook.](https://files.learn.ntop.com/help-articles/ntop-automate/49964358239507.png) **3. Run your Notebook using nTop Automate:** Use the command in Command Prompt. ``` ntopcl -j input.json -o output.json SampleFile.ntop ``` **4. Check the return messages** **![Running nTop Automate with the file created above.](https://files.learn.ntop.com/help-articles/ntop-automate/360085091133.png)** And that's it! You've successfully prepared your Notebook for nTop Automate. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/nTop%20Automate/Prepare%20Notebook%20for%20Automate%20Example.zip) ## Keywords: *how to notebook variables output input command line CL nTOPCL json prepare prompt run enum* # Running nTop Automate in Matlab scripts Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/running-ntop-automate-in-matlab-scripts ## Objective: Learn how to run your nTop notebook using nTop Automate (ntopcl) in Matlab scripts. ## Procedure: * [Prepare the nTop notebook](/help-articles/knowledge-base/ntop-automate/preparing-an-ntop-notebook-for-ntop-automate) and JSON input for running nTop Automate * Matlab Struct data structure can read, modify and write JSON input files. * **Run (F5)!** * Check if the return messages are printed as below. ``` [info] Logging Engine started [info] Login successful[info] Parasolid started [info] Parasolid started [info] nTop successfully built. [info] Logout successful ``` Feel free to change this script to batch-process your workflow by passing input lists in a loop! ``` clc,clear,close all %Provide file paths to nTopCL, nTop file, and output JSON file %Assuming input and output JSON files as well as .ntop file in the same folder pathToExe = ['"' 'C:\\Program Files\\nTopology\\nTopology\\ntopcl.exe' '"']; FileToRun='SampleFile.ntop'; OutputFile='output.json'; %Provide a input JSON file InputFile='input.json'; Inputs = jsondecode(fileread(InputFile)); %Modify input variables Inputs(1).inputs{2,1}.values = 5; Inputs(1).inputs{3,1}.values = 3; Inputs(1).inputs{4,1}.values = 2; %Write JSON file JsonStr = jsonencode(Inputs); JsonStr = strrep(JsonStr, ',', sprintf(',\r')); JsonStr = strrep(JsonStr, '[{', sprintf('[\r{\r')); JsonStr = strrep(JsonStr, '}]', sprintf('\r}\r]')); fid = fopen(InputFile, 'w'); if fid == -1, error('Cannot create JSON file'); end fwrite(fid, JsonStr, 'char'); fclose(fid); %Compose a execution command Arguments=sprintf('%s -j %s -o %s %s', pathToExe,InputFile,OutputFile,FileToRun); %Run system(Arguments); ``` And that's it! You've successfully run nTop Automate using Matlab scripts. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Sample File](https://ntopology.box.com/s/6x5vbjet9d1ozna2hnvr9fd8cthje181) * [input.json](https://ntopology.box.com/s/sotpx3s44vwrx8su6n6yjxr058komng5) * [Script\_JSON.m](https://ntopology.box.com/s/qc4dkwvvqbdhl9nz63xe9tngzhlnjjpu) ## Keywords: *ntop output ntopcl command line api script matlab input command run code cl lab* # Running nTop Automate in Python scripts Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/running-ntop-automate-in-python-scripts ## Objective: Learn how to execute an nTop notebook using nTop Automate (ntopcl) within Python scripts to enable automated, repeatable workflows. ## Applies to: * Automating nTop notebooks for engineering workflows * Interacting with external software suites and databases ## Procedure: * [Prepare the nTop notebook](/help-articles/knowledge-base/ntop-automate/preparing-an-ntop-notebook-for-ntop-automate) and JSON input for running nTop Automate * Use Python's **json** module to save your input data (formatted as a dictionary) into a **.json** file. * Execute the nTop Automate process using Python's subprocess module * Python Script\_JSON.py will run a Windows process command like `"C:/Program Files/nTopology/nTopology/nTopCL.exe" -j input.json -o out.json SampleFile.ntop` * Check if the return messages are printed as below. ``` [info] Logging Engine started [info] Login successful[info] Parasolid started [info] Parasolid started [info] nTop successfully built. [info] Logout successful ``` Feel free to change this script to batch process your workflow by passing input lists in a For Loop! ``` #Imports import os import subprocess import json #Assuming this script, ntop file, and json files will be in the same folder Current_Directory = os.path.dirname(os.path.realpath('__file__')) exePath = r"C:/Program Files/nTopology/nTopology/nTopCL.exe" #nTopCL path nTopFilePath = r"SampleFile.ntop" #nTop notebook file name Input_File_Name = "input.json" #JSON input file name to be saved as Output_File_Name = "out.json" #JSON output file name to be saved as #Input variables in JSON structure Inputs_JSON = { "inputs": [ { "name": "Output directory", "type": "text", "value": "C:\\Users\\Your Account\\Your Path\\" }, { "name": "Length", "type": "scalar", "values": 7, "units": "mm" }, { "name": "Width", "type": "scalar", "values": 2, "units": "mm" }, { "name": "Height", "type": "scalar", "values": 2, "units": "mm" } ] } #nTopCL arguments in a list Arguments = [exePath] #nTopCL path Arguments.append("-j") #json input argument Arguments.append(Input_File_Name) #json path Arguments.append("-o") #output argument Arguments.append(Output_File_Name) #output json path Arguments.append(nTopFilePath) #.ntop notebook file path #Creating in.json file with open(Input_File_Name, 'w') as outfile: json.dump(Inputs_JSON, outfile, indent=4) #nTopCL call with arguments print(" ".join(Arguments)) output,error = subprocess.Popen(Arguments,stdout = subprocess.PIPE, stderr= subprocess.PIPE).communicate() #Print the return messages print(output.decode("utf-8")) ``` And that's it! You've successfully run your nTop notebook using a Python script. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Sample File](https://ntopology.box.com/s/6x5vbjet9d1ozna2hnvr9fd8cthje181) * [Script\_JSON.py](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/nTop%20Automate/Script_JSON.py) ## Keywords: *ntopcl command line python api script run scripts code cl* # What types are supported in nTop Automate? Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-automate/what-types-are-supported-in-ntop-automate ## Question: What file types are supported in nTop Automate? ## Applies to: * nTop Automate ## Answer: **Supported types for Input** | Variable Type | Comment | Example | | - | - | - | | Boolean | Each value should be true or false -- not enclosed in quotes. | `{ "name": "Rotate Y to Z", "type": "bool", "value": true, }` | | Scalar | Each value can be an integer or a float, and units are optional. | `{ "name": "Scalar_0", "type": "scalar", "value": 5, "units": "mm" }` | | Integer | Each value must be an integer without units. | `{ "name": "Number of points", "type": "integer", "value": 6 }` | | Text | Each value should be a string. | `{ "name": "Text_0", "type": "text", "value": "d:\\auto" }` | | File Path | Each value should be a valid file path as a string. Note that paths require double slashes due to JSON string rules. | `{ "name": "Path", "type": "file_path", "value": "C:\\Outputs\\geometry.stl" }` | | Point | Each value should be an array of integers or floats. | `{ "name": "Center", "type": "point", "value": [1, 1, 1], "units": "mm" }` | | Vector | Each value should be an array of integers or floats. Units are optional (more precisely, some vectors require units, and if not provided, the notebook will not run) | `{ "name": "Scale", "type": "vector", "value": [1, 1, 1], "units": "mm" }` | | Enum | Enums refer to any input types selected from a dropdown menu in a block input in nTop. Each value should be an array of integers representing the enum's desired id. You can find the id of your enum in the Internal Documentation. | `{ "name": "Lattice Type", "type": "enum", "value": 0 }` | ## Keywords: *file question type ntopcl input supported* # How to create and enable a Connector for nTop Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-connect/how-to-create-and-enable-a-connector-for-ntop ## Introduction nTop Connect is a concept and framework designed to support plugin development within the nTop environment. It provides a robust platform for partners and customers to create specialized toolkits, known as nTop Connectors, that extend the functionality of nTop. These Connectors enable seamless integration with external tools for tasks such as analysis, meshing, and manufacturing directly within nTop. ## How does a Connector work? nTop includes an internal Toolkit interface to load sets of custom blocks and specialized native blocks for specific purposes (e.g., Lightweighting, Applied Materials, Additive Manufacturing). nTop Connect builds upon this existing Toolkit interface, enabling nTop partners to develop their own toolkits for tighter integration with nTop. Partners can develop their Connector, which, once installed, appears as a toolkit block or blocks within nTop. These toolkit blocks are designed to be integrated into customer workflows, allowing them to run partner software seamlessly through the **Run Command** block. ## Key components of nTop Connector? * **Connector Installer (.msi):** It is strongly recommended that the Connector be packaged as an MSI installer. This allows seamless file copying, registry management, setting environment variables, and adding the toolkit to nTop. The MSI installer ensures that all necessary components are correctly installed and configured. * **Connector Blocks (.ntop):** Connectors operate as Blocks within nTop workflows. Therefore, the custom blocks associated with the Connector must be included in the MSI installer. These blocks integrate with nTop, enabling users to incorporate the Connector's functionality into their workflows. * **Partner Executable (.exe):** Connectors often require external software applications to execute tasks. These applications need to be executables (.exe) so they can be launched by the **Run Command** block within nTop. Typically, these executables are distributed as part of the Connector installer. If the application is already pre-installed, the Connector can be configured to locate the existing installation and update the path during installation. * **Toolkit Configuration File (.json):** The Connector installer must include a toolkit configuration file in JSON format. This file is essential for nTop to load the Connector after installation and restart. It ensures that nTop recognizes and integrates the Connector into its environment. ## Compose the connector notebooks (.ntop) ![A flow chart explaining how an nTop Connector functions.](https://files.learn.ntop.com/help-articles/ntop-connect/50598759798163.png) The functional blocks comprising the functionality of your Connector are nTop notebooks. The flowchart above shows a typical notebook workflow. Our workflow is built around the `Run Command` block, which provides a mechanism to launch a process and run a command-line-based utility. While this is not mandatory, you can develop functionality entirely within the nTop block ecosystem. Most partners will interface with an executable they have written using this block. The only requirements for your notebook: * You must define an output (return) value. * The notebook's title defines the name appearing in the nTop block library once the connector is loaded. * We strongly recommend specifying the notebook's description field, as this will provide the end user with additional context for using your connector's functionality. The image below shows the notebook description for the toolkit block. > > > > > > > > >
    > ![The block description inside the open connector block.](https://files.learn.ntop.com/help-articles/ntop-connect/50598759821715.png) > > ![The block description when the connector is imported into nTop, visible in the right side panel under the information tab.](https://files.learn.ntop.com/help-articles/ntop-connect/50598759842323.png) >
    ## Useful blocks Any block or custom block available in nTop may be used to develop your Connector. Several new blocks will dramatically ease the development process: **Get Environment Variable**, **Await**, **Temporary Directory**, and **Remove Temporary Directory**. When combined with serialization-to-file blocks, ex. **Export Mesh**, you can create a seamless export-import process. ### Get Environment Variable One mechanism to communicate Connector-specific configuration with nTop is to use environment variables. A Connector's installer can set these and then read them using the **Get Environment Variable** block. If the variable is critical to the connector's function, set the *Required* input. The *Rerun* input should contain the variable that, upon completion, will kickstart the run of the **Get Environment Variable** block. ### Temporary Directory / Remove Temporary Directory This creates a directory on disk that can be used to group exported files together. By default, it will put the directory in the current user's temporary directory, like: *C:/Users/\[UserID]/AppData/Local/Temp/nTopology/Working/726ede8f-4c44-4146-9a6a-d1690995fc60* This is useful as it will be dynamically set when the notebook file is moved to a different machine. ### Await The **Await** block can be useful for ensuring that files are written to disk before executing the next function, such as from the **Export Mesh** block. ### Function-Or The **Function-Or** block is a beta feature designed to help connector developers handle optional inputs more flexibly. It allows you to define a function that will be applied when an optional input is present. If the input is provided, the function processes it and returns the result. If not, the block simply returns a specified default value. This enables more robust strategies for managing optional data within connector blocks. ## Develop the executable (.exe) When the Run Command Block runs, it executes command-line instructions to run an external partner software application. This partner application can be delivered in one of the following ways: 1. **Pre-installed Application:** If the partner application is installed and offers sufficient command-line capabilities, the Run Command Block can invoke it directly. In this case, the Connector installer only needs to distribute the relevant nTop files (e.g., Custom Blocks) and the Toolkit configuration (.json) file. The installer should verify and resolve the path to the pre-installed executable during setup. 2. **Packaged Desktop Application:** The partner application can be bundled with the Connector installer and distributed to users. It is recommended that partners implement proper license management to allow customers to try the application before making a purchase. This ensures a smooth user experience while maintaining control over software licensing. 3. **Command-line Client for Cloud Services:** A command-line client must be included with the Connector installer if the Connector is designed to interact with cloud-based services or APIs. The client facilitates communication between nTop and the web application. Authentication can be managed through a graphical user interface (GUI) dialog, command-line prompts for entering user credentials (ID and password), or an API key for seamless cloud access. ## Package the Connector as an MSI Packaging and installation of the connector is left to the partner's preference. We recommend packaging within an MSI for Windows systems for easier organization and use. Only a folder of files with the appropriate structure needs to be moved into the connectors folder for the Connector to be picked up by nTop. The folder should be given a unique name and contain the following: * *connector.json* : file that defines the metadata and structure of the connector. * icons folder : folder that contains SVG icon files. * blocks folder : folder that contains the nTop notebooks that define the connector. ### Icon Guidelines * Graphic * 46x46 pixels with 4px padding * Aligned to the pixel grid * Use 1px weight for standard lines and borders * Never use text, only visual iconography * Colors * Each icon has a light mode and a dark mode version * the dark ribbon color is #333333, RGB (51,51,51) * the light mode ribbon color is #F2F2F2, RGB (242,242,242) ![The nTop ribbon displayed in both light and dark mode.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744600851.png) * Export as SVG * With a transparent background * File Name: * Ensure there are no special characters * Include an underscore between each word *(mesh\_from\_implicit\_body)* * If an icon is for light theme, append \_light (*mesh\_from\_implicit\_body\_light)* ## Connector.json Definition The *connector.json* file connects the toolkit blocks to nTop so they can appear and operate in nTop as regular blocks. This file contains lines of code for the following information: * Plugin information * “display\_name” * “namespace” * Contained blocks * “blocks” * “filename” * “id” * Versioning and deprecation * “version” * “deprecated” * Documentation * “docs” ## Example: PyMeshLab Connector The example below demonstrates how to create and enable an nTop connector. In this example, we will be using a connector called PyMeshLab. This connector contains two different blocks that serve two separate functions. We will break down the construction of one of the blocks, as well as the other components of the connector. To download the files and get started, use this provided link: ## Building a connector nTop file This section explains how to build one of the toolkit blocks to work with your .exe file. As mentioned above, this section will explain how to incorporate some of the new connector blocks. ### Mesh Stats block This block's function starts with an input mesh. This mesh is exported from nTop and then works with the *mesh\_stats.exe* to generate the table. The table of mesh values is then reimported back into nTop. >
    ![A mesh variable block](https://files.learn.ntop.com/help-articles/ntop-connect/50598759895443.png) The input mesh for your workflow.
    ![A list interface list block with a mesh variable listed inside.](https://files.learn.ntop.com/help-articles/ntop-connect/50598759916179.png) Allows you to group inputs of different types if you have multiple inputs.
    ![The Get Environment Variable block Reads the environment variable established by the Connector's installer.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744695571.png) Reads the environment variable established by the Connector's installer. The binaries are still discoverable if the installation is to a non-standard folder.
    ![Using a Concatenate Text block with a Text list to establish the path to the Python binary.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744716947.png) Establish the path to the Python binary using the environment variable referenced earlier.
    ![The Temporary Directory block with the mesh variable inserted. Creates a directory in the temp folder where the work mesh can be exported, worked with, and reimported.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744740371.png) Create a directory in the temp folder where the work mesh can be exported, worked with, and reimported.
    ![Variable created from the path property chip of the Temporary Directory.](https://files.learn.ntop.com/help-articles/ntop-connect/50598760005907.png) Variable created from the path property chip of the Temporary Directory.
    ![A concatenate text block that Creates a file path for the Export Mesh block.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744781331.png) Creates a file path for the Export Mesh block.
    ![Using the concatenate text block to Create a file path for importing the statistics table.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744798611.png) Creates a file path for importing the statistics table.
    ![The Run Command block is used to run the Python script. Before running the script, we have an Await block to make sure the functions are performed in the correct order. Once the mesh is exported, the block runs the script using our previously established paths. By setting the working directory to the temporary folder, we can reference the filenames of the export/reimport mesh files. This allows us to avoid redefining the full path of the reimport JSON dictionary for the Import Mesh block.](https://files.learn.ntop.com/help-articles/ntop-connect/50598760073235.png) The Run Command block is used to run the Python script. Before running the script, we have an Await block to make sure the functions are performed in the correct order. Once the mesh is exported, the block runs the script using our previously established paths.\ >   By setting the working directory to the temporary folder, we can reference the filenames of the export/reimport mesh files. This allows us to avoid redefining the full path of the reimport JSON dictionary for the Import Mesh block.
    ![The await block Waits for the script to run and receive the exit code before importing the mesh stats from the temporary directory.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744851731.png) Waits for the script to run and receive the exit code before importing the mesh stats from the temporary directory.
    ![The import table block Imports the CSV file that contains the mesh stats.](https://files.learn.ntop.com/help-articles/ntop-connect/50598760132755.png) Imports the CSV file that contains the mesh stats.
    ![Removes the temporary directory after the mesh stats have been successfully imported.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744938003.png) Removes the temporary directory after the mesh stats have been successfully imported.
    ![The output of the Mesh Stats block.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744964627.png) The output of this block is the mesh statistics.
    ## Building the connector.json file The image below shows the contents of the connector.json file for the pymeshlab connector. The comments on the right side explain each line of code's function. ![An example JSON file for the connector PymeshLab.](https://files.learn.ntop.com/help-articles/ntop-connect/50598744986515.png) ### Additional JSON Options: These are some strings you can add to your JSON file for additional capabilities that aren't used in this example. **Deprecated Blocks**: If you need to use a deprecated version of a block in your toolkit, you can use this string to enable the deprecated version instead of the current one. Make sure to replace “block name” with your block's name and the “X” with the correct version number and date values. ``` "deprecated": { "message": "block name version X.X.X is now deprecated and removed from the system due to an external library update. Please update the block to the latest version.", "date": "XX/XX/XXXX" } // deprecated is used for a deprecated block ``` **Block Documentation**: If you would like to add a “Learn More” link for your block, you will need to create an HTML file of the information. The HTML file should be placed inside a new folder that can be named “docs”. The folder path should be: ``` C:\ProgramData\nTopology\connectors\connector name\docs The string below is used to link nTop to the HTML file. "docs": { "block id”: “docs/block id.html” } // references block documentation for learn more link ``` ## Setting up folder structure 1. Open your file explorer and navigate to the following folder: \*C:\ProgramData\nTopology\* 2. Create a new folder named *connectors* *![The connectors folder should be created inside the nTopology folder in your file explorer.](https://files.learn.ntop.com/help-articles/ntop-connect/50598745028627.png)* 3. In the connectors folder, create a new folder and name it your connector name. For this example, we have created a new folder named pymeshlab ![Inside the connector folder, create a folder for the connector you are building.](https://files.learn.ntop.com/help-articles/ntop-connect/50598760296083.png) 4. Create a new folder in your connector folder and name it blocks. Then move your connector block ntop files to this folder. 5. Create a new folder in your connector folder and name it icons. Then move your SVG icon files to this folder. 6. Transfer your connector.json file into the pymeshlab folder; it should now look like this: ![Your connector folder should have a folder for blocks and icons, as well as the JSON file.](https://files.learn.ntop.com/help-articles/ntop-connect/50598760332563.png) 7. If you set up your connector correctly, your new toolkit blocks should be under the Connectors tab of the nTop platform. ![Once your connector is set up correctly, the Connectors tab will be present in the nTop user interface.](https://files.learn.ntop.com/help-articles/ntop-connect/50598760355347.png) ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/nTop%20Connect/pymeshlab%20connector%20example.7z) ## Keywords: *variable ntop connect json connector document msi connectors directory environment await pymesh* # nTop Connect FAQ Source: https://docs.ntop.com/help-articles/knowledge-base/ntop-connect/ntop-connect-faq nTop Connect is a plugin framework that allows nTop partners to integrate their software directly into nTop's design and analysis environment. These integrations are packaged as **Connectors**, which appear as custom blocks inside the nTop interface and allow users to run partner applications seamlessly within their workflow. ## Frequently Asked Questions: #### **1.0 Who can use nTop Connect and Connectors?** nTop Connect primarily intends for nTop partners to build and maintain deep integrations between their tools and nTop. However, once a Connector is built, it can be made available to any nTop user, depending on how the partner licenses and distributes it. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **2.0 How do I access a Connector for nTop?** Currently, Connectors are distributed by nTop partners rather than directly through nTop. To get access: * Contact the partner that developed the Connector. * Some Connectors may be free and listed on the upcoming nTop Dashboard or Support site. * Connector installation may require an active nTop license. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **3.0 Where do the executable files for a Connector need to be located?** Connector installers typically handle the installation path for executable files. Developers are encouraged to package Connectors in a portable way and include logic to identify and reference the correct executable paths. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **4.0 How do I update a Connector?** To update a Connector, download and run the latest version of the installer provided by the Connector developer. Connector blocks follow nTop's versioning system, so older and newer versions can coexist in your project if needed. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **5.0 Do Connectors work on Linux?** Currently: * **Windows-based Connectors** can only run on Windows and are not supported on Linux. * **Linux-compatible Connectors** may run in headless mode using **nTop Automate for Linux**, if the partner provides Linux support. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **6.0 How do I find out which Connectors are available?** A public Connector page will be accessible via the nTop Dashboard or Support portal. This directory will allow users to browse available Connectors, learn about their capabilities, and find contact information for the developers. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **7.0 Can I develop a Connector for my own internal use?** Yes. If you're a nTop customer or partner with development resources, you can build private Connectors for internal use. Access to the development SDK and documentation may require enrollment in the nTop Partner Program. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **8.0 Are there costs associated with Connectors?** Some Connectors are free, while others may require a separate license from the developer. nTop does not currently resell or bundle Connector licenses. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **9.0 Is support provided for Connector issues?** Support for Connectors is typically provided by the Connector developer. For installation and compatibility issues related to nTop Connect itself, you can contact nTop Support. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **10.0 What kind of applications can be integrated as a Connector?** Typical use cases include: * Simulation solvers * Mesh generation tools * Manufacturing preparation software * Data processing scripts If your application can be automated or run via CLI/API, it can likely be wrapped as a Connector. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **11.0 Can Connectors include UI elements or dialogs?** Connector blocks are essentially toolkit blocks. Hence, direct access to UI components beyond the toolkit blocks won't be available. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Keywords: *ntop linux connect connector plugin connectors* # Can I run a Topology Optimization with an Orthotropic material? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/can-i-run-a-topology-optimization-with-an-orthotropic-material ## Question: Can I run a Topology Optimization with an Orthotropic material? ## Applies to: * Topology Optimization ## Answer: No, we support orthotropic material models, but we don't support optimizing the materials frame locally. If you permute the material properties, the Top Opt will result in an error regarding improper elastic properties. ## Keywords: *topology question optimization material orthotropic opt top anisotropic* # Can I use more than one objective in a Topology Optimization? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/can-i-use-more-than-one-objective-in-a-topology-optimization ## Question: Can I use more than one objective in a Topology Optimization? ## Answer: While only one optimization objective can be used in a **Topology Optimization**, the objective can comprise multiple design responses. The same results can be achieved as a multi-objective optimization by properly weighting the design responses in a topology optimization. ![The Optimization Objective block](https://files.learn.ntop.com/help-articles/optimization/37501924034067.png) The importance of each objective can be given a weighting factor using the Weights input based on the following equation: ![The equation for calculating the weights input of the Optimization Objective block](https://files.learn.ntop.com/help-articles/optimization/37501875802003.png) The weighting factors *w1* through *wn* are not normalized. If no weights are provided, the optimization objective function includes the design responses with unitless scalar values. ### Properly Weighting Design Responses Responses need to be appropriately weighted for an optimization to run correctly. The two factors to consider when properly weighting multiple design objectives are the sign of the weight and the magnitude. A negative weight will create the inverse effect of a design response. For example, maximizing structural compliance with a negative weight (-1) is equivalent to minimizing structural compliance with a positive weight (1). ![The image shows an example of defining an Optimization Objective block. The example demonstrates how maximizing structural compliance with a negative weight (-1) is equivalent to minimizing structural compliance with a positive weight (1).](https://files.learn.ntop.com/help-articles/optimization/37501924047891.png) The second factor is the magnitude of the weight. This is only important when multiple objectives are being used. The magnitude of the results varies significantly with the type of response. To have each design response equally considered during the optimization, the order of magnitude of the response in the optimization objective should be equal. For example, the magnitude of a **Volume Fraction Response** will vary between 0 and 1; if this design response is combined with a **Stress Response** where the order of magnitude can be 1x10^9, the volume fraction will have a negligible impact on the optimization function. To equalize the importance of each design response, equal weights must be applied to equalize the order of magnitude of the responses. ![An Optimization Objective block with a Volume Fraction Response and a Stress Response. The Volume Fraction has a weight of 1 and the Stress Response has a weight of 1x10^9. This means the Volume Fraction Response has almost no impact on the result.](https://files.learn.ntop.com/help-articles/optimization/37501875817107.png)![An Optimization Objective block with a Volume Fraction Response and a Stress Response. The Volume Fraction has a weight of 1 and the Stress Response has a weight of 1. This means both responses have equal weighting on the result.](https://files.learn.ntop.com/help-articles/optimization/37501924062995.png) If the magnitude of the design responses is unknown, it can be difficult to determine the proper weights. One workflow for estimating the appropriate weights to equalize the magnitude of each response can be found below: ### Estimating Proper Weighting Example 1. Start by running a **Topology Optimization** with equal weighting applied to each objective. For this example, we have two objectives that are being minimized. You only need a few iterations to determine the weight magnitude, so you may encounter this warning when running the block. ![An example Topology Optimization simulation with a warning message. The warning is informing the user that the current number of Max Iterations is not enough to fully converge. They should consider increasing the Max Iterations number for better results.](https://files.learn.ntop.com/help-articles/optimization/37501924066835.png) 2. Review the results of each objective plot in the Display tab of the Right Side Panel. You can click on the plot to expand it into the Bottom Panel for a larger viewing window. ![The gif demonstrates how to view the plot of data for each of the Topology Optimization objectives.](https://files.learn.ntop.com/help-articles/optimization/37501875828883.png) ![The plot of the Structural Compliance objective.](https://files.learn.ntop.com/help-articles/optimization/37501875832211.png) *Plot 1: The first objective for Structural Compliance converges around 1.23e-05 J* ![The plot of the Moment of Inertia objective.](https://files.learn.ntop.com/help-articles/optimization/37501875836563.png) *Plot 2: The second objective for Moment of Inertia converges around 37 mm^2\*g* 3. We can now use the magnitude of the design responses to equalize them in a new optimization objective. The magnitude can be equalized for the two response objectives above by simply weighting the first response with the value of the second response and vice versa. Keep in mind that if one response is to be minimized while the other is maximized, a minus sign needs to be applied to one of the weights. ![The same Topology Optimization setup as previous, but the weight values of the Design Responses have been changed to created a more balanced Topology Optimization result.](https://files.learn.ntop.com/help-articles/optimization/37501875839891.png) 4. Now that the weights have been applied, the results are very balanced compared to the initial TopOpt. ![The plot of the Structural Compliance objective with the new weighting value applied.](https://files.learn.ntop.com/help-articles/optimization/37501924080403.png) *Plot 1: The first objective for Structural Compliance converges around 8e-05 J* ![The plot of the Moment of Inertia objective with the new weighting value applied.](https://files.learn.ntop.com/help-articles/optimization/37501924083091.png) *Plot 2: The second objective for Moment of Inertia converges around 2.2e-04 mm^2\*g* ## Keywords: *list design topology multiple optimization objective response objectives weighting opt top more balance weight* # Field Optimization FAQ Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/field-optimization-faq ## Objective: Understanding new optimization technology available in nTop 3.45 through our beta features ([What are beta blocks?](/help-articles/knowledge-base/user-interface/what-are-beta-blocks)) ## What is happening? A new optimization framework is becoming available in beta in 3.45. This optimization framework is called “Field Optimization,” or FO for short. Built upon nTop's implicit modeling, field-driven design, latticing, and optimization capabilities, FO is a new generative design technology that allows complex geometries, such as lattices, to be optimized at every point. For an overview of Field Optimization, including how it works, capabilities in nTop, and examples, you can watch the video below. [https://www.youtube.com/embed/VOzB9w7deos](https://www.youtube.com/embed/VOzB9w7deos) ## ## Frequently Answered Questions ### 1. Will any of my previous topology optimizations be impacted No, field optimization is a new optimization process that will use many blocks from the existing topology optimization framework. No modifications to existing blocks have been made. ### 2. How do I get access to the field optimization blocks The field optimization blocks will be available through Field Optimization under the beta tab ### 3. Where can I learn about field optimization and/or find example files? Example files are available in the nTop documentation (Block Documentation -> Blocks -> Optimization), which can be easily accessed with the “Learn More” button in the Information tab of the Field Optimization block. Additionally, a support article for running field optimization can be found [here](/help-articles/knowledge-base/optimization/how-to-run-field-optimization). ### 4. How is field optimization different from topology optimization? For Topology Optimization, nTop employs the popular SIMP (Solid Isotropic Material with Penalization) method by computing relative densities of elements in the design space that satisfy a set of objectives and constraints and then filtering those elements based on user input or heuristics. Rather than filtering a mesh based on its value to the optimization problem, Field Optimization uses a custom material model optimization algorithm allowing for many different design parameters (i.e., beam thickness) to be directly optimized. ### 5. How do I optimize a different design parameter? The design variables are determined by the type of Parametric FE Component selected. The currently available Parametric FE Components are for Voronoi lattices, periodic lattices (beam and surface-based), variable shells, and shell+infill optimizations. Additional FE Components will become available in the future, as well as the ability to create custom ones. ### 6. What design responses and constraints are available for Field Optimization? All design responses available for topology optimization can be used in field optimization. The geometric constraints which are not supported by field optimization are the Extrusion Constraint and the Overhang Constraint. ### 7. How do I refine my design if it doesn't look printable? It is recommended to validate the bounds of your design parameters by toggling the visualizability icon of the Parametric FE Component block. The rendered view will be constructed with the initial parameters provided in the block inputs. Adjusting these bounds will help ensure your final model can meet manufacturing restrictions. ### 8. Can I use an existing lattice or shelled geometry as an input into field optimization? Currently, the field optimization pipeline is limited to using the Parametric FE component blocks to generate and optimize your design. ### 9. What is the difference between a Parametric Lattice Component and an FE Lattice Component? An FE Lattice Component is used with simulation analyses to mesh a lattice using beam or shell elements and prepare it for simulation. A Parametric Lattice Component is used in field optimization to set up and optimize a periodic lattice (graph or TPMS) for a given objective. The different components are not interchangeable. ### 10. Does field optimization use homogenization? If yes, how valid do you think the results are given the assumptions you make with homogenization? Homogenization is one technique that correlates design parameters to the mechanical properties used for the field optimization process. However, additional methods/approaches may be used, as is the case with shell optimization. When using a data model which relies on homogenization (like the parametric lattice component), the accuracy will depend on mesh size, the data collected as well as how accurately the homogenization assumptions hold true for the given engineering problem. ### 11. If I use a stress constraint, does it resolve the stresses on the actual geometry? Or is it just using the stress of the background mesh as a proxy? What are the impacts of that behavior on the part? Can you actually claim the design satisfies my stress constraint? The stress constraint does not resolve the stress on the actual geometry, Only the background mesh with the equivalent properties. For this reason, it is important to perform a post-optimization verification on the results to ensure any stress constraints have been met. ## Keywords: *lattice shell infill optimization optimize faq field optimization* # How do I add Gravity as a load case? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-do-i-add-gravity-as-a-load-case ## Question: How do I add Gravity as a load case? ## Applies to: * Simulation * Optimization ## Answer: You can apply a gravity load case by using the **Acceleration Load** block. You can control the direction using the **Vector Field from Components** block. ![The image shows an example for setting up Gravity in an nTop notebook to be used in simulation. The FE Region by Body block defines the region that Gravity is being applied to. The Acceleration Load block applies the defined Vector Field to the FE Region.](https://files.learn.ntop.com/help-articles/optimization/43386813354259.png) ## Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/gravity_example.ntop) ## Keywords: *simulation topology question optimization load gravity acceleration case* # How do I use geometric constraints? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-do-i-use-geometric-constraints ## Question: How do I use geometric constraints? ## Answer: A **Planar Symmetry Constraint** can be added to the constraints list to ensure symmetry in the resulting TopOpt part. It is recommended to use a symmetrical FE Mesh that matches the planar symmetry of the TopOpt constraint, using the Mirror FE Mesh block. Although the design space and TopOpt result will be symmetric when this constraint is used, the boundary conditions do not have to be symmetrical. The **Passive Regions Constraint** specifies a volume in which the topology will not be modified by the TopOpt process. The elements within a passive region will still be considered in the calculations throughout the TopOpt, but TopOpt density will remain 1 there. The **Extrusion Constraint** will produce a TopOpt part that has a consistent profile along the direction of a specified curve. ![The Extrusion Constraint will produce a TopOpt part that has a consistent profile along the direction of a specified curve.](https://files.learn.ntop.com/help-articles/optimization/360070752793.png) The **Overhang Angle Constraint** is explained [here](https://support.ntopology.com/hc/en-us/articles/360060738793-How-to-use-the-overhang-constraint-in-Topology-Optimization). ## Keywords: *mesh list topopt design fe topology symmetry multiple optimization response planar constraint passive objectives structural compliance region overhang extrustion* # How do I use the Remap Constraint for Topology Optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-do-i-use-the-remap-constraint-for-topology-optimization ## Question: How do I use the Remap Constraint for Topology Optimization? ## Applies to: * Remap Constraint * Topology Optimization ## Answer: The **Remap Constraint** block can generate novel geometry with **Topology Optimization** in nTop. It enforces geometry-based constraints on the design space by leveraging nTop's unique ability to manipulate scalar and vector fields. The block is named after the **Remap Field** block that follows a similar technique to perform geometric operations on implicit bodies like shape transformation, mirroring, sectioning, patterning, surface extrudes, and many more applications. Here's an example of a weave pattern generated from cylindrical wires with the **Remap Field** block. ![An example of using Remap Field to turn a flat grid of lattice into a woven grid.](https://files.learn.ntop.com/help-articles/optimization/34666558723987.png) While the **Remap Field** block can be used to create geometric projections by manipulating scalar fields from implicit bodies, the **Remap Constraint** block can utilize these projections to constrain the density field of the design volume in an optimization problem. This enables users to impose geometry-based constraints such as extrusion, pattern repetition, and symmetry, combine these constraints or invent a novel constraint that results in an optimized geometry unique to nTop! We recommend that you learn a little about signed distance fields, the inputs of the **Remap Field,** and the mechanism behind the geometric projections it enables to use the **Remap Constraint** effectively. [This knowledge base video](https://support.ntopology.com/hc/en-us/articles/4408249667731) and a [learning center course](https://learn.ntopology.com/intermediate-field-driven-design) cover these topics in great detail, which will be summarized in the next few paragraphs. ## Remap primer All implicit bodies in nTop are represented as fields called 'signed distance fields.' These fields are generated by signed distance functions which are equations that usually represent geometry. For instance, the signed distance function of a sphere of radius 'r' at the origin of an orthogonal space is : ![remap equation.png](https://files.learn.ntop.com/help-articles/optimization/34667131880723.png) ![A diagram of a circle, showing how signed distance fields associate values.](https://files.learn.ntop.com/help-articles/optimization/34667131882899.png) This function evaluates a negative value at every point in space within the sphere and a positive value at every point outside. The sphere's surface, where the function is 0, is the implicit representation of the sphere. To perform a geometric operation on this sphere, you can manipulate the x, y, z components of this function using the **Remap Field** block. For instance, to stretch the sphere in the x direction by twice its original length, we can substitute the 'x' term in the **Remap Field** input by 'x/2' ![The Remap Field block with a sphere block inserted in the Scalar Field input. The X input contains the equation x/2, y contains y, and z contains z.](https://files.learn.ntop.com/help-articles/optimization/34667131887507.png) ![Using the equation x/2, the Remap Field block converts a sphere into an ellipsoid by changing its field.](https://files.learn.ntop.com/help-articles/optimization/34667115989651.png) This essentially modifies the field defined by equation f to g to generate an implicit ellipsoid : ![remap equation g.png](https://files.learn.ntop.com/help-articles/optimization/34667131893139.png) ![A diagram of an ellipse, showing how signed distance fields associate values.](https://files.learn.ntop.com/help-articles/optimization/34667131895187.png) Besides implicit bodies, visualizing the field generated by each component (x, y, and z) can be used to predict the final state of the implicit body when an operation is performed on a component. In the case of the sphere-to-ellipsoid transformation, the field generated by the x component is stretched (by two times its original value) with the x/2 input in the **Remap Field** block. Let's take another example where the x component of the **Remap Field** input is modified with an **Abs**() block. The **Abs**() block outputs the absolute value of a numerical input. Hence the x component will turn into a symmetric signed distance field with positive values on either side of the yz-plane (x=0), as illustrated by the following images. ![An Abs block with x in its Operand input.](https://files.learn.ntop.com/help-articles/optimization/34667131897107.png) ![Two field visualizations side by side. The left field is of x component. The right field is of Abs(x).](https://files.learn.ntop.com/help-articles/optimization/34667131899923.png) As a result of this field modification, any object created on the right side of the yz-plane will be mirrored to its left side, like the sphere shown in the image above. This concept can be extended to **Topology Optimization** using the **Remap Constraint**. We can use the **Abs** function with any orthogonal components to impose symmetry on the density field generated by the **Topology Optimization**. ## Examples: #### **1. Remap Constraint for Symmetry** Here is an example of topology optimization with symmetry on the yz-plane (x component) and the xy-plane (z component) enforced by a remap constraint. The equation gives the input to the remap block: ``` g(x,y,z) = (Abs(x),y,Abs(z)) ``` > [!TIP] > > *Tip: Check the orientation of your part before running the Remap Constraint to the global axes.* *![The Remap Constraint block with an Abs block in its X input, a value of y in its Y input, and an Abs block in its Z input. The Abs block in the x input, has x in its Operand input. The Abs block in the Z input, has z in its Operand input.](https://files.learn.ntop.com/help-articles/optimization/34667116008211.png)* ![A gif showing a body being optimized in Topology Optimization. A Remap Constraint block is used in the optimization to control symmetry in the resulting body.](https://files.learn.ntop.com/help-articles/optimization/34667131905939.png) Besides the **Remap Constraint** block, this **Topology Optimization** setup has the following features that yield the final optimized volume : * A minimize **Structural Compliance** objective for a set of loads at the holes on the sides with the hole at the center completely restrained. * A **Volume Fraction Constraint** that keeps the volume of the optimized geometry under 25% of the original design volume. * A **Passive Region Constraint** that prevents material removal from the hole at the center. [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/Remap%20Constraint%20Symmetry%20Example.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **2. Remap Constraint for Extrusion** Here is an example of a Topology Optimization where the **Remap Constraint** block maintains a consistent profile along the user-defined direction. This constraint is similar in function to the **Extrusion Constraint** block for Optimization. The simplest way to implement this is to set the component input in the desired direction to 0. This will ensure that the field values are constant in the direction normal to the x=0, i.e, the yz-plane. The equation below can represent the input to the **Remap Constraint** block: ``` g(x,y,z) = (0,y,z) ``` > > > > > > > > >
    > ![The Remap Constraint block with 0 in its X input, y in its Y input, and z in its z input.](https://files.learn.ntop.com/help-articles/optimization/34667116013843.png) > > ![A gif showing how a Remap Constraint block is used to maintain a consistent profile along the yz plane when used in Topology Optimization.](https://files.learn.ntop.com/help-articles/optimization/34667116015763.png) >
    Although these remap inputs work well to produce extrudable geometries in simpler profiles, the general approach to imposing an extrusion constraint with the **Remap Constraint** block is detailed in Example 4. It possesses several advantages and is qualitatively better than the approach used for this example. More on this in Example 4 [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/remap_extrusion.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **3. Remap Constraint for combining multiple geometric constraints** An essential feature of the **Remap Constraint** block is the ability to combine multiple geometric constraints in a Topology Optimization. In this example, we have applied an **Extrusion Constraint** to the z direction and a **Symmetry Constraint** in the yz- and xz- planes with the **Remap Constraint** block by combining the inputs discussed in the previous 2 examples. The equation below can represent the input to the remap constraint block: ``` g(x,y,z) = (Abs(x),Abs(y),0) ``` > > > > > > > > >
    > ![The Remap Constraint block with an Abs block in its X input, an Abs block in its y input, and a 0 in its Z input. The Abs in the x input has an x in its Operand input. The Abs in the Y input has a y in its Operand input.](https://files.learn.ntop.com/help-articles/optimization/34667131918483.png) > > ![A gif showing how a Remap Constraint block is used to combine multiple geometric constraints when used in Topology Optimization.](https://files.learn.ntop.com/help-articles/optimization/34667116019347.png) >
    [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/remap_multiple_constraints.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **4. Remap Constraint for Localized Ribbing** Another essential feature of the **Remap Constraint** block is to localize a geometry constraint to a user-defined region. In this example, we have optimized a motorcycle swingarm with Topology Optimization to improve the strength-to-weight performance. The **Remap Constraint** block was utilized to apply a localized extrusion constraint to generate ribs. This would enable the swingarm component to be manufacturable through non-additive methods such as casting. > > > > > > > > >
    > ![A motorcycle component assembly containing two swingarms.](https://files.learn.ntop.com/help-articles/optimization/34667116021267.png) > > ![One of the motorcycle swingarms that will be used for the Topology Optimization.](https://files.learn.ntop.com/help-articles/optimization/34667131924499.png) >
    ![A diagram showing how to recreate the equation being used in this example for the Remap Constraint block.](https://files.learn.ntop.com/help-articles/optimization/34667116027667.png) Unlike the previous examples, the **Extrusion Constraint** has been implemented using a generalized form that the equation can describe: ``` g(x) =x - (s(x)+w).∇s(x) ``` This generalized form allows the **Remap Constraint** block to determine the extrusion direction based on optimized surface normals of the design volume. We can decompose the equation into the following parts to understand how this is implemented : * **x** represents the position vector of all points in the orthogonal space (x,y,z). * **s(x)** represents the surface, the signed distance field to the reference surface from which we extrude. This is usually an implicit surface extracted from the geometry being optimized. A value of w is added to ensure that the remapped field is within the user-defined design space being optimized. * **∇s(x)** (the surface gradient, s) extracts the vector field representing the extrusion profile's surface normal. Multiplying this by s(x) (the scalar field of the implicit surface) produces a vector field that projects any point, x, back to this surface. Ultimately, we use the remap block to extract a field with a constant value and direction determined by the extrusion surface. This field can also be generated by a proxy surface that lies within the cross-sectional area of the optimized design volume. Here's a field viewer visualization of remapping a noise field (left) using the equation with a cylinder as the surface. ![The noise field (left) is remapped to the field (right) with a constant value in the surface in the normal direction of the cylinder](https://files.learn.ntop.com/help-articles/optimization/34667131928595.png) The noise field (left) is remapped to the field (right) with a constant value in the surface in the normal direction of the cylinder. There are several benefits to using this generalized approach as opposed to the simplified approach described in previous examples (Examples 2 & 3), a few of them being : * The ability to apply multiple extrusion directions in the same optimization. * The ability to utilize non-planar extrusion surfaces in the optimization problem. In addition to the Remap constraint, the optimization setup in this example has the following inputs : * An objective is to minimize the compliance of the model for a set of boundary conditions * A volume fraction constraint to keep the volume of the optimized volume under 50% of the initial volume. The following animation illustrates the final shape of the design with extrudable features that maximize the stiffness of the model: ![A gif showing how the swingarm is optimized using the Remap Constraint block in Topology Optimization.](https://files.learn.ntop.com/help-articles/optimization/34667131931283.png) [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/remap_localized_ribbing.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Keywords: *field topology question optimization constraint remap remapping* # How to create Custom Field Optimization Component with a Custom Graph Unit Cell Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-create-custom-field-optimization-component-with-a-custom-graph-unit-cell ## Objective: Creating Custom Field Optimization Component with a Custom Graph Unit Cell ## Applies to: * Field Optimization ## Procedure: This article uses nTop Automate, Topology Optimization, and Field Optimization. Here is a list of resources that are suggested pre-requisite before going through the article. * [nTop Automate Learning Center course](https://learn.ntopology.com/ntopcl-course/) * [Topology Optimization Learning Center course](https://learn.ntopology.com/topology-optimization-intro) * [“How To Run a Field Optimization” support article](/help-articles/knowledge-base/optimization/how-to-run-field-optimization) Before we begin going through the article, we recommend you download the files that are needed to follow along from [here](https://ntop.box.com/s/teja7bm3dl3lq79efczh2xc04xdfxz5y). We recommend you create a new folder, as we will create multiple files and run scripts. We should place all the files and scripts in the same folder. ## Table of Contents ## [1. Generate Custom Unit Cell](#h-01h01nageqqq1sj366yp7dex7p) ## [2. Gathering Homogenization Data](#h-01h01qkmaj3vsw1rmdq6vybybj) ## [3. Creating Parametric FE Component](#h-01h01scxa6sa1prndra9mxpp2f) ### [3.1. Updating the Material Model](#h-01h01se8p6jnbffr2dhs1gph0q) ### [3.2. Updating the Porosity Function](#h-01h01tmw5z23t8k7w9nnbcm286) ### [3.3. Updating the Geometry Function](#h-01h01tpaqgpj79zed4mrd9n1bt) ### [3.4. Updating the Parametric Lattice Component](#h-01h01tq5g1p4q2nv4fcdbrf8dv) ## [4. How to Use Custom Parametric Lattice Component](#h-01h01tvj72rfbt7ba29je1nedz) ### 1. Generate Custom Unit Cell We will start by generating a custom unit cell to be used as part of your field optimization workflow. > [!NOTE] > > *Note: This Support article covers graph unit cells only.* 1. Following the [support article](/help-articles/knowledge-base/lattices/how-to-build-a-custom-lattice-unit-cell), you can generate your Custom Graph Unit Cell. For this example, you can download the “custom\_graph\_unit\_cell.ntop” file as a starter file and change the *Line Segments* and *Domain* input if you wish to change. We need to ensure that the unit cell is periodic. 2. Save and close the file. ![A Custom Unit Cell block with a Graph from Line Segments block inside. The unit cell is defined by a bounding box shown in the viewport.](https://files.learn.ntop.com/help-articles/optimization/16564846808979.png) ### 2. Gathering Homogenization Data In this section, you will be using nTop Automate to run a series of homogenization. The homogenization data will be used in the field optimization process. For more information, see [Field Optimization FAQ](https://support.ntopology.com/hc/en-us/articles/15280003943571) 1. Open "homogenize\_periodic\_lattice.ntop" from the downloaded files. 2. Import the custom unit cell ("custom\_unit\_cell.ntop") generated in the previous step. * Click the Show Left Bar icon on the Top-Left corner next to the Hamburger icon. * Switch to the Imports tab, then click the Import Block. * Select the "custom\_unit\_cell.ntop" from the File Explorer. 3. Drag and drop the unit cell into the unit cell variable ![The custom graph unit cell being imported into the nTop notebook. The imported unit cell is inserted into the Unit Cell variable block.](https://files.learn.ntop.com/help-articles/optimization/16564984642195.png) 4. Save and close the file. 5. Open "run\_data\_collection.py" in a Python IDE. We recommend downloading one of the following free software: * [Thonny](https://thonny.org/) (recommended for beginners) * [Spyder](https://www.spyder-ide.org/) * [Visual Studio Code](https://code.visualstudio.com/) Examples in this article are done using [Visual Studio Code](https://code.visualstudio.com/) ![The run\_data\_collection.py file open in Visual Studio Code.](https://files.learn.ntop.com/help-articles/optimization/16565128769555.png) > [!NOTE] > > *Note: Ensure the file "homogenize\_periodic\_lattice.ntop" is in the same directory as "run\_data\_collection.py."* > 7\. Enter the number of discretizations over the Poisson ratio and thickness you would like and run the Python script. The lines of code to adjust are annotated below: Lines 43 and 44 in the provided code replace the bounds and number of discretizations for the parameter sweep. The variables corresponding to the values are listed below: > [!NOTE] > > *Note: The minimum number of discretizations for thickness should be at least five but ideally greater than 10.* > **Parameter1\_all = np.linspace(min thickness/cell size, max thickness/cell size, number of steps)** > **Poisson\_ratio\_all = np.linspace(min poisson ratio, max poisson ratio, number of steps)** > [!NOTE] > > *Note: The Poisson ratios should include that of your intended printing material. Example code is seen below:* ``` parameter1_all = np.linspace(0.05, 1.5, 2) poisson_ratio_all = np.linspace(0.1, .4, 2) ``` 8. After running the Python script, a “combined.csv” file with values should be available in the file directory where the Python program was run. Warning: The **combined.csv**, as well as the individual **\*.csv** files in the "Result\_Data" folder *,* must be deleted before running the script with different settings or for a different unit cell to prevent it from appending. ### 3. Creating Component In this section, we will create the custom lattice component to be used as a **Parametric FE Component** block in field optimization workflows. #### 3.1. Updating the Material Model 1. Open “lattice\_material.nTop” from the downloaded files. 2. Import the “combined.csv” using the **Import Table** block generated in the previous section and drag it into the “data sheet” variable. *Note: do not unselect the “header” option. A warning will appear; that is due to the header, and it is okay to ignore it.* 3. Save and close the file (“lattice\_material.ntop”). ![An Import Table block is added into the Datasheet variable. The combined.csv file is then imported through the Import table block.](https://files.learn.ntop.com/help-articles/optimization/16565904110483.png) #### 3.2. Updating the Porosity Function 1. Open “lattice\_porosity.nTop” from the downloaded files 2. Import the “combined.csv” using the **Import Table** block generated in the previous section and drag it into the “data sheet” variable. *Note: do not unselect the “header” option. A warning will appear; that is due to the header, and it is okay to ignore it.* 3. Save and close the file (“lattice\_material.ntop”). #### 3.3. Updating the Geometry Function 1. Open “lattice\_geometry.ntop” from the downloaded files. 2. Click the Show Left Bar icon on the Top-Right corner next to the Hamburger icon. * Switch to the Imports tab, then click the Import Block. * Select the "custom\_unit\_cell.ntop" from the File Explorer. * Drag and drop the unit cell into the unit cell variable 3. Import “lattice\_porosity.ntop” from the previous section and drag it into the “Lattice porosity” variable 4. Delete default inputs from the imported **“Lattice Porosity”** block and drag “vars” and “Optionals” variables into respective inputs. 5. Save this file as “lattice\_geometry.ntop” ![Import the custom\_unit\_cell.ntop file and insert it into the Unit Cell variable block. Import the lattice\_porosity.ntop file and insert it into the Lattice porosity variable block. The default scalar field list blocks are deleted from the vars and optionals inputs of the Lattice Porosity block. Insert the notebook variable vars and Optionals blocks into the Lattice porosity block.](https://files.learn.ntop.com/help-articles/optimization/16566157176083.png) #### 3.4. Updating the Parametric Lattice Component 1. Open “parametric\_lattice\_component.ntop” 2. Import the following from the previous sections using the Import Block option from the Imports tab on the Left bar. * lattice\_geometry.ntop * lattice\_porosity.ntop * lattice\_material.ntop ![Importing the lattice\_geometry.ntop , lattice\_porosity.ntop , and lattice\_material.ntop blocks.](https://files.learn.ntop.com/help-articles/optimization/16566268307731.png) 3. Right-click on each of the imported blocks and click “Create Function Object” ![The sub menu that appears when right clicking the Lattice Material custom block. The Create Function Object option is highlighted.](https://files.learn.ntop.com/help-articles/optimization/16506729139475.png) 4. In the notebook, drag each newly created function object into its respective variable and Delete three imported blocks from the notebook. ![The notebook shows the 3 newly created function object blocks.](https://files.learn.ntop.com/help-articles/optimization/16566262811923.png) 6. Rename the notebook to how you would like to refer to this custom graph component in Field Optimization workflows Ex. “Parametric FCC Component” 7. Save the file as “my\_parametric\_component.ntop ” ### 4. How to Use Custom Parametric Lattice Component You can now import “my\_parametric\_component.ntop” into any ntop file and use it as a parametric component in Field Optimization, similar to the **Parametric Lattice Component** block. ![The my\_parametric\_component.ntop file imported into nTop and the resulting lattice structure.](https://files.learn.ntop.com/help-articles/optimization/16566326104595.png) > [!NOTE] > > *Note: The accuracy of the results will depend on the number of data points and the range of data used during the DOE/Parameter sweep. Example files for field optimization are available in the “*[*How to Run a Field Optimization*](https://support.ntopology.com/hc/en-us/articles/15022831283475)*” support article. As well as in the nTop documentation (available through Learn More).* Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Example Files * [Follow Along Files](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/Custom%20Graph%20Unit%20Cell%20for%20FieldOpt%20Files.zip) # How to define a passive region for optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-define-a-passive-region-for-optimization ## Question: How do I create a passive region for running a Topology or Field Optimization? ## Applies to: * Topology Optimization * Field Optimization ## Answer: A passive region during optimization is defined as a region that will remain constant and not change during topology optimization. The region will remain solid for optimization with the default initial value, and mesh elements contained in a regional constraint will remain regardless of thresholding. By utilizing an initial value field for a topology optimization, users can also ensure some areas remain void, solid, or void/solid depending on the selected thresholding value at the end of the topology optimization. For field optimization, the density value of the mesh element is not affected by the passive region, as there is no thresholding occurring; instead, the selected design variable will remain constant throughout the optimization process. For example, an area of a parametric Voronoi component that is included in a passive region constraint will keep the “initial cell size” and “initial beam thickness” throughout each iteration, and only the cells outside of the region will have their parameters changed to achieve the objectives/constraints. > [!NOTE] > > **Note: This workflow will not cover setting up an optimization workflow. It only covers setting up a passive region in both optimization scenarios. To learn how to run an optimization, we first recommend reviewing the following articles:** * [**How to run a topology optimization**](/help-articles/knowledge-base/optimization/how-to-run-a-topology-optimization) * [**How to run field optimization**](/help-articles/knowledge-base/optimization/how-to-run-field-optimization) Different approaches are required for field and topology optimization to preserve solid topology throughout optimization. They are detailed below: ## Preserving Solid Geometry in Topology Optimization: For Topology Optimization, we use the **Passive Region Constraint** block. This block requires you to define a region that overlaps with the body being optimized. In the example below, mounting holes from the original CAD body have been thickened using a **Thicken Body** block. The extra material this creates will prevent the Topology Optimization from removing necessary material around the holes. Once the Topology Optimization is complete, you can see that the defined area is unaffected. ![This example shows how implementing a Passive Region Constraint prevents any optimization from removing necessary material from the model.](https://files.learn.ntop.com/help-articles/optimization/25018241507347.png) ## Preserving Solid Geometry in Field Optimization: For Field Optimization, the **Passive Region** block maintains initial design variables. For passive (solid) regions, we must instead use an additional component and tie them together with a constraint. For the solid region, we can use an **FE Solid Component**, and for the area to be optimized, we can use one of the available “Parametric FE Components” such as Voronoi, lattice, or shell. The example below consists of a robotic arm frame we want to keep solid and a central area we want to optimize. We need to create a component and a boundary for each entity. The central area is defined by a **Parametric Lattice Component (Beta)** and an **FE Boundary by Body** block. This isolates the specific region that we want to become the optimized lattice. An **FE Component** and an **FE Boundary by Body** block define the frame. This keeps the frame solid and separate from the lattice region. These two bodies are combined under the **Parametric FE Model (Beta)** block. The components are listed under the **Parametric FE Components List (Beta)**, while the last step is to insert a **Tie Constraint** block under the input of the connector. This block ties the two boundaries together and establishes a relationship between them. Once the Field Optimization is complete, you can see that only the lattice region was affected. ![An example setup for utilizing a Passive Region Constraint in Field Optimization.](https://files.learn.ntop.com/help-articles/optimization/24854214732819.png) And that's it! You've successfully created passive regions! Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Topology Optimization Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/passive_region_topopt.ntop) * [Field Optimization Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/field_optimization_passive_region_example.ntop) ## Keywords: *field topopt topology optimization topology question optimization passive region field optimization passive region FO* # How to run a topology optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-run-a-topology-optimization ## Objective: Learn how to run a topology optimization. ## Procedure: ## **What is Topology Optimization?** Topology Optimization (TopOpt) is a numerical design operation that determines the optimal shape of a part based on a set of performance objectives and constraints. This lets you generate optimized, lightweight designs that meet specific engineering requirements. This guide walks through the complete workflow for designing a lightweight bracket with minimum structural compliance (maximizing stiffness) ## **What You'll Learn** * [How do you prepare a CAD part and FE mesh for TopOpt?](#h-01k1gheyr35fzzeezetra6xq46) * [How to set up a simulation model with boundary conditions.](#h-01k1gheph7wy473g3k0mf6ndvn) * [How to define TopOpt objectives and constraints.](#h-01k1ghsrp3w30z33kpg1kep47q) * [How to run the optimization and interpret the results.](#h-01k1ghw04p5wccxkknv9b701sn) * [How do we post-process the results into a final part?](#h-01k1ghyyerv0y8dcfavr5f6haj) ![A diagram showing an imported part, how the part looks after running it through a Topology Optimization simulation, and the Final Part after the Topology Optimization simulation and post processing.](https://files.learn.ntop.com/help-articles/optimization/360060726373.png) ### **Step 1: Prepare the Design Space and Material** First, we need to define the maximum possible volume for our part, known as the **Design Space**. TopOpt works by removing material, so starting with a part with excess material to work with is essential. 1. Import your starting CAD part. In this example, we use a rectangular block with three holes. 2. Create variables from the CAD geometry. This makes them easy to reference later. * **Design Space:** The entire CAD Body. * **Restrained Faces:** The faces of the two outer holes. * **Loaded Face:** The face of the center hole. * **Interfaces:** All three hole features will be kept in the final design. 3. Define the material properties. For this bracket, we'll use an **Isotropic Elastic Property** with a Young's modulus of `2.1e+11 Pa` and a Poisson's Ratio of `0.33`. ### **Step 2: Create the Simulation Model** Follow [this article](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) to create an FE Volume Mesh from the Design Space. * Create an **FE Volume Mesh** from the **Design Space** CAD part. An `3 mm` edge length with a Geometric Order of `Linear` is suitable for this example. * Create a **Simulation Model** using the **FE Volume Mesh** and the **Material** defined in the previous step. Follow [this article](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) to create a Simulation Model using the Material and FE Mesh from the steps above. ![An example simulation model setup in nTop and the resulting body.](https://files.learn.ntop.com/help-articles/optimization/41634567518483.png) ### **Step 3: Define Boundary Conditions** Use [this article](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) for reference when creating Boundary Conditions. In this example, we want a Force acting on the middle face and a Displacement Restraint acting on the two outer faces. **Displacement Restraint:** * Add a **Displacement Restraint** block * Input the **Restrained Faces** as the *Boundary* input **Force:** * Add a **Force** block * Input the **Loaded Face** as the *Boundary* input * Set the *Vector* to (0, 1000, 0) N ### **Step 4: Set Up and Run the Topology Optimization** Now we can define the rules for the optimization. #### **Define the Objective** The objective is what property, or 'design response,' we hope to minimize or maximize within our part. nTop supports several design responses, including structural compliance, volume fraction, displacement, and stress. Use the **Optimization Objective** block to specify the design response(s). In this example, the objective is to minimize structural compliance. * Add a **Structural Compliance Response** block * Insert the **Displacement Restraint** and the **Force** block from the last step * Add an **Optimization Objective** block * Set the goal to Minimize * Insert the **Structural Compliance Response** into the Design Response List ![Two nTop blocks are shown in the image. A Structural Compliance Response block that contains two Boundary Conditions. The second block is an Optimization Objective block with the Structural Compliance Response populated in its Responses input.](https://files.learn.ntop.com/help-articles/optimization/41634553876755.png) #### **Define the Constraint** Topology optimization also requires the user to provide constraints. An under-constrained TopOpt process will simply fill in or remove all volume from the design region because those results lead to minimization or maximization of the design response. Therefore, TopOpt procedures must be properly constrained in order to achieve meaningful results. The most commonly used constraint simply applies a minimum or maximum bound to a design response, such as compliance, volume fraction, displacement, or stress. This TopOpt example is constrained such that the volume fraction of the final part is less than 0.2. In other words, the resulting optimized part will have a targeted volume of 20% of the whole design space. Notice that the volume fraction cutoff in the **Design Response Constraint** block is made into a variable for easy adjustment. * Add an **Optimization Constraint List** block * Insert a **Design Response Constraint** block * Insert a **Volume Fraction Response** block into the Response input * Set the value to 0.2 * Optional: Right-click on the Value input to create a variable to quickly change the Volume Fraction ![A volume fraction scalar variable with the value set to 0.2. The variable has been inserted into the value input of a Design Response Constraint block.](https://files.learn.ntop.com/help-articles/optimization/41634553887251.png) #### **Run the Optimization** * Add a **Topology Optimization** block, * Insert the Simulation Model, Objective, and Constraints The rest of the inputs can be left as default for this example. More information on these settings can be found in the block's information panel and in [this article](/help-articles/knowledge-base/optimization/understanding-the-optimization-settings). After completion of TopOpt processing, a window pops up in the Viewport with several options for visualizing the results. ![A Topology Optimization block with the resulting body shown next to it after running the simulation.](https://files.learn.ntop.com/help-articles/optimization/41634567544211.png) The TopOpt process works by assigning a value between 0 and 1 to all of the mesh elements. Higher values are assigned to elements that most effectively contribute to the optimization objective. These values are referred to as the TopOpt density. For example, an element in the bottom corner of the design space, far away from the applied load, is given a density value close to 0 because placing material here does not contribute to the goal of minimizing structural compliance. On the other hand, elements close to the loaded center hole are given a density value close to 1 because having material there is necessary to support the load. The **Thresholded Elements** option in the TopOpt viewing window lets the user see what density values have been assigned to all elements in the design space. Use the **Threshold** slider to only view elements with a value higher than the specified threshold. ![A gif showing the Topology Optimization result. The gif shows how the body changes as the Threshold slider value is adjusted. The HUD view option is set to Thresholded elements.](https://files.learn.ntop.com/help-articles/optimization/360060530293.png) The **Iso-contour** view shows a single surface interpolated from all elements with TopOpt density values close to the specified threshold. ![A gif showing the Topology Optimization result. The gif shows how the body changes as the Threshold slider value is adjusted. The HUD view option is set to Iso-contour.](https://files.learn.ntop.com/help-articles/optimization/360059626074.png) The **Iteration** slider allows you to see the evolution of the TopOpt throughout the optimization iterations. ![A gif showing the Topology Optimization result. The gif shows how the body changes as the Iteration slider value is adjusted. The HUD view option is set to Iso-contour elements.](https://files.learn.ntop.com/help-articles/optimization/360059626254.png) ### **Step 5: Post-Process the Results into a Final Part** Once you have inspected your TopOpt results and found an acceptable threshold value, we can convert them into an Implicit Body. **Convert to an Implicit Body:** * Add an **Implicit Body from Topology Optimization Results** block * Input the **Topology Optimization** block * Set the Threshold value to 0.5 (it may be different depending on your preference) **Smooth the Raw Output:** The raw TopOpt output has artifacts on its surface from the mesh that can be removed using the **Smoothen Body** block. The surface artifacts are roughly the size of the FE mesh size, so to capture and remove them, a smoothing grid size of half the mesh size is used in the **Smoothen Body** block. This is done using a **Divide** block. * Add a **Smoothen Body** block. * A good **Grid Size** for smoothing is half the FE mesh edge length. Use a **Divide** block with the mesh edge length (`3 mm`) as Operand A and `2` as Operand B. ![The resulting Topology Optimization body is converted to an implicit body. A Smoothen Body block is used to smoothen the result. This body is shown next to the notebook blocks.](https://files.learn.ntop.com/help-articles/optimization/360104618953.png) #### **Consolidate the Part** The topology-optimized volume is now ready to be recombined with the interfaces of the original CAD geometry. This step will look different depending on your part. If you are following along, do this: * Add an **Implicit Body from CAD Body** block * Insert the Interfaces (all three CAD faces from Step 1) * Add a **Thicken Body** block * Insert the **Implicit Body from CAD Body** block * Set the Thickness to 2 mm * Add a **Boolean Union** block * Delete the auto-generated list and input the **Thicken Body** block ![The CAD Faces of the 3 holes from the original CAD part, are converted to implicit bodies. A Thicken Body block is used to thicken the walls. A Boolean Union block is used to merge them into a single implicit body.](https://files.learn.ntop.com/help-articles/optimization/360104619433.png) * Add a **Boolean Union** block * Input the Smoothened TopOpt and the Interface Bodies * Set the Blend radius to 2 mm (to keep the transitions between bodies congruent) ![Using a Boolean Union block to combine the 3 hole implicit body with the Smoothened Implicit Body result of the Topology Optimization.](https://files.learn.ntop.com/help-articles/optimization/1500003561062.png) Finally, use a **Boolean Intersect** to trim any excess material. Intersect the result from the previous step with an **Implicit Body from CAD Body** of the original **Design Space**. * Add a Boolean Intersect block * Input the TopOpt and Interfaces boolean union * Input an Implicit Body from CAD Body block * Input the Design Space ![Using a Boolean Intersect block to remove unwanted material and create the final part.](https://files.learn.ntop.com/help-articles/optimization/360102442254.png) And that's it! You've successfully performed a Topology Optimization. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/topology_optimization_example.ntop) ## Keywords: *mesh boundary body topopt smoothen how to design fe topology model optimization objective constraint condition threshold space process HUD penalty post iso contour* # How to run field optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-run-field-optimization ## Objective: Learn how to run a field optimization. ## [1. Creating a Parametric FE Model](#01gw0ahxscnv0fgp8dbsjynsyk) ## [2. Define the Objective](#01gw0acqjrb22jr8pkyhxnrmp4) ## [3. Define the Constraint](#01gw0acqjr6yvhh1m2r53jjpx0) ## [4. Run the Field Optimization](#01gw0acqjr975s8yq2sbxq4s0x) ## [5. Field Optimization Post-Processing](#01gw0acqjry8pa0qzkm37r0g0j) ## Procedure: **What is Field Optimization?** Field optimization is a numerical design operation that optimizes design parameter values within the bounds of a design space (based on a set of objectives and constraints). Field optimization allows the user to run an optimization algorithm on specific parameters, such as lattice or shell thickness, to achieve the best geometry for the desired objective (while considering complex and multivariate design constraints). Before starting with field optimization, we have two requirements: **FE Volume Mesh** and **Boundary Conditions (BCs)** to apply the Constraints. Follow the instructions in the links below to prepare your model for field optimization. **FE Mesh** * How to create an FE Volume Mesh **Boundary Conditions (BCs)** * How to choose boundaries of an FE Mesh - FE Boundary by Body * How to Use Boundary Conditions * How to use a CAD Face in a boundary condition #### **1. Creating a Parametric FE Model** Follow this link to learn about [FE Models](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) and how to create them. The Parametric FE Model would need one of the Parametric Domains as an input. ![The Parametric FE Model block showing the available block options for its Parametric FE Domain input.](https://files.learn.ntop.com/help-articles/optimization/41632472071059.png) **What Parametric Domains are available?** 4 Parametric Domains could be used as an input to the Parametric FE Model. You would have to choose a domain based on what you wish to optimize and achieve. You can learn more about each domain and how it is parameterized by clicking the Learn More link on the block. >
    **Parametric Domain** **Visual Representation** **Design Parameters** **Field Optimizable Design Parameters**
    Parametric Lattice Domain ![A Parametric Lattice Domain example](https://files.learn.ntop.com/help-articles/optimization/15051813212691.png) Unit Cell, Boundary Behaviour, Cell Size
    • Min and Max Thickness
    Parametric Shell Domain ![A Parametric Shell Domain example](https://files.learn.ntop.com/help-articles/optimization/15051706198035.png)  
    • Min and Max Shell Thickness
    Parametric Shell-Infill Domain ![A Parametric Shell-Infill Domain example](https://files.learn.ntop.com/help-articles/optimization/15051937444243.png) Unit Cell, Cell Size
    • Min and Max Infill Thickness
    • Min and Max Shell Thickness
    Parametric Voronoi Domain ![A Parametric Voronoi Domain example](https://files.learn.ntop.com/help-articles/optimization/24988950266003.png)  
    • Min and Max Cell Size
    • Min and Max Thickness
    Fill in the other inputs' Material, Min, and Max allowable values for optimization. ***Note:** The initial value is only used for visualization purposes, whereas the minimum and maximum values drive field optimization. We highly recommend using the input to check whether your Min and Max are printable.* > [!TIP] > > **Tip:** If you wish to optimize only the Thickness instead of the Cell size in a **Parametric Voronoi Domain,** use a constant Cell size value for Min and Max. Once you generate the **Parametric Domain,** a window with several options for visualizing the results appears in the viewport. * *Implicit view* - allows you to view the resulting geometry by changing the Initial values in the input of the Parametric Domain block. ![A section cut view of a Parametric FE Model. The view type is set to Implicit.](https://files.learn.ntop.com/help-articles/optimization/41632480658835.png) * *Property Fields* - allows a user to view the homogenized mechanical properties of the structure across the design space before performing field optimization. The properties that can be accessed from the HUD are Relative density, Density, Young's Modulus, Poisson's Ratio, and Shear Modulus. ![A section cut view of a Parametric FE Model. The view type is set to Property Fields.](https://files.learn.ntop.com/help-articles/optimization/41632480662547.png) * *State Fields* - allows a user to view values of the design parameters across the design space before performing the field optimization. For example, in this case, the controllable design parameter is thickness which would be the same as our Initial input value. ![A section cut view of a Parametric FE Model. The view type is set to State Fields.](https://files.learn.ntop.com/help-articles/optimization/41632480665363.png) #### **2. Define the Objective** The Optimization objective is what property, or 'Design Response,' we hope to minimize or maximize within our part. nTop supports several design responses, including Structural Compliance, Volume Fraction, Displacement, and Stress. Use the **Optimization Objective** block to specify the design response(s). In this example, the objective is to minimize structural compliance. * Add a **Structural Compliance Response** block. * Insert the **Displacement Restraint** and the **Force** block. * Add an **Optimization Objective** block * Set the goal to Minimize * Insert the **Structural Compliance Response** into the Design Response List ![An Optimization Objective block set to Minimize its Design Responses. The Design Response List contains a Structural Compliance Response block. A Force and Fixed Restraint variables are inserted in the Boundary Conditions list of the Structural Compliance Response block.](https://files.learn.ntop.com/help-articles/optimization/41632472081555.png) #### **3. Define the Constraint** Field optimization can also take constraints as input. Without Constraints, the optimization will probably result in parameter values at their maximum/minimum bounds. Constraints can include upper or lower limits on other Design Responses and others. The most commonly used constraint applies a minimum or maximum bound to a design response, such as compliance, volume fraction, displacement, or stress. This field optimization example is constrained such that the volume fraction of the final part is less than 0.4. In other words, the resulting optimized part will have a targeted volume of 40% of the whole design space. Notice that the volume fraction cutoff in the **Design Response Constraint** block is a variable for easy adjustment. * Add an **Optimization Constraint List** block * Insert a **Design Response Constraint** block * Insert a **Volume Fraction Response** block into the Response input * Set the value to .4 * Optional: Right-click on the Value input to create a variable to change the Volume Fraction quickly. ![An Optimization Constraint block containing a Volume Fraction Constraint.](https://files.learn.ntop.com/help-articles/optimization/41632480672915.png) #### **4. Run the Field Optimization** * Add a **Field Optimization** block, * Insert the Parametric FE Model * Insert the Objective * Insert the Constraints ![The Field Optimization block containing a Parametric FE Model, Optimization Objective, and Optimization Constraints.](https://files.learn.ntop.com/help-articles/optimization/41632472084243.png) You can leave the rest of the inputs as default for this example. You can find more information on these settings in the block's information panel and in this [article](/help-articles/knowledge-base/optimization/understanding-the-optimization-settings). After completion of field optimization processing, a window appears in the Viewport with several options for visualizing the results. * *Implicit view* - allows you to view the resulting geometry. Under the “render, as needed” drop-down, each iteration will render when you move the slider bar. Use the “render all” option in the drop-down to render more than 1 iteration at a time to view the progression of the field optimization results easily. * *Property Fields* - allows you to view the mechanical properties of the resulting structure across the design space. You can display the results across the original mesh and render them in real time for any saved iteration. * *State Fields* - allows you to view values of the design parameters across the design space. You can display the results across the original mesh and render them in real time for any saved iteration. #### **5. Field Optimization Post-Processing** To get the resultant Implicit Body, you must grab the Implicit chip from the Properties panel (*optimized model > parametric fe domains > Properties > body).* ![The Field Optimization block with its properties panel open. The body property chip is highlighted as this should be extracted to use for post processing the results.](https://files.learn.ntop.com/help-articles/optimization/41632480677651.png) * Add a **Boolean Union** block * Input the Smoothened Body and the Interface Bodies * Set the Blend radius to 2 mm (to keep the transitions between bodies congruent) Lastly, perform a **Boolean Intersect** operation with your part and the original CAD body to ensure that you preserve the interfaces of the original design space. And that's it! You've successfully performed a field optimization. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/field_optimization_example.ntop) ## Keywords: *FE voronoi field variable how infill optimization setup to run Parametric shelling Components* # How to Select an Algorithm for Parameter Optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-select-an-algorithm-for-parameter-optimization ### **Objective:** This article explains the various optimization algorithms available in the Parameter Optimization block and provides guidance on selecting the most suitable one for your design study. ### **Applies to:** * Parameter Optimization * Dependent Parameter ### **Procedure:** Choosing the correct algorithm is a crucial step that significantly impacts the speed and quality of your optimization results. There are four distinct algorithms for Parameter Optimization. Understanding how each one works is key to making the right choice. #### **Grid** * This method performs uniform grid sampling. It performs an exhaustive search by evaluating every possible combination of parameter values on a predefined grid. You specify the total number of "steps" for each variable, and the optimizer tests them all. * This algorithm is Ideal for understanding the design space before using an additional optimization algorithm. >
    ![](https://files.learn.ntop.com/help-articles/optimization/50598741821715.png) **What you see**: A perfect 3D cube of points. The algorithm tests every single point on this predefined grid. The final result (the red star) is simply the point on the grid that had the lowest value in the case of a minimization problem.. **Takeaway**: This method is simple and exhaustive, but scales terribly. For our 3D problem with 8 values per axis, it ran 8^3 = 512 calculations. For a 10D problem, it would be 8^10 (over 1 billion), making it completely impractical for some real-world problems. It will also miss the true minimum if it falls between the grid points.
    #### **Global** * This method uses a global optimization algorithm. It is a sophisticated method that splits its effort between exploring new, untested regions of the design space (exploration) and performing local optimization on promising regions (exploitation). * This algorithm is suitable for finding a global maximum/minimum among multiple local maximums or minimums. >
    ![](https://files.learn.ntop.com/help-articles/optimization/50598723544723.png) **What you see**: A large "cloud" of points scattered across the entire 3D space, with a mix of colors. This shows the algorithm is actively exploring new, random regions. The final red star is correctly placed at the true global minimum (0,0,0). **Takeaway**: This algorithm is designed to solve difficult problems. It intelligently balances exploration (sampling new regions to find the best valley) with exploitation (using local search to find the bottom of that valley). It is highly effective at avoiding local traps and finding the true global minimum.
    #### **Local** * This method uses a local BOBYQA technique. BOBYQA (Bound Optimization BY Quadratic Approximation) builds a smooth, quadratic approximation of your objective function within the local region of your current solution and seeks the minimum of that approximation. * This algorithm is suitable when you are looking for a minimum/maximum of a simple convex/concave optimization problem. >
    ![](https://files.learn.ntop.com/help-articles/optimization/50598741895699.png) **What you see**: A black search path starting from its initial guess. The algorithm intelligently creates a smooth model of the "valley" it's in and follows it downhill to the bottom. The final red star is at a local minimum, but not the true global one at (0,0,0). **Takeaway**: This is a **powerful ** and **efficient ** local optimizer that doesn't require gradients and can handle a certain level of noise or non-smoothness in functions. However, it is entirely dependent on its starting point and has no way to escape the first valley it finds.
    #### **Smooth** * This method is a Gradient-Based (LBFGS) optimization. It uses a finite difference approximation to calculate the gradients of your objective function and then follows these gradients to find a minimum. * This algorithm is best used when your dependent parameters are smooth and continuous. >
    ![](https://files.learn.ntop.com/help-articles/optimization/50598723603987.png) **What you see**: A short, efficient black search path. The algorithm uses the function's slope (gradient) to find the steepest path downhill from its starting point. Like BOBYQA, it quickly finds the bottom of the nearest valley and gets stuck there. **Takeaway**: This method performs very well and is the standard for "smooth" problems (common in machine learning). It may scale poorly, however, when dealing with too many parameters due to the finite difference computation for gradients. In addition, its reliance on the local gradient makes it blind to the bigger picture, and it will get trapped in the first local minimum it encounters. Show less
    ## Keywords: *parameter smooth optimization grid algorithm* # How to set up a Parameter Optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-set-up-a-parameter-optimization ## **Objective:** This article describes how to configure and execute a parameter optimization study. Parameter optimization, also known as inverse design, determines the set of independent parameters that yield an optimal outcome for a specified objective function, subject to defined constraints. ## **Applies to:** * Parameter Optimization * Design Optimization ## **Procedure:** The process of setting up your Parameter Optimization involves defining your design parameters, setting a goal, establishing limits, running the optimization, and extracting the results. ![](https://files.learn.ntop.com/help-articles/optimization/50598741359763.png) ## Step 1: Define Your Design Parameters First, define the variables that the optimizer can change. You can use three types of parameter blocks: | **Parameter Type** | **What it does** | **Common uses** | **Compatible Input/Output Types** | | - | - | - | - | | **Independent Parameter** | Creates a design variable that can change within a specified **lower** and **upper** bound. | Defining the primary design variables that you want the optimizer to adjust, such as beam thickness, cell size, or fillet radius. | Scalar or Temperature | | **Dependent Parameter** | Creates a parameter whose value is **calculated by a function** that takes other parameters as inputs. | Maintaining specific mathematical relationships between variables, like keeping a constant ratio between two geometric features. | Scalar, Temperature, Integer, Implicit Body | | **Constant Parameter** | Creates a **fixed** value that remains constant throughout the optimization run. | Defining static values that are used in your design but are not part of the optimization study, such as material properties or load values. | Scalar, Temperature, Integer, Implicit Body | >
    Independent Parameter Constant Parameter
    ** ![](https://files.learn.ntop.com/help-articles/optimization/50598723068819.png)** ** ![](https://files.learn.ntop.com/help-articles/optimization/50598723111187.png)**
    ##### **How to set up the Dependent Parameter** A **Dependent Parameter** defines a relationship between variables by calculating its value from other parameters (commonly independent and/or constant parameters, but can also form chains with additional dependent parameters) using a custom function. In a parameter optimization study, a dependent parameter is typically used to define the optimization objective and constraints. Learn more about setting up [here](/help-articles/knowledge-base/optimization/how-to-set-up-the-dependent-parameter). ![](https://files.learn.ntop.com/help-articles/optimization/50598723136915.png) You can also connect dependent parameters to create a chained dependent parameter setup for an advanced setup. Learn more about chained dependent parameters [here](/help-articles/knowledge-base/optimization/how-to-set-up-the-dependent-parameter). ![](https://files.learn.ntop.com/help-articles/optimization/50598723164307.png) ## Step 2: Define the Objective Next, set the goal for the optimization study using the **Parameter Objective** block. The objective tells the optimizer what it should try to achieve. ![](https://files.learn.ntop.com/help-articles/optimization/50598723192723.png) 1. Add a **Parameter Objective** block. 2. Select a *Goal:* Choose to either **Minimize** or **Maximize** the parameter. 3. Select the *Parameter* you want to optimize. For example, minimize a part's mass or maximize its stiffness. ![](https://files.learn.ntop.com/help-articles/optimization/50598741527315.png) ## Step 3: Define Constraints Constraints specify the permissible range or conditions for the optimization variables. The **Parameter Constraint** block ensures that the optimized solution remains valid and compliant with defined design requirements. You can also run an optimization without a **Parameter Constraint.** .![](https://files.learn.ntop.com/help-articles/optimization/50598741556883.png) 1. Add one or more **Parameter Constraints** in a **Parameter Constraint Group** block. 2. Select the **Parameter** to constrain. 3. Choose a constraint **Type**, such as 'Less than' or 'Greater than'. 4. Set the boundary **Value** for the constraint. For example, you could constrain the maximum stress or maximum deflection to be less than a specific value. ![](https://files.learn.ntop.com/help-articles/optimization/50598723281043.png) ## Step 4: Run the Optimization Drag and drop your parameters, objective, and constraints in the **Parameter Optimization** block to run the study. 1. Add a **Parameter Optimization** block. 2. Provide the **Design Parameters** you defined in Step 1. 3. Provide the **Objective** from Step 2. 4. Provide the **Constraints** list from Step 3. 5. Select the **Algorithm** that would be the optimization method used to search for the optimal solution. 6. Set the **Max Iterations** to limit the total number of attempts the optimizer will make. 7. \[OPTIONAL] Add any **Tracked Parameters** to monitor other values during the run and use them after the optimization. ![](https://files.learn.ntop.com/help-articles/optimization/50598723316371.png)![](https://files.learn.ntop.com/help-articles/optimization/50598723366291.png) While the optimization is running, you can click the Right Side Panel, then select Display, and finally click View Data to view the Optimization Plot and Table. ## Step 5: Extract and Use the Results Once the optimization is complete, use the results to create your final design. 1. You can access the properties from the **Parameter Optimization** block for the best iteration, optimized constraint, design, and objective parameter. 2. Use the **Design Parameters from Optimization** block to extract the optimized values from the result. You can specify a particular iteration or use the final one by default. 3. Use the **Tracked Parameters from Optimization** block to review any secondary metrics or implicit bodies you wish to observe during the run or use post-optimization. >
    ![](https://files.learn.ntop.com/help-articles/optimization/50598723394323.png) You can use the Tracked Parameter to output the Implicit Body using the final optimized parameters. In this example, the Full Cooling Plate was used as a Tracked Parameter to be the final output. ![](https://files.learn.ntop.com/help-articles/optimization/50598723426835.png) Input the extracted design parameters back into your workflow to generate the final, optimized part in case you are not using one of them as an Implicit Body. Following the same process as above, you can also use the Tracked Parameters. 
    And that's it! You've successfully set up and run a parameter optimization. ![](https://files.learn.ntop.com/help-articles/optimization/50598723472787.png) ## **Example File** [Parameter Optimization Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/parameter_optimization_example.ntop) # How to set up the Dependent Parameter Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-set-up-the-dependent-parameter **Objective:** This article explains the process for setting up a Dependent Parameter. A Dependent Parameter defines a relationship between variables by calculating its value from other parameters (commonly independent or constant parameters) using a custom function. In a parameter optimization study, a dependent parameter is typically used to define the optimization objective and constraints **Applies to:** * Parameter Optimization * Dependent Parameter ### **Procedure** ![](https://files.learn.ntop.com/help-articles/optimization/50598722861075.png) Unlike an Independent Parameter with a fixed value range, a Dependent Parameter's value is calculated by a **Function Object**. To create this, you first need to build a relationship between variables that defines the logic of your function. Follow these steps to set up a dependent parameter: #### **Step 1: Create the Logical Relationship you wish to calculate** For example, you can use the **Surface Area** block as a Dependent Parameter for your input Implicit Body. ![](https://files.learn.ntop.com/help-articles/optimization/50598722874003.png) You can also set up a Custom block (see '[How to create a Custom block](/help-articles/knowledge-base/user-interface/how-to-create-a-custom-block)') that takes in different input parameters to calculate the output and convert it into a Dependent Parameter. #### **Step 2: Create a Dependent Parameter** Once you have your block set up. Right-click on the block and select the Optimize option and then Dependent Parameter. ![](https://files.learn.ntop.com/help-articles/optimization/50598707640083.png) #### **Step 3: Configure the Dependent Parameter Block** Now you can use your new Function Object added to your **Dependent Parameter**. ![](https://files.learn.ntop.com/help-articles/optimization/50598707661075.png) You can now modify the Input Parameters based on your setup. In this example, the output is an Implicit Body from a Custom Block, which is controlled by a combination of Independent and Constant Parameters. #### **Step 4 \[OPTIONAL]: Create the Dependent Parameter Chain** 1. Add your **First Dependent Parameter**. * Input: Independent/Constant parameters * Output: Dependant Parameter (Scalar, Implicit, etc.) >
    ![](https://files.learn.ntop.com/help-articles/optimization/50598707686035.png) \ >   ![](https://files.learn.ntop.com/help-articles/optimization/50598707707027.png) ![](https://files.learn.ntop.com/help-articles/optimization/50598722976147.png)
    2. Add the **Second Dependent Parameter**. * Input: the first dependent parameter and/or other independent/constant parameters * Output: a secondary metric or property to be optimized ![](https://files.learn.ntop.com/help-articles/optimization/50598723000723.png) The key is that each dependent parameter references upstream parameters. The optimizer will automatically adjust the independent/constant parameters controlling the chain. Now, the Dependent Parameter will automatically update its value based on the input parameters. You can use this in your Parameter Optimization as an Objective or Constraint. ## **Example File** [Parameter Optimization Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/parameter_optimization_example.ntop) # How to use Max and Min Feature Size Constraints? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-use-max-and-min-feature-size-constraints ## **Objective** Use feature size constraints to ensure manufacturability and correct feature disconnections in **Topology Optimization** results. ## **Applies to:** **Topology Optimization** workflows. ![Bracket Example which has ribbed structures in it when using Feature Size Constraints](https://files.learn.ntop.com/help-articles/optimization/50598707101587.png) ## **Procedure** ### 1. Optimize Your Mesh Size To accurately capture feature size constraints, your mesh must be sufficiently refined. * Ensure the **element edge length** of your FE mesh is at most **1/3** the size of your desired feature size specification. ***Note:** If your mesh is too coarse, nTop will issue a warning in the log panel.* ### 2. Apply the Constraints Add the **Min Feature Size Constraint** and/or **Max Feature Size Constraint** blocks to your **Optimization Constraint List**. > > > > > > > > >
    > ![Topology Optimization Example with Min Feature Size Constraint](https://files.learn.ntop.com/help-articles/optimization/50598707138323.png) > > ![Topology Optimization Example with Max Feature Size Constraint](https://files.learn.ntop.com/help-articles/optimization/50598707169683.png) >
    * **Min Feature Size:** Prevents feature disconnections and enforces manufacturing limits. * **Max Feature Size:** Prevents the design from becoming too bulky or violating space constraints. * **Domain Size:** Ensure your feature size input is less than the total thickness of your design domain. ![MinFS\_9.png](https://files.learn.ntop.com/help-articles/optimization/50598722454035.png) ### 3. Configure other Constraints For the most accurate results, use field-based constraints rather than traditional planar constraints. * **Symmetry:** Use the **Remap Constraint** block instead of the **Planar Symmetry Constraint**. The **Remap Constraint** is mesh-independent and acts as the final step in the filtering sequence, preventing discrepancies from being amplified. ![MinFS\_3.png](https://files.learn.ntop.com/help-articles/optimization/50598707206163.png) * **Extrusion:** If using a [**Remap Constraint**](/help-articles/knowledge-base/optimization/how-do-i-use-the-remap-constraint-for-topology-optimization) for extrusion, embed the reference surface at least one element deep inside the design space to prevent disconnections at the boundaries. * **Passive Region: I**t is recommended to limit the passive region thickness to half the feature size specification. Our solution already expands passive regions to achieve the defined minimum feature size. As a result, when defining thick passive regions, the final solutions may present unexpectedly oversized regions. When this undesired situation occurs with the **Max Feature Size Constraint** (using similar feature size inputs), it may lead to convergence problems, as the bulged passive region may not respect the chosen feature size. ![MinFS\_8.png](https://files.learn.ntop.com/help-articles/optimization/50598707230099.png) ### 4. Set Algorithmic Parameters Feature size constraints require more iterations to converge than standard optimizations. * Set the **Max Iterations** to at least **250** (the default is 200). * The goal is to ensure the **Min/Max Projection** filter (blue line in the convergence plot) meets the target (yellow dotted line). ![Convergence Plot: "A line graph showing the blue Min/Max Projection line meeting the yellow dotted target line over 250 iterations.](https://files.learn.ntop.com/help-articles/optimization/50598707258387.png) ### 5. Monitor Convergence Once the optimization begins, navigate to the **Display** tab in the **Topology Optimization** block. * **Min/Max Projection:** Tracks the primary constraint filter. * **Plot:** For the **Max Feature Size Constraint**, the value should always be below 1 (the yellow dotted line) to remain within the defined input. **And that's it!** You've successfully applied feature size constraints to your **Topology Optimization**. ### Example Files * [Download Simple Bracket Example](https://files.learn.ntop/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/SimpleBracket.ntop) ![Swing Arm Extrusion Example which has ribbed structures in it when using Feature Size Constraints](https://files.learn.ntop.com/help-articles/optimization/50598707292563.png) * [Download Swing Arm Extrusion Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/SwingArmExtrusion.ntop) ### ## Keywords: *topology optimization Min Feature Size Constraint Max Feature Size Constraint manufacturing constraint mesh refinement feature size disconnected features* # How to use Natural Frequency Response Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-use-natural-frequency-response ## Objective: Learn how to use Natural Frequency Response in topology optimization. [Method 1: Maximising the Natural Frequency Response](#h-01hf7xr6t56pvgfbaffh72z2ge) [Method 2: Constraining the Natural Frequency Response](#01hgbf10x8y2s89rd6nk9h5pb8) ## Applies to: * Topology Optimization ## Procedure: **What is Topology Optimization?** It is a process that performs a numerical design operation that determines the optimal shape of a part within the bounds of a Design Space based on a set of objectives and constraints. The block allows the user to design geometries that best achieve the desired objective(s) while considering complex and multivariate loading conditions and design constraints. nTop's TopOpt algorithm uses the Solid Isotropic Material with Penalization (SIMP). > [!NOTE] > > This article uses Simulation/Optimization and both of them in nTop have two requirements: FE Mesh and Boundary Conditions (BCs). Follow the instructions in the links below to prepare your model for simulation. > > **FE Mesh** > > * [How to create an FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) > * [How to create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) > > **Boundary Conditions (BCs)** > > * [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) > * [How to choose boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) > * [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) > * [How to use a CAD Face in a boundary condition](https://support.ntopology.com/hc/en-us/articles/4609628488083) 1. Set up the Design Domain and any Passive Region. In this example, we use a thin square plate with a box region as a Passive Region. ![Creating the design domain for the analysis and using a small box as the passive region.](https://files.learn.ntop.com/help-articles/optimization/41632435598739.png) 2. As mentioned above, we must mesh the Design space and prepare our **Simulation Model**. We must apply **Displacement Restraint** on the Top, Bottom, and Sides. ![Applying a Displacement Restraint to the Simulation Model.](https://files.learn.ntop.com/help-articles/optimization/41632410057747.png) 3. We run a Modal analysis to ensure loads and the design space mesh have been set up correctly and that no rigid body modes exist. If you have any questions about the setup, this article can help you ([How can I set up a simulation?](/help-articles/knowledge-base/structures/how-can-i-set-up-a-simulation)). In this example, we run the **Modal Analysis** for five modes. The values we obtained from the Modal Analysis are: | **Mode** | **Eigenfrequencies** | | - | - | | 1 | 21774.32645 | | 2 | 21780.52417 | | 3 | 33828.68546 | | 4 | 43760.28749 | | 5 | 44350.11626 | ![Comparing the frequency results of the Modal Analysis.](https://files.learn.ntop.com/help-articles/optimization/41632410063763.png) We are going to see two methods below, which maximize the frequency response and contain the frequency within a range. ## Method 1: Maximizing the Natural Frequency Response 1. We add an **Optimization Objective** and set the following parameters. * Goal: Maximize * Design Response List * Natural Frequency Response * Load Case: Boundary Conditions from the above step * Number of Modes: 5 * Frequency Offset: 0 Hz ![An example of how to set up an Optimization Objective with a Natural Frequency Response block. This set up is intended to maximize the natural frequency response.](https://files.learn.ntop.com/help-articles/optimization/22950679874707.png) 2. We now add an **Optimization Constraints List.** This would have a **Design Response Constraint** and a **Passive Region Constraint.** Our goal in this optimization is to maximize the natural frequency response while reducing the volume by 50%. **![Optimization Constraint list for the Modal Analysis. This list includes a Design Response Constraint and a Passive Region Constraint. The goal is to maximize the natural frequency response while reducing the volume by 50%.](https://files.learn.ntop.com/help-articles/optimization/22950679887123.png)** 3. We now run the Topology Optimization block with the Model, Constraint, and Objectives we created in the above steps. ![Running a Topology Optimization using the Simulation Model, Optimization Objective, and Optimization Constraints defined in the previous steps.](https://files.learn.ntop.com/help-articles/optimization/41632435603347.png) While the Topology Optimization is iterating, you can check how the constraints are met in each iteration by opening the Right Side Panel and clicking on the Display tab. You can export this history for each iteration using the **Export Topology Optimization History** block. 4. Check the results obtained by meshing and performing Modal Analysis as we did in the first section of this article. ![Viewing the results of a Modal Analysis that was run using the same inputs as the Topology Optimization.](https://files.learn.ntop.com/help-articles/optimization/41632435609875.png) ![A graph showing the results of the Modal Analysis for Maximizing Natural Frequency.](https://files.learn.ntop.com/help-articles/optimization/23488188694675.png) ## Method 2: Constraining the Natural Frequency Response 1. We add an **Optimization Objective** and set the following parameters to minimize the natural frequency response. ![An example of how to set up an Optimization Objective with a Natural Frequency Response block. This set up is intended to minimize the natural frequency response.](https://files.learn.ntop.com/help-articles/optimization/23488265512723.png) 2. We now add an **Optimization Constraints List.** This would have a **Design Response Constraint, Planar Symmetry Constraint,** and a **Passive Region Constraint.** In this example, We are trying to avoid any modes from 7500Hz (Lower Bound) to 22500Hz (Upper Bound) * *Frequency offset = 0.5\*(Upper + Lower) = 15000 Hz for input in the **Natural Frequency Response** block.* * *Greater than value = 0.5\*(Upper - Lower) = 7500 Hz for input in the **Design Response Constraint** block.* ![An Optimization Constraint list containing a Design Response Constraint, a Passive Region Constraint, and a Planar Symmetry Constraint.](https://files.learn.ntop.com/help-articles/optimization/23488467839379.png) 3. We now run the **Topology Optimization** block with the above parameters. ![Running the Topology Optimization with the inputs designed to minimize frequency.](https://files.learn.ntop.com/help-articles/optimization/41632435611795.png) 4. Check the results obtained by meshing and performing Modal Analysis as we did in the first section of this article. ![A modal analysis run using the same inputs as the Topology Optimization run for minimizing natural frequency.](https://files.learn.ntop.com/help-articles/optimization/41632435615251.png) ![A graph showing the results of the Modal Analysis for Minimizing Natural Frequency.](https://files.learn.ntop.com/help-articles/optimization/23493831191571.png) We can verify that there are no frequencies in the 7500Hz to 22500Hz Band. | **Mode** | **Eigenfrequencies** | | - | - | | 1 | 6350.851816 | | 2 | 6386.349747 | | 3 | 25619.41088 | | 4 | 27501.22537 | | 5 | 30108.87244 | And that's it. You have successfully applied **Natural Frequency Response** in your **Topology Optimization**. ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/natural_frequency_response.ntop) ## Keywords: *topopt topology optimization natural frequency response nfr maximise constrain* # How to use Reaction Force Response Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-use-reaction-force-response ## Objective: Learn how to use Reaction Force Response in Topology Optimization. ## Procedure: The **Reaction Force Response** block creates a design response that measures the sum of reaction force vectors across a boundary. The response is derived from the solution of a linear static structural analysis. ![The Reaction Force Response block](https://files.learn.ntop.com/help-articles/optimization/41632370341651.png) The inputs of the block are * **Boundary:** The FE boundary on which the design response will be computed. * **Load Case:** Load case for the design response. * **Direction:** Operation will be applied after summing all reaction force vectors over the Boundary input. ***|X|*** will compute the magnitude of the reaction force vector projected onto the X-axis, ***|XY|*** will compute the magnitude of the reaction force vector projected onto the plane spanned by the X-axis and Y-axis, and ***|XYZ|*** will compute the magnitude of the non-projected reaction force vector. * **Frame:** Reference frame that the reaction force will be computed in. If a frame is not specified, the global coordinate system will be used. * **Output:** Design Response ### Tips * The **Reaction Force Response** block works best when supplemented with Structural Compliance, Stress, or Displacement Response blocks. * When the number of regions to be constrained is small, they can be included as individual design response constraints in the optimization problem. * If the number of regions is large (10-100), it should be used with the new **Combine Design Responses** block. The implementation has been optimized to solve only one adjoint problem rather than 100 individual adjoint problems, greatly improving compute time. We recommend using List processing for such workflows. ## How do you calculate the Reaction Force? You can use a combination of a **Evaluate Field** block and the results from **Static Analysis** to calculate the reaction forces. ([How to use reaction forces in a secondary analysis](/help-articles/knowledge-base/structures/how-to-use-reaction-forces-in-a-secondary-analysis)). You can then use an **Add** block to sum all the reaction forces. ![The image shows how you can use the results of a static analysis and an Evaluate Field block to calculate reaction forces.](https://files.learn.ntop.com/help-articles/optimization/41632370346643.png) ## Example We have a plate restrained in the 3 holes on the left, and a Force of \[100,0,0] is applied on the right side hole. ![An example of static analysis results.](https://files.learn.ntop.com/help-articles/optimization/41632370350355.png) ### Topology Optimization Setup 1 (No Reaction Force) We will now use Topology Optimization with the following objectives and constraints: | **Objective** | **Constraint** | | - | - | | Structural Compliance Response \[MINIMIZE] | Volume Fraction Constraint \[0.15] Passive Region Constraint \[Restrained Holes] | ![A Topology Optimization setup with no reaction force responses.](https://files.learn.ntop.com/help-articles/optimization/41632395793683.png) We notice that the Passive Regions we selected are disconnected. This result is not useful since we need a result with no disconnecting regions. ### Topology Optimization Setup 2 (Reaction Force - Sum) | **Objective** | **Constraint** | | - | - | | Structural Compliance Response \[MINIMIZE] | Volume Fraction Constraint \[0.15] Passive Region Constraint \[Restrained Holes] Reaction Force Response \[Sum] | We use the **Reaction Force Response** block with each face individually, use the Boundary Condition we created earlier, and set the Direction to |XYZ|. ![A reaction force response block populated with a defined CAD face.](https://files.learn.ntop.com/help-articles/optimization/41632395795219.png) Let's repeat the same step to select the other two restrained holes as well. We will now use the **Combine Design Response** block to combine the list of design responses into a single response. Since we need to ensure that the Maximum Reaction Force is less than a certain value, we will use the *Aggregation* as Max in this instance. Place this response as an input to the **Design Response Constraint** and select the *Type* as Less than with a *Value* of 80 N. ![A design response constraint block populated with a Combine Design Responses block. This block combines three defined reaction force response blocks. The Aggregation input is set to Max for the Combine Design Responses block. The Type input is set to Less Than and the Value is set to 80N for the Design Response Constraint.](https://files.learn.ntop.com/help-articles/optimization/41632370360979.png) When we look at the results now, we see that there are no disconnecting regions. We can use the result here to check if the Reaction Forces are maintained below 80N. ![The completed Topology Optimization of the Simulation Model with applied Reaction Force Responses.](https://files.learn.ntop.com/help-articles/optimization/41632395803539.png) ![The Topology Optimization resulting body is then used to create a new FE Solid Model. A Static Analysis is then ran on the model. Finally, using an Evaluate Field block on the vertices of the mesh used to create the FE Solid Model, and the Static Analysis reaction forces, we can evaluate the forces at each vertex. Inserting the Evaluate Field scalar list into an Add block gives us the sum of the Reaction Forces. The sum is less than 80N as was defined previously.](https://files.learn.ntop.com/help-articles/optimization/41632370366739.png) We can use the **Associate FE Mesh** ([How to use a CAD Face in a boundary condition](/help-articles/knowledge-base/structures/how-to-use-a-cad-face-in-a-boundary-condition)) block to use the CAD Faces for boundary conditions. Running the static analysis shows that the Sum of Reaction Forces is less than 80N, which we had specified in the Topology optimization block. ### Topology Optimization Setup 2 (Reaction Force - Variance) | **Objective** | **Constraint** | | - | - | | Structural Compliance Response \[MINIMIZE] | Volume Fraction Constraint \[0.15] Passive Region Constraint \[Restrained Holes] Reaction Force Response \[Variance] | When we set the *Aggregation* to Variance and enter a *Value* of 5N^2 with a Type Less, then it ensures that the variance between the Reaction Forces of each hole is less than 5 N^2. ![A Combine Design Responses block populated with 3 Reaction Force Response blocks.](https://files.learn.ntop.com/help-articles/optimization/41632370368659.png) ![The completed Topology Optimization of the Simulation Model with applied Reaction Force Responses.](https://files.learn.ntop.com/help-articles/optimization/41632395811091.png) We can see that the distribution is much more uniform here compared to the earlier setup. And that's it. You have successfully learned how to use Reaction Force Response in Topology Optimization. If you still have any questions, contact [support@ntop.com](mailto:support@ntop.com). ## Download the Example file: * [Reaction Force Response - Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/reaction_force_response.ntop) ## Keywords: *Top Opt topopt topology optimization design combine response force reaction* # How to use the demold constraint Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-use-the-demold-constraint ## Question: How do I set up my topology optimization to use the demold constraint? ## Applies to: * Optimization * Demold Constraint ## Answer: The **Demold Constraint** block ensures the manufacturability of the final results for castings or plastic injection molding parts. The block prevents overhangs or undercuts based on a defined Demold direction. You can use this block for a single draw, a split draw with a variable surface, or a split draw with a known surface. This article covers the three possible setups for using the **Demold Constraint** block. All of the examples below use the same starting body (shown below), but they require different setups depending on the molding style. **The Demold Constraint block can significantly increase the solve time of the optimization so we recommend starting with a coarser mesh.** ![An imported CAD Part that has been converted to an implicit body.](https://files.learn.ntop.com/help-articles/optimization/25590564097683.png) ## Single Draw: For a single draw mold, the following parameters should be used: * Define the Demold Direction * Uncheck the Auto Split Surface * Do not define a region ![A topology optimization that was run using a Demold Constraint that was setup for a Single Draw mold.](https://files.learn.ntop.com/help-articles/optimization/25590605015315.png) ## Split Draw Variable Surface: For a variable surface split draw mold, the following parameters should be used: * Define the Demold Direction * Check the Auto Split Surface * If you don't want the constraint to be applied to the entire design space, specify a region ![A topology optimization that was run using a Demold Constraint that was setup for a Split Draw Variable Surface mold.](https://files.learn.ntop.com/help-articles/optimization/25590605018259.png) ## Split Draw Known Surface: For a known surface split draw mold, the following parameters should be used: * Use 2 **Demold Constraint** blocks, 1 for each half of the body * Uncheck the Auto Split Surface * Separate the design space using a parting surface (**Region by Body** block or similar) The green semi-transparent body in the image below shows the right side of the body that is selected in the region input. ![A topology optimization that was run using a Demold Constraint that was setup for a Split Draw Known Surface mold.](https://files.learn.ntop.com/help-articles/optimization/25600760724627.png) And that's it! You've successfully implemented the **Demold Constraint** block. Are you still having issues? Contact the support team, and we'll be happy to help! ## Download the Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/demold_constraint_example.ntop) ## Keywords: *surface topopt mold topology optimization constraint split single known draw molding demold* # How to use the Overhang Constraint Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/how-to-use-the-overhang-constraint ## Objective: nTop offers some manufacturing constraints, including the **Overhang Constraint** for additive manufacturing. This article teaches you how to use the constraint and shows the differences between a constrained and unconstrained example. ![A gif showing a body before applying an Overhang Constraint and after.](https://files.learn.ntop.com/help-articles/optimization/1500001061222.png) ## Applies to: * Optimization * Additive Manufacturing ## Procedure: 1. Add an **Overhang Constraint** block ![The Overhang Constraint block](https://files.learn.ntop.com/help-articles/optimization/43450899722515.png) 2. Define the **Build direction** as a vector. This corresponds to the direction of manufacturing. If your part is already oriented on the X-Y plane, then this will typically be the Z+ direction, corresponding to a vector of \<0,0,1>. ***Tip:** This is an ideal parameter for DoEs to explore the solution space fully.* 3. Specify the ***Max Angle***, the maximum allowable overhang angle that the manufacturing process allows. 4. Specify the ***Support Boundaries*** (optional), which are the regions you want to allow support structures to be applied to. Use the [**FE Boundary by Body**](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body), [**FE Boundary by Flood Fill**](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill), or **FE Face Boundary**. The support boundaries need to use Face selection, so please select that in the boundary block. 5. Check the ***Auto-Detect Support*** if you would like to auto-detect the faces of the design space that can provide support for the given print direction and overhang angle. 6. Check the ***Include Passive*** if you would like to include the passive region in the overhang region optimization. If not selected, the passive regions will be ignored. 7. The **Overhang Constraint** can now be input into the Constraints list of an existing Topology Optimization. ![The Body on the left was generated without an Overhang Constraint and the body on the right was generated with an Overhang Constraint of 45 degrees.](https://files.learn.ntop.com/help-articles/optimization/50006642584595.png) *Unconstrained results on the left and results with an overhang constraint of 45 degrees on the right.* And that's it! You've successfully used the overhang constraint for Topology Optimization. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/overhang_constraint.ntop) ## Keywords: *additive Top Opt topology optimization additive manufacturing constraint beta overhang 2.24* # Invalid combination/design curve, not all elements could be mapped Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/invalid-combination-design-curve-not-all-elements-could-be-mapped ## Issue: This error popped up when I tried to run a Topology Optimization using the Extrusion Constraint: Invalid combination/design curve, not all elements could be mapped. ## Cause: The section of the part along the curve has to be constant in order for the **Extrusion Constraint** to work properly. ## Solution: Change the starting part to have a constant thickness along the curve. ## Keywords: *error design topology optimization constraint extrusion curve elements not issue invalid combination mapped* # Parameter Optimization FAQ Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/parameter-optimization-faq ### **Objective:** Understanding the Parameter Optimization framework in nTop. This guide explains what Parameter Optimization is, how it differs from other optimization types, and how to effectively set up a study. ### **What is happening?** Parameter Optimization is a powerful framework in nTop that helps you find the optimal design parameters for your project. Unlike Field or Topology Optimization, which modify the shape and material layout of a part, Parameter Optimization adjusts scalar inputs (like a wing's chord length or wingspan) to achieve a specific goal. It automates the process of adjusting your parametric model's variables to minimize or maximize an objective (such as drag) while satisfying a set of constraints (like minimum lift). ### **Frequently Answered Questions** **1. How is Parameter Optimization different from Topology Optimization (TO) or Field Optimization (FO)?** This is a key distinction based on what is being changed: * **Topology/Field Optimization** is generative. They modify the shape and material layout of a part within a design space. TO typically decides where material should be solid or void. FO can vary material properties or lattice parameters at every point in a design space. * **Parameter Optimization** is not generative. It works on a pre-defined model you have already built. It adjusts the high-level scalar parameters of that model to find the best combination. For example, TO/FO might create the optimal internal sparse structure of a wing. Parameter Optimization would take that wing design and answer, "What is the optimal chord length to maximize the lift-to-drag ratio while keeping total mass below 50 kg?" **2. What types of parameters can I use in an optimization study?** You can define your inputs using three different parameter types. This table explains their roles: | **Parameter Type** | **What it does** | **Common uses** | | - | - | - | | **Independent Parameter** | Creates a design variable that can change within a specified **lower** and **upper** bound. | Defining the primary design variables that you want the optimizer to adjust, such as beam thickness, cell size, or fillet radius. | | **Dependent Parameter** | Creates a parameter whose value is **calculated by a function** that takes other parameters as inputs. | Maintaining specific mathematical relationships between variables, like keeping a constant ratio between two geometric features. | | **Constant Parameter** | Creates a **fixed** value that remains constant throughout the optimization run. | Defining static values that are used in your design but are not part of the optimization study, such as material properties or load values. | **3. How do I choose the right optimization algorithm (Method)?** The **Parameter Optimization** block has four **Algorithms**. Choosing the right one depends on the complexity of your problem and your need for speed versus accuracy. [How to Select an Algorithm for Parameter Optimization](/help-articles/knowledge-base/optimization/how-to-select-an-algorithm-for-parameter-optimization) * **Grid:** Tests every single combination of points on a grid you define. It becomes extremely slow as you add more parameters, becoming exhaustive. It's best for exploring a small, simple design space. * **Global:** A smart search that balances exploring new, untested regions (exploration) and optimizing promising areas (exploitation). It's best for complex problems where you don't have a good starting guess and want to find the true global optimum. * **Local:** Starts from an initial guess and quickly finds the *nearest* optimum by building a smooth approximation of the function. It's very fast and efficient if you already have a good design and just want to refine it. * **Smooth:** Uses gradient information to find the solution. It's the most efficient for smooth, continuous problems, but can struggle if your design space is noisy or has sharp changes. **4. What are the limitations of the "Smooth" algorithm? Does it use true gradients?** The Smooth (LBFGS) algorithm is gradient-based, but it does not calculate a true analytical gradient from your workflow. Instead, it uses a finite difference approximation (which uses first differences) to estimate the gradient. This means it works very well for objective functions that are smooth and continuous. However, it may be less efficient or fail to converge if your objective function is "noisy," discontinuous, or has sharp changes where a gradient is undefined. The algorithm scales poorly when you have larger numbers of parameters, due to finite difference computation, which requires many more function evaluations. The Grid, Global, and Local algorithms do not require gradient information. **5. Where can I learn more and find example files?** You can learn more by reading our step-by-step guides. * [How to set up a Parameter Optimization](/help-articles/knowledge-base/optimization/how-to-set-up-a-parameter-optimization) * [How to setup a Dependent Parameter](/help-articles/knowledge-base/optimization/how-to-set-up-the-dependent-parameter) * [How to Select an Algorithm for Parameter Optimization](/help-articles/knowledge-base/optimization/how-to-select-an-algorithm-for-parameter-optimization) # Unable to view Live results from Topology Optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/unable-to-view-live-results-from-topology-optimization ## Issue: I am not able to see the Live results from **Topology Optimization**. ## Applies to: * Topology Optimization ## Cause: If the **Topology Optimization** block is a list, then you won't be able to see the live results. To determine if a block is a list, look for the 3 horizontal bars icon on top of the block icon. ![A Topology Optimization block that is a list.](https://files.learn.ntop.com/help-articles/optimization/49100281235859.png) ## Solution: Look upstream in your workflow for Topology Optimization inputs that shouldn't be a list like the Simulation Model or FE Solid Model. Please refer to our [How to work with lists](/help-articles/knowledge-base/user-interface/how-to-work-with-lists) article to better understand how lists function in nTop. ## Keywords: *variable topopt live working not issue result* # Understanding the Optimization settings Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/understanding-the-optimization-settings ## Question: What does each setting mean in the Topology Optimization block? ## Answer: Topology Optimization and Field Optimization blocks have similar inputs that drive the optimization. > > > > > > > > >
    > ![Topology Optimization block](https://files.learn.ntop.com/help-articles/optimization/36496488243859.png) > > ![Field Optimization block](https://files.learn.ntop.com/help-articles/optimization/36496488247827.png) >
    Like any block in nTop, you can look in the [Right Panel](https://support.ntopology.com/hc/en-us/articles/360046263893-The-Information-Panel) under the Information tab for information on what the inputs to a block do, but this section will provide additional information and tips on how to use TopOpt settings. #### **Max Iteration** Optimization is an iterative process that updates the topology until the objective is reached and the constraints are satisfied. If the process takes a long time, you can set a maximum limit to the number of iterations attempted. This input allows you to limit the maximum computation time expended on the optimization process. #### **Min Objective Change** The objective function is a quantified measure of how well the topology achieves its objective(s). When the relative change between iterations of the objective function falls below this number, the TopOpt will be considered complete (as long as the constraints are satisfied). Decreasing this number will result in a more accurate optimization but longer computation time. #### **Min Density Change and Min Variable Change** This input is a convergence threshold, as described above, but for the relative change of Topology Optimization density elements from one iteration to the next and the relative change in the variable fields of Field Optimization. Decreasing this number will result in a more accurate optimization, but longer computation time. #### **Boundary Penalty** This input controls how the TopOpt sets density values at the edges of the design space. The **1** option sets the TopOpt density to 0 along the edges of the design space. The material will be completely restricted on the boundary where no loads or constraints have been applied. This option works well if you set up your design space to have a buffer zone of nodes outside the space where you know that no material will be filled in. In some cases, you may anticipate that your part will include elements on the design space's outer edge. This is likely true if you are doing TopOpt on a coarse mesh. The 0 option defines TopOpt densities at the design space edges such that the gradient (the spatial derivatives in x,y,z) will be zero. This allows you to have non-zero TopOpt densities at edges. No penalization is enforced on the boundary in this case. The overall recommendation is to use a mesh size that is small enough so that the **1** option can be used and density can be 0 at the edges, but if needed, option 0 provides an alternative. The image below shows how results can change between different Filter Boundary options. ![The image shows two results from running a Topology Optimization analysis. Both analyses are set up using the same geometry and inputs except for the Boundary Penalty input value. The model on the left side uses a Boundary Penalty of 1, and the body on the right uses a Boundary Penalty of 0.](https://files.learn.ntop.com/help-articles/optimization/360075951313.png) #### **Save Increment** This input controls the amount of data stored and accessible after the optimization. The number can be increased to lower the file size of a completed TopOpt file. The default value of 1 will save results for all increments, whereas a result of 0 will save only the first and last increments. For any value, N, greater than 1, it will save results for every N increment. ***Note:** The last iteration will always be saved.* #### **Move Limit** A value between 0 and 1 defines how much a design parameter value may change between iterations as a percentage of the design variables range. #### **Filter Size** This optional input controls the diameter of a spherical smoothing operation performed on the TopOpt density field. Filtering is used to [regularize](https://en.wikipedia.org/wiki/Regularization_\(mathematics\)) the optimization and avoid mesh dependency. It can be used to indirectly specify a minimum feature size that will be present in the TopOpt result because features smaller than the smoothing diameter will not be preserved. ***Note:** This input accepts a scalar or scalar field input, meaning you can choose spatially-variant filtering. If this optional input is left blank, a default value of 2 times the average element size is used.* #### **Initial Density** This optional input can take in a scalar field of Topology Optimization density values (from 0 to 1), providing the initial guess at the TopOpt result before the process begins. When left blank, the Top Opt densities are set to 0.5 at all elements. This is useful when using the **Halt Process** to pause an optimization. ## Keywords: *field boundary density topopt topology optimization max objective change filter dirichlet neumann constraint iterations min opt top* # Users' Guide to Topology Optimization Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/users-guide-to-topology-optimization ## Summary: This guide explores nTop's topology optimization capabilities, including a detailed workflow using the functional blocks, tips, and a step-by-step example. Download this helpful guide to learn how to: * Consolidate the workflow and edit your part in the same UI as the simulation and topology optimization results. * Easily post-process topology optimization results and create a CAD component or manufacturable part. * Automate your topology optimization by changing design parameters at any step in the process. ![A body generated from Topology Optimization. The body has been used in a Static Analysis and the results are visualized.](https://files.learn.ntop.com/help-articles/optimization/360098934714.png) ## Attachment: * [Users' Guide and Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Optimization/Topology%20Optimization%20Guide%20Files.zip) ## Keywords: *simulation boundary lightweight topology objective constraint condition set up process geometric post Topopt optomization optimizing swing arm document opt top* # What type of material model does the Topology Optimization block use? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/what-type-of-material-model-does-the-topology-optimization-block-use ## Question: What type of material model does the Topology Optimization block use? ## Applies to: * Topology Optimization ## Answer: The Topology Optimization block uses the SIMP material model. We also support orthotropic material models, but we don't support optimizing the material's frame locally. ## Keywords: *question model isotropic material materials orthotropic SIMP* # Which constraints are compatible with each other? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/which-constraints-are-compatible-with-each-other ## Objective: Understand which Optimization Constraints are compatible Optimization Constraint Compatibility Matrix ## Applies to: * Topology Optimization ## Procedure: | | **Symmetry Constraint** | **Passive Region Constraint** | **Response Constraint** | **Extrusion Constraint** | **Min Feature Size Constraint** | **Overhang Constraint** | **Pattern Repetition Constraint** | **Surface Extrusion Constraint** | **Remap Constraint** | **Max Feature Size Constraint** | **Demolding Constraint** | **Machining Constraint** | | - | - | - | - | - | - | - | - | - | - | - | - | - | | **Symmetry Constraint** | Yes | Yes | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes | | **Passive Region Constraint** | | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | | **Response Constraint** | | | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | | **Extrusion Constraint** | | | | Yes | Yes | No | No | No | No | Yes | Yes | Yes | | **Min Feature Size Constraint** | | | | | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | | **Overhang Constraint** | | | | | | Yes | Yes | No | No | Yes | No | No | | **Pattern Repetition Constraint** | | | | | | | Yes | No | No | Yes | Yes | Yes | | **Surface Extrusion Constraint** | | | | | | | | Yes | No | Yes | Yes | Yes | | **Remap Constraint** | | | | | | | | | Yes | Yes | Yes | Yes | | **Max Feature Size Constraint** | | | | | | | | | | Yes | Yes | Yes | | **Demolding Constraint** | | | | | | | | | | | Yes | No | | **Machining Constraint** | | | | | | | | | | | | Yes | > [!NOTE] > > **Note:** * Machining Constraints include a 3-axis Milling Constraint and a 5-axis Milling Constraint. * Response Constraints includes Natural Frequency Constraint. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *topopt topology optimization combination constraints compatibility* # Why am I getting multiple bodies in my Topology Optimization Result? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/why-am-i-getting-multiple-bodies-in-my-topology-optimization-result ## Issue: I ran a Topology Optimization, but the result gives me multiple disjointed bodies. How do I get a solid body as the result? ## Applies to: * Topology Optimization * Optimization Objective ## Cause: This is occurring because the Optimization Objective Goal is set to 'Maximize' ## Solution: To get a single body, set the Optimization Object Goal to 'Minimize'. ## Keywords: *body topology question bodies multiple optimization minimize single result maximize obkective* # Why does my Topology Optimization Result get rid of important areas on my design? Source: https://docs.ntop.com/help-articles/knowledge-base/optimization/why-does-my-topology-optimization-result-get-rid-of-important-areas-on-my-design ## Issue: Why does my Topology Optimization Result get rid of important areas on my design? Why is too much material removed when I run a Topology Optimization? ## Applies to: * Topology Optimization ## Cause: This can happen in areas of the model where you have Displacement Restraints, but no Forces. The algorithm running the topology optimization sees these areas as non-performing material, therefore removing the material. ## Solution: Try these options to edit your Topology Optimization Result: 1. Take another look at the Boundary Conditions in your model and edit them if needed 2. Set up a Passive Region Constraint for the area that was removed 3. If using a Volume Fraction Constraint, edit the value so less material is removed ## Keywords: *remove volume topology of optimization constraint restraint material materials displacement get issue too result rid excess much fraction* # Guide to Rib Design Source: https://docs.ntop.com/help-articles/knowledge-base/rib-design/guide-to-rib-design ## Summary: This article demonstrates the three new methods of rib mapping. Each method has pros and cons based on the intended design and starting geometry, so we recommend reviewing all possible methods. The last section shows how to combine rib mapping with field-driven design. Each method has an example file at the end of the section. ## Common use-cases: We define ribs as a pattern of 3D thin-walled structures that add support and rigidity to parts. Ribs are often applied to thin-walled components such as housings, panels, manifolds, piping, and more. ## Glossary: * **Lattice:** A lattice is a 3D structure with thickness made from a pattern of material and air. * **Graph:** A line-based pattern representing rib centerlines. In nTop, graphs store connectivity information between a network of line segments and are also used for lattices. * **Rib:** Ribs are a pattern of 3D thin-walled shapes of a specified thickness in a specified direction on the contour of an existing part. ## Methods: >
    Graph Projection Mapping
    • Best used when the shape of the surfaces can be approximated by simple guide shapes. These guide shapes include planes, cylinders, and tubes.
    • Compatible with periodic rib patterns such as rectangular, triangular, and hexagonal. Custom patterns can also be created by defining a 2D unit cell.
    • Example parts: panels, housings, chassis, etc.
    ![Examples of using the Graph Projection Mapping method.](https://files.learn.ntop.com/help-articles/rib-design/35117576108179.png)
    Graph Projection mapping is a method of creating ribbing patterns that approximate a target shape using a simple guide shape. For the initial release, these guide shapes are Planes, Cylinders, and Tubes (Swept cylinders). This technique should be used when mapping across many CAD faces or small surface details and when the target shape resembles one of the guide shapes. Multiple projection mapping steps can be performed if there are multiple regions of a part. Additionally, it should be used when periodic patterns are desired. ### Graph by Planar Projection 1. Start by creating an implicit body. This body will act as the target for projection mapping; the rib pattern will be projected to this body. In this case, it's a CAD face converted to an implicit body, but CAD geometry is unnecessary for this workflow. ![An implicit body](https://files.learn.ntop.com/help-articles/rib-design/35140553666195.png) 2. Due to the shape of this part, Planar mapping results in a pattern with minimal distortion. Create a plane positioned with its normal facing the part and select a unit cell using the **2D Unit Cell (BETA)** block. Use the **Graph by Planar Projection (BETA)** block to project the pattern to the surface with the desired rib centerline spacing. This block will project from the plane to the first intersection point along the plane's normal direction. The Tolerance input controls how beams are subdivided to capture surface detail and boundaries. ![The implicit body with a plane above it. The implicit body has an isogrid graph applied to it using the Graph by Planar Projection block.](https://files.learn.ntop.com/help-articles/rib-design/35140559444371.png) 3. Due to the direction we will be extruding the ribs, we want to prevent gaps from appearing between the ribs and the side walls of the part. To accomplish this, we can use the **Extend Open Lattice Beams** block to modify the graph. Once done, extract the *Lattice -> Thick Graph -> Graph* property and use this as the graph for the remaining steps. ![A Lattice from Graph block inside the Extend Open Lattice Beams block. The graph property chip is extracted from the properties panel of the Extend Open Lattice Beams block.](https://files.learn.ntop.com/help-articles/rib-design/35140559445907.png) 4. Use this graph in the **Ribs from Graph (BETA)** block to create solid ribs. To define a custom direction of extrusion (instead of just using the normal of the target, which is often acceptable), we will use another CAD face (“Back Face” in this example). This is because it is larger and smoother and will have consistent normals around the boundary of the projected Graph. Create a vector field from its gradient, which will become the extrusion direction. At this point, we can also specify the ribs' Thickness, Height, and Draft angle. ![The implicit body with ribs. The ribs were generated from the Ribs from Graph block.](https://files.learn.ntop.com/help-articles/rib-design/35140559447059.png) 5. Perform a **Boolean Union** to join the ribs to the base part geometry (in this case, converted from a CAD body to an Implicit Body). At this stage, a Blend Radius at the base of the ribs can be applied. ![A boolean union block is used to combine the implicit body with the ribs.](https://files.learn.ntop.com/help-articles/rib-design/35140553683219.png) ### Graph by Cylindrical Projection 1. In this example, the projection target is an implicit body with no CAD conversions created entirely in nTop. Start by defining a **Frame** using the **Plane from Normal** block. This will position an axis (corresponding with the Z axis of the Frame/Plane) to define cylindrical projection. ![A cylindrical implicit body with a plane at the bottom.](https://files.learn.ntop.com/help-articles/rib-design/35140553686419.png) 2. The **Graph by Cylindrical Projection (BETA)** block will project the pattern from infinitely far away toward the central axis and stop at the first point of intersection. If the pattern needs to be on the inside of the part, toggle the “reverse” input, and the pattern will be projected away from the axis. ![Using the Graph by Cylindrical Projection block generates a graph on the outside face of the implicit body.](https://files.learn.ntop.com/help-articles/rib-design/35140559452435.png) 3. To create the solid ribs, follow the same steps as the Planar example. In this case, a height ramp was created to decrease the height of the ribs from the ends of the body. ![The exterior graph is converted into ribs by extruding them from the surface. The ribs and implicit are combined into a single body using the Boolean Union block.](https://files.learn.ntop.com/help-articles/rib-design/35140559453075.png) ### Graph by Swept Projection Swept Projection is similar to Cylinder mapping. However, instead of a central axis, a centerline defines the projection mapping. 1. Like the Planar example, the projection target is defined by converting CAD faces into an implicit body. In this case, the **Get Cad Faces by Color** block was filtered down to the red faces. ![An imported CAD body. The body is a curvy tunnel shape.](https://files.learn.ntop.com/help-articles/rib-design/35140559454355.png) 2. Define a centerline for projection mapping. This single curve centerline can either be imported or created directly in nTop. In this example, it was made in nTop. ![A curve is generated as the Centerline of the tunnel shape. The curve follows the curvature of the tunnel shape.](https://files.learn.ntop.com/help-articles/rib-design/35140553693203.png) 3. Use the **Graph by Swept Projection (BETA)** block to project the pattern to the target. The projection logic is otherwise the same as **Graph by Cylindrical Projection (BETA)** block. ![A graph is created on the outside of the tunnel implicit body using the Graph by Swept Projection block.](https://files.learn.ntop.com/help-articles/rib-design/35140553695891.png) 4. From here, the steps for creating solid ribs are the same as previous methods. ![The graph is extruded using the Ribs from Graph block. The final body is created by combining the tunnel implicit body and the ribs.](https://files.learn.ntop.com/help-articles/rib-design/35140553696787.png) ## Example File: * #### [Graph Projection Mapping Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Rib%20Design/Graph%20Projection%20Mapping%20Example.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) >
    Conformal Graph Mapping
    • Best used when the surface is complex with branching or highly organic curvature
    • Compatible with two rib patterns:
      • Quad Mesh: Periodic layouts of unit cells with rotational symmetry
      • Stochastic (Voronoi): A random rib layout that supports field-driven cell sizing
    • Example parts: manifolds, piping, designs from topology optimization
    • Note: this method uses lattice blocks
    ![An example created using the Conformal Graph Mapping method.](https://files.learn.ntop.com/help-articles/rib-design/35117576150547.png)
    Projection mapping works for many types of parts, but not every part. Parts with complex curvature or branching geometry benefit from a more adaptive, organic approach. The tradeoff with this is that it is not always possible to align unit cells, so using a unit cell with rotational symmetry (such as “Rectangular”) is suggested. To accomplish this, a Quad Mesh is created on the part, and then a Graph is generated on the mesh. ### Quad Mesh 1. Create a mesh of the region where the ribs should be located. In this case, a mesh generated from CAD faces was used, but an alternate approach would be to mesh the whole part and use **Filter Mesh by Flood Fill** block if no CAD faces are available. ![An imported CAD Body that has been converted to a mesh. The CAD body was also converted to an implicit body, but it is not visible.](https://files.learn.ntop.com/help-articles/rib-design/35140559464339.png) 2. Use the **Quadrangulate Mesh** block to generate a quad mesh. ![The triangular mesh is then converted to a quad mesh using the Quadrangulate Mesh block.](https://files.learn.ntop.com/help-articles/rib-design/35140553699731.png) 3. Select a 2D unit cell and use **Graph on Quad Mesh (BETA)** block to create the rib pattern. ![A graph is generated on the mesh using the Graph on Quad Mesh block.](https://files.learn.ntop.com/help-articles/rib-design/35140553701267.png) 4. Finalize the ribs using **Ribs from Graph (BETA)** and implicit boolean blocks. Even though the graph on the quad mesh may deviate from the implicit body, the **Ribs from Graph (BETA)** block will conform the centerlines to the part. ![Ribs are created from the graph using the Ribs from Graph block. The Ribs are then combined with the original body using a Boolean Union block.](https://files.learn.ntop.com/help-articles/rib-design/35140553703059.png) ### Voronoi Surface Graph An alternative to Quad Mesh mapping is the **Voronoi Surface Graph** block. This approach allows field-driven spacing, though the layout will be stochastic, not periodic. ![An example of voronoi ribs on an implicit body. The ribs were generated from the Ribs from Graph block. The graph was generated from the Voronoi Surface Graph block.](https://files.learn.ntop.com/help-articles/rib-design/35140553704723.png) ## Example File: * #### [Conformal Graph Mapping Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Rib%20Design/Conformal%20Graph%20Mapping%20Example.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) >
    CAD Face Mapping
    • Best used when the layout is isolated to a single CAD face.
    • Compatible with periodic rib patterns such as rectangular, triangular, and hexagonal. Custom patterns can also be created by defining a custom 2D unit cell.
    ![An example of ribs generated using the CAD Face Mapping method.](https://files.learn.ntop.com/help-articles/rib-design/35140553705619.png)
    In some circumstances, the layout of the ribs can be fully defined by a single CAD face. In this scenario, use the **Graph on CAD Face (BETA)** block to generate the rib pattern. ![An implicit body with applied ribs. The ribs were generated from the Ribs from Graph block. The graph was generated from the Graph on CAD Face block.](https://files.learn.ntop.com/help-articles/rib-design/35140553708691.png) ## Example File: * #### [CAD Face Mapping Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Rib%20Design/CAD%20Face%20Mapping%20Example.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) >
    Field Driven Rib Geometry
    • Recommend method for optimizing your rib designs
    • Compatible with all three rib mapping methods above
    • Note: Rib geometry can be created with constant or spatially varying parameters.
    • Parameters that can be driven with fields:
      • Rib height
      • Rib thickness
      • Rib orientation (extrusion direction)
      • Draft angle
    • Examples of fields include:
      • Distance from features
      • Simulation data
      • Build compensation data
    ![An example of an implicit body with applied ribs, generated using the Field Driven Rib Geometry method.](https://files.learn.ntop.com/help-articles/rib-design/35189402741011.png)
    This section will demonstrate how to use simulation data to specify the height of ribs. ### Simulation Driven Ribs 1. In this example, a rib pattern is projected following the same steps as in the previous section, "Graph by Swept Projection." ![An implicit body with a graph applied using the Graph by Swept Projection block.](https://files.learn.ntop.com/help-articles/rib-design/35140553713555.png) 2. Rib geometry can be Field-Driven. In this example, we will run a **Static Analysis** to generate the field. Torsion is applied using displacement and point restraints. In the following steps, we will use the mid-principal strain field. ![An FE Model with applied simulation results from running a Static Analysis.](https://files.learn.ntop.com/help-articles/rib-design/35140559487379.png) 3. To find the maximum and minimum values, evaluate the absolute value of the mid principal strain field at the vertices of the surface mesh. These vertices can be found in the properties of the **FE Volume Mesh from CAD** block. Then, calculate the max and min values using **Max** and **Min** blocks. ![The FE Mesh of the FE Model from the simulation. The properties panel of the FE Mesh is open and the vertices property is highlighted. The strain values from the simulation are inserted into an Evaluate Field block along with the vertices. Then Min and Max blocks are used to determine the minimum and maximum values of the Evaluate Field block.](https://files.learn.ntop.com/help-articles/rib-design/35140559493011.png) 4. As shown in the image below, use a **Ramp** block to create a height ramp from the strain field. This will map the minimum value to the minimum height and the maximum value to the maximum height. ![A Ramp block is used to modify the original strain field.](https://files.learn.ntop.com/help-articles/rib-design/35140553720211.png) 5. Simulation fields can tend to be a bit noisy, so it's helpful to smoothen the field to create smooth ribs. ![A Smoothen Field block is applied to the Ramp block to smoothen the resulting field.](https://files.learn.ntop.com/help-articles/rib-design/35140559499539.png) 6. Use this field in the Height input of the **Ribs from Graph (BETA)** block. The rib height will now vary with the simulation data. ![Ribs are created using the Ribs from Graph block. The Rib height is generated using the ramped strain field, which results in variable height ribs depending on the simulation results.](https://files.learn.ntop.com/help-articles/rib-design/35140559503379.png) ### Designing Ribs with Manufacturability Constraints This section will show how to create a custom extrusion direction, add a draft to the ribs, and add blend radii to the ribs' intersections. 1. Start by creating a graph and, in this case, using planar projection. ![An implicit body with an applied graph, the graph was generated using Graph by Planar Projection.](https://files.learn.ntop.com/help-articles/rib-design/35140559505299.png) 2. We want to create a height ramp that tapers off toward the perimeter. To do this, use **Section Body** and extract the *Polygon -> Body* property. This will provide a distance field to the boundary. ![The image shows the implicit body field with the generated graph. To generate the visualized field, a Section Body block was used on the implicit body. Then extract the Body property chip from the Section Body properties panel. This property is located under the Polygon section of the property panel. This will provide a distance field to the boundary.](https://files.learn.ntop.com/help-articles/rib-design/35140553733139.png) 3. Use a **Ramp** block to turn this distance field into a height ramp. ![The distance field of the implicit body perimeter is inserted into a Ramp block. The field is modified to define the height of the ribs that will be generated.](https://files.learn.ntop.com/help-articles/rib-design/35140559509395.png) 4. Insert this **Ramp** into the Height input of a **Ribs from Graph (BETA)** block to create variable height ribs. ![The Ribs from Graph block generating ribs. The rib height uses the ramped scalar field to ensure the ribs taper off towards the perimeter of the implicit body.](https://files.learn.ntop.com/help-articles/rib-design/35140553737363.png) 5. The Draft angle input will add a draft from the base of the ribs to the tops. Additionally, the Direction input can override the default extrusion direction (normal to the Body), ensuring a constant extrusion in the Z direction. ![An image highlighting the Draft Angle input of the Ribs from Graph block. ](https://files.learn.ntop.com/help-articles/rib-design/35140559513875.png) 6. Use the **Blend Intersections (BETA)** block to add blends where ribs intersect. This will create a bulge on the top and bottom, which must be trimmed off. ![A Blend Intersections block is added to create fillets between the rib beams and vertices.](https://files.learn.ntop.com/help-articles/rib-design/35140553752979.png) 7. Offset the body using the same height ramp used for the ribs. ![The starting implicit body with an Offset Body block applied. The Offset distance is the same field used to generate the rib height.](https://files.learn.ntop.com/help-articles/rib-design/35140553754899.png) 8. Intersect this trimming tool with the ribs to create ribs with flat tops at the specified height. Then, a union with the desired base geometry is performed. ![A boolean intersect is applied between the original implicit with ribs and the new offset body.](https://files.learn.ntop.com/help-articles/rib-design/35140559521299.png) ## Example File: * #### [Field Driven Rib Design Example](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Rib%20Design/Field%20Driven%20Rib%20Design%20Example.ntop) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Keywords: *cad face field conformal driven design rib guide planar graph mapping cylindrical ribbing projection swept* # nTop 5.10 - Introduction to Rib Design Source: https://docs.ntop.com/help-articles/knowledge-base/rib-design/ntop-5-10-introduction-to-rib-design ## Objective: Learn more about the changes happening in nTop 5.10 regarding our new capabilities for rib design. ## What is happening? We are introducing new rib design capabilities in nTop 5.10. These new blocks and several existing blocks will be grouped in a new BETA Rib Design tab in the ribbon. This change is intended to help customers in two ways: **User Learning and Efficiency**: The new tab allows us to group blocks needed to create rib patterns in a single tab, helping users quickly find the functions they need to build their workflows. **nTop Product Expansion**: As a computation design tool, we want to enable our users to build geometry beyond lattices easily. These new blocks for designing ribs are the first step towards helping our customers to design more of their parts and more kinds of parts in nTop. These new capabilities introduced in 5.10 include tools that allow users to project conformal patterns directly onto implicit geometry and then extrude the patterns into solid ribs. Simulation data and other spatially varying fields can be used to control rib orientation for manufacturability, thickness, draft angle, and rib-rib fillets. These new blocks can also be used in a workflow with nTop Automate to find the optimal rib layout. See our [nTop 5.10 Release Notes](/help-articles/whats-new/whats-new/ntop-5-10-what-s-new) for detailed information on the new blocks. ## Frequently Asked Questions: #### **1.0 Why Ribs?** Structural ribs are commonly used in weight-critical products, specifically in thin-walled components such as housings, panels, pressure vessels, manifolds, piping, and more. Structural requirements driving rib designs can come from product, system-level, or manufacturing loading, such as AM printing thermal loads (i.e., build distortion). Designing structural ribs in CAD is a manual and tedious process today. Due to the time it takes to design and iterate on these features, engineers often create suboptimal designs and waste valuable product development time trying to run through design iterations. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **2.0 There are some rib design capabilities in nTop already; why are more being added?** It is possible to design some rib features in nTop today using [conformal lattice workflows](/help-articles/knowledge-base/lattices/guide-to-conformal-latticing), but these tools were built for volumetric lattices and are not always ideal for ribs. These new blocks were explicitly created for rib design. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **3.0 How do Ribs relate to Lattices?** On the back end, blocks for designing ribs utilize our core lattice technology where appropriate. However, for our users, rib design workflows are distinct from lattice workflows. While lattice designs typically start in 3D, rib designs often start as a line-based pattern and are extruded to 3D. See the new [Guide to Rib Design](/help-articles/knowledge-base/rib-design/guide-to-rib-design) article for best practice workflow options and instructions on using existing latticing blocks. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **4.0 Why are the capabilities in BETA?** We are releasing in BETA because we are introducing a new tab and new capabilities all at once. This update is the first of a series for modeling beyond lattices. We plan to release more modeling design and optimization capabilities soon. See [What are beta blocks?](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) to learn more about how these work. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Keywords: *conformal ntop design rib beta document ribs ribbing projection 5.10* # A node is tied twice in two different Tie Constraint connections Source: https://docs.ntop.com/help-articles/knowledge-base/structures/a-node-is-tied-twice-in-two-different-tie-constraint-connections ## Issue: I am trying to run a simulation with multiple tie constraints and received the error: "Node number # is tied twice in the connection list at position # and #." ## Applies to: * Simulation ## Cause: A node is being tied twice from the two different Tie Constraints. A node can only have one Tie Constraint acting on it so that it knows how to behave in the simulation. ## Solution: Determine which node is tied twice and adjust the FE boundaries of the Tie Constraints so that the node is only tied once. To find out which node it is: * * Open up the properties of the first Tie Constraint * Expand the Dependent Region * Expand Nodes * Look for Node #(if you can't find it, expand the Independent Region instead) * Once found, drag the chip into the Notebook. This allows you to see the node that is being used in both Tie Constraints. An example of this is below: ![The properties panel of a Tie Constraint block. The image is showing how to locate a problematic node that is tied twice in two different tie constraints.](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/attachments/token/Wrh0VeovEw6wHp5gyiHQmdJtl)​ Once you know which node is being used twice, you need to edit the FE Boundary of one of the Tie Constraints to make sure the node is only tied once. Once you adjust the FE Boundary your simulation should run as expected. ## Keywords: *error analysis simulation static node constraint tie issue connection twice tied* # Analysis is expecting a non-singular matrix Source: https://docs.ntop.com/help-articles/knowledge-base/structures/analysis-is-expecting-a-non-singular-matrix ## Issue: I was running an analysis and got the error: "Analysis is expecting a non-singular matrix. There can be several causes of this. You most likely provided an analysis setup that is not properly constrained. Please try adjusting your boundary conditions such that each body is properly constrained." ## Applies to: * Analysis * nTop 3.10 ## Cause: As mentioned in the error message, there are several reasons this can happen: * * Mesh quality * Mesh Shape * Boundary Conditions * FE Connectors ## Solution: * * Mesh quality * Open up the properties of your surface mesh and make sure it is not self-intersecting, it is manifold, and that it is oriented properly. You want to see: * Manifold: True * Oriented: True * Self-Intersecting: False * Use these articles to help create a clean mesh: * [Methods for refining meshes](/help-articles/knowledge-base/meshing-workflows/methods-for-refining-meshes) * [How to mesh complex parts](/help-articles/knowledge-base/meshing-workflows/how-to-mesh-complex-parts) * Mesh Shape: Always use Triangle mesh shapes when running an analysis * Boundary Conditions: Double check your boundary conditions and adjust them if necessary * FE Connectors: Ensure that your FE Connectors are properly attached ## Keywords: *analysis mesh simulation boundary issue non expecting singular matrix quality* # Are there default environmental properties present when running a simulation? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/are-there-default-environmental-properties-present-when-running-a-simulation ## Question: Are there any default environmental properties already defined in the simulation space? Are we simulating in a vacuum or are there air or fluid properties already present? ## Applies to: * Simulation ## Answer: Unless you define a boundary condition explicitly, we assume that the model is isolated from its surrounding environment. Meaning no interactions whatsoever. If you want a more realistic approach you can define an ambient temperature and use a convection boundary condition on all faces of the model. ## Keywords: *boundary property properties question fluid condition environmental air vacuum* # Can I apply a centrifugal force to my part? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/can-i-apply-a-centrifugal-force-to-my-part ## Question: Can I apply a centrifugal force to my part? ## Answer: > [!NOTE] > > This article uses Simulation/Optimization and both of them in nTop have two requirements: FE Mesh and Boundary Conditions (BCs). Follow the instructions in the links below to prepare your model for simulation. > > **FE Mesh** > > * [How to create an FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) > * [How to create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) > > **Boundary Conditions (BCs)** > > * [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) > * [How to choose boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) > * [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) > * [How to use a CAD Face in a boundary condition](https://support.ntopology.com/hc/en-us/articles/4609628488083) You can apply a centrifugal force using the **Rotational Force** ([beta](/help-articles/knowledge-base/user-interface/what-are-beta-blocks)) block. This block allows you to apply an acceleration load (centrifugal force) caused by a constant rotational velocity. To use it, choose the region where the load is applied, set an axis, and define the rate in Hz. Check out the attached example to see how this block is used in a **Static Analysis**. ![The rotational force block](https://files.learn.ntop.com/help-articles/structures/41632168258579.png) ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Centrifugal%20Force%20Example.ntop) ## Keywords: *simulation static analysis Design Analysis centrifugal rotational velocity rotational* # Can I edit the coordinates of an Orthotropic material? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/can-i-edit-the-coordinates-of-an-orthotropic-material ## Question: Can I edit the coordinates of an Orthotropic material? ## Applies to: * Design analysis, materials, topology optimization ## Answer: Yes, the coordinates for Orthotropic materials can be edited. When you add a **Solid FE Attribute** to your FE Model, it gives you the option to add a **Frame**. Adding a **Frame** to this block sets the coordinates for the material. If no **Frame** is set, then the material will have global coordinates. ![An FE Solid Attribute block with an Orthotropic Material block in its Material input. There is a Frame specified in the Frame input](https://files.learn.ntop.com/help-articles/structures/1500006197182.png) ## Keywords: *edit question frame solid attribute material build set orthotropic coordinates global* # Can I export the material from the Homogenize Unit Cell? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/can-i-export-the-material-from-the-homogenize-unit-cell ## Question: Can I export the material from the Homogenize Unit Cell block? ## Applies to: * Analysis * Lattices ## Answer: Yes, you can export material but you can't import material. Export the anisotropic material from the **Homogenize Unit Cell** block by using the **Export Material** block and setting the material to be the **Homogenize Unit Cell** block (or by using the material chip from the same block). The **Export Material** block allows you to choose a variety of file types, including .CSV. ![mceclip0.png](https://files.learn.ntop.com/help-articles/structures/4409474220179.png) You can also export the material by using Right-click > Export on the **Homogenize Unit Cell** block. The material stiffness matrix is exported in the following format if you save it as a .txt or .csv file: ``` | sxx | | D1 | | exx | | syy | | D2 D3 | | eyy | | szz | = | D4 D5 D6 | | ezz | | sxy | | D7 D8 D9 D10 | | gxy | | syz | | D11 D12 D13 D14 D15 | | gyz | | szx | | D16 D17 D18 D19 D20 D21 | | gzx | ``` ## Keywords: *export question csv material homogenize cell unit orthotropic anisotropic matrix stiffness* # Can I perform convection and radiation analysis on beam elements? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/can-i-perform-convection-and-radiation-analysis-on-beam-elements ## Question: Is it possible to use beam elements for convection or radiation? ## Applies to: * nTop 3.9.3 * Thermal Analysis ## Answer: Only thermal conductivity works with beam elements. We do not support convection and radiation for beams since they require faces to work. ## Keywords: *question beam elements radiation convection thermal conductivity* # Can I run a fatigue or nonlinear static analysis? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/can-i-run-a-fatigue-or-nonlinear-static-analysis ## Question: Can I run a fatigue analysis? Can I run a nonlinear static analysis? ## Applies to: * Simulation ## Answer: Our static analysis solver is linear. It can't run a nonlinear analysis and we don't support transient loading conditions for fatigue analysis. Fatigue, crack growth, and other dynamic simulations are best done in simulation-specific tools. To support these types of analysis, there are several methods of exporting files for further simulation. Take a look at all of the supported file types for export [here](/help-articles/knowledge-base/interop/what-file-types-can-ntop-import-and-export). ## Keywords: *analysis simulation static question growth dynamic linear non fatigue crack transient nonlinear* # Can I run an analysis with a force of 0? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/can-i-run-an-analysis-with-a-force-of-0 ## Question: Can I run an analysis with a force of 0? ## Applies to: * Topology Optimization * Simulation ## Answer: Yes, you can set up your Force block to have 0N. The block gives you a warning when you do this, letting you know that the magnitude of your applied force is zero. ## Keywords: *simulation topology question optimization force zero 0 Warning* # Defining Circumferential and Radial Force Fields on a Cylinder Source: https://docs.ntop.com/help-articles/knowledge-base/structures/defining-circumferential-and-radial-force-fields-on-a-cylinder This article explains how to define, apply, and verify circumferential (tangential) and radial vector fields on a cylindrical surface in nTop. This workflow is essential for simulating rotating loads, pressure vessels, or centrifugal forces. ## Applies to * Vector field definition and evaluation * Applying surface forces to cylindrical geometry * Distinguishing between circumferential and radial force directions * Structural simulation preparation workflows ## Procedure 1. Create the reference geometry: * Add a **Circle** block with the following settings: * Center point: 0, 0, 0 * Radius: 25 mm * Normal: 0, 0, 1 2. Define the force magnitude: * Create a **Scalar Variable** named F and set it to 1 N. 3. Construct the Circumferential Force field: * Add a **Vector Field from Components** block and name it Circumferential Force. Use the following math expressions: * X: -(F \* y / 25 mm) // *Tip: Use the negative of the F variable we created in the above step to avoid multiplying by -1* * Y: F \* x / 25 mm * Z: 0 *The Principle: The cross-axis relationship (X component driven by Y coordinate) creates rotation around the cylinder axis rather than pointing toward or away from it.* ![](https://files.learn.ntop.com/help-articles/structures/50598721473811.png) 4. Generate evaluation points: * Use a **Equidistant Points on Curve** block: * Curve: Your Circle from Step 1. * Increment: Length/8 (to create 8 equidistant points). * We will use a Sub List here to exclude the start point, which is counted twice. 5. Evaluate the field: * Add an **Evaluate Field** block: * Vector Field: Circumferential Force * Points: The point list from Step 4. 6. Verify the results: * Inspect the evaluated output. For a pure circumferential field, the sum of all X and Y components should be zero, indicating no net translation, only torque. ### Switching to a Radial Field To convert the field from circumferential to radial, swap the coordinate inputs so each component is driven by its own axis. | **Field Type** | **Fx** | **Fy** | **Fz** | | - | - | - | - | | **Circumferential (CCW)** | `-F * y / 25` | `F * x / 25` | `0` | | **Radial Outward** | `F * x / 25` | `F * y / 25` | `0` | | **Radial Inward** | `-F * x / 25` | `-F * y / 25` | `0` | ### Testing and Verification #### Visual Check — Viewport Streamlines Preview the vector field in the nTop viewport from the **Top View (Ctrl+5)**. * **Correct:** Streamlines appear as smooth, concentric arcs flowing uniformly around the circle. You can also extract the Normals at the different points to see what direction it is pointing at. * **Incorrect:** If streamlines show a "saddle pattern" (curving inward toward the axes), you have likely mapped same-axis components (Radial) instead of cross-axis components (Circumferential). >
    Circumferential CCW Radial
    ![](https://files.learn.ntop.com/help-articles/structures/50598706240659.png) ![](https://files.learn.ntop.com/help-articles/structures/50598721576211.png)
    #### Net Force and Torque Check * **Sum Fx:** Should equal **0.00 N** (No net force in X). * **Sum Fy:** Should equal **0.00 N** (No net force in Y). * **Total Torque:** Calculated as $\sum (x \cdot Fy - y \cdot Fx)$ should equal 200 N·mm for $F = 1\text{ N}$ across 8 nodes at $r = 25\text{ mm}$. And that's it! You've successfully applied a circumferential force field to a cylindrical surface with verified zero net force and correct tangential direction at all evaluated points. Are you still having issues? Contact the support team, and we'll be happy to help! ## Download the example file * [Circumferential Force](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Circumferential%20Force.ntop) # Failed to apply periodic boundary conditions. Please check the Design volume Source: https://docs.ntop.com/help-articles/knowledge-base/structures/failed-to-apply-periodic-boundary-conditions-please-check-the-design-volume ## Issue: This error, "Failed to apply periodic boundary conditions. Please check the Design volume." came up when I was running the **Homogenize Unit Cell** block. ## Applies to: * Simulation * Homogenize Unit Cell ## Cause: This error is occurring because there is an issue with the Design Volume input. ## Solution: To avoid this issue, use the Bounding Box of the mesh being homogenized as the Design volume. This ensures there are no boundary condition errors. ## Keywords: *lattice volume boundary design homogenize cell periodic unit simulate issue failed conditions* # How are the loads distributed for bearing force? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-are-the-loads-distributed-for-bearing-force ## Question: How are the loads distributed for bearing force? ## Applies to: * Bearing Force ## Answer: Bearing Force uses the sinusoidal distribution method. The sum of all the forces applied on each face equals the magnitude of the defined force vector. So the force application is radial, which is approximately normal to a mesh of a cylinder. ![A Force diagram showing how bearing force is distributed on a cylinder's wall. ](https://files.learn.ntop.com/help-articles/structures/4410155341843.png) ## Keywords: *simulation question force load bearing distribution* # How can I set up a simulation? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-can-i-set-up-a-simulation ## Question: What are the steps involved in running a simulation (or analysis) in nTop? ## Answer: Simulations are a powerful tool, enabling you to use the results directly in your design by utilizing fields. From simple to complex, simulations follow a basic format. The image below represents the minimum setup for a simulation to run. ![A flowchart showing the necessary components for building an analysis setup](https://files.learn.ntop.com/help-articles/structures/41632671433235.png) The **Finite Element (FE) Mesh** is a volume mesh that adds integration points to each element within the mesh (either linearly or quadratically). A simulation needs at least one FE Mesh. * [How to Create an FE Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) The **Simulation Model** adds Material information by adding Domains and Connectors. The most simple Simulation Model will have a Domain that has an FE Mesh or Implicit Body, a Material Attribute, and has no Connectors. * [How to Create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) **Boundary Conditions (BCs)** can be thought of as the environment your part is in. They include Forces, Displacement Restraints, Heat Generation, Pressure, and more. You will typically need a minimum of two BCs to run a simulation. To use a BC, you need to be able to select the area it is acting upon by using the boundary selection tools. * [How to Select Boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) * [How to Select Boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) * [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) * [How to use a CAD Face in a boundary condition](/help-articles/knowledge-base/structures/how-to-use-a-cad-face-in-a-boundary-condition) After setting up these elements, you can run an Analysis. There is a choice of **Static**, **Buckling**, **Modal**, **Flow,** **Thermal,** and **Nonlinear Thermal Analysis**. Each analysis type utilizes these basic parts, with slight differences in addition. * * [How to Run a Static Analysis](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis) * [How to run a buckling analysis](/help-articles/knowledge-base/structures/how-to-run-a-buckling-analysis) * [How to run a Flow Analysis](/help-articles/knowledge-base/fluids/how-to-run-a-flow-analysis) * [Thermal and Thermal Stress Analysis](/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis) * [How to run a nonlinear thermal analysis](/help-articles/knowledge-base/structures/how-to-run-a-nonlinear-thermal-analysis) Once a simulation has run, the results can be utilized in a variety of ways. The results can be extracted as Point Maps and then converted into a Field to be fed back into the model. The results can also be exported to another program for further analysis. * [How to use Simulation Results to Create a Point Map or Field](/help-articles/knowledge-base/structures/how-to-use-simulation-results-to-create-a-point-map-or-field) * [How can I Export the Displacement Results from a Simulation?](/help-articles/knowledge-base/interop/how-can-i-export-the-displacement-results-from-a-simulation) ## Keywords: *analysis mesh simulation static boundary design fe model finite element condition thermal modal buckling bc analyze* # How do I use temperature units? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-do-i-use-temperature-units ## Question: [What temperature units does nTop support?](#h-01exsx7kafgxytzbfzx88fq32m) [How do the temperature units work?](#h-01exsx7zw7je2c3wmy2bxtnvdh) [How do I type in the units?](#h-01exsxd7hnrta10ebwvdsftxgh) [When do I use Absolute vs Relative?](#h-01exsx8nct0xzvnxt7bnd6jz1f) [Relative Temperature Property](#h-01exsx9byqnhy5xcrcnh34nt0e) [New Overloads](#h-01exsxb566hzhk1qpmdv78dvfw) [Temperature Point Map](#h-01exsxbpv7svnfz6teaz4jwvv4) ## Applies to: * Thermal Analysis ## Answer: #### **What temperature units are supported?** nTop supports Fahrenheit and Celsius temperature units, along with the Kelvin units that are already supported. #### **How do the temperature units work?** The temperature units are separated into **Absolute Temperature** and **Relative Temperature**. This is due to temperature units behaving differently than other units. Temperature units have a scale factor and an offset (since the 0 for K, C, and F is different) * * Other units (ex. Length): * Scale Factor: 1 in = 25.4 mm * Temperature: * Scale Factor and Offset: 100F = 5/9 K/F \* 100F +255.372 = 310.928K **Absolute Temperature:** Always shown with K, C, or F. Ex. The face of a part is 200C. * * Can't mix with other units * A new type was introduced for Absolute Units: **Temperature** and **Temperature Field**. This cannot be mixed with other units. It can be in K, C, or F, and it shows up as K, C, or F for units (depending on the temperature units settings) * ex. Applied Temperature input in **Applied Temperature Load** block * ex. Ambient temp input in **Radiation Boundary Load** block **Relative Temperature:** Always shown with K or dF. Ex. 20 Btu/(hr\*ft\*dF). * * Can be mixed with other units (ex., specific heat capacity J/kg\*dC) * If temperature units are used in a **Scalar** or **Scalar Field,** they will represent a Relative Temperature * 1K = 1dC = 1.8dF * In a scalar, your temperature can be entered as K, dC, or dF. The block will show units in K (for K and dC) or dF #### **How do I type in the Units?** If your temperature units are set to K, you can still type in values that include dF and dC (such as material properties that are taken from tables such as Btu/(h\*ft\*dF) or J/(kg\*dC)). **Kelvin:** K. Absolute and Relative temperatures are the same. **Celsius:** Absolute temperature is in C. For Relative temperature, you can type in dC, but since dC and K mean, it will be shown as K. **Fahrenheit:** F for Absolute and dF for Relative. #### **When do I use Absolute Temperature and Relative Temperature?** To decide this, you have to know what you are trying to achieve. Adding two Absolute Temperatures isn't supported since it doesn't make sense. However, it is common to add an Absolute Temperature with a Relative Temperature. * * **Absolute and Relative:** a wall is 200C and will increase by 20dC. 200C + 20dC = 220C ((273.15+200)K + 20K = 493.15K which is 220C) * **Absolute and Absolute:** for the same wall, 200C + 20C doesn't give the same result as the relative temperature because you need to convert to K. (273.15+200)K + (273.15+20)K = 766.3K which is not the same as the result above, therefore **adding Absolute and Absolute isn't supported.** * **Relative and Relative:** a wall is xC, and it will increase by 200dC and increase by another 20dC. 200dC + 20dC = 220dC, which works for specific cases (meaning the total temperature increase) #### **Temperature Properties** An Absolute temperature has a relative temperature property, and it auto-converts to it. Ex: * (Absolute) 1K is already in Kelvin and has a (Relative) 1K as a property. (K units are the same for Absolute and Relative) * (Absolute) 1C is 274.15K in Kelvin and has a (Relative) 274.15K (remember 274.15K or 274.15dC is the same) as a property. * (Absolute) 1F is 255.9278K in Kelvin and has a (Relative) 255.9278K (shown as 255.9278K or 460.67dF) as a property. Similarly, a relative temperature (Scalar) has an absolute temperature property, and it auto-converts to it. #### **New Overloads** * * For the **Add** and **Subtract** functions, there are two new overloads: “Temperature, Scalar” and “Temperature Field, Scalar Field” to deal with the mixed addition/subtraction of absolute and relative (ex. 200C +/- 20dC). * For the **Subtract** function, there are two new additional overloads: “Temperature, Temperature” and “Temperature Field, TemperatureField” to calculate the difference between two absolute temperatures to get the relative difference (200C - 180C = 20dC or 20K). #### **Temperature Point Map Update** * * This block is updated to output an Absolute temperature result * It can be used with **Field From Point Map** to create a Temperature Field ## Keywords: *field property map question unit temperature temp units Kelvin K C celsius fahrenheit F dF dC absolute relative* # How do I use the Mirror FE Mesh block? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-do-i-use-the-mirror-fe-mesh-block ## Question: I want to speed up the meshing process by mirroring an FE Mesh. How can I do this? ## Applies to: * Simulation * Topology Optimization ## Answer: This block mirrors an existing FE Mesh to cut down processing time for parts that are symmetrical. To use the Mirror FE Mesh block: **1.** Cut your part in half. * * Use the **Boolean Subtract** block with your part and a Plane for the parting line. This cuts your part at the Plane. ![An image depicting how to use a Plane to cut a box in half using the Boolean Subtract block.](https://files.learn.ntop.com/help-articles/structures/1500002292442.png) **2.** Create an FE Volume Mesh of the half part (this takes less processing time as compared to the full part). **3.** Add a Mirror FE Mesh block. * * Insert the **FE Volume Mesh** * Add a Plane at the parting line (use the plane that was used to cut your part). * Select Merge. ![A gif showing how inserting an FE Volume Mesh into the Mirror FE Mesh block results in a perfectly mirrored mesh.](https://files.learn.ntop.com/help-articles/structures/360103340153.png) ## Download the Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Mirror%20FE%20Mesh%20Example.ntop) ## Keywords: *mesh boolean subtract block meshing cut fe question process plane time speed mirrored mirror* # How to analyze a pipe for internal pressure Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-analyze-a-pipe-for-internal-pressure > [!NOTE] > > This article uses Simulation/Optimization and both of them in nTop have two requirements: FE Mesh and Boundary Conditions (BCs). Follow the instructions in the links below to prepare your model for simulation. > > **FE Mesh** > > * [How to create an FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) > * [How to create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) > > **Boundary Conditions (BCs)** > > * [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) > * [How to choose boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) > * [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) > * [How to use a CAD Face in a boundary condition](https://support.ntopology.com/hc/en-us/articles/4609628488083) ## Question: How can I simulate a pipe with internal pressure? ## Applies to: * Simulation ## Answer: 1. **Setup:** The initial setup shows our imported pipe as well as the CAD Faces we've defined. ![The starting geometry for this workflow example. An imported CAD part of a Pipe is used to extract important faces. The inner pipe face and end faces are extracted as variables. The pipe is also converted to an implicit body.](https://files.learn.ntop.com/help-articles/structures/48241353771027.png) 2. **Meshing:** Next, the **FE Volume Mesh** and **FE Domain** are created to apply material properties. ![The pipe model is converted to an FE Volume Mesh. The FE Solid Domain is then created using the FE Mesh and applied material properties.](https://files.learn.ntop.com/help-articles/structures/48241337578259.png) 3. **Boundary Conditions:** To finish the **Static Analysis** setup we apply the **Boundary Conditions** and then run the analysis. ![Boundary conditions are then applied to the model. For this example, we will apply pressure to the inner face and fix the end faces in place.](https://files.learn.ntop.com/help-articles/structures/48241353780755.png) 4. **Analysis:** Using the Deformation scale slider, you can see the effects of the Pressure on the pipe. ![A gif showing the static analysis results on the pipe. The pipe model expands as the deformation scale is increased.](https://files.learn.ntop.com/help-articles/structures/48243458278419.png) And that's it! You've successfully setup an internal pressure analysis. ## Download the Example file: * [Pressure Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Pipe%20Internal%20Pressure%20Example.ntop) ## Keywords: *simulation boundary internal analyze pressure conditions pipe* # How to apply prescribed displacement Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-apply-prescribed-displacement ## Objective: Learn how to use the **Displacement Restraint** block and apply the prescribed displacement ## Applies to: * Static Analysis ## Procedure: Before we start, Prescribed displacement is supported only in **Static Analysis** and is not supported for **Topology Optimization**. This article uses **Displacement Restraint** to apply prescribed displacement, but you can also use the **Cylidrincal Restraint** and **Point Restraint** blocks. > [!NOTE] > > This article uses Simulation/Optimization and both of them in nTop have two requirements: FE Mesh and Boundary Conditions (BCs). Follow the instructions in the links below to prepare your model for simulation. > > **FE Mesh** > > * [How to create an FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) > * [How to create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) > > **Boundary Conditions (BCs)** > > * [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) > * [How to choose boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) > * [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) > * [How to use a CAD Face in a boundary condition](https://support.ntopology.com/hc/en-us/articles/4609628488083) 1. We start with the **Simulation Model** required for our simulation. I recommend checking our surface meshing best practices ([What are surface meshing best practices?](/help-articles/knowledge-base/meshing-workflows/what-are-surface-meshing-best-practices)) to understand different parameters. ![An FE Mesh of a brake pedal infilled with lattice](https://files.learn.ntop.com/help-articles/structures/25554924596499.png) 2. The next step is to add two **Displacement Restraint** blocks, we will use one to fix the nodes of one end and apply the prescribed displacement in the other one. ![A diagram showing how the boundary conditions are being applied to the brake pedal](https://files.learn.ntop.com/help-articles/structures/41632514603411.png) The only difference in using this block for Prescribed Displacement is that you must enter the input value corresponding to the input you wish that represents how far you are moving the selected nodes/faces in that direction. The block will then apply the displacement value to all selected boundaries attached to the specified geometry. The inputs of the **Displacement Restraint** block are: * Boundary: The FE Boundary entities containing the nodes to restrain. * Ux: Translational restraint along the x-axis. * Uy Translational restraint along the y-axis. * Uz: Translational restraint along the z-axis. * Rx: Rotational restraint along the x-axis. * Ry: Rotational restraint along the y-axis. * Rz: Rotational restraint along the z-axis. * Frame: The reference frame for the input translational and rotational components. If a Frame is not specified, the components are in the global coordinate system. > [!NOTE] > > *Note: The displacement input value will not be divided by the number of nodes in the boundary selected.* 3. Run the **Static Analysis** ([How to run a static analysis](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis)), and you can see that the nodes selected for prescribed displacement have moved the input -10mm in the Z direction. You can switch the HUD drop-down to Displacement, Stress, Strain, and Reaction Forces to see the values when applying the prescribed displacement. ![Results of the static analysis performed on the brake pedal](https://files.learn.ntop.com/help-articles/structures/41632514605587.png) And that's it! You have successfully applied prescribed displacement. Do you still need help? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Displacement%20Restraint%20Example.ntop) ## Keywords: *analysis static restraint fixed displacement prescribed dof* # How to apply torsional load Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-apply-torsional-load ## Objective: How to apply torsion load? How to use Point moment block ## Applies to: * Point Moment ## Procedure: 1. Prepare your model for Static Analysis. These articles have detailed instructions on [How to create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) and [How to run a static analysis.](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis) 2. Add a **Point Moment** block to the **Boundary Condition List** ![The Point Moment block](https://files.learn.ntop.com/help-articles/structures/41631810977171.png) Learn how to select the **Boundary** input following these articles [How to select boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body), [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill), and [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) 3. The Moment is applied at the center of the selected nodes and in the direction defined in the **Moment** input. The moment follows the right-hand thumb rule when applied. ![A diagram showing how a moment is being applied to a Simulation Model](https://files.learn.ntop.com/help-articles/structures/4411901770387.png) ![A gif showing the displacement results of a static analysis. The gif shows how changing the scale factor of the static analysis results causes the model to twist around the moment axis.](https://files.learn.ntop.com/help-articles/structures/4411903269011.png) And that's it! You've successfully applied torsional load. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Torsional%20Load%20Example.ntop) ## Keywords: *analysis fea static point how-to load moment point moment torsion torsional* # How to create a material Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-create-a-material ## Objective: Learn how to create a material with specific properties. ## Applies to: * Simulation * Topology Optimization * Creating Simulation Models ## Procedure: There are three options for materials in nTop: **Isotropic**, **Orthotropic**, or **Anisotropic** material. ![An image showing the available material blocks in nTop. The 3 material blocks are the Isotropic Material, Anisotropic Material, and Orthotropic Material blocks.](https://files.learn.ntop.com/help-articles/structures/28922490038291.png) Isotropic materials have the same properties in every direction, whereas orthotropic materials have properties that vary in three directions, and Anisotropic materials have different properties in different directions. Steel and most metals are examples of isotropic materials. Carbon fiber-reinforced polymers are an example of an orthotropic material. Wood is an example of an anisotropic material with different strengths along its grain than across its grain. nTop also has a selection of sample materials under the Design Analysis section in the Ribbon. 1. Determine whether your material is isotropic, orthotopic, or anisotropic, and add the respective block. In this example, we are going to build **Inconel 625**, an isotropic material. * * Add an **Isotropic Material** block. 2. Determine which properties you want to use: * * **Linear Elastic Property** * Young's modulus * Poisson's Ratio * **Thermal Expansion Property** * Alpha * **Thermal Property** * Conductivity * Specific heat 3. Add the Property blocks to the **Isotropic Material Property List**. Use the '+' to add more inputs to the list. * * Add the **Isotropic Linear Elastic Property** * Add the **Isotropic Thermal Property** ![An Isotropic Material block that contains an Isotropic Linear Elastic Property block and an Isotropic Thermal Property block nested inside.](https://files.learn.ntop.com/help-articles/structures/28922476382483.png) 4. Add the values for each input to create the material. ![An Isotropic Material block that contains an Isotropic Linear Elastic Property block and an Isotropic Thermal Property block nested inside. The input values have been inserted for all available inputs.](https://files.learn.ntop.com/help-articles/structures/28922476394259.png) If you are using a material frequently, we recommend creating it in a standalone Notebook and saving it as a Custom block with no inputs to be made as Custom block. You should use an **Orthotropic Stiffness Tensor** block if your material is Orthotropic. This block defines an Orthotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship sigma\_i = C\_ij \* epsilon\_j (i,j=1,6), where sigma = (sigma\_xx, sigma\_yy, sigma\_zz, sigma\_yz, sigma\_zx, sigma\_xy) and epsilon = (epsilon\_xx, epsilon\_yy, epsilon\_zz, gamma\_yz, gamma\_zx, gamma\_xy). > [!NOTE] > > *Note: Providing scalar fields as inputs will result in spatially varying material properties.* ![The Orthotropic Stiffness Tensor block](https://files.learn.ntop.com/help-articles/structures/28923207196819.png) If you want to create an **Anisotropic Material**, you need to input an **Anisotropic Stiffness Tensor**. Defines an Anisotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship ![Anisotropic Stiffness Tensor](https://files.learn.ntop.com/help-articles/whats-new/AM1.png) Cij: Material Stiffness Component i,j > [!NOTE] > > *Note: The block has a total of 21 material stiffness component inputs, as indicated in the following image* ![Anisotropic Stiffness Tensor](https://files.learn.ntop.com/help-articles/whats-new/AM2.png) > [!NOTE] > > *Note: Providing scalar fields as inputs will result in spatially varying material properties.* ![The Anisotropic Stiffness Tensor block](https://files.learn.ntop.com/help-articles/structures/28923207202707.png) Similarly, we have **Anisotropic Thermal Property** and **Anisotropic Thermal Expansion Property** blocks to define an anisotropic material's thermal properties, such as conductivity, specific heat, and thermal expansion properties. ## Fluid Material If you are creating a material for a **Fluid Domain**, fluids are isotropic materials. You will then need to input an Isotropic Fluid Property (BETA) block to properly define the fluid. ![The isotropic material block with an isotropic fluid property block nested inside.](https://files.learn.ntop.com/help-articles/structures/41633786610323.png) And that's it! You've successfully created a material. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Inconel%20625%20Material%20Example.ntop) ## Keywords: *analysis property create design fluid heat isotropic material linear thermal how-to a orthotropic elastic youngs modulus poissons ratio conductivity specific* # How to create a Simulation Model Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-create-a-simulation-model ## Objective: Learn what a Simulation Model is and how to create one. ## What is a Simulation Model? A **Simulation Model** brings together all of the necessary elements for the part to be analyzed, whether in simulation, optimization, or further analysis. A **Simulation Model** is built up of **Domains** and Connectors. There are several different types of domains depending on the type of simulation being performed. Most domains contain an input body type and **Attributes**, while the **Lattice Domain** only requires a **Material** instead of an **Attribute**. Connectors are made up of **Tie Constraints**, **Structural Bonded Contacts**, or **Thermal Bonded Contacts** that allow the analysis of multiple domains. A **Simulation Model** does not need a connector to run if it only has one FE Mesh. If it has multiple domains, there will always be one less connector compared to the total number of domains. | **Model:** | **Domain Type:** | **Body Input:** | **Attribute:** | | - | - | - | - | | Simulation Model | Lattice Domain | Lattice | N/A | | Lattice Domain | Lattice Mesh | N/A | | | Fluid Domain | Implicit Body | Fluid Attribute | | | Solid Domain | FE Mesh | Beam/Point/Shell/Solid Attribute | | ## Procedure: **1. Define a Material:** The Simulation Model needs a Material block to assign properties to the part. nTop has some preset common materials available, or you can build your own Isotropic or Orthotropic Material. * Add the **Isotropic Material** block. * Add an Isotropic Material Property by double-clicking in the Property input. * Add the **Isotropic Linear Elastic Property** and enter the following values: * Young's modulus: 2.21e+13 Pa * Poisson's ratio: 0.3 ![A gif example showing how to create a material using the Isotropic Material block](https://files.learn.ntop.com/help-articles/structures/41632543887379.png) **2. Add a Solid Domain and Material Attributes:** This step assigns the material properties to the mesh. Attributes define the material, thickness, frame, and region in which it occurs. Three types of Attributes can be chosen: Solid, Beam, and Shell. Each type allows for the selection of different elements. * Add a **Solid Domain** block and insert your **FE Mesh** into the Mesh input ([from this tutorial](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh)). * Double-click in the Attributes input and add a **Solid Attribute**. * Drag the Material from the last step into the Material input. ![A gif example showing how to create a Solid Domain using an FE Volume Mesh and the Isotropic Material that was created in step 1](https://files.learn.ntop.com/help-articles/structures/41632569380371.png) **3. Create a Simulation Model:** The last step is to add a **Simulation Model** block. In this example, we are using only one domain, so we don't need to expand the Domain list. Drag and insert the **Solid Domain** from the last step into the Domain input. For this example, we will be leaving the [Connectors](/help-articles/knowledge-base/structures/methods-for-connecting-multiple-fe-meshes-in-an-simulation-model) empty. ![A Simulation Model created using the Solid Domain](https://files.learn.ntop.com/help-articles/structures/41632569382931.png) And that's it! You've successfully created a Simulation Model. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! You can move on to [the next article](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) in this series and learn how to select regions of an FE Mesh. ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Simulation%20Model%20Example.ntop) ## Keywords: *FE Material analysis simulation lattice property create beginner model finite element fluid optimization constraint solid attribute isotropic material component tie set up connector attributes starting domain* # How to create a Simulation Model for a simple shell lattice Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-create-a-simulation-model-for-a-simple-shell-lattice ## Objective: Set up a simulation for a Shell Lattice with a solid body and learn how to use the Shell Attribute. ## Applies to: * Cutting down meshing time * Simulating Shell Lattices ## Procedure: **1. Set up:** We start with an imported CAD Model: * The CAD bodies have been converted to implicit bodies * The volume lattice was generated using the inner implicit body region **2.** **FE Mesh:** To simulate our geometry, we need two separate FE Meshes. One for the lattice and one for the solid border. * Add an **FE Lattice Mesh** block and input the Interior Lattice. * Set the Geometric Order to Linear and leave the Subdivisions as 1. ![The FE Lattice Mesh that is generated using the inner volume lattice.](https://files.learn.ntop.com/help-articles/structures/48214212837011.png) * * [Create an **FE Volume Mesh** for the outer border](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh). **3.** **Simulation Domains:** The Simulation Model needs a Domain for every mesh. * Create the Shell Domain: Add a **Solid Domain.** * Input the **FE Lattice Mesh** from Step 2. * Input a **Shell Attribute.** * Set the Thickness and Material. ![The Solid Domain and Shell attribute blocks that are used to define the lattice region.](https://files.learn.ntop.com/help-articles/structures/48214229441299.png) * * Create the Outer Solid Domain: Add a **Solid Domain.** * Input the **Outer FE Mesh** from Step 2. * Input a **Solid Attribute.** * Set the Material. ![The Solid Domain and Solid Attribute blocks that are used to define the outer region.](https://files.learn.ntop.com/help-articles/structures/48214229444883.png) **4.** **Simulation Model - Tie Constraint:** Any Simulation Model with more than one domain needs a Tie Constraint to define how the domains are tied together. * Add a **Tie Constraint** block in the Connector input. * Add an **FE Boundary by Body** block to the Independent and Dependent Boundary inputs. * For the Independent Boundary, use the outside border. Use the [**FE Boundary by Body**](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) block to select it. * For the Dependent Boundary, use the Shell Lattice. Use the **FE Boundary by Body** block to select where the Shell touches the Outer border. * Set the Radius on the **Tie Constraint** to 1mm to allow for the Shell Lattice to be selected. ![The Simulation model containing the Shell and Outer Solid Domains. The Domains are connected using the Tie Constraint.](https://files.learn.ntop.com/help-articles/structures/48214212842131.png) The Shell Lattice is now all set up! After step 4, the steps to run the simulation are the same. All you need to do is add [**Boundary Conditions**](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) and [**run the simulation**](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis). Read the articles linked above for more information on those steps. Are you still having issues? Reach out to the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Simulation%20Model%20for%20Shell%20Lattice%20Example.ntop) ## Keywords: *analysis mesh simulation lattice volume shell fe constraint solid attribute tie simulate meshes* # How to create a simulation model with multiple materials Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-create-a-simulation-model-with-multiple-materials ## Objective: Learn how to create a Simulation Model that has more than one material. ## Applies to: * Simulation * Topology Optimization ## Procedure: Material is applied to a **Simulation Model** by using Attributes. Each Attribute adds a new material. To add more than one material to a **Simulation Model**, you need a Region to define where that material is applied. If you only have two attributes, then one of them doesn't need a Region. Instead, that material will be applied everywhere the other material isn't. Check out the image below to see how you would set up two and three material attributes. ![The image showcases how to setup a simulation model with multiple materials. There are two setups, the one on the left has two materials and the one on the right has three materials. The image is meant to show how utilizing multiple materials requires the user to define a region for all additional materials. ](https://files.learn.ntop.com/help-articles/structures/41633644368275.png) **1. Set-Up:** Download the example file and start with the FE Mesh already created. **2.** **Simulation Model:** * * Add a **Simulation Model** block. * Add a **Solid Domain.** * Input the **FE Mesh** variable. * Click the **+** on the **Attribute List** to add another Attribute. * Input a **Solid Attribute** into each input in the **Attribute List.** ![The gif shows how to setup a simulation model using a solid domain and multiple solid attributes.](https://files.learn.ntop.com/help-articles/structures/41633644371091.png) **3. Material:** * * In the first Solid Attribute, add the **Al 6061-T6 Material** to the Material input. * Add the **Stainless Steel 316** material to the second **Solid Attribute**. * An error will pop up saying you need to set a Region for one of the Attributes. **4. Region:** * * Add an **FE Region by Body** in the second **Solid Attribute.** * Set the Mesh to the **FE Mesh** variable. * Set Entity to Cells. * Set Body to the **Grip** Implicit Body variable. This will set the Grip part to be Stainless Steel, and set the rest of the pen body to be Aluminum. ![The gif shows an example error a user may encounter when setting up a simulation model. Two attributes with materials are added to the solid domain. The domain throws an error because neither of the attributes have an assigned region.](https://files.learn.ntop.com/help-articles/structures/41633637847443.png) And that's it! You've successfully set up a **Simulation Model** with multiple materials. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Simulation%20Model%20with%20Multiple%20Materials%20Example.ntop) ## Keywords: *mesh simulation create body fe model multiple regions solid attribute component region materials attributes domain aluminum steel stainless* # How to create an FE Mesh for a complex shell lattice Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-create-an-fe-mesh-for-a-complex-shell-lattice ## Objective: Create an FE Mesh for a Trimmed Shell Lattice. ## Applies to: * Simulating lattices * Shell Lattice is too complex to use the FE Lattice Mesh block (Invalid Mesh Topology error appears) ## Procedure: 1. Start with a **Trim Lattice** block to create a lattice. 2. Open the Properties of the **Trim Lattice** block and extract the 'faces as mesh' chip into the Notebook. * * To get to this property, expand thick lattice > lattice > faces as mesh. 3. Add a **Simplify Mesh by Amount** block. * * Set the Amount to 0.00001. 4. Add an **FE Surface Mesh** block. * * Set the Geometric order to Quadratic. ![The nTop notebook next to an FE Surface Mesh.](https://files.learn.ntop.com/help-articles/structures/41633744981651.png) And that's it! You've successfully created the FE Mesh for a complex shell lattice. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/FE%20Mesh%20for%20Complex%20Shell%20Lattice%20Example.ntop) ## Keywords: *mesh surface lattice shell fe trimmed model complex simplify simulate trim how-to extract quadratic geometric order invalid* # How to create CFD Boundaries Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-create-cfd-boundaries ## Objective: Learn how to use the block **CFD Boundary on FE Mesh** to create named boundaries and export them with your FE Mesh. Setting up CFD boundary zones allows you to modify the underlying geometry in nTop without having to manually update the boundary conditions in the CFD application, thereby enabling automated design workflows. ## Applies to: * Ansys Fluent * nTop 3.4+ ## Procedure: **1.** Start with an [FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) of your design. **2.** Choose boundaries * * Decide what boundaries you need to define for your analysis. Use either [**FE Boundary by Body**](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) or [**FE Boundary by Floodfill**](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) to choose the areas on your mesh. * Make sure to use the **Faces** as the entity in your selection, since the CFD Boundaries can only be applied to volumetric elements **3.** Create CFD Boundaries * * Add a **CFD Boundary on FE Mesh** block (make sure to have [beta blocks](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) turned on) * Insert one of the boundary selection blocks into the FE set field * Choose the most accurate CFD Boundary type for your selection * ![A list of the available Type options for the CFD Boundary on FE Mesh block](https://files.learn.ntop.com/help-articles/structures/4402792384147.png) * Repeat this process for each selection ![An image showing how to use FE Boundary by Body blocks to select portions of a mesh at inlets and outlets. The Inlet and Outlet boundaries are then used for the CFD Boundary on FE Mesh blocks to specify the boundary type.](https://files.learn.ntop.com/help-articles/structures/4402792384787.png) **4.** Export Mesh and Boundaries together * * Add in the beta block, **Export FE Mesh to CFD** to allow the FE sets to be exported with your mesh. To use this block, your FE Mesh needs to be an **FE Volume** mesh and not an **FE Surface** mesh. * Insert the **FE Volume Mesh** * Add the block **CFD Boundary List** into the Boundaries input. Insert your boundaries into the List * Choose a path and save your file as a .msh ![Using the Export FE Mesh to CFD block to export the CFD boundaries that were just created at the defined inlet and outlet](https://files.learn.ntop.com/help-articles/structures/4402792580115.png) And that's it! You've successfully created and exported CFD boundaries. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/CFD%20Boundary%20Example.ntop) ## Keywords: *analysis mesh boundary design fe fluid set beta fluent cfd how-to zone outlet inlet* # How to determine a Nastran classification for an nTop block Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-determine-a-nastran-classification-for-an-ntop-block ## Objective: To determine a force/restraint block's Nastran classification. ## Applies to: * Nastran Simulations * nTop Simulations ## Solution: 1. This tutorial begins with a pre-setup **Export Static** **Analysis** block that contains one **Point Force** block as the boundary condition and an **FE Model** block of an aluminum cube. To learn how to set up a simulation, please consult this [article](/help-articles/knowledge-base/structures/how-can-i-set-up-a-simulation). ![An example static analysis with one applied Point Force boundary condition.](https://files.learn.ntop.com/help-articles/structures/8753446595731.png) 2. Export the results as a Nastran file type (\*.bdf, \*.dat, \*.nas). ![Export the static analysis using the Export Static Analysis block. Save the results as a Nastran file type](https://files.learn.ntop.com/help-articles/structures/8753711927699.png) 3. Open the file using a text editing program. For this example, I will be using Notepad++. ![The static analysis results file opened in a text editing software.](https://files.learn.ntop.com/help-articles/structures/8753952804883.png) 4. Last, scroll down the document until you pass the CTETRA lines. CTETRA references a four-sided solid element connection, so all of these lines reference the solid object. Since the only force we applied was the **Point Force** block, we can see that the Nastran classification is RBE3. ![A gif showing how to find the nastran classification for the Point Force block. You scroll down in the text document until the point force information is reported. The classification in this example is RBE3.](https://files.learn.ntop.com/help-articles/structures/8754155082131.png) And that's it! You've successfully determined a block's Nastran classification. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Attachment: * [Nastran Classification Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Nastran%20Classification%20for%20Block%20Example.ntop) ## Keywords: *simulation how to classification RBE3 RBE2 CTETRA Nastran* # How to determine the heat flow on a specific part of your model Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-determine-the-heat-flow-on-a-specific-part-of-your-model ## Objective: Learn how to determine the heat flow on a specific part of your model. ## Applies to: * Thermal analysis * Simulation * Heat Exchangers ## Procedure: 1. After running a [**Thermal Analysis**](/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis) use the results to create a **Heat Flux Point Map.** 2. Define a region that intersects with the areas you want to determine the heat flux in. For example, a **Box from Corners**, thickening a CAD surface, or any other volume. 3. Use the **Filter Points by Volume** block with the **Heat Flux Point Map** and Region as inputs. 4. Extract the values from the Properties of the filter block and post-process as you need to (average, sum, etc.) ![The nTop notebook example of how to create a Heat Flux Point Map. The image also shows the Thermal Analysis model.](https://files.learn.ntop.com/help-articles/structures/4408190379923.png) And that's it! You've successfully determined the heat flux on a specific area. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Heat%20Flow%20on%20Part%20of%20Model%20Example.ntop) ## Keywords: *points calculate heat flow filter thermal flux how-to sum* # How to display and view imported CFD data Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-display-and-view-imported-cfd-data ## Objective: Learn how to view and display imported CFD data in nTop. This is generally the first step to utilizing external fields in nTop to enhance and optimize designs based on specific field variables, such as pressure, velocity, stress, and heat flux. Procedure: There are two main avenues for accomplishing the above Objective. The first method is importing a CSV file, and the second is importing the results files directly. First, let's start with the CSV file. We generate and export a CSV file from your CFD results to do this. You can learn how we do this in [Ansys's CFD Post](/help-articles/knowledge-base/interop/how-to-export-variables-in-csv-format-from-ansys-cfd-post). **Part 1: Working with a CSV File** Once the CSV file is generated we use the **Import Scalar Point Map** or **Import Vector Point Map** blocks to bring in the appropriate point map, both blocks can be seen in Image #1 below. More information about these blocks can be found [here](https://support.ntopology.com/hc/en-us/articles/1500008558501-How-to-import-and-use-a-Point-Map). ![The Import Scalar Point Map and Import Vector Point Map blocks](https://files.learn.ntop.com/help-articles/structures/4406854221459.png) Image #1: Scalar and Vector Point Map blocks. Once the inputs of File Path and Units are satisfied, as in Image #2 below, you can view the imported data, as in Images #3-#5. ![2 Import Scalar Point Map blocks and one Import Vector Point Map block.](https://files.learn.ntop.com/help-articles/structures/4406854495507.png) Image #2: Filled in point map blocks. ![A gif showing the point map data of one of the imported scalar point maps.](https://files.learn.ntop.com/help-articles/structures/4406864282899.png) Image #3: 3D Scalar Point Map ![A gif showing the point map data of the imported vector point map.](https://files.learn.ntop.com/help-articles/structures/4406864653459.png)Image #4: 3D Vector Point Map, in a Cross-Sectional View ![A gif showing the point map data of the second imported scalar point maps.](https://files.learn.ntop.com/help-articles/structures/4406862738963.png) Image #5: 2D Scalar Point Map **Part 2: Working with Fluent Results File** The second way to view CFD results is by importing the CFD results files directly. This is done by using the **Import CFD Analysis Results** block, seen in Image #6 below. **![The Import CFD Analysis Result block](https://files.learn.ntop.com/help-articles/structures/4406862785427.png)** Image #6: Import CFD Analysis Result block Once the Case and Data file paths and the Unit inputs are satisfied, you can view the imported data, see Image #7 below. The example images below are from a Conjugate Heat Transfer analysis of a cross-flow HEX with a simple TPMS Core. Subsequent blocks are required to discretize the predefined variables that get imported from the CFD results file (i.e., Pressure, Temperature, Density). Images #8-11 below show the subsequent blocks and their outputs. ![An image of a Density Point Map, Pressure Point Map, and Temperature Point Map blocks. These blocks utilize the imported CFD analysis results to create point maps.](https://files.learn.ntop.com/help-articles/structures/4406865261971.png) Image #8: Density, Pressure, and Temperature Point Map from analysis results. ![The visualized results of the Import CFD Analysis Results block.](https://files.learn.ntop.com/help-articles/structures/41635620112531.png)Image #9: Cross Section of Import CFD Results from a Conjugate Heat Transfer Analysis ![The visualized results of the Pressure Point Map block.](https://files.learn.ntop.com/help-articles/structures/41635633646867.png)Image#10: Cross Section of the Point Map values related to Pressure ![The visualized results of the Temperature Point Map block](https://files.learn.ntop.com/help-articles/structures/41635633652371.png) Image#11: Cross Section of the Point Map values related to Temperature > [!NOTE] > > **Note:** 1. While we are currently limited to Pressure, Temperature, Density variables via the **Import CFD Analysis Result** block, any variable we can export into a CSV format can be utilized in nTop to enhance designs. 2. At the moment is it recommend that you export a CSV file and bring it in, as seen in Part 1 of this article. That should do it! If you followed the steps above you should now know how to Import both CSV Files as well as your Case and Data files! If you still have questions the [support team](https://support.ntopology.com/hc/en-us/requests/new) would be happy to help you. ## Keywords: *imported Point Map view fluid data CFD CSV computational dynamics* # How to export reaction forces Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-export-reaction-forces ## Objective: Using this custom block, learn how to export reaction forces from a simulation analysis. ## Applies to: * Static Analysis ## Solution: This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: * **Learning Center course:** * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) * **Articles:** * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) 1. This tutorial starts with an existing **Simulation Model** and **Static Analysis**. If you are unfamiliar with how these blocks work, please review the following articles for the [Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) and the [Static Analysis](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis). ![Start with a completed static analysis.](https://files.learn.ntop.com/help-articles/structures/48247701256339.png) 2. The next step is to define your reaction force points for the custom block. Open the properties of the **FE Volume Mesh** block and extract its vertices from the volume mesh. ![In the FE Volume Mesh block, expand the properties panel. Click the Volume Mesh property to expand it, and extract the vertices property chip. Place the chip in the Restraint Nodes input of the Reaction Force Point Map block.](https://files.learn.ntop.com/help-articles/structures/48247701260051.png) 3. The final step is to add an **Export Point Map** block to export your results. ![Export the Reaction Force Point Map using the Export Point Map block.](https://files.learn.ntop.com/help-articles/structures/48247717927059.png) ## Attachment: * [Custom Block](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/CB-Reaction%20Forces%20Point%20Map.ntop) * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Export%20Reaction%20Forces%20Example.ntop) ## Keywords: *simulation static export map custom block fe point reaction forces* # How to extract the scalar field from a vector field Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-extract-the-scalar-field-from-a-vector-field ## Objective: Learn how to get a scalar field from a vector field ## Applies to: * Design analysis, fields ## Procedure: To turn the Vector field into a Scalar field: * * Open up the Property of the **Field from Point Map** block * Extract the Length Chip and input it into the Notebook (this is your scalar field) ![The properties panel of a Field from Point Map block. The Length property chip is being extracted and placed into the notebook as a scalar field variable.](https://files.learn.ntop.com/help-articles/structures/1500006224302.png) Below is the image of the original Vector field: ![An image of the vector field of the brake pedal static analysis.](https://files.learn.ntop.com/help-articles/structures/1500006224502.png) Below is the image of the resulting Scalar field: ![An image of the scalar field of the brake pedal static analysis.](https://files.learn.ntop.com/help-articles/structures/1500006341261.png) And that's it! You've successfully extracted a scalar field from a vector field. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *field map convert point fields scalar vector how-to extract magnitude* # How to find the maximum and minimum stress values Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-find-the-maximum-and-minimum-stress-values ## Objective: How to find the maximum and minimum stress values ## Applies to: * Static Analysis ## Procedure: 1. Run a **Static Analysis**([How to run a static analysis](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis)) 2. Click the **Min** and **Max** icon in the **HUD** to enable tags. When visibility is toggled on for any simulation analysis blocks, you can quickly identify the location of minimum and maximum values by selecting the “Min/Max” icon in the HUD. The location of the minimum value will be automatically identified with a blue tag, while the maximum value will be identified with a red tag. ![An image of static analysis results on a brake pedal model. The image is highlighting how you can use the Min/Max button in the analysis results HUD to identify the minimum and maximum points of the selected results.](https://files.learn.ntop.com/help-articles/structures/8874519901971.png) 3. Alternatively, Insert a **Von Misses Stress Point Map** block, drag and drop the Static Analysis from the previous step in the **"Analysis result:"** field. Now use the **Min** and **Max** blocks and drag and drop the values scalar list from the stress point map. ![A gif showing how you can find the minimum and maximum values of a static analysis. The analysis results are converted into a Von Mises Stress Point Map. Then the list of values of that point map are placed into Min and Max blocks. These block automatically determine the min and max values based on the data set.](https://files.learn.ntop.com/help-articles/structures/4417641457939.png) And that's it! You've successfully found out the maximum and minimum stress values. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *stress point map max min value how-to minimum maximum* # How to import and use superelements Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-import-and-use-superelements Superelements in finite element analysis (FEA) are pre-computed structural components that serve as efficient building blocks in larger simulations. They provide a powerful method for achieving computational efficiency and modularity in structural analysis and topology optimization. ![](https://files.learn.ntop.com/help-articles/structures/50598743795091.png) A superelement is essentially a condensed mathematical representation of a complex structural component. The key concept is that internal degrees of freedom are eliminated, while only the boundary or connection points retain their full degrees of freedom. The interior structural behavior is captured and preserved through reduced mathematical matrices. ## **Practical Applications** Superelements are particularly valuable in several scenarios: **Repetitive Components**: When identical parts appear multiple times in an assembly—such as bolts, brackets, or standard components—you can create one superelement and reuse it throughout the model, eliminating redundant computation. **Computational Efficiency**: Large assemblies become significantly more manageable when complex subcomponents are replaced with their superelement equivalents. This approach dramatically reduces: * Solution time * Memory requirements * Model complexity **Hierarchical Analysis**: Perform detailed analysis on individual components first, then use those results as superelements in system-level studies. This enables a structured approach to complex multi-scale problems. ## **How to use them in nTop** nTop enables you to import existing, pre-computed stiffness and mass matrices from other analysis tools and assign them as FE domains in analysis and optimization models to streamline multi-component assembly simulations. The FE Points of the superelement define its boundaries, which can be connected to other domains using connectors or used for applying boundary conditions. ## **Importing Superelements** You can import existing superelements using the **Import Superelement** block, which accepts the following inputs: ### **Required Files** * **DMIG File**: Path to a *.bdf* file containing the superelement's stiffness, mass properties, and external grid IDs * **Grid File**: Path to the *.fem* file defining the global coordinates of the superelement's external grid points ### **Configuration** * **Unit System**: Specify the unit system used for the imported superelement to ensure consistent translation of properties into your current analysis unit system ## **Download the Example file:** [Example File](https://storage.googleapis.com/files-learn/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Import%20Superelement%20of%20Aircraft%20Wing.zip) ## Keywords: *import Simulation FEA* # How to run a buckling analysis Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-run-a-buckling-analysis ## Objective: Learn how to perform a Buckling Analysis. > [!NOTE] > > This article uses Simulation/Optimization and both of them in nTop have two requirements: FE Mesh and Boundary Conditions (BCs). Follow the instructions in the links below to prepare your model for simulation. > > **FE Mesh** > > * [How to create an FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) > * [How to create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) > > **Boundary Conditions (BCs)** > > * [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) > * [How to choose boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) > * [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) > * [How to use a CAD Face in a boundary condition](https://support.ntopology.com/hc/en-us/articles/4609628488083) **1. Run a Buckling Analysis** * * Add a **Buckling Analysis** block * Insert the [Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) into the Model input * Add the [Force BC](https://support.ntopology.com/hc/en-us/articles/360055857533) to the BC List input * Press the '**+**' in the BC List to add another input * Insert the [Restraint BC](https://support.ntopology.com/hc/en-us/articles/360055857533) into the new input slot *Boundary conditions must contain a displacement restraint for at least one node. Otherwise, the model isn't fixed in space.* * * Enter the Maximum Number of modes you wish to calculate. * You can bound the Min and Max Eigenvalues, but it will return an error if there are no eigenvalues in that range. > [!NOTE] > > **Note:** This is a ***linear buckling analysis***. All inertial and damping forces are neglected. To get the most accurate results, it is recommended that a *Quadratic* geometric order FE mesh be used with any analysis. * The loads are assumed to be applied slowly until the model reaches a state of equilibrium (static assumption), and the relationship between loads and displacements is assumed to be linear. ![A structure with yellow arrows on top to indicate an applied boundary load. The bottom of the structure has red arrows indicating displacement restraints.](https://files.learn.ntop.com/help-articles/structures/38043830310803.png) **2. Reading the Results** Once you run an analysis, a Heads Up Display (HUD) will appear, showing the results. The HUD allows you to toggle through Total displacement and Displacement across the X, Y, and Z axes. * The result of the buckling simulation ('buckling load factor" property in the block's properties) is a list of factors by which the model's load(s) must be multiplied to reach the critical buckling load for each mode. * The results are ranked by the intensity of each mode, from high to low. ![A gif showing buckling analysis results. The results move and change as the sliders are adjusted in the HUD.](https://files.learn.ntop.com/help-articles/structures/41633510214675.png) And that's it! You've successfully run a buckling analysis. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Buckling%20Analysis%20Example.ntop) ## Keywords: *analysis fea design displacement buckling value how-to eigen* # How to run a nonlinear thermal analysis Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-run-a-nonlinear-thermal-analysis ## Objective: Learn how to run a nonlinear thermal analysis. ## Applies to: * Thermal Analysis ## Procedure: > [!NOTE] > > **Note:** This workflow uses Beta blocks. Learn how to turn on Beta blocks by reading: [What are beta blocks?](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) #### Nonlinear vs. Linear Thermal Analysis Nonlinear thermal analysis has the same setup as linear thermal analysis, except for the material properties and final analysis block. To run a nonlinear thermal analysis, we need nonlinear material properties. Before starting, ensure you understand how to set up an analysis in nTop. Refer to this article for more information: [How can I set up a simulation?](/help-articles/knowledge-base/structures/how-can-i-set-up-a-simulation) #### 1. Define nonlinear thermal properties. * * Use the **Isotropic Thermal Property** block (or the **Orthotropic Thermal Property** block) to define nonlinear thermal properties. In this example, we use the **Isotropic Thermal Property** block with its nonlinear overload (Dictionary, Dictionary). * Since we need several values to create a nonlinear thermal property, we use an overload with Dictionary input types. A **Dictionary** is a mapping block where you can form a set of keys and correspond them to key values. This is what we use to create the nonlinear values. * Use the nonlinear overload by using the down chevron and choosing (Dictionary, Dictionary). ![The Isotropic Thermal Property block](https://files.learn.ntop.com/help-articles/structures/5552053770003.png) * * * Double-click in the Conductivity input and select 'Dictionary' * Double-click in the Keys input and select 'Temperature List' * Double-click in the Keys input and select 'Scalar Field List' * Select the icon chevron after and change the input to 'Scalar List' (since we don't need a Scalar Field List). ![A gif demonstrating the overload of the Isotropic Thermal Property block. Dictionary blocks are added to the conductivity and specific heat inputs ](https://files.learn.ntop.com/help-articles/structures/5552556128787.png)![An example of the Isotropic Thermal Property block with infilled temperature values.](https://files.learn.ntop.com/help-articles/structures/5551856129683.png) #### 2. Complete the [FE Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) and choose your [Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions). * * Read here for more information on thermal boundary conditions: [How to run a thermal analysis.](/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis) * In this example, we use two **Temperature Restraint** blocks and a **Surface Heat Flux** block for our Boundary Conditions. #### 3. Run the analysis. * * Add a **Nonlinear Thermal Analysis** block. * This block performs a nonlinear steady-state heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. All transient effects of heat transfer are neglected, and the temperatures are reported assuming that the system has reached equilibrium. * Set the Maximum iterations. This is the maximum number of times the analysis will run. * The values for Solution convergence and Reaction convergence are auto-populated. * Optional: Add a value for the Output step. This outputs the results at every Nth time iteration. In this example, our **Nonlinear Thermal Analysis** block has the following inputs: ![An example of the Nonlinear Thermal Analysis setup](https://files.learn.ntop.com/help-articles/structures/5599837255443.png) Our results are shown in a Heads-Up-Display (HUD). You can visualize the Temperature, Heat Flux, and Thermal Reaction Flux in the HUD. You can access these properties by opening the Info panel and going to the Properties tab in the **Nonlinear Thermal Analysis** block. ![An example of thermal analysis temperature results](https://files.learn.ntop.com/help-articles/structures/5599850568851.png) And that's it! You've successfully run a nonlinear thermal analysis. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Nonlinear%20Thermal%20Analysis%20Example.ntop) ## Keywords: *analysis simulation property heat isotropic material linear thermal non orthotropic nonlinear* # How to run a static analysis Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-run-a-static-analysis ## Objective: Learn how to perform a Static Analysis. ## Procedure: **1. Run a Static Analysis** (be sure you have completed the workflow up to the [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) article) * * Add a **Static Analysis** block. * Insert the **Simulation Model** into the Model input. * Add the [**Force BC**](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) to the BC List input *(the error appears because the model needs to be restrained for the simulation to run).* * Press the '**+**' in the BC List to add another input. * Insert the [**Restraint BC**](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) into the new input slot. ![An example static analysis on a brake pedal model](https://files.learn.ntop.com/help-articles/structures/41633442216851.png) **2. Reading the Results** Once you run an analysis, a Heads-up Display (HUD) will appear showing the results. The HUD allows you to toggle through several different types of results and edit the upper and lower bounds of each. ### Displacement The Displacement results show how much your model moves under the given boundary conditions. You can see a scaled displacement version by clicking the Displacement checkmark and sliding the Scale Factor up. You can view the Total or Directional displacement by changing the second combo box from the top of the HUD. ![A gif showing how the brake pedal responds to changing the deformation scale](https://files.learn.ntop.com/help-articles/structures/4884037649811.png) ### Strain With the Strain option, you can view the Principal Strain for Min, Mid, and Max, or the Strain of Components. ![A gif showing the different results from changing the strain result configuration](https://files.learn.ntop.com/help-articles/structures/4884081467667.png) ### Stress With Stress, you can view the Von Mises Stress, the Principal Stress, or the Components Stress. ![A gif showing the different results from changing the stress result configuration](https://files.learn.ntop.com/help-articles/structures/4883894260755.png) ### Reaction Forces You can see the Total or Directional forces within the model with Reaction Forces. ![A gif showing the different results from changing the reaction forces result configuration](https://files.learn.ntop.com/help-articles/structures/4884109509011.png) And that's it! You've successfully run a Static Analysis. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! Move on to [the next article](/help-articles/knowledge-base/structures/how-to-use-simulation-results-to-create-a-point-map-or-field) in this series and learn how to create a Point Map from the Results. ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Static%20Analysis%20Example.ntop) ## Keywords: *FE analysis simulation fea static boundary restraint force condition Model displacement run* # How to run a thermal analysis Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis ## Objective: Learn how to set up a thermal analysis with all available boundary conditions and use the resulting temperature field to perform a thermal stress analysis in the same nTop Notebook. ## Procedure: **1. Defining Material Properties** If you would like to learn more about creating different Materials, I suggest checking this article: [How to create a material](/help-articles/knowledge-base/structures/how-to-create-a-material) in nTop To set up a material for thermal analysis, a thermal material property block must be added to the Properties list of a Material. These include conductivity and specific heat. Young's Modulus and Poisson's ratio are needed for **Static Analysis** without thermal stress. If the static analysis includes thermal stress, a third property, the **Isotropic Thermal Expansion Property**, must be added, including the thermal expansion coefficient (CTE). ![An example Isotropic Material that includes a Thermal Property, Linear Elastic Property, and Thermal Expansion Property](https://files.learn.ntop.com/help-articles/structures/28966408589203.png) **2. Thermal Analysis** The Thermal Analysis block consists of a Model input and a Boundary Condition List. The available boundary conditions for thermal analysis are listed below. For more information on each boundary condition block and its inputs, click on the Info Panel (the gray question mark on the right side of the block). **Available Boundary Conditions** * Heat Generation * Volumetric Heat Generation * Surface Heat Flux * Radiation Boundary Load * Convection Boundary Load * Temperature Restraint ![A thermal analysis setup that includes one of each thermal boundary condition available in nTop](https://files.learn.ntop.com/help-articles/structures/41633456091539.png) > [!NOTE] > > *Note: The Radiation Boundary Load is only supported in the Nonlinear Thermal Analysis block.* **3. Obtaining a Temperature Field from Thermal Analysis** Once the thermal analysis is complete, the resulting temperature is viewable through the HUD, and The Temperature field chip can be dragged from the properties of the **Thermal Analysis** block. ![An image showing how to extract the temperature field from a thermal analysis property panel](https://files.learn.ntop.com/help-articles/structures/41633446956307.png) **4. Thermal Stress Analysis** A thermal load can be applied to a **Static Analysis** just like any other structural boundary condition (such as forces, pressure, and displacement restraints) with the temperature field defined. The applied temperature load will cause the material to expand and contract based on its CTE. An initial temperature load can be applied as a reference point for the initial expansion before the temperature load is applied and should usually be set to the ambient temperature of the part before thermal loading. **Available Boundary Conditions** * *\*Any structural boundary condition\** * Applied Temperature Load * Initial Temperature ![A static analysis result that was run using the temperature field from the thermal analysis](https://files.learn.ntop.com/help-articles/structures/41633456095891.png) And that's it! You've successfully run a thermal analysis. Do you still need help? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Thermal%20Analysis%20Example.ntop) ## Keywords: *analysis surface field boundary stress heat performance restraint condition material thermal temperature radiation expansion istropic generation volumetric flux convection* # How to run a thermal analysis using a thermal bonded contact Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis-using-a-thermal-bonded-contact ## Objective: Learn how to use the **Thermal Bonded Contact** block. ## Procedure: In the figure below, a user would like to tie a copper slug into an aluminum frame. The CAD model on the left represents the geometry of the two materials and the subsequent mesh of the two regions is on the right. Since the FEA meshes of two regions do not necessarily share common nodes and element faces it is necessary to "tie" these two regions together mathematically. As such, this approach allows the user to mathematically “bond” two different objects (of different materials) together and couple them thermally. ![The imported CAD geometry is on the left and the meshed model is on the right](https://files.learn.ntop.com/help-articles/structures/1500000301221.png) To tie these two materials together the user would use the **Thermal Bonded Contact** block. This block creates a bonded contact between two FE boundaries which allows for heat flux between the two components. ![The Thermal Bonded Contact block](https://files.learn.ntop.com/help-articles/structures/48404504551443.png) Contact resistance can be defined to account for thin membrane material at the boundary such as thermal paste. The contact resistance between two materials is often calculated from experimental tests of contact conductance. A table of values is provided below with some common materials. **Table 1: Thermal contact conductance of some metal surfaces (**[**from various sources**](https://www.engineersedge.com/heat_transfer/thermal_contact_conductance_13849.htm)**)** | Material | Surface Condition | Roughnessµm | Temperature°C | PressureMPa | *hc*\*W/m2· °C | | - | - | - | - | - | - | | Identical Metal Pairs | | | | | | | 416 Stainless steel | Ground | 2.54 | 90–200 | 0.3–2.5 | 3800 | | 304 Stainless steel | Ground | 1.14 | 20 | 4–7 | 1900 | | Aluminum | Ground | 2.54 | 150 | 1.2–2.5 | 11,400 | | Copper | Ground | 1.27 | 20 | 1.2–20 | 143,000 | | Copper | Milled | 3.81 | 20 | 1–5 | 55,500 | | Copper (vacuum) | Milled | 0.25 | 30 | 0.7–7 | 11,400 | | **Dissimilar Metal Pairs** | | | | | | | Stainless steel-Aluminum | - | 20–30 | 20 | 1020 | 29003600 | | Stainless steel-Aluminum | - | 1.0–2.0 | 20 | 1020 | 16,40020,800 | | Steel Ct-30-Aluminum | Ground | 1.4–2.0 | 20 | 1015–35 | 50,00059,000 | | Steel Ct-30-Aluminum | Milled | 4.5–7.2 | 20 | 1030 | 4800 8300 | | Aluminum-Copper | Ground | 1.3–1.4 | 20 | 515 | 42,000 56,000 | | Aluminum-Copper | Milled | 4.4–4.5 | 20 | 1020–35 | 12,00022,000 | \*Divide the given values by 5.678 to convert to Btu/h · ft2 · °F. It should be noted that the **Thermal Bonded Contact** block requires Thermal Contact Resistance and the table above provides conductance values. It is required to perform some math operations to get conductance values properly input into the block. ![Using values from the articles conductivity table, we can create the thermal contact resistance variable.](https://files.learn.ntop.com/help-articles/structures/48404504552467.png) With the contact resistance properly computed it is necessary to tie the two meshes together as shown in the image below, using the **Thermal Bonded Contact** block. ![The meshed model showing the connection faces for the Thermal Bonded Contact block.](https://files.learn.ntop.com/help-articles/structures/48404504553491.png) To properly include Bonded Contact in your FEA analysis you must use include the **Thermal Bonded Contac** t block in the "Connectors" input of your Simulation Model as shown in the image below. ![The notebook setup for the Simulation Model. It shows each of the FE Meshes were used to create Solid Domains. These Domains are connected using the Thermal Bonded Contact.](https://files.learn.ntop.com/help-articles/structures/48404504555539.png) Once your thermal boundary conditions are input you can now run your thermal analysis using bonded contact! ![The thermal analysis results that were calculated using the Simulation Model and boundary conditions.](https://files.learn.ntop.com/help-articles/structures/48404504556307.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example File: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Thermal%20Analysis%20using%20Thermal%20Bonded%20Contact%20Example.ntop) ## Keywords: *Finite constraint structural FEA Thermal Bonded Contact Design Analysis Tie* # How to run a transient thermal analysis Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-run-a-transient-thermal-analysis ## Objective: Learn how to run a transient thermal analysis. ## Applies to: * Thermal Analysis ## Procedure: > [!NOTE] > > **Note:** This workflow uses Beta blocks. Learn how to turn on Beta blocks by reading: [What are beta blocks?](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) Transient thermal analysis has the same setup as thermal analysis. Before starting, ensure you understand how to set up an analysis in nTop. Refer to this article for more information: [How can I set up a simulation?](/help-articles/knowledge-base/structures/how-can-i-set-up-a-simulation) #### 1. Define thermal properties. * * Follow the steps in this article to set up your material: [How to run a thermal analysis](/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis) #### 2. Complete the [FE Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) and choose your [Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions). * * You can read here for more information on thermal boundary conditions: [How to run a thermal analysis.](/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis) * In this example, we use two **Temperature Restraint** blocks and a **Surface Heat Flux** block for our Boundary Conditions. #### 3. Run the analysis. * * Add a **Transient Thermal Analysis** block. This block performs a linear transient heat conduction analysis on an FE Model subject to prescribed temperature and heat flux boundary conditions. * *Initial temperature:* The initial temperature of the components in the FE Model. * *Duration:* Duration of the simulation. * *Initial time step:* Initial time step for the transient analysis. The program will control the step size for subsequent steps. * *Save increment:* Controls the amount of data that is stored and accessible after the simulation completes. The default value of 1 will save results for all increments, whereas 0 will save only the first and last increments. For any value N > 1, the block will save results for every N increment. * *Fixed time step:* Option to fix the initial time step for the entire analysis. If this option is unchecked, the solver uses an automatic time-stepping scheme that varies the initial time step based on the stability of the analysis. In this example, our **Transient Thermal Analysis** block has the following inputs: ![The transient thermal analysis block](https://files.learn.ntop.com/help-articles/structures/18724597141523.png) Our results are shown in a Heads-Up-Display (HUD). You can visualize the Temperature, Heat Flux, and Thermal Reaction Flux in the HUD. You can access these properties by opening the Info panel and going to the Properties tab in the **Transient Thermal Analysis** block. ![A demonstration of changing the iterations of the thermal analysis HUD. The part's color changes to indicate the temperature change as the iteration number changes.](https://files.learn.ntop.com/help-articles/structures/18724898692627.png) And that's it! You've successfully run a nonlinear thermal analysis. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Transient%20Thermal%20Analysis%20Example.ntop) ## Keywords: *analysis simulation property material linear thermal temperature flux transient* # How to run homogenization Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-run-homogenization The **Homogenize Unit Cell** block can calculate a unit cell's effective mechanical and thermal properties. When applied to a solid volume, these properties can be used to determine the structural and thermal performance of a lattice structure occupying this volume composed of this unit cell. This way, you can estimate the macro-level performance of the lattice geometry without meshing its complex structure. This saves time and computational effort to analyze lattice structures with a static or thermal analysis. The block functions by applying unit loads to the unit cell in the following ways : **(a) Mechanical:** 6 unit strain loads in the tensile (X, Y, Z) and shear (XY, XZ, YZ) directions under periodic boundary conditions to calculate the effective stiffness of the unit cell. The block calculates the 21 components Cij of the anisotropic stiffness matrix. ![The twenty one component anisotropic stiffness matrix.](https://files.learn.ntop.com/help-articles/structures/23019158351123.png) **(b) Thermal:** 3 unit temperature loads under periodic boundary conditions in the X, Y, and Z directions to calculate the unit cell's effective conductivity and specific heat. The block calculates the six components kij of the anisotropic thermal conductivity matrix. ![The six component anisotropic thermal conductivity matrix.](https://files.learn.ntop.com/help-articles/structures/23019174831891.png) In addition to the mechanical and thermal properties, the effective density of the unit cell is also calculated. **Common uses:** * Analyzing complex lattice structures. * Exporting material properties. > [!TIP] > > **Tips:** | **Pros** | **Cons** | | - | - | | A fast method of analyzing lattices. | More setup steps. | | Works for any type of lattice. | Least accurate option compared to using a solid element or beam element simulations. | | Works on large and high-density lattice structures. | No edge effects. | | | No stress concentrations. | | | Ignores blend lattice-wall radius. | | | Lattice thickness must be uniform. | * The block has the following inputs : * *Unit Cell Model*: The unit cell's simulation model has domain, mesh, attribute (solid), and material properties. * *Design Volume*: This is the Implicit Body that envelops the boundaries of the unit cell exactly. This is typically a box. Unit cells with rounded corners are typically trimmed to fit a box. ![A unit cell model that has been trimmed based on the design volume box to flatten its edges.](https://files.learn.ntop.com/help-articles/structures/23019136309395.png) * *Tolerance*: This is the search tolerance to establish a rigid connection between the periodic boundaries of the unit cell. The tolerance value should be large enough to capture the nodes on the periodic boundaries but small enough to avoid over-constraining these boundaries. A recommended value is 10% of the element size of the unit cell mesh. ![A diagram showing how periodic boundaries are applied to a unit cell.](https://files.learn.ntop.com/help-articles/structures/23019158378259.png) * *Mechanical and Thermal checkboxes*: By default, the block has the *Mechanical* option checked to calculate the effective elastic properties. Optionally, checking the *Thermal* option will prompt the block to calculate the effective Thermal properties like the unit cell's anisotropic conductivity and specific heat capacity. * Periodicity in all directions: While this method offers a convenient way to cut down the computational effort for large lattice structure simulation, it is best applied to situations where this lattice is periodic in all three orthogonal directions. ![A unit cell diagram showing that the lattice is periodic in all three orthogonal directions.](https://files.learn.ntop.com/help-articles/structures/23019125393299.png) * Tolerance setting: The tolerance setting defines the maximum distance between the nodes on the periodic boundaries that will be connected. Typically, the default tolerance value of 0.01mm should work for most cases, but a recommended tolerance size is about 10% of the mesh size. A method to check that the tolerance value is appropriate to capture the periodic boundaries is to increase the deformation scale of any Homogenization result. The boundaries would deform uniformly if the tolerance is right (image on the left). If not, there would be disconnected nodes in the boundary (image on the right). If the tolerance value is too large, the block will report the following error: “Error in solving the linear system of equations. The system is not positive definite.” ![Example homogenization results of a single unit cell. The unit cell deformation can be seen by adjusting the deformation scale slider in the Simulation HUD.](https://files.learn.ntop.com/help-articles/structures/23019142085139.png) * Exporting Material Properties: Exporting the anisotropic material properties generated by the homogenized unit cell block is possible. This can be achieved through the Export Material block, as described in this [support article](https://support.ntopology.com/hc/en-us/articles/4409474211219-Can-I-export-the-material-from-the-Homogenize-Unit-Cell-). ## Example File ### Example 1 - Bend Testing a Lattice Panel ![An example homogenization test setup. A section of rectangular volume lattice between two solid plates.](https://files.learn.ntop.com/help-articles/structures/23019158389011.png) In this example, a lattice panel is tested in bending to estimate its flexural strength. Two different models of this panel are analyzed - one composed of the lattice structure and the second with a volume representing this lattice. We'll refer to the first model as the **Microstructure** model and the second as the **Macrostructure** model (image below). ![The test setup with a solid body in place of the lattice.](https://files.learn.ntop.com/help-articles/structures/23019174871187.png) Assuming the microstructure model being analyzed is made out of Aluminum, the **Homogenize Unit Cell** block is used to estimate the effective elastic properties using Aluminum and the unit cell of the microstructure model. This block is then used as the material property input to analyze the macrostructure. The static analysis of the panels involves the following boundary conditions: ![A diagram of the homogenization boundary conditions set up.](https://files.learn.ntop.com/help-articles/structures/23019136366611.png) Here are the x-direction longitudinal stress results of the two models when bent by a force of 500 N in the indicated direction: ![the x-direction longitudinal stress results of the two models when bent by a force of 500 N in the indicated direction. The latticed body results are shown on top and the homogenized model is on the bottom.](https://files.learn.ntop.com/help-articles/structures/23019158398483.png) Here is a table summarizing the performance and results of the two panels: | **Model** | **S11 Stress, MPa** | **Max Displacement, mm** | **Mesh Time, s** | **Solve Time, s** | | - | - | - | - | - | | **Macromodel** | 131.37 | 1.47 | 15 | 340 | | **Micromodel** | 130.22 | 1.43 | 46 | 45 | To summarize, we got similar results between the microstructure and macrostructure models. Although the macrostructure took longer to compute owing to the contact calculation between the panel and the macrostructure volume, the meshing speed was much faster than the microstructure model. If this panel had several more unit cells, the time taken to mesh would compensate for the slower solve times, making the macrostructure model more efficient in iteratively evaluating its structural performance. One caveat to the macrostructure analysis is that it does not report the localized stresses on the lattice, which might be required for fatigue evaluations. Download Example: [Bend Testing a Lattice Panel](https://storage.googleapis.com/files-learn/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Homogenization%20Bend%20Test%20Example.ntop) ### Example 2 - Thermal Analysis of a Porous Structure ![An example set up for homogenization of a Thermal Analysis of a Porous Structure](https://files.learn.ntop.com/help-articles/structures/23019125449107.png) This example analyzes a porous structure composed of the unit cell (image above) to estimate its thermal performance from an applied heat flux load. It is assumed that the structure is made of Aluminum. The thermal boundary conditions applied to the porous structure (and the representative macrostructure) is outlined in the following image: The following images illustrate the temperature distribution between the macromodel and the micromodel. Both models show a maximum temperature of around 50 K with the applied heat flux load: ![The thermal analysis of a porous structure results. The porous structure is on the left and the homogenized model is on the right.](https://files.learn.ntop.com/help-articles/structures/23019136377491.png) Download Example: [Thermal Analysis of a Porous Structure](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Homogenization%20Porous%20Structure%20Example.ntop) ## Keywords: *simulation structure boundary model homogenization* # How to select boundaries of an FE Mesh - FE Boundary by Flood Fill Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill ## Objective: Learn what the FE Boundary by Flood Fill block does and how to use it to select boundaries. ## Procedure: ![The FE Boundary by Flood fill block](https://files.learn.ntop.com/help-articles/structures/41633264480403.png) **FE Boundary by Flood Fill** is used to select surface entities on an FE Mesh. The entities available to be selected are nodes, faces, or edges. When a direction is defined, the block shoots a ray at the mesh and finds the intersection. The first intersecting entity (*entity0*) becomes the basis for the flood fill. The flood fill compares the normal of *entity0* with all the neighboring entities. If the entities are below the tolerance angle provided, it selects it. With no direction, it finds the closest entity to the origin, which becomes the *entity0*. #### **How to decide which Entity type to choose:** Choosing your entity depends on the boundary condition you are using. Does it make a difference if you apply the boundary condition on a face/edge/node? For example, all the restraints (**Point, Displacement, Temperature, Initial Temperature, Applied Temperature**) evaluate their value at the nodes. However, the **Force** block acts differently. If you select nodes, it divides the applied force evenly among them. If you choose edges, it divides the force evenly among the total length of the edges, and if you select faces, it divides the force over the entire area of your selection. For example, if you use nodes in the FE Boundary, regions with more nodes will generally see more force since, with this option, we are taking the force divided by the total number of nodes and applying that value to each node. Instead, if you use the Faces option, the force is divided by the total area, and this applies as a force per unit area to each element face which results in a more evenly spread force across the entire FE Boundary. Some boundary conditions have preferred boundary element types, like **Heat Flux** and **Pressure** only allow face entities. [**Click here**](#h-01ejvrebjc2hfn30rck8g0zrzs) to jump down to the brake pedal at the end of the article. #### **No Directional Input:** **Angle:** Default **Direction:** Undefined (Optional input) Depending on the location of the origin point, the flood fill operation chooses the closest entity to the origin as the seed entity (*entity0*) on the surface when **no** direction is defined. ![A gif demonstrating how the origin input affects the boundary selection for the FE Boundary by Flood Fill block. The gif shows the origin being moved to select different faces of a cube.](https://files.learn.ntop.com/help-articles/structures/41633256867219.png) ![4 images of cubes. Each one with a different origin location, which changes which face of the cube is selected using the FE Boundary by Flood Fill block](https://files.learn.ntop.com/help-articles/structures/360061196393.png) #### **With Directional Input:** **Angle:** Default **Direction:** Defined When you define the direction with a vector, the flood fill operation shoots a ray from the origin in that direction to choose the seed entity (*entity0*). For example, if you choose the vector as (0,0,1), then the closest intersecting surface mesh entity in the positive Z-direction is chosen. If the origin point doesn't intersect with an entity in that direction, you will receive an error that says, "No mesh entities were found." ![A gif demonstrating how the vector of the direction input affects the boundary selection for the FE Boundary by Flood Fill block.](https://files.learn.ntop.com/help-articles/structures/41633264496787.png) ![3 images of cubes with different face boundary selections from the FE Boundary by Flood Fill block. The middle cube has no selection because the vector doesn't collide with any geometry.](https://files.learn.ntop.com/help-articles/structures/360060312014.png) #### **Angle:** The angle defines how many entities to select by comparing the normal of *entity0* (seed entity) with all neighboring entities. It chooses entities if they are below the tolerance angle. This is beneficial for selecting entities on curved surfaces. When the angle is *x* degrees, the flood fill chooses all entities with an angle up to but not including *x* degrees between them and the normal of entity*0*. ![The gif demonstrates how different values of degrees for the angle input changes the boundary selection](https://files.learn.ntop.com/help-articles/structures/41633256874259.png) #### **Brake Pedal Example:** Let's use the FE Boundary by Flood Fill to select the hole in the Brake Pedal. This will choose the area for the Displacement Restraint Boundary Condition in further articles. * * Add an **FE Boundary by Flood Fill** block * Input the existing [**FE Mesh**](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) into the Mesh input * Choose 'Nodes' as the entity * Set the origin to (0,0,0) ![A gif example of how to select the interior walls of a hole using the FE Boundary by Flood Fill block.](https://files.learn.ntop.com/help-articles/structures/41633256884883.png) And that's it! You've successfully selected boundaries using the FE Boundary by Flood Fill. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! Move on to [the next article](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) in this series and learn how to create Boundary Conditions ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/FE%20Boundary%20by%20Flood%20Fill%20Example.ntop) ## Keywords: *Mesh FE select analysis face simulation surface Flood Fill Boundary entity node edge selection region prepare* # How to select boundaries using Boundary by Body Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body ## Objective: Learn how to select boundaries using the FE Boundary by Body and Virtual Boundary by Body blocks. ## Applies to: * Simulation * [FE Boundary by Body](#01fsw8f2v00cra0ecea37k9zey) * [Virtual Boundary by Body](#01jw8vd71c5fx39dsq36jzmpz7) ## FE Boundary by Body The **FE Boundary by Body** block selects entities of an **FE Mesh** (faces, edges, nodes) within the desired tolerance of an Implicit Body. Depending on the Tolerance, the Implicit Body can be intersected with the mesh or not touching. The Reverse box can be toggled on or off to select the opposite of what was selected. ![The FE Boundary by Body block](https://files.learn.ntop.com/help-articles/structures/41633156105619.png) **1. Choose and Prepare the Body for Selection:** In this example, we want a Force Boundary Condition to act on the brake pedal's head. To choose that area on the mesh, we need to [**extract the CAD face**](/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies) (select CAD Face and right-click), convert it to an Implicit Body, and Thicken the body. Thickening the body turns the thin implicit face into an object that can be rendered and used to select entities on the mesh. ![A gif showing the nTop notebook and an imported CAD face. The CAD Face is converted to an implicit body using the Implicit Body from CAD Body block. The implicit model is thickened using the Thicken Body block.](https://files.learn.ntop.com/help-articles/structures/41633156106771.png) **2. Select Boundary:** Once the selection body is prepared, it needs to be intersected with the FE Mesh to choose the boundary. Follow the steps below to do this: * Add an **FE Boundary by Body** block. * Double-click on the Mesh input to add the existing FE Mesh * Choose 'Nodes' for the Entity * Insert the Thickened Body from the last step into the Body input * Tip: The Body input takes in Implicit parts that don't have to be a thickened surface. There are a variety of other methods available to select the part you want. An example of useful blocks, but not limited to: * **Implicit Body from Curve** * **Implicit Body from Thick Lattice** * **Implicit Body from Mesh** ![A gif showing the ntop notebook and a brake pedal model. The gif is demonstrating how to use the FE Boundary by Body block, and how changing the inputs affects the results.](https://files.learn.ntop.com/help-articles/structures/41633163771027.png) ## Virtual Boundary by Body The **Virtual Boundary by Body** block identifies an Implicit Body to intersect with a Domain to select a boundary. The tolerance applies to checking the boundary of the Implicit Body. The Reverse box can be toggled on or off to select the opposite of what was selected. The Domain Body input is optional and will be used for future capabilities of nTop Fluids. ![The Virtual Boundary by Body block](https://files.learn.ntop.com/help-articles/structures/41633163773331.png) 1. **Select Boundary**: The Virtual Boundary by Body block only requires you to select a body input. * Add a **Plane from Normal** block and position it at the center of the intake surface. Ensure the normal direction is directed towards the body. * Add a **Virtual Boundary by Body** block. Insert the plane into the Body input. ![An image showing the nTop notebook and a pipe model. The pipe model is imported using the Import Implicit Body block. There is a plane on the surface of the pipe inlet that is created from the Plane from Normal block. There is a Virtual Boundary by Body block that is being used to define the Inlet boundary using the plane.](https://files.learn.ntop.com/help-articles/structures/41633163774611.png) And that's it! You've successfully selected a boundary using the FE Boundary by Body and Virtual Boundary by Body blocks. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! Move on to [the next article](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) in this series and learn how to use FE Boundary by Flood Fill. ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Boundary%20by%20Body%20Example.ntop) ## Keywords: *Mesh FE select analysis simulation faces virtual boundary body design model condition loaded region by FEA set up edges boundaries nodes BC* # How to shell a lattice to get a shell mesh and connect it to a solid mesh Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-shell-a-lattice-to-get-a-shell-mesh-and-connect-it-to-a-solid-mesh ## Objective: Learn how to create a surface mesh of a gyroid body and tie it to a solid mesh ## Applies to: * FE Surface Mesh * Tie Constraints * Gyroid Body ## Procedure: 1. **Shell a Gyroid Body:** Use the **Gyroid Body** block with **the Set Body Bounding Box.** We use the Set Body Bounding Box as the Gyroid Body block creates an infinite field. > [!NOTE] > > *Note: **Set Body Bounding Box** is only used to visualize the infinite field in the defined Bounding Box. You must use a **Boolean Intersect** block to intersect it to the design space.* ![An image of a gyroid model next to the nTop notebook.](https://files.learn.ntop.com/help-articles/structures/41634329800595.png) If you use a Graph Unit Cell, you can use the ***faces as mesh*** property to obtain the shell mesh you need. ![A image of a periodic lattice block and its properties panel. The image is showcasing how this lattice type allows the user to extract a faces as mesh property chip.](https://files.learn.ntop.com/help-articles/structures/37946064769555.png) ![The Faces as Mesh property chip visualized as a mesh](https://files.learn.ntop.com/help-articles/structures/37946064778515.png) 2. **Creating a Surface Mesh from the Gyroid Body** Use a combination of **Mesh from Implicit** **by DC** and **Remove Mesh Faces by Body** blocks as input for **FE Surface Mesh.** ![The image shows an nTop notebook with two meshes. One mesh is generated from the Mesh from Implicit by DC block. A Remove Mesh Faces by Body block is then used to extract only the surface mesh.](https://files.learn.ntop.com/help-articles/structures/37946112094483.png) I suggest reviewing this article to learn more about meshing ([**Methods for creating surface meshes).**](/help-articles/knowledge-base/meshing-workflows/methods-for-creating-surface-meshes) **3. Creating a Solid Mesh:** We create Solid Domains with Solid Attributes for the Top and Bottom Boxes. ![The image shows an nTop notebook next to a model of a gyroid in between two blocks. The model is a Simulation model, showcasing the connection nodes between the gyroid and the blocks. ](https://files.learn.ntop.com/help-articles/structures/41634329802387.png) 4. **Connecting the Surface and Solid Mesh:** Use the Tie constraints to connect the Surface Mesh to the top and bottom bodies. Use the **Simulation Model** model with three domains (Top, Bottom, and Gyroid). We are choosing appropriate Shell and Solid attributes. ([How to create an fe model for a simple shell lattice](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model-for-a-simple-shell-lattice)) The first tie constraint is used to connect the Top and Shell Mesh, and similarly, the second one is for the bottom. ([Methods for connecting multiple FE meshes in an fe model](/help-articles/knowledge-base/structures/methods-for-connecting-multiple-fe-meshes-in-an-simulation-model)) ![The image shows an nTop notebook next to a model. The image highlights the Tie Constraint blocks that are used to connect the separate FE Meshes through contacting nodes.These nodes are connected using Tie Constraints.](https://files.learn.ntop.com/help-articles/structures/41634329804819.png) ![The static analysis results of the Simulation Model](https://files.learn.ntop.com/help-articles/structures/41634350037651.png) And that's it! You've successfully created a shell mesh of the gyroid body. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Shelled%20TPMS%20Connected%20to%20Solid%20Mesh%20Example.ntop) ## Keywords: *mesh surface lattice boundary body shell fe constraint solid tie how-to* # How to use a CAD Face in a boundary condition Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-use-a-cad-face-in-a-boundary-condition ## Objective: How to use a CAD Face in a boundary condition. ## Applies to: * Boundary Conditions ## Procedure: ***Note:** If you are running into the error shown below, then you most likely have a CAD Face that isn't associated with a mesh. Continue reading below to solve this issue.* *![An error message that occurs when a user tries to apply a boundary condition to a CAD body or face that is not referenced in the FE Mesh used in the FE Model.](https://files.learn.ntop.com/help-articles/structures/41633365950099.png)* 1. Select the CAD Face List overload in the boundary condition block. ![An image showing how to access the CAD Face List overload of the Force block](https://files.learn.ntop.com/help-articles/structures/41633365954195.png) ![The Force block](https://files.learn.ntop.com/help-articles/structures/41633408677523.png) 2. Use the **CAD Face** directly as an input or the **CAD Face List** block to select multiple CAD faces for scoping your boundary condition. 3. Associate the FE Mesh with the CAD body containing the CAD faces selected in the above step. ![The associate FE Mesh block utilizing an FE Mesh and a CAD body](https://files.learn.ntop.com/help-articles/structures/41633408680083.png) * **Mesh:** The FE Mesh is to be associated with the CAD Body. * **Geometry:** CAD bodies from which the boundary CAD faces are scoped. * **Tolerance:** Tolerance is the Maximum distance between selected mesh elements and the chosen topology. **Associate FE Mesh** block also helps you scope boundary conditions to multiple FE meshes generated by duplicating and replacing the Mesh input for the new Mesh. You can use the Associate FE Mesh block to assign different FE Meshes to different CAD Bodies for multi-component analyses. A Boundary Condition that is scoped to a specific CAD Face will only be applied to the mesh associated with the CAD Face. This is useful to distinguish features near each other, like neighboring Boundary Conditions or FE Connectors. For example, a Tie Constraint takes Independent and Dependent boundaries, which typically overlap in 3D space. Those boundaries can be assigned to two CAD Faces in the same location but from different CAD Bodies. ![The ntop notebook and two mesh models. The image is showing how to use the Associate FE Mesh block and a Tie constraint block to create a valid simulation model.](https://files.learn.ntop.com/help-articles/structures/41633408683027.png) ![An example simulation model with applied boundary conditions](https://files.learn.ntop.com/help-articles/structures/41633365964307.png) ![Static Analysis results showing displacement values on a model](https://files.learn.ntop.com/help-articles/structures/22727390377235.png) And that's it! You've successfully used CAD face to scope a boundary condition. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/CAD%20Face%20Boundary%20Condition%20Example.ntop) ## Keywords: *cad face mesh CAD boundary body fe component not how-to associate condtion associated* # How to use Boundary Conditions Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-use-boundary-conditions ## Objective: Learn how to use Boundary Conditions in a Static Analysis. Boundary Conditions (BCs) can be thought of as the environment your part is in. They include Forces, Displacement Restraints, Heat Generation, Pressure, and more. All of the internal and external elements acting on your model. You need a minimum of two BCs to run a simulation. The image below shows the current options for solid simulations on the left, and options for fluid simulations on the right. ![An image of the available boundary conditions that can be used in nTop.](https://files.learn.ntop.com/help-articles/structures/41633353691155.png) ## Procedure: Static Analysis BC Looking at the Brake Pedal example, we can identify what BCs we want to use in our Static Analysis. The force is where your foot would be pressing on and the displacement restraint is where the pedal is connected to another piece and fixed in place. A Displacement Restraint is usually required when forces are involved to ensure the part is fixed in space. Without it, the simulation wouldn't be able to run. ![A model of a break pedal. There is a force and a displacement restraint applied.](https://files.learn.ntop.com/help-articles/structures/360093207793.png) ## **1. Create a Force BC:** * Add a **Force** block to the workflow * Insert the **FE Boundary by Body** into the Boundary input * Set the Vector to (0,0,-600N). This represents a foot acting on the brake pedal head with a factor of safety. ![The brake pedal model with the applied force on the pedal. The force block is shown next to the model.](https://files.learn.ntop.com/help-articles/structures/41633361100819.png) ![A close up of the brake pedal model with the applied force.](https://files.learn.ntop.com/help-articles/structures/360093209973.png) The downward arrows represent the -600N of Force acting in the negative Z-direction over the entire brake pedal head. If you want more control over the direction of the force, you can edit it using the 'Frame' input. **2. Create a Displacement Restraint BC:** * Add a **Displacement Restraint** block * Insert the **FE Boundary by Flood Fill** selection into the Boundary input ***Tip:** If you left the input of DoFs, you would like to leave it unrestrained.* The red icons on the hole represent the restrained boundary. ![The displacement restraint block and a close up of the brake pedal model showing the applied displacement restraint.](https://files.learn.ntop.com/help-articles/structures/41633353697299.png) ## Procedure: Fluid Analysis BC ![An example tube model showing how velocity and pressure can be applied at the inlets.](https://files.learn.ntop.com/help-articles/structures/41633361105811.png) In this pipe example, we want to apply an intake velocity for a fluid. We need to have a second boundary condition applied for the simulation to run, so we will specify a pressure with no magnitude at the other end of the pipe. **1. Create a Velocity BC:** * Add a **Plane from Normal** block and position it at the center of the intake surface. Ensure the normal direction is directed towards the body. * Add a **Virtual Boundary by Body** block. Insert the plane into the Body input. * Add a **Velocity** block. Insert the **Virtual Boundary by Body** block into the Boundary input. Insert a value of 400 mm/s into the X input box of the Velocity input. ![The pipe model next to the nTop notebook. The notebook has the pipe implicit body block, a plane block that is being used to define the inlet boundary, and a velocity block that is being applied to the inlet using the plane. The model shows the plane on the surface of the inlet.](https://files.learn.ntop.com/help-articles/structures/41633361108115.png) **2. Create a Pressure BC:** * Add a **Plane from Normal** block and position it at the center of the outlet surface. Ensure the normal direction is directed towards the body. * Add a **Virtual Boundary by Body** block. Insert the plane into the Body input. * Add a **Pressure** block. Insert the **Virtual Boundary by Body** block into the Boundary input. Insert a value of 0 Pa into the Magnitude input ![The pipe model next to the nTop notebook. The notebook has a plane from normal block that is being used to define the outlet boundary, and a pressure block that is being applied to the outlet using the plane. The model shows the plane on the surface of the outlet.](https://files.learn.ntop.com/help-articles/structures/41633361111699.png) And that's it! You've successfully added boundary conditions to your part. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Boundary%20Conditions%20Example.ntop) ## Keywords: *analysis simulation surface virtual boundary body edge fluid flow point restraint force condition displacement generation load pressure conditions velocity* # How to use point mass Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-use-point-mass ## Objective: Learn how to use point mass ## Applies To: * Static Analysis * Topology Optimization ## Procedure: > [!NOTE] > > This article uses Simulation/Optimization and both of them in nTop have two requirements: FE Mesh and Boundary Conditions (BCs). Follow the instructions in the links below to prepare your model for simulation. > > **FE Mesh** > > * [How to create an FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh) > * [How to create a Simulation Model](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model) > > **Boundary Conditions (BCs)** > > * [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill) > * [How to choose boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) > * [How to use Boundary Conditions](/help-articles/knowledge-base/structures/how-to-use-boundary-conditions) > * [How to use a CAD Face in a boundary condition](https://support.ntopology.com/hc/en-us/articles/4609628488083) Before starting, I recommend reading the simulation and optimization setup articles mentioned above. **Preparing the Simulation Model** We will need two Solid Domains to perform the simulation. i) Solid Domain 1- The solid domain of the setup that has an **FE Volume Mesh** and a **Solid Attribute** ([How to create an FE Volume Mesh](/help-articles/knowledge-base/meshing-workflows/how-to-create-an-fe-volume-mesh)) ii) Solid Domain 2 - Point Mass: The solid domain of the point being referenced. * *Point:* FE Point to create a domain from. * *Attribute:* **Point Attribute** to define the remote mass parameters. ![A solid domain block setup for a single point to assign mass](https://files.learn.ntop.com/help-articles/structures/41632577196947.png) The block has the following inputs : * *Mass:* This assigns a mass to the remote point * *Offset*: The offset is used to specify the center of rotation for the inertia calculations. By default, the center of rotation is at the point defined in the FE Component block. This location will be moved from the point by the offset distance specified in this input. This input follows the Frame definition in the block, which is the global coordinate system by default. * *Inertia ij*: This defines the six components of the mass moments of inertia tensor * *Frame*: The frame is used to define the offset directions as well as the axes used to calculate the mass moment of inertia components We will need a connector as we have two domains. You can use the **Rigid Connector** block to connect our two components. You'll be able to learn more about the inputs from this article ([Methods for connecting multiple FE meshes in an FE model](/help-articles/knowledge-base/structures/methods-for-connecting-multiple-fe-meshes-in-an-simulation-model)). ![The rigid connector block](https://files.learn.ntop.com/help-articles/structures/24417686793619.png) ### Example **Modal Analysis and Optimization of a Camera Bracket** [Camera Bracket Example.ntop](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Point%20Mass%20Example.ntop) ![The left image shows the design for a camera bracket and the right image shows where the mounting restraints need to be applied for the simulation](https://files.learn.ntop.com/help-articles/structures/24418230162323.png) Here is a bracket (gray) that is used to connect a camera (yellow) to a mount (not pictured in the image). The requirement for this bracket is to have a first natural frequency that is greater than 350 Hz. To estimate the first natural frequency and to optimize the bracket to obey this requirement, it is essential to include the mass of the camera in the analysis. This can be defined as a remote point mass attached to the mounting locations with flexible (RBE3) connectors. ![The simulation model setup for the camera bracket analysis](https://files.learn.ntop.com/help-articles/structures/41632577202963.png) The remote point mass can be defined and attached to the mounting locations in the following way : 1. Add a second **Solid Domain** to the **Simulation Model**. 2. In the **Point** input, specify the x, y, and z location of the camera's center of mass. In the attached example, this point is specified as a variable that contains the camera's center of mass property. 3. To the Attributes input, add a **Point Attribute** and input the mass properties of the camera. In the attached example, a mass of 200 g was specified in this block. 4. In the Connectors input of the **Simulation Model**, add the **Rigid Connector** block. 5. Enter the coordinates of the point representing the camera's center of mass. Here, the center of mass variable was used to specify this input, just like the **Solid Domain** block. 6. Define the Boundary that the remote mass is connected to. 7. Finally, specify the connector type. In this example, the *Flexible* (RBE3) connector was used. This **Simulation Model** with the remote point mass was used in Topology Optimization to define the natural frequency response ([How to use Natural Frequency Response](/help-articles/knowledge-base/optimization/how-to-use-natural-frequency-response)). In this example, Design 2's response was defined to keep the first natural frequency above 350 Hz and a volume fraction of 0.5. Design 3's response was defined to keep the first natural frequency of the bracket-remote mass model above 350 Hz and below 1050 Hz. In addition to this, a volume fraction constraint of 0.35 was imposed on the design space. Both designs were optimized with a compliance minimization objective for a 120g load in the +Y direction on the bracket and the camera. >
      **Design 1** **Design 2** **Design 3**
      ![Result of the camera bracket analysis at 922 Hz](https://files.learn.ntop.com/help-articles/structures/24419222597395.png) ![Result of the camera bracket analysis at 636 Hz](https://files.learn.ntop.com/help-articles/structures/24419192347283.png) ![Result of the camera bracket analysis at 635 Hz](https://files.learn.ntop.com/help-articles/structures/24419192353427.png)
    Mass 480 g 248 g 178 g
    First Natural Frequency 922 Hz 636 Hz 635 Hz
    The optimized bracket is ***64%*** lighter than the original design, with the first natural frequency over ***350 Hz***. ## Keywords: *simulation fe model point mass* # How to use Ramps to create varying fields for FEA Materials and Boundary Conditions Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-use-ramps-to-create-varying-fields-for-fea-materials-and-boundary-conditions ## Objective: Learn how to use ramps and implicit bodies to define a field of engineering data that can be used as inputs into a simulation analysis. ## Procedure: #### **Constant Field:** Traditionally, material properties are defined with constant values. nTop defines scalar engineering values as Scalar Fields. In the figure below, you can see that the Thermal Conductivity is set at 152 W/(m\*K) and results in a field that does not change. **![An example Isotropic Material that has a constant field value. The field is defined by the constant Conductivity value.](https://files.learn.ntop.com/help-articles/structures/1500000023142.png)** #### **Transforming Distance Fields to Engineering Scalar Fields using the Ramp Block:** The [Ramp Block](https://support.ntopology.com/hc/en-us/articles/360041676813-Introduction-to-the-Ramp-Block) allows you to use an input field to spatially transform field data into engineering units. This functionality bridges the divide between field and engineering data and allows complex analysis. > > > > > > > > >
    > ![ramp.jpg](https://files.learn.ntop.com/help-articles/structures/48745678830995.png) > > ![The icon for spatially varying fields. ](https://files.learn.ntop.com/help-articles/structures/1500000037981.png) >
    Using this functionality, you can now see that the Thermal Conductivity varies from 152-200 W/(m\*K) at a distance from 0-100 mm from the Axis Location. ![Instead of a constant conductivity value, this isotropic material has a varying conductivity value. This is created by applying the ramp block and defining how the conductivity will change from the center of the body moving outward.](https://files.learn.ntop.com/help-articles/structures/360101112513.png) #### **Varying Field using Multiple Objects:** Similarly, you can use multiple implicit bodies with the ramp block to produce more complex field patterns. In this case, an array of cylinders are used. ![The image shows how to use bodies to manipulate a field.](https://files.learn.ntop.com/help-articles/structures/360101114513.png) #### **Boundary Conditions:** Just like material properties, certain FEA boundary conditions can vary using scalar field inputs. Examples of these types are shown below. >
    **Structural Boundary Conditions**\ > **with Field Inputs ** **Thermal Boundary Conditions **\ > **with Field Inputs**
    ![The Edge Force, Surface Force, Acceleration Load, and Pressure blocks.](https://files.learn.ntop.com/help-articles/structures/1500000068302.png) ![The Surface Heat Flux, Convection Boundary Load, Radiation Boundary Load, Volumetric Heat Generation, Heat Generation, Temperature Restraint, Initial Temperature, and Applied Temperature blocks.](https://files.learn.ntop.com/help-articles/structures/1500000068322.png)
    In this instance, convection coefficients can easily be varied using the Ramp block, in the same manner, shown for spatially varying material properties. ![A lattice structure that has a varying convection coefficient field applied to it. The field contains smaller values at the center and gradually increases as it spreads towards the edges of the lattice.](https://files.learn.ntop.com/help-articles/structures/1500000066821.png) And that's it! You've successfully defined varying structural and thermal material properties using fields. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Ramps%20to%20Create%20Varying%20FIelds%20for%20FEA%20Example.ntop) ## Keywords: *FE analysis simulation FEA vary Fields Elastic Modulus Conductivity Material Properties Implicit Bodies Ramp spatially Field* # How to use reaction forces in a secondary analysis Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-use-reaction-forces-in-a-secondary-analysis ## Objective: Learn how to use the reaction forces from a previous analysis to run a secondary analysis. ## Applies to: * Simulation * Static Analysis ## Procedure: Before we start, we need to make sure we have completed the static analysis ([How to run a static analysis](/help-articles/knowledge-base/structures/how-to-run-a-static-analysis)) We can extract the reaction forces from the **Static Analysis** block Properties panel. The *reaction forces* property is a Vector Field type, but we want to create a **Vector** to use in a **Force** block for our secondary analysis. ![A static analysis block showing its properties panel. The reaction force property is expanded to show the individual reaction force components. ](https://files.learn.ntop.com/help-articles/structures/34852728170003.png) 1. Extract the X, Y, and Z components from the 'reaction force' property chip and add them to the Notebook. Rename them so you know which direction each chip belongs. ![The X, Y, and Z reaction force components extracted as variables.](https://files.learn.ntop.com/help-articles/structures/34852728178579.png) 2. We want to evaluate each of these fields at the nodes they are acting upon. These nodes are found in the **Displacement Restraint** block used in the earlier Static Analysis Properties panel. * * Expand the *'boundary'* chip and drag the *'nodes (230)'* chip into the Notebook. Rename the chip to "reaction nodes" > [!NOTE] > > *Note: If you used a CAD Face boundary condition, you will not have the boundary chip with nodes. You would have to create a new boundary selection to select the nodes. You can use the FE Face Boundary block to quickly select the nodes.* ![A FE Face Boundary block, its properties panel is expanded to show the nodes property chip. ](https://files.learn.ntop.com/help-articles/structures/34852754523027.png) 3. Once we have the nodes, add an **Evaluate Field** block for each direction. * Set the inputs to: * Scalar field: reaction force x, reaction force y, and reaction force z from Step 1. * Point: reaction nodes from Step 2. ![An evaluate field block. The X direction reaction force scalar field is in the Scalar Field input. The FE Face Boundary nodes are in the Points input.](https://files.learn.ntop.com/help-articles/structures/34852728191891.png) 4. Each block has 230 values. We want to add these values to get the reaction force in each direction. * * Use an **Add** block to sum the values together. The result is shown in the right-hand corner of the block (and also in the properties). ![The same Evaluate Field setup created in the previous step, but for the Y and Z directions as well. Each Evaluate field block has been placed in its own Add block. The result of the Add block is the reaction force in each direction.](https://files.learn.ntop.com/help-articles/structures/34852754532627.png) 5. Use the three values to create a **Vector**. * * Add a **Vector** block. * Insert the blocks from the previous step into their respective X, Y, and Z inputs. ![Insert each of the Add blocks into their respective direction inputs of the Vector block.](https://files.learn.ntop.com/help-articles/structures/34852728203027.png) 6. Build a **Force** block. * * Add a **Force** block. * Use the Boundary from the **Displacement Restraint** in the Boundary input. * Use the **Vector** from the previous step in the Vector input. ![The Force block infilled with the blocks created from previous steps. The FE Face Boundary block is inserted into the Boundary input. The Vector block is inserted into the Vector input of the Force block.](https://files.learn.ntop.com/help-articles/structures/34852728207763.png) And that's it! You've successfully used reaction forces as a boundary condition. If you wish to use the reaction force in Topology Optimization, refer to this article ([How to use Reaction Force Response](/help-articles/knowledge-base/optimization/how-to-use-reaction-force-response)). Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Keywords: *analysis simulation boundary force condition vector how-to reaction resultant forces* # How to use simulation results to create a Point Map or Field Source: https://docs.ntop.com/help-articles/knowledge-base/structures/how-to-use-simulation-results-to-create-a-point-map-or-field ## Objective: Learn to use the results of a Simulation to drive the design of your part by creating a Point Map or Field. ## Procedure: Under the Simulation tab in the Exchange section, there is a variety of options for using the results of your simulation. You can export the results, meshes, models, and use certain results as point maps to influence your design. ![The Exchange SImulation block options located in the nTop ribbon.](https://files.learn.ntop.com/help-articles/structures/360091334594.png) In this example, let's use the **Von Mises Stress Point Map**. **1. Create a Point Map** * * Add a **Von Mises Stress Point Map** * Insert the **Static Analysis** block into the input ![This gif shows how to insert static analysis results into the Von Mises Stress Point Map block. The result is a point map of the von mises values.](https://files.learn.ntop.com/help-articles/structures/41633609689875.png) This creates a Point Map of the Von Mises stress. When visible, you can toggle the Lower or Upper bounds of the Point Map. The Point Map is the stepping stone to utilizing the Simulation results. It can be exported, filtered to show the max or min values and create a Field for further design changes. ![A gif showing how to adjust the upper and lower bounds of the point map results. ](https://files.learn.ntop.com/help-articles/structures/17419308817683.png) **2. Convert the Point Map into a Field** * * Add a **Field from Point Map** block * Insert the **Von Mises Point Map** into the Point Map input * Read more about the Extrapolation and Interpolation [options here](https://support.ntopology.com/hc/en-us/articles/360049689373-Interpolation-and-Extrapolation-options-for-creating-a-Field-from-a-Point-Map) ![The Field from Point Map block converts the input point map into a field.](https://files.learn.ntop.com/help-articles/structures/41633549491347.png) To see the field, use the Field Viewer (hotkey f) to view the field. The field can be used to edit densities, thicknesses, and other values that affect your design. ![The visualized field of the results.](https://files.learn.ntop.com/help-articles/structures/360094785714.png) And that's it! You've successfully created a Field from your static analysis. **4. If you want to use the Displacement Results:** * Add a **Displacement Point Map** block * Insert that into the Point map input on a **Field from Point Map** block. This creates a Vector Field Point Map because the displacement has a value for each direction (X, Y, Z). * To use this in a **Ramp**, open up the Properties of the **Field from Point Map** block and use one of the Length, X, Y, or Z field chips as the scalar field. The Length field is the resultant Displacement from the Vector fields. ![This example shows how to create a field from the displacement results.](https://files.learn.ntop.com/help-articles/structures/41633609699603.png) Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Simulation%20Results%20for%20a%20Point%20Map%20Example.ntop) ## Keywords: *simulation field export map stress results heat from point displacement von mises flux temperatue* # I ran a simulation but my results don't show up as expected Source: https://docs.ntop.com/help-articles/knowledge-base/structures/i-ran-a-simulation-but-my-results-don-t-show-up-as-expected ## Issue: I ran a simulation, but my results for the Von Mises stress don't register on the part, it shows solid purple. Changing the Boundary Conditions gives me the same result. ## Cause: This can occur due to the upper bounds of the Stress HUD being too high for the stress experienced by the part. ## Solution: Edit the values in the HUD to show the results on your part. ![The Heads Up Display that appears after running a simulation in nTop. The image highlights the editable top and bottom values of the display range. These values can be changed to better show the simulation results.](https://files.learn.ntop.com/help-articles/structures/1500001923721.png) ## Keywords: *error analysis simulation static design stress strain results point displacement von mises HUD issue* # Methods for connecting multiple FE meshes in an Simulation model Source: https://docs.ntop.com/help-articles/knowledge-base/structures/methods-for-connecting-multiple-fe-meshes-in-an-simulation-model ## Objective: Learn what methods are available for connecting FE meshes. ## Applies to: * Design Analysis * Topology Optimization * Rigid Connector * Tie Constraint * Spring Block * Structural Contact * Thermal Bonded Contact > [!NOTE] > > *Note: Only the Tie Constraint and Rigid Connector are supported in Topology Optimization* ## Procedure: #### **Rigid Connector** The **Rigid Connector** block can be used to define a connection between a point and the surface of a domain in a simulation or optimization study. This is typically used in multi-domain simulations where only the mass of the auxiliary domains affects the analysis, while the geometry of these domains can be neglected. These auxiliary domains are modeled as a Solid Domains of FE Points in nTop. This can be used to reduce the size of the finite element model, improving the simulation or optimization solver's performance without compromising the results' accuracy. This Rigid Connector system, in combination with point masses, can be used in studies where the mass participation of the domains is essential, like a Modal Analysis, a Buckling Analysis, or an Optimization study (Topology or Field Optimization) with a Frequency Response as a constraint or an objective. ![An example simulation model setup showcasing the Rigid Connector block as the Connector input. The model is connected to an FE Point using the Rigid Connector.](https://files.learn.ntop.com/help-articles/structures/48248446305043.png) The block has the following inputs : * *Point:* This is where the block will create a remote point. This is typically at the center of mass of the domain being represented. To learn more about the attributes that can be applied to the point, please look at the Point Attribute Learn More link. * *Boundary:* This defines the boundaries (typically nodes on a surface) that will be connected to the point with rigid elements * *Connector:* This defines the behavior of the nodes on the boundary linked to the motion of the point and has two options - * Rigid: The rigid option constrains the nodes on the boundary to move with the point. It prevents relative motion between the nodes on the boundary and behaves like a rigid entity. This is popularly known as the RBE2 connector that connects an independent node (green) to a set of dependent nodes (yellow) ![The image is a demonstration of how a cube will react to a simulation when the Rigid Connector block is set to Rigid.](https://files.learn.ntop.com/help-articles/structures/24417861380115.png) * * Flexible: This flexible option links the motion of the point to the nodes on the boundary and enables relative motion between these nodes. This distributes the mass between the nodes on the boundary and avoids locally stiffening the model (unlike the Rigid connector). This is popularly known as the RBE3 connector that connects a dependent node (yellow) to a set of independent nodes (green) ![The image is a demonstration of how a cube will react to a simulation when the Rigid Connector block is set to Flexible.](https://files.learn.ntop.com/help-articles/structures/24417891468051.png) You'll be able to read about an example of using a Rigid Connector [here](/help-articles/knowledge-base/structures/how-to-use-point-mass). #### **Tie Constraint** A Tie Constraint is a rigid connection that ties two nodes together. Tie constraints make the displacement of the selected nodes equivalent, effectively removing one degree of freedom from the system. Choose the Independent nodes and the Dependent nodes using a Boundary Selection block. The Independent boundary looks for the Dependent boundary within a specified tolerance. An error will occur if the tolerance is too low to find the boundary. This error can be fixed by increasing the tolerance or editing the boundary. The Rotation checkbox toggles the option to tie rotational degrees of freedom. You can read [here](/help-articles/knowledge-base/structures/how-to-create-a-simulation-model-for-a-simple-shell-lattice) for an example of using a Tie Constraint. ![An example simulation model setup showcasing the Tie Constraint block as the Connector input. The model contains two FE Meshes connected using the Tie Constraint.](https://files.learn.ntop.com/help-articles/structures/48248429791251.png) #### **Spring** The **Spring** block creates a spring element between two Points. The spring force is calculated using the formula F=K\*(u2-u1), where K is a stiffness tensor constructed from the stiffness inputs Kx, Ky, Kz, Kxx, Kyy, and Kzz. * To simulate a "Bushing/Bolt" in simulation, one would use Rigid/Flexible connectors to connect boundaries to points and a spring element between the points with the proper stiffness values. * When using the option to ground one of the points, you simulate a connection to a Rigid body outside the simulation. This is equivalent to using a spring element between two points and then applying a displacement restraint on the grounded point. > > > > > > > > >
    > ![](https://files.learn.ntop.com/help-articles/structures/45359840630931.png) > > ![An example nTop notebook setup for two points using the Spring block. Each FE Point is its own Solid Domain, and then the two FE Points are inputs for the Spring block.](https://files.learn.ntop.com/help-articles/structures/45359856996371.png) >
    [**Spring - Example File**](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/spring_bolt.ntop) #### **Structural Contact** A **Structural Contact** block is an elastic connection between the two meshes, allowing relative motion with a defined stiffness. This is usually used if you have two surfaces that are glued together with some material that has a vastly different stiffness than the connected surfaces, and that, in turn, allows the connected surfaces to not move completely in sync but have certain resistance between them. It's often used for calculating contact failure and to more accurately model connected/welded surfaces, but it is generally applicable to any connection dictated by a finite stiffness. The nodes are connected as if a spring of contact stiffness is defined between them. Choose the Independent and Dependent nodes using a Boundary Selection block ([How to select boundaries of an FE Mesh - FE Boundary by Body](/help-articles/knowledge-base/structures/how-to-select-boundaries-using-boundary-by-body) and [How to select boundaries of an FE Mesh - FE Boundary by Flood Fill](/help-articles/knowledge-base/structures/how-to-select-boundaries-of-an-fe-mesh-fe-boundary-by-flood-fill)). The Independent boundary looks for the Dependent boundary within a specified tolerance. An error will occur if the tolerance is too low to find the boundary. This error can be fixed by increasing the tolerance or editing the boundary. Type of contact: **Bonded** contact prohibits relative displacement in the normal and tangential direction. No **Separation** contact prohibits relative displacement in the normal direction and allows displacement in the tangential direction. The Contact Stiffness is suggested to be the average of two Young's moduli. Structural stiffness of the contact penalization. If not provided, the contact stiffness will be set equal to the average of the diagonal mean of the material coefficient matrix of the contacting surfaces. Another method of determining the contact stiffness is k = E \* A/d (where A is the contact area and d is the contact layer thickness). [**Structural Contact - Example File**](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Structural_Bonded_Contact.ntop) ![This image shows how a setup of a TPMS lattice structure connected to a Top and Bottom Mesh with two Structural Contact blocks.](https://files.learn.ntop.com/help-articles/structures/50581988869395.png) #### #### **Thermal Bonded Contact** Creates a bonded contact between two FE boundaries, allowing heat flux between the two components. Contact resistance can be defined to account for a thin membrane material at the boundary, such as thermal paste. The contact resistance between two materials is often calculated from experimental tests of contact conductance. Click [here](/help-articles/knowledge-base/structures/how-to-run-a-thermal-analysis-using-a-thermal-bonded-contact) for an example using thermal-bonded contact. ## Keywords: *analysis mesh fe model constraint structural thermal tie connector nodes how-to bonded contact bonds connecting rbe2 rigid rbe3 flexible no seperation* # NAFEMS Benchmark Tests for nTop FEA Solver Source: https://docs.ntop.com/help-articles/knowledge-base/structures/nafems-benchmark-tests-for-ntop-fea-solver NAFEMS (National Agency for Finite Element Methods and Standards) is an international, independent association dedicated to advancing the use of engineering simulation and analysis. NAFEMS develops benchmark problems to help validate and verify FEA software and methods, ensuring accuracy and reliability in engineering simulations. Linked below are the NAFEMS benchmark problems and results computed by CEETRON Solve, the underlying FEA solver technology in nTop. These benchmarks are distributed by Techsoft 3D as part of the CEETRON distribution. [NAFEMS Benchmark Tests for FEA Solver](https://ntop.box.com/s/fgetczvxnvw38gjfqx61wl0srl5j8j05) # No mesh entities were found in FE Boundary Source: https://docs.ntop.com/help-articles/knowledge-base/structures/no-mesh-entities-were-found-in-fe-boundary ## Issue: I'm trying to create an FE Boundary and I ran into the error, "no mesh entities were found." When I change the tolerance, I still get this error. ## Applies to: * Simulation * Topology Optimization ## Cause: If changing the tolerance doesn't resolve this issue, it may be a list error. Make sure your FE Mesh isn't a list. Read up on lists here: [How to work with lists](/help-articles/knowledge-base/user-interface/how-to-work-with-lists) ## Solution: If your FE Mesh is in a list format, use the block Merge FE Meshes to combine the meshes and get rid of the list. Use this mesh in your FE Boundary blocks and it should work as expected. ## Keywords: *mesh list boundary entity lists fe combine merge issue tolerance* # Number of degrees of freedom in LHS and RHS aren't equal Source: https://docs.ntop.com/help-articles/knowledge-base/structures/number-of-degrees-of-freedom-in-lhs-and-rhs-aren-t-equal ## Issue: I ran an analysis, and this error came up: "Error in solving the linear system of equations. Number of degrees of freedom in LHS and RHS aren't equal" ## Applies to: * Simulation * Topology Optimization ## Cause: The cause for this issue is typically due to an error in a boundary condition or a constraint block. ## Solution: * * Adjust the the tolerances for each boundary condition and ensure they all make sense and work? * The nodes might be part of dependent nodes of a Tie Constraint (that theoretically will have to follow the independent nodes), * Make sure the constraint and restraint blocks are used correctly in Topology Optimizations * Ensure that there are no same nodes in a Displacement Restraint (that theoretically will be fixed (if the value is 0) or have a Prescribed Displacement (if the value is non-zero)) ## Keywords: *error analysis simulation system topology of linear issue degrees freedom aren't equal lhs rhs* # The simulation results window isn't appearing Source: https://docs.ntop.com/help-articles/knowledge-base/structures/the-simulation-results-window-isn-t-appearing ## Issue: I can run my simulation block, but once I get the results the window to view the properties doesn't appear. ## Cause: This is caused by a List input being entered into the Simulation block. ## Solution: * * Find out when the List appeared. It will have a (#) behind the block name and the List symbol will appear on the icon. * Go to this block and open up the Info Panel. * Go to Properties. * Scroll down until you find a Chip of the same color as the block with a \[0] behind the name. Use this as your input. This input is the same as the block but doesn't have a List attached to it. * Input the Property chip into the next block. * You may receive an error 'Invalid Input Type'. This is expected since the block is set up to receive a List. * Select the Block Icon and choose the option that shows up in the drop-down that has the same name as that block. This will reset the block to not allow List inputs. * Do this for all of the blocks that have a List icon and they will run as normal, allowing the Simulation Results window to appear. ![The gif shows how running a simulation as a list prevents the results from appearing. Once the simulation is converted to a single item and not a list, the results appear as intended.](https://files.learn.ntop.com/help-articles/structures/360101150573.png) ## Keywords: *analysis simulation list properties design stress strain results not up appearing show HUD don't directional icon issue* # What are Interpolation options for creating a Field from a Point Map Source: https://docs.ntop.com/help-articles/knowledge-base/structures/what-are-interpolation-options-for-creating-a-field-from-a-point-map ## Objective: Learn about different interpolation options of the **Field from Point Map** block. ## Procedure: The **Field from the Point Map** block is used to create a Scalar, Vector, or Temperature Field using a Point Map that can be imported or created in nTop. ![This image shows the 3 possible overloads for the Field from Point Map block. Each overload can accept a different input Point Map. The three Point Map input types are Scalar Field, Temperature Field, and Vector Field.](https://files.learn.ntop.com/help-articles/structures/34953460968211.png) #### **Interpolation:** * * **Nearest**: Values maintain the exact value of the nearest point. * **Barycentric**: Values are interpolated linearly from the three closest points, which define a tetrahedral. This method is recommended for point maps extracted from tetrahedral mesh, like Von Mises Stress Point Map or Temperature Point Map. ![A visual display of the two Interpolation types used for the Field from Point Map block. The field on the left is using Barycentric Interpolation and the field on the right is using Nearest Interpolation.](https://files.learn.ntop.com/help-articles/structures/34953460970131.png) Note: All fields created will be extrapolated based on the Interpolation option. If you wish not to extrapolate, set the value 0 to everything outside the domain. You can do it with a combination of **If-Else** block and **Less Than or Equal to** block. If you have vertices instead of an Implicit Body, you can use the **Delaunay Volume Mesh** block to create a convex hull and use its implicit property. ![All fields created will be extrapolated based on the Interpolation option. If you wish not to extrapolate, set the value 0 to everything outside the domain. You can do it with a combination of If-Else block and Less Than or Equal to block. This image shows the If-Else block setup and resulting field contained inside the specified implicit body.](https://files.learn.ntop.com/help-articles/structures/34953460971795.png) ## Example File: [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/point_map.ntop) ## Keywords: *import simulation field map point fields interpolation extrapolation linear random points interpolate extrapolate nearest barycentric natural* # What are the options for simulating lattices? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/what-are-the-options-for-simulating-lattices ## Question: What are the options for simulating lattices? ## Answer: There are three main methods for simulating lattices in nTop. They are using Solid Elements, Beam Elements, or Homogenization. The pros and cons of each method are listed in the table with an example workflow below. >
    Type Pros Cons
    ![A Solid Element lattice for simulation](https://files.learn.ntop.com/help-articles/structures/360078223553.png)
    • Accuracy
    • Edge effects considered 
    • Locatable maximum stress point
    • Computationally expensive
    • Requires meshing of the lattice (challenging)
    • Dependent on mesh quality
    • Large file size
    ![A Beam Element lattice for simulation](https://files.learn.ntop.com/help-articles/structures/360078222473.png)
    • Fastest
    • Accepts field-driven beam thickness
    • It only works on beam-based lattice structures
    • No edge effects
    • No stress concentrations
    • Ignores blend lattice-wall radius
    ![An example model for a Homogenization analysis](https://files.learn.ntop.com/help-articles/structures/360077103874.png)
    • Faster
    • Works for any lattice
    • Works on large and high-density lattice structures
    • More setup steps
    • Least accurate
    • No edge effects
    • No stress concentrations
    • Ignores blend lattice-wall radius
    • Lattice must be uniform
    #### **Solid Elements** Solid elements are volumetric finite element mesh of the entire lattice structure. * A finer mesh is required to capture the detail of the lattice Set up a **Solid Domain** block in the **Simulation Model**. Depending on the model, some mesh errors may occur. Follow these steps if so: * Use **Remesh Surface** block after **Mesh from Implicit Body** * **Volume Mesh** block may fail; if so, you can repair the mesh through **Mesh from Implicit Body** and **Remesh Surface** or use the slower, more robust, **Robust** **Tetrahedral Mesh.** #### **Beam Elements** Beam elements are finite element nodes along lattice vertices connected by lattice beams. This method greatly reduces the number of elements from a typical volume mesh but ignores certain mechanical behavior like edge effects and stress concentrations in the lattice. FE nodes will be placed at the endpoints of each beam, along with node(s) and the subdivisions of the beam. You can choose the number of subdivisions as input to the **FE Lattice Mesh** block, which will be arrayed as demonstrated in the image below. ![A diagram showing how the subdivisions input affects the resulting mesh structure of the FE Lattice Mesh block.](https://files.learn.ntop.com/help-articles/structures/360100023533.png) Set up a **Lattice Domain** in Simulation Model. * Use **Trim Lattice** to ensure the lattice elements lie within the volume of the Lattice Structure. * If you get a warning about short lattice beams, use **Collapse Lattice Vertices** with a threshold much lower than the unit cell size. #### **Homogenization** To create a homogenized simulation, run a Solid FEA simulation on a single unit cell of the lattice, and generate *effective* material properties of the unit cell. Next, run a second Solid FEA simulation on the bulk lattice structure volume using the *effective* material properties (from the first simulation). Use **Solid Domain** with the **Material** chip from the **Homogenization** block. * Works best with many unit cells * Good for comparing different lattice types #### **Comparison** To compare these methods, we've created a BCC Lattice between two panels. Look for the download of this Case Study at the bottom of this article. ![A diagram showing an applied diagonal force on top of a lattice structure. The bottom of the lattice has a displacement restraint.](https://files.learn.ntop.com/help-articles/structures/1500002551821.png) The images below represent a direct comparison in Displacement values and Von Mises Stress values. The images are in the same order as above (Solid Elements, Beam Elements, and Homogenization). Scroll below to see the range of values. ![3 models representing the displacement simulation results from beam, solid elements, and homogenization methods.](https://files.learn.ntop.com/help-articles/structures/4415785367315.png) ![3 models representing the von misses stress simulation results from beam, solid elements, and homogenization methods.](https://files.learn.ntop.com/help-articles/structures/4415790205971.png) Below is a direct comparison of the three methods: computational time, stresses, and displacement. ![4 bar graphs comparing the simulation results between the solid element, beam lattice, and homogenization methods.](https://files.learn.ntop.com/help-articles/structures/1500002505782.png) ## Download the Case Study: * [Case Study File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Options%20for%20Simulating%20Lattices%20Example.ntop) ## Keywords: *analysis lattice shell design element solid component homogenize beam simulate homogenixation pro con methods* # Why do some Boundary Conditions use an FE Region instead of an FE Boundary? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/why-do-some-boundary-conditions-use-an-fe-region-instead-of-an-fe-boundary ## Question: What's the difference between an FE Boundary and an FE Region? Why do some Boundary Conditions use an FE Region instead of an FE Boundary? ## Applies to: * Simulation * Topology Optimization ## Answer: The FE Boundary and FE Region are used for choosing different elements on the mesh. **FE Boundary:** * Can only select boundary entities (sub-elements). These entities are nodes, faces, or edges. * These entities are only found on the outside of the mesh. **FE Region:** * Can only select elements that are present inside the FE Mesh. These elements are beams, shells, or cells (including interior cells). * Can be used to define the material and elemental properties of the selected elements. Most of the boundary conditions take only boundary entities while some (like heat generation) need actual FE elements (region) entities like cells, shells, and beams. ## Keywords: *FE simulation faces boundary finite element region edges cells shells beams nodes* # Why is the deformation scale not working? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/why-is-the-deformation-scale-not-working ## Issue: After running my **Static Analysis** block, the deformation scale slider does not show any impact on my results and is stuck at a range of 0-10. ## Applies to: * Simulation HUD * Static Analysis ## Cause: The cause of this issue is due to your **Static Analysis** block running without force. If you have a **Static Analysis** block set up with no forces acting on it, and the block runs, then there is no deformation to occur. This is represented in the example below, showing only a **Displacement Restraint** block with no force applied. This result is then cached in the block, so even if you add a force and rerun the analysis, the deformation will not change. ![A gif showing an issue with the static analysis results panel. Changing the deformation scale doesn't show the results](https://files.learn.ntop.com/help-articles/structures/41632543793683.png) ## Solution: There are two possible solutions for this issue: 1. Make the **Static Analysis** block a variable. The Deformation Scale slider can correctly show the results by making the analysis a variable. ![The results of a static analysis correctly moving while changing the deformation scale](https://files.learn.ntop.com/help-articles/structures/41632569275795.png) 2. Create a new **Static Analysis** block and transfer the inputs. Starting with a new static analysis block clears the previously cached deformation results. Ensure that the block doesn't run until your forces are added to the **Boundary Conditions List**. ![Moving the inputs of one static analysis block to another. The deformation scale now works correctly](https://files.learn.ntop.com/help-articles/structures/41632569277331.png) ## Attachment: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Simulation/Deformation%20Scale%20Example%20File.ntop) ## Keywords: *simulation scale results issue display slider hud deformation* # Why is there no result in the defined frequency range for a Modal Analysis? Source: https://docs.ntop.com/help-articles/knowledge-base/structures/why-is-there-no-result-in-the-defined-frequency-range-for-a-modal-analysis ## Question: Why is there no result in the defined frequency range for a Modal Analysis? ## Applies to: * Simulation ## Answer: The Modal Analysis block currently gives us the mode shapes at the model's natural frequencies. This is why an error occurs when you bound the analysis between certain frequencies. There are no natural frequencies within the bounded frequencies. ## Keywords: *error analysis question modal eigen eigenfrequency frequency* # Generating surface textures with procedural modeling Source: https://docs.ntop.com/help-articles/knowledge-base/textures/generating-surface-textures-with-procedural-modeling ## Summary: Creating surface textures has many applications, from aesthetics effects to increasing mechanical grip or decreasing aerodynamic drag. The required geometries can be challenging to draw manually and even more challenging to scale and conform around complex parts. ![Examples of implicit bodies with textures applied.](https://files.learn.ntop.com/help-articles/textures/1500009372622.png) Procedural texturing generates a surface texture using a mathematical procedure or algorithm. It can be especially advantageous over the manual modeling of surface features if the desired outcome is an organic-looking texture without repeating unit cells (e.g., leather instead of knurling). This tutorial explains how to use procedural methods to generate surface textures with helpful example files. * Create a repeatable workflow that can apply a surface texture to any part * Generate surface roughness that conforms to CAD geometry * Modify the basic roughness workflow to create attractive wood, leather, and marble textures. ## Applies to: * nTop * Surface texturing * Implicit modeling ## Why is nTop good at Procedural Texturing? nTop's implicit modeling engine is mathematically based, and natively compatible with procedural texturing recipes. Field-driven design allows users to control the size, shape, or strength of the texture however they desire. Note that other texturing methods are available in nTop [as well](https://support.ntopology.com/hc/en-us/articles/360042365673-How-to-Create-a-Voronoi-Surface-Texture), and can sometimes be easier for simple parts. ## Roughness Adding roughness is perhaps the simplest procedural texture and a foundation for the more advanced ones below. It involves three easy steps: generating noise, scaling the noise, and applying it to a part. ![Examples of a sphere with different frequencies and amplitudes applied using the Simplex Noise 3D block and Offset Body block ](https://files.learn.ntop.com/help-articles/textures/1500002113102.png) Roughness begins with a Simplex Noise 3D block. ![The field view of the Simplex Noise 3D block with Frequency set to 100](https://files.learn.ntop.com/help-articles/textures/1500009372402.png) Using the field viewer (press F), you can see that the noise ranges from -1 to 1 (toggle “Probe Values” on the Field Viewer dialog, and hover over the field). The influence of the frequency input is best visualized by changing the value, and the random seed is useful if you want to layer multiple noise functions without them coinciding, or to randomize different parts' textures. We need to assign length units in order for it to change the shape of a part. Using a multiply block assigns units of length, and also the strength or amplitude of the noise. Imagining this as a digital signal or 3D oscilloscope may help. ![Multiply the Simplex Noise 3D block by 1mm to give the field units.](https://files.learn.ntop.com/help-articles/textures/1500009624801.png) The resulting field now has units of length and can be used in an Offset block to add and remove material (the original sphere is shown in green). The magnitude of this multiplying value controls the depth or strength of the texture and can be varied spatially. ![Using the Offset Body block on a Sphere with the Simplex Noise block applied to the distance input. This applies the texture to the body.](https://files.learn.ntop.com/help-articles/textures/1500009624821.png) Organizing the notebook, you can now swap in any part into this roughness texturing workflow, including imported CAD or mesh files (once converted to Implicit). ![A sphere with texture applied to create a rough surface.](https://files.learn.ntop.com/help-articles/textures/1500009372422.png) Shown on an imported CAD part:![An imported CAD part with texture applied.](https://files.learn.ntop.com/help-articles/textures/1500009624841.png) [**See example file: Texturing - Roughness.ntop**](https://ntopology.box.com/s/xg4y9lmev7u1vwqmjz9i160vwpzo39bt) The texture depth can be controlled with a [ramp](https://support.ntopology.com/hc/en-us/articles/360041676813-How-does-the-Ramp-block-work-) block in the multiply input. Here we show fading from smooth (0 mm) to textured (1 mm) as we proceed away from the plane. ![Using a Ramp block, the texture depth can be applied as a gradient that increases over the course of the body. The surface is smoother towards the starting reference plane and becomes increasingly rougher as the distance from the plane increases.](https://files.learn.ntop.com/help-articles/textures/1500009372442.png) [**See example file: Texturing - Roughness - Varying Amplitude.ntop**](https://ntopology.box.com/s/xg4y9lmev7u1vwqmjz9i160vwpzo39bt) The texture's frequency can also be controlled by ramps, with a few more steps. Here we use a Remap Field block to warp the underlying noise field. A ramp block is used in each of the X, Y, Z inputs (recall the noise signal extends in 3D), each with their respective axis being divided by 10 as we move away from the plane. The two effects (ramping both frequency and amplitude) can also be combined. ![An example of how to vary the texture frequency on a part using multiple ramp blocks and a simplex noise block.](https://files.learn.ntop.com/help-articles/textures/1500009372462.png) [**See example file: Texturing - Roughness - Varying Frequency.ntop**](https://ntopology.box.com/s/e6gygdpw0x47hcw7kppcdsum9uhderl2) ## Leather Cellular Noise is another block available and is useful for replicating natural textures such as leather. ![The visualized field of the Cellular Noise 3D block.](https://files.learn.ntop.com/help-articles/textures/1500009372482.png) Effect of different Return Types in the Cellular Noise 3D block. ![4 examples of the visualized field of the Cellular Noise 3D block. Each example uses a different option for the Return Type input.](https://files.learn.ntop.com/help-articles/textures/1500009372502.png) Applying this type of noise to our shape is very similar to the roughness texture shown earlier. For leather, we proceed with Distance2 Div, since it looks most similar to the effect we are aiming for. ![An example of using the Cellular Noise 3D block to create a leather texture.](https://files.learn.ntop.com/help-articles/textures/1500009372522.png) In between our Noise and Multiply block, we use a Clamp. This essentially thresholds the noise signal (which runs from 0 to 1) to be between 0.75 and 1 only. This creates flat spots in our leather cells, rather than mountains, and is easier to visualize with the Turbo option in the Field Viewer. ![Comparing the field of Cellular Noise 3D block to the same field being nested inside a Clamp block. The Clamp block restricts the values of the field.](https://files.learn.ntop.com/help-articles/textures/1500009372542.png) We want to etch this field into the part, so we use a negative value in the Multiply block. This offsets the creases (high spots in the field) inwards. To make it more realistic, we can add a fine layer of roughness to the leather. Here we used variables to keep the frequencies proportional to one another (the roughness being 10x the frequency of the Cellular Noise). Be sure to only use a small amplitude here. You may need to do the high-res Ctrl+H render to see the effect. ![An example of using the Cellular Noise 3D block to create a leather texture with Precision Render enabled.](https://files.learn.ntop.com/help-articles/textures/1500009624861.png)[**See example file: Texturing - Leather.ntop**](https://ntopology.box.com/s/3igb53h845uxcwimqslt3q7qf601dpaj) ## Wood Generating a wood texture in nTop adds another series of blocks into our file: trigonometry functions. We can use these to create waves that resemble the rings in wood. ![A box with wood texture applied using the Simplex Noise 3D block.](https://files.learn.ntop.com/help-articles/textures/1500009624881.png) The period of the waves can be linked to noise functions, allowing control over how chaotic the rings look. With a high-frequency value, the texture may begin to resemble some sort of magnetic material instead. ![The field view of the Simplex Noise 3D block. The field is simulating wood texture with a Frequency of 5.](https://files.learn.ntop.com/help-articles/textures/1500009372562.png) ![The field view of the Simplex Noise 3D block. The field is simulating wood texture with a Frequency of 10.](https://files.learn.ntop.com/help-articles/textures/1500009624901.png) ![The field view of the Simplex Noise 3D block. The field is simulating wood texture with a Frequency of 20.](https://files.learn.ntop.com/help-articles/textures/1500009372582.png)[See example file: Texturing - Wood.ntop](https://ntopology.box.com/s/eg3hebh8j0g9nn29hltpczqqogtuk5bc) ## Marble As a final bonus texture, here is an example file for a Marble texture. This one combines everything we have learned above: noise functions, remaps, clamps, and trigonometric functions. It is best stepped through carefully with the field viewer. **![A Torus body with texture applied to simulate Marble.](https://files.learn.ntop.com/help-articles/textures/1500009372602.png)**[**See example file: Texturing - Marble.ntop**](https://ntopology.box.com/s/m32a32guysctubbvb4i6r7l3ro9afabn) ## Attachment: * [Procedural texturing with nTop](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Procedural%20Texturing%20Examples.zip) ## Keywords: *voronoi surface texture modeling roughness leather wood marble procedural document grain* # How to add texture to a surface using random points Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-add-texture-to-a-surface-using-random-points ## Objective: This example creates a bumpy texture on the surface by generating a series of random spheres. ## Applies to: * nTop * Surface textures * Lists ## Procedure: 1. Extract the [CAD surfaces](/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies) where you want to add bumps, save them in a CAD Face List. 2. Use **Mesh from CAD Body** on the Face List. 3. **Remesh Surface.** 4. **Merge Meshes** to join the list into a single mesh object. This step is unnecessary if starting with a single CAD face. 5. Add a **Random Points on Mesh** block and enter the number of points you want to create. These points will locate the origin of each sphere. ![A mesh with the Random Points on Mesh block applied.](https://files.learn.ntop.com/help-articles/textures/1500000546221.png) 6. Add a **Sphere** block and input the Point List into the Center Point Input. Be sure to change the block type to Implicit Body List. 7. **Boolean Union** the Spheres to itself to get rid of the lists. 8. **Boolean Union** the Spheres with the original body to complete your part. ![An implicit body with spheres placed at each of the random point locations. The spheres have been merged with the implicit body to create a bumpy textured body.](https://files.learn.ntop.com/help-articles/textures/1500000535382.png) And that's it! You've successfully added bumps to the surface of your part. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Texture%20using%20Random%20Points%20Example.ntop) ## Keywords: *mesh surface texture list points remesh merge point meshes random how-to bump pimple sphere textured raised* # How to create a knurled texture Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-create-a-knurled-texture ## Objective: Learn how to create a knurled texture. ## Applies to: * Texturing * Industrial design ## Procedure: **1. Set up the faces and bodies.** * Start with any imported CAD Body. * [Select the faces for knurling](/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies) and create a **CAD Face List Variable.** * Convert the CAD bodies (main bodies and knurl body) to Implicit bodies by **Implicit Body from CAD Body** to be used in the last two steps. ![Selecting CAD Faces and then right clicking to create a CAD Face variable list.](https://files.learn.ntop.com/help-articles/textures/1500001901262.png) **2. Create the lattice knurled pattern.** * Add a **Periodic Lattice** block. * Unit cell: **Graph Unit Cell.** * Unit cell: Square honeycomb rotated. * Orientation: UVW. * Cell map: **Cell Map on CAD Face.** * Face: Lower Knurl Faces (variable created from the above step). * UVW count: 15, 15, 5. * Height: -0.1 mm (a negative offset distance will move inward, while a positive offset distance will move outward) * Thickness: 0.001 mm. ![A periodic lattice block created using a Graph unit cell and Cell Map from CAD Face.](https://files.learn.ntop.com/help-articles/textures/6014932534803.png) **3. Converting List to a single body.** * **Boolean Union** the Thicken Body to convert from a list to a single body. * Blend Radius: 0 mm. * Drag and Drop the Implicit chip of Knurl Lattice (from the Conformal Lattice from CAD Face block). **4. Create the Knurled Texture.** * **Boolean Subtract** the thickened lattice from the knurl section. This will cut into the surface and create the knurling texture. * Blend Type: Chamfered. * Blend Radius: 0.125 mm. * Primary Body: Implicit Knurl Body (from setting up the faces and bodies). * Subtraction Body: Boolean Union (from creating the Knurl Pattern). ![The knurled texture implicit body created by subtracting the periodic lattice from the original implicit body.](https://files.learn.ntop.com/help-articles/textures/1500001901322.png) And that's it! You've successfully created a knurled surface texture. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Knurled%20Surface%20Texture%20Example.ntop) ## Keywords: *face surface texture CAD lattice conformal knurl body groove design raised* # How to create a Voronoi surface texture Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-create-a-voronoi-surface-texture ## Objective: Learn how to create a Voronoi surface texture. ## Procedure: 1. [Start with joined and meshed CAD surfaces](/help-articles/knowledge-base/meshing-workflows/how-to-turn-multiple-cad-faces-into-a-single-surface) **2. Create a Voronoi Texture** * Add **Random Points on Mesh** block. * Insert the **Remeshed Surface** variable into the Mesh input * Set the Point Count to 10,000 * Set Relaxation Iteration to 30 * Set a Random Seed * Add a **Voronoi Surface Lattice** * Insert the **Random Points on Mesh** as the Seed Points * Set a Thickness of 0.4 mm * Insert the **Remeshed Surface** as the Mesh ![A Voronoi Surface Lattice created using an imported CAD body.](https://files.learn.ntop.com/help-articles/textures/4409003593491.png) **4. Texture the Body** * Add a **Boolean Subtract** * Insert the main CAD **Implicit\*\*\*\*Body** as the Primary Body * Insert the **Implicit Body** from the Voronoi Surface Lattice block as the Subtraction Bodies ![The Voronoi Surface texture created by subtracting the Voronoi Surface Lattice from the original Implicit Body.](https://files.learn.ntop.com/help-articles/textures/360059698413.png) And that's it! You've successfully created a Voronoi surface texture. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Voronoi%20Surface%20Texture%20Example.ntop) ## Keywords: *voronoi surface texture CAD faces texturing leather emboss surfaces raised embossed debossed* # How to create equidistant planes on a curve Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-create-equidistant-planes-on-a-curve ## Objective: Learn how to create planes along a curve. ## Applies to: * Texturing * Industrial design ## Procedure: 1. We start by importing our CAD parts ([how to work with CAD bodies](/help-articles/knowledge-base/implicit-modeling/how-to-work-with-cad-bodies)) using the **Import Part** block and converting them into Implicit Body using the **Implicit Body from CAD Body block** for the Normal direction. ![An imported CAD part. A portion of the part has been converted to an implicit body using the Implicit Body from CAD Body block. The implicit body is a cylinder.](https://files.learn.ntop.com/help-articles/textures/25440621194771.png) 2. In this workflow, we will use two custom blocks ([How to open a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) and [How to create a Custom Block](/help-articles/knowledge-base/user-interface/how-to-create-a-custom-block)). Next, Download these blocks and import them into your workflow. * [Spiral Curve](https://ntop.box.com/s/dzn1o2agomz8n2ehzexmsh471vzhq4bg) - This custom block creates a spiral curve based on the given inputs * [Planes Following a Curve](https://ntop.box.com/s/9rtjl54bb802kqgx55u2wu4hxwh76elp) - This custom block outputs planes spaced at the given distance apart. Its z-direction is normal to the surface, and its x-direction follows the provided curve. 3. We will use the CAD Vertex to identify the geometric locations and lengths to create the spiral curve. The Properties panel has the *point* conversion with x, y, and z parameters. We can then use a **Line Segment** block to calculate the distance/ length between the points. ![Two CAD vertices have been extracted from the imported part. The vertices and their property points are used to create line segments on the end faces of the implicit body cylinder. ](https://files.learn.ntop.com/help-articles/textures/25441221253779.png) 4. We generate a **Spiral Curve** on the Implicit Body based on the parameters we calculated in the above step. We then use this as an input for the **Planes Following a Curve** block. ![A Spiral Curve block is used to create a curve around the body that connects the CAD vertices.](https://files.learn.ntop.com/help-articles/textures/25441786494099.png) ![Using the Planes Following a Curve block, planes are generated along the spiral curve on the outside of the cylinder.](https://files.learn.ntop.com/help-articles/textures/25441795158291.png) 5. We will now use an **Orient Body** block to orient the implicit body we want to pattern along the curve with the planes. ![Using the Orient Object block to place small cylinders at the origin of each plane. The cylinders are then subtracted from the starting implicit body to create a textured surface.](https://files.learn.ntop.com/help-articles/textures/25441786515859.png) And that's it! You've successfully created a knurled surface texture. Do you still need help? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Equidistant%20Planes%20on%20Curve%20Example.ntop) ## Keywords: *normal curve planes a along cb helix spiral* # How to deboss an image Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-deboss-an-image ## Objective: Debossing an image ## Applies to: * Import Bitmap * Map Bitmap to Plane ## Procedure: 1. Get started with importing your image (png) file using the **Import Bitmap** block [**(this block is a beta block)**](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) * Add a **Map Bitmap to Plane** block * Insert the **Import Bitmap** block in the Bitmap field * Create a **Plane** * Choose your Interpolation type, Length, and Width ![The Map Bitmap to Plane block is used to import an image and position it on a plane.](https://files.learn.ntop.com/help-articles/textures/4404036094099.png) 2. Drag a **Scalar Field** (Alpha, Blue, Grayscale, Green, Hue, and Red) chip from the Planar Image\_1's properties panel into the Notebook. The chosen field is what will be debossed in further steps. ![Extract the Grayscale property from the Map Bitmap to Plane properties panel to make a new scalar field variable.](https://files.learn.ntop.com/help-articles/textures/4404032456339.png) 3. Create the geometry for the image to be debossed into * Add **Box** of Length 10mm, Width 10mm, and Height 2mm 4. Deboss the image * Add **Offset Body** * Insert **Ramp** in the Distance field * Scalar field: Grayscale Values * In min: 0 * In max: 1 * Out min: 0mm * Out max: 0.2mm * Continuity: Geometric (CO) 5. Boolean operation to remove the excess material and combine it with our initial geometry ![Use a Boolean Intersect block to remove the unwanted material and a Boolean Union block to merge the result with the original geometry.](https://files.learn.ntop.com/help-articles/textures/4404036558867.png) And that's it! You've successfully debossed your image Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Deboss%20Image%20Example.ntop) ## Keywords: *logo how-to debossed image bitmap import bitmap png deboss* # How to generate random patterns on the surface of a part Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-generate-random-patterns-on-the-surface-of-a-part ## Objective: There are many ways to generate random textures on the surface of an object with nTop. This tutorial explains a straightforward technique that allows you to map a random array of any shape on any part's surface. You can also perform this workflow using [this technique.](/help-articles/knowledge-base/textures/how-to-add-texture-to-a-surface-using-random-points) We suggest experimenting with each technique to find the best workflow for your application. ## Applies to: * Surface texturing * Implicit modeling ## Procedure: 1. Start with any implicit body. 2. Using the **Mesh from Implicit Body** block, create a surface mesh of your start part. 3. Generate the points with **Random Points on Mesh**. 4. Create an implicit body as the seed object to duplicate on the surface. 5. Create a plane at the centroid of the seed object. 6. Create a list of random planes using the list of random points. 7. Use the **Orient Object** block to create the array of objects. ![The Orient Object block being used to place 3000 spheres at planes on the surface of a body.](https://files.learn.ntop.com/help-articles/textures/1500004848761.png) 8. **Merge Meshes** to join the list into a single object. 9. Convert the merged mesh object to an implicit object. 10. Utilize a Boolean operation to apply the texture to the part. ![A body with dimples applied. The dimples are created by subtracting the surface spheres from the original body.](https://files.learn.ntop.com/help-articles/textures/1500004713462.png) And that's it! You've successfully generated a random pattern on the surface of the part! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Random%20Pattern%20on%20Part%20Example.ntop) ## Keywords: *texture pattern random how-to orient surace* # How to generate surface roughness with varying amplitude or frequency Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-generate-surface-roughness-with-varying-amplitude-or-frequency ## Objective: If you're trying to use nTop to generate surface textures, this how-to example explains a high-performing and scalable workflow that applies to any object. Developing a unique texture can be non-intuitive initially, but once mastered, it can become the ultimate creativity tool in your arsenal. Before starting this tutorial, check out the prerequisite [surface roughness](https://support.ntop.com/hc/en-us/articles/360060946514) workflow. By adding a few steps, we can control the texture's frequency with the [ramp function](/help-articles/knowledge-base/implicit-modeling/how-do-i-use-the-ramp-block). These examples are also shown in this article: [Generating surface textures with procedural modeling.](/help-articles/knowledge-base/textures/generating-surface-textures-with-procedural-modeling) ## Applies to: * nTop * Surface Texture * Implicit Modeling * Field-Driven Design ## Procedure: 1. Open the file built by the previous tutorial [Texturing - Surface Roughness.ntop](https://ntopology.box.com/s/j4zf9em8whl40en2wkffm4ywow8k9tkf). 2. Add a **Plane from Normal** block to the Notebook. The **Ramp** function will reference this Plane. 3. Add a **Ramp** block and use the Plane as the Scalar field input. Enter the remaining values, being sure to add units to **Out min** and **Out max**. 4. In the already existing **Multiply** block, replace the 1 mm with the ramp function. The surface roughness will generate, varying by the range of values per Out min and Out max. 5. We can also vary the noise frequency using a combination of ramp and remap functions. View the complete workflows in the example files. ![Using a Ramp block, the texture depth can be applied as a gradient that increases over the course of the body. The surface is smoother towards the starting reference plane and becomes increasingly rougher as the distance from the plane increases.](https://files.learn.ntop.com/help-articles/textures/360101314974.png) ## Download the Example file: * [Surface roughness - Varying amplitude](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Texture%20-%20Varying%20Amplitude.ntop). * [Surface roughness - Varying frequency](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Texture%20-%20Varying%20Frequency.ntop). ## Keywords: *ramp surface texture roughness how-to noise varying* # How to label parts Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-label-parts ## Objective: This article showcases the different custom blocks that are available for part labeling. ## Applies to: * Part labeling * Serialization ## Solution: > [!NOTE] > > This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: > > * **Learning Center course:** > * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) > * **Articles:** > * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) > * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) This article provides several different options for creating labels on parts. We recommend that you look through all the possibilities, as some may be better suited for your application depending on the geometry the label is placed on (CAD face or Implicit). For an in-depth description of each of the methods being shown, you can watch this [learning center tutorial video](https://learn.ntop.com/courses/recorded-training-serialization/) on serialization! ## **Text to Implicit** The **Text to Implicit** block is the simplest option for creating a label. It makes the text an implicit body. There are several modifiers available such as size, rotation, and placement. ![A demonstration of how the Text to Implicit custom block works.](https://files.learn.ntop.com/help-articles/textures/18693519645843.png) ## **Text Label on Part** The **Text Label on Part** block automatically places the label on the surface of an implicit body. The Location input makes it easy to reposition the text on the surface. The Text region input is a thickened body of the original surface. More information on creating a Text region can be found in the geometry section of the Part Labeling workflow below. ![A demonstration of how the Text Label on Part custom block works.](https://files.learn.ntop.com/help-articles/textures/18693551776403.png) ## **Text along a Curve on Body** #### Placing Curve on the Body: 1. You can use an already existing curve on the body, or you can use the **Pull Curve to Surface** block as demonstrated in this example. ![A demonstration of how the Pull Curve to Surface custom block works.](https://files.learn.ntop.com/help-articles/textures/18693551783059.png) 2. The final step is to insert the curve and body into the **Text along a Curve on Body** block. If you can't see all of the text in the input, the curve isn't long enough to display it. Increasing the curve length or decreasing the letter spacing are the best options for fixing this issue. ![A demonstration of how the Text along a Curve on Body custom block works.](https://files.learn.ntop.com/help-articles/textures/18693551790099.png) ## **Extrude Image on a CAD Face** The last labeling option is to use the **Extrude Image on a CAD Face** block. This block uses a Bitmap from a png file to place the image on the CAD face. It also contains many extra input options that the other blocks don't have, such as the ability to flip and inverse the image. ![A demonstration of how the Extrude Image on a CAD Face custom block works.](https://files.learn.ntop.com/help-articles/textures/18728020380691.png) ## Attachment: * [Example Files](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Part%20Labeling%20Files.zip) ## Keywords: *custom block parts text image serial labeling label serialization* # How to map a bitmap onto a CAD face Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-map-a-bitmap-onto-a-cad-face ## Objective: Apply a bitmap onto a CAD face. ## Applies to: * Texturing * Debossing ## Procedure: 1. Import the image using the **Import Bitmap** block. ([What are beta blocks?](/help-articles/knowledge-base/user-interface/what-are-beta-blocks)) 2. Import the CAD Part using the **Import Part** block. 3. Use the **Cell Map on CAD Face** block to prepare the CAD Face you wish to apply the bitmap on. 4. Import the custom block (**Place Image using Cell Map**) attached below: * [CB - Place Image using Cell Map](https://ntopology.box.com/s/b06rjhdi63o27n5zhxctqdy7fm2xnhuu) 4. Use the **Place Image using Cell Map** block. * Drag and drop the bitmap from the **Import Bitmap** block. * Cell Map input is the one prepared in the third step. * Choose the appropriate Scale, Angle, Aspect Adjustment, and Interpolation type. 5. Set up the CAD body using the **Implicit Body from CAD Body** block. 6. Use a combination of **Offset Body** and **Multiply** block to deboss the image. 7. Use **Set Body Bounding Box** to view your final implicit. ![The final body after using Set Body Bounding Box.](https://files.learn.ntop.com/help-articles/textures/5388327009043.png) And that's it! You've successfully debossed an image onto a CAD face. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Bitmap%20on%20CAD%20Face%20Example.ntop) * [CB - Place Image using Cell Map](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/CB%20-%20Place%20Image%20using%20Cell%20Map.ntop) ## Keywords: *cad face texture mapping how-to image bitmap bit* # How to map a bitmap onto a curved surface Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-map-a-bitmap-onto-a-curved-surface ## Objective: Applying a bitmap on a curved surface. ## Applies to: * Texturing * Debossing ## Procedure: 1. Import the image using the **Import Bitmap** block. 2. Apply the Bitmap to a plane using the **Map Bitmap to Plane** block. 3. Import the custom block attached below: * [CB - Remap Spherical Field Z](https://ntopology.box.com/s/dyfefserxqs0dyls0vytxz9y7uqxssxs) 4. Use the **Remap Spherical Field.** * Drag and drop the color Scalar field from **Map Bitmap to Plane** block. * X mapping length is the length chip on the **Import Bitmap** block. * Y mapping length is the width chip on the **Import Bitmap** block. 5. Set up the **Sphere** you wish to apply the Bitmap. 6. Use a combination of **Offset Body** and **Mix** block to deboss the image. 7. Use **Set Body Bounding Box** to view your final implicit. ![An Offset Body block with a Sphere in the Body input and a Mix block in the Distance input. The Offset Body block is in the Body input of a Set Body Bounding Box block. The Bounding Box of the Sphere block is used in the Bounding Box input of the Set Body Bounding Box.](https://files.learn.ntop.com/help-articles/textures/5383849199891.png) ![The final implicit body created using the bitmap on curved surface technique.](https://files.learn.ntop.com/help-articles/textures/5383986387347.png) And that's it! You've successfully applied bitmap on a sphere. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Bitmap%20on%20Curved%20Surface%20Example.ntop) * [CB - Remap Spherical Field Z](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/CB%20-%20Remap%20Spherical%20Field%20Z.ntop) ## Keywords: *surface field map custom block remap spherical how-to bitmap deboss cb curved* # How to measure surface roughness Source: https://docs.ntop.com/help-articles/knowledge-base/textures/how-to-measure-surface-roughness ## Objective: The custom block measures the surface roughness value with the parameters average, root mean square, skewness, and kurtosis (Ra, Rq, R\_sk, R\_ku). ## Applies to: * Texturing * Surface Roughness ## Solution: This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: * **Learning Center course:** * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) * **Articles:** * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) 1. **Generate surface texture:** Surface textures have many applications, from aesthetic effects to increasing mechanical grip or decreasing aerodynamic drag. The required geometries can be challenging to draw manually and even more challenging to scale and conform around complex parts. These articles can help you apply surface texture to your model: * [Generating surface textures with procedural modeling](/help-articles/knowledge-base/textures/generating-surface-textures-with-procedural-modeling) * [How to generate surface roughness](https://support.ntop.com/hc/en-us/articles/360060946514) * [How to generate surface roughness with varying amplitude or frequency](/help-articles/knowledge-base/textures/how-to-generate-surface-roughness-with-varying-amplitude-or-frequency) 2. Import the [**Surface Analysis V1 - CB**](https://ntopology.box.com/s/2i62s4yz2ngixyrrh3omp50ch3hxhvf3)**:** ![The Surface Analysis V1 block](https://files.learn.ntop.com/help-articles/textures/7256908203027.png) * Implicit body: The implicit body that has surface texture/roughness on it. * CAD face: The base CAD face you wish to calculate the roughness on. * Point count: This is the number of random points generated on the selected CAD face to calculate the roughness value. * Parameter: Average, Root Mean Square, Skewness, and Kurtosis. 3. Fill in with inputs, and the roughness value is shown on the top right corner of the Custom Block. ![The Surface Analysis V1 block with an implicit body and CAD face inserted in the inputs.](https://files.learn.ntop.com/help-articles/textures/7257021101971.png) Attachment: * [CB - Surface Analysis v1](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/CB%20-%20Surface%20Analysis%20V1.ntop) * [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Textures/Measuring%20Surface%20Roughness%20Example.ntop) ## Keywords: *custom block texturing roughness value rq ra* # A lattice with small unit cells does not visualize properly. Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/a-lattice-with-small-unit-cells-does-not-visualize-properly ## Issue: Lattice geometry with relatively small unit cell sizes compared to the part's size may look imperfect or fragmented when rendering. ## Applies to: * nTop * Lattice structures * Small features * Highest resolution rendering ## Cause: The resolution settings are tied to the number of Voxels used to render the object. If the part size is large compared to the smallest features, there isn't a high enough Voxel count to render the object fully. Mathematically the implicit geometry is perfect and exports with precise shape and size. ## Solution: We are exploring methods to improve the rendering quality of complex geometry. Until we can implement a better solution, a few options may help visualize small features. 1. Change the resolution to a more powerful setting using the menu on the bottom right. 2. Select the object and press CTRL+H to trigger a static rendering. This action takes longer to process but generates a precise rendering, and it may help to zoom into a specific area of interest. 3. If you wish to interrogate a specific area, it may help cut out a sample cube. 4. If you need to visualize a large area with dynamic viewing capability converting implicit geometry to mesh or Voxel geometry may be appropriate. ## Keywords: *lattice render issue high resolution visualize* # Adding Markdown and images to nTop notebooks Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/adding-markdown-and-images-to-ntop-notebooks ## Summary: This article is intended to showcase nTop's new notebook capabilities. Notebook descriptions and comments now support Markdown syntax and embedded images. ## Applies to: * Notebook descriptions/comments * Markdown * Images ## Markdown Capabilities: nTop notebook descriptions and comments now accept Markdown syntax for formatting and organizing text. As you enter information into the description/comment, you can use the syntax symbols to modify the text. Once you click outside of the text box, the text will format itself accordingly based on your input syntax. The gif below shows how the text changes from syntax to correct formatting. ![Markdown example.gif](https://files.learn.ntop.com/help-articles/user-interface/45482794248467.png) Below is a table of some of the most commonly used Markdown operations. Use the example syntax to format your text in notebook descriptions/comments. Shortcuts are available for some of the elements. | **Markdown Element** | **Syntax** | **Shortcut** | | | | | | | | | | | | | | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | Heading | # H1 ## H2 ### H3 | | | | | | | | | | | | | | | Italic | \*italicized text\* | Ctrl+I | | | | | | | | | | | | | | Bold | \*\*bold text\*\* | Ctrl+B | | | | | | | | | | | | | | Strikethrough | ~~strikethrough text~~ | Ctrl+Alt+S | | | | | | | | | | | | | | Underline | \_underlined text\_ | Ctrl+U | | | | | | | | | | | | | | Subscript | Normal text, ~~s~~u~~b~~s~~c~~r~~i~~p~~t~~ subscript | Ctrl+Shift+S | | | | | | | | | | | | | | Superscript | mm^2, m^3 superscript | Ctrl+S | | | | | | | | | | | | | | Code | `code` | | | | | | | | | | | | | | | Link | [title](https://www.ntop.com) | Ctrl+L | | | | | | | | | | | | | | Ordered List | 1. First 2. Second 3. Third | | | | | | | | | | | | | | | Unordered List | - First - Second - Third | | | | | | | | | | | | | | | Task List | - \[x] First Task - \[ ] Second Task - \[ ] Third Task | | | | | | | | | | | | | | | Table | | Item List | Description | | ----------- | ----------- | | Item 1 | Text | | Item 2 | Text | | | | Horizontal Line | --- | | | | | | | | | | | | | | ## Image Capabilities: Along with Markdown, we've added support for images and GIFs within comments and notebook descriptions. Images are stored internally in their original format, including their original size. They are automatically scaled according to the width of the notebook in which they are visible and cannot be manually scaled. The supported formats are .png, .jpg, .jpeg, .bmp, .gif, and .svg. To insert an image, use one of the following methods: * Right-click and select Insert Image * Paste a copied image * Drag and drop a local file Note on Pasting: If copying from a web source provides only a URL instead of the image data, the image will not paste directly into the notebook. In this situation, you must first save the image to your local file system and then drag and drop or insert the saved file. ![gif markdown.gif](https://files.learn.ntop.com/help-articles/user-interface/50598724292883.png) ## Keywords: *notebook comment image description Markdown* # Axis length cannot be less than zero Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/axis-length-cannot-be-less-than-zero ## Issue: I'm trying to build a Plane, but I get the error: "Axis length can't be less than zero". ## Applies to: * Axis Error ## Cause: This is happening because there is a vector that is created which is \[0,0,0] that is causing the error. An example of how this can occur is shown below: ![When the cross product results in a vector of all zeros, the axis has no length.](https://files.learn.ntop.com/help-articles/user-interface/4406126857747.png) ## Solution: Remove the vector which results in the \[0,0,0] cross product. ## Keywords: *length issue axis 0* # Can I access Log Panel files from past sessions? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/can-i-access-log-panel-files-from-past-sessions ## Question: Can I access Log Panel files from past sessions? Does nTop record the Log Panel? ## Applies to: * Log Panel ## Answer: Yes, we save files from previous sessions and you can access them by going to this folder location: ``` C:\Users\yourname\AppData\Local\Temp\nTopology\Log ``` Or to a specific file: ``` C:\Users\yourname\AppData\Local\Temp\nTopology\Log\turbo_console_date.log ``` Note: Some users have found that HPC machine's may have a "Local\_User" folder instead of just Local. ## Keywords: *app panel log save files record appdata* # Can I backup my files? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/can-i-backup-my-files ## Question: Can I backup my nTop files? ## Applies to: nTop ## Answer: Yes, you can set your files in nTop to Autosave. To do this go to: File > Settings > Data * Select the checkmark for Autosave * Set the time interval * Choose an Autosave location You can open your backups directly from the folder or nTop will prompt you to choose between the backed-up version and the saved version when you encounter a crash or close the file without saving your changes. ![The File Recovery message that appears when nTop closes unexpectedly.](https://files.learn.ntop.com/help-articles/user-interface/360102433034.png) ## Keywords: *crash file settings question up time autosave backup saving save backing files interval* # Can I edit the mouse navigation? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/can-i-edit-the-mouse-navigation ## Question: Can I edit the mouse navigation for panning or scrolling? ## Applies to: * nTop Interface ## Answer: No, the mouse navigation in nTop isn't editable at this time. ## Keywords: *edit zoom question mouse navigation scroll pan* # Can I extract multiple property chips from a block at once? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/can-i-extract-multiple-property-chips-from-a-block-at-once ## Question: Can I extract multiple property chips from a block at once? ## Applies to: * Block Properties ## Answer: No, currently, the only way to extract multiple property chips is to drag each chip out at once or to drag the parent list out if it belongs to a list. ## Keywords: *property question multiple group together chip drag* # Can I stop blocks from immediately building? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/can-i-stop-blocks-from-immediately-building ## Question: Is it possible to pause computing blocks while working in nTop? If creating a workflow with several blocks, I may want to make changes to some workflow portions without rebuilding the entire Notebook. ## Applies to: * Manual Run Mode ## Answer: Pausing the Notebook is usually unnecessary as nTop always attempts to allocate one thread to the UI and limit software lock-ups. However, there are two ways to prevent blocks from building immediately. * Pause the entire Notebook by clicking **Toggle Autorun.** ![The nTop notebook with the Toggle Autorun button highlighted.](https://files.learn.ntop.com/help-articles/user-interface/49668897320083.png) * Pausing individual blocks using the **Manual Run Mode.** 1. Right-click and select **Manual Run Mode**. This will activate the feature and a flag displaying a pause icon will appear on the exterior of the block. If you hover over the pause icon, a tooltip will appear reading “Manual Run Mode”. ![Right clicking a block opens the block action menu. Here you can find the toggle for Manual Run Mode.](https://files.learn.ntop.com/help-articles/user-interface/49668958381459.png) 2. Make a change to a block upstream that is connected to the block you applied the Manual Run Mode to downstream. Once the upstream block has been changed, the block with the Manual Run Mode applied to it will change its icon to a play button. ![A demonstration of how Manual Run Mode works.](https://files.learn.ntop.com/help-articles/user-interface/49668958382227.png) > [!TIP] > > **Tip:** If you have multiple blocks with Manual Run Mode applied to them and they are interconnected to one another in the notebook, you can either Run each block one at a time or you can choose to Run the most downstream block, which will trigger all upstream blocks to Run too. ## Keywords: *blocks notebook question build run process regenerate autobuild pause manual manual run* # Can nTop export animated GIFs? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/can-ntop-export-animated-gifs ## Question: Can users export an animated GIF of a workflow for presentations and demonstration purposes? ## Applies to: * GIFs ## Answer: nTop does not have a built in screen recorder for video. The most straightforward way of creating an animation requires a third-party screen capture tool. Users can export static images of designs with one of the following methods: * Select **View > Capture Image** * Select **View > Precision Render** ## Keywords: *render question gif screen capture image capture image animation* # Convert a Scalar to a Non-Dimensional Value or an Integer Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/convert-a-scalar-to-a-non-dimensional-value-or-an-integer A scalar is a value that may have units attached to it. This can be the output of a block. There are situations, where you may want to use this scalar value as an input to another block, which accepts a non-dimensional value. Fortunately, there are a couple easy ways to remove the units. **Approach 1** In the Properties for the Scalar value, use the "round", "ceiling" or "floor" property (depending on how you want to perform the rounding), which will output an integer. You can then use these "tabs" as an input to your desired block. **Approach 2** Use a Divide block and use the scalar as the Operand A and a unit value with same units as the Scalar as the Operand B. For example, if the Scalar is a volume value, with units of mm^3, then you can use 1 mm^3 as the Operand B so the resultant will be just the number value. Note that depending on the Scalar, the output of this step could be a real number with decimals. You can convert to an Integer using the "round", "ceiling" or "floor" property as described in Approach 1. ## Keywords: *scalar conversion integer* # How can I section cut my part to see inside? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-can-i-section-cut-my-part-to-see-inside ## Question: How can I see the inside of my part? How can I section cut my part? ## Answer: To see the inside of your part, you can use 'Section Cut'. Section Cut can be accessed in the main navigation bar under View. The shortcut to access Section Cut is hotkey 'X'. When working with the Section Cut tool, you can continue making design changes while maintaining the section cut view and have the section update as you work. The section tool works on all blocks in the Notebook except for voxel grids. ![The inside of an implicit body, visible using the Section Cut feature of nTop.](https://files.learn.ntop.com/help-articles/user-interface/49594521890707.png) ### Key Parameters: * **Mode:** Global or Selection * **Global:** Allows multiple blocks to be selected to be section cut at once. If selected, all the currently visible blocks will be section cut. * **Selection:** This mode isolates one specific object to section cut. * **Object:** This parameter is used when the Selection Mode is enabled. Double left-click or begin typing the name of the block you want to see. * **Plane Size:** The size of the plane that is used to cut the object. By default, it is sized to the approximate bounding box of the object. * **Center:** The center point of where the section cut is occurring, which is taken from the bounding box centroid of the object. * **Plane Normal**: The plane that the section cut is occurring, the directionality can be switched at any time. The normal can also be flipped at any time. * **Display Style:** Shaded or Outline * **Outline:** Has transparency at the edges of the 2D section for easier viewing of complex shapes. * **Shaded:** Does not have transparency at the edges. ## Keywords: *section cut part slice section UI views user interface cut tool View see inside X hot key* # How do I access block properties and info? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-do-i-access-block-properties-and-info ## Question: How do I access block properties and info? ## Answer: ### Information Tab You can access a block's information by selecting the block and opening the Right Panel. The block's information is shown under the Information tab. The Information Tab contains: * Block Description * Version Number * Input Descriptions * Output Description * Conversion Information ![The Information tab located in the Right Panel of the nTop user interface.](https://files.learn.ntop.com/help-articles/user-interface/49627966505619.png) ### Display Tab You can modify a block's appearance by selecting the block and opening the Display Tab in the Right Panel. The Display Tab contains: * Block Name * Block Type * Visibility toggle * Color Settings * Transparency Control ![The Display tab is used to modify an implicit body's visibility, color, and transparency.](https://files.learn.ntop.com/help-articles/user-interface/49627950015763.png) ### Tools Tab The Tools tab will display the tool functionality that is selected from the View Tools Sidebar. ![The View Tools Sidebar has different tool functionalities to use in nTop.](https://files.learn.ntop.com/help-articles/user-interface/49627966512787.png) The View Tools Sidebar contains several helpful tools for analyzing your geometry: * **Field Viewer:** The *Field Viewer* allows you to visualize a field. You can change the plane of visualization using the colored plane icons. The following options are available to analyze the field: * *Opacity:* Changes the opacity of the visualized field * *Isolines:* Option to turn on/off the isolines * *Interval:* Changes the spacing between the isolines * *Custom Range:* Option to manually specify the value range of the field * *Min Value:* Minimum value when a Custom Range is applied * *Max Value:* Maximum value when a Custom Range is applied * *Colormap:* Option to change the color scheme of the field * *Probe Values:* Toggles the ability to see field values when moving the mouse over the field ![A gif showing the different functionalities of using the Field Viewer tool.](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Field-Viewer.gif) * **Section Cut:** This tool is used to cut geometry at a specified plane. You can change the plane of visualization using the colored plane icons. The following options are available when performing a section cut: * *Mode:* Choose between performing a section cut on a specific body (*Selection*) or on all visualized bodies that intersect the plane (*Global*) * *Display Style:* Changes the display style of the sectioned body * *Show Volume Mesh Elements:* If the body is a volume mesh, you can toggle the visualization of the 3D internal volume elements ![A gif showing the different functionalities of using the Section Cut tool.](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Section-Cut.gif) * **Surface Analysis:** The Surface Analysis tool has three different modes you can use to analyze the surface of your geometry: * *Overhang Angle:* This mode is used to identify regions in your model where angles may exceed the printable threshold, helping you inspect the design for additive manufacturability. It has the following options for inspection: * *Angle:* The lower value of the angle analysis * *Threshold:* The range between the lower and upper angle values being evaluated * *Build Direction:* Specifies the build plane normal direction * *Gradient:* Option to display the color scheme as gradient or not * *Draft Angle:* This mode visualizes areas of your model based on a specified draft angle relative to a pull direction, helping you verify that your design meets manufacturability requirements. It has the following options for inspection: * Angle: The specified angle to evaluate the geometry * Pull Direction: The plane used to specify the angle relative to the geometry * Gradient: Option to display the color scheme as gradient or discrete * *Curvature:* This mode is used to analyze the curvature of a geometry's surface. * *Metallic:* Renders the geometry with a shiny, reflective surface, which improves the clarity of curvature and surface quality. * *Zebra:* Displays a series of alternating black and white stripes on a surface. The reflection patterns of these stripes help visualize the surface's curvature. You can select from three buttons to choose the orientation of the stripes and use a slider to adjust their spacing. ![A gif showing the different functionalities of using the Surface Analysis tool.](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Surface-Analysis.gif) * **Measure:** The *Measure Tool* lets you directly measure distances between two points within your 3D model. This feature is ideal for quick inspections and supports interactive visualization of distances along global X, Y, and Z axes. The total distance and XYZ dimensions appear in the Right Side Panel, and you can check the “Show XYZ” checkbox to display dimension lines for X, Y, and Z in the 3D view. ![A gif showing the different functionalities of using the Measure tool.](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Measure-Tool.gif) ### Properties Panel A block's Properties Panel gives you access to different properties the block contains. These properties vary depending on the type of block. Property chips can be dragged into the notebook and used as variables. You can access the Properties Panel by clicking the question mark icon in the top right corner of the block. ![You can extract block property chips from the block's properties panel. The property chips are converted into variables when placed in the notebook.](https://files.learn.ntop.com/help-articles/user-interface/49627966514195.png) ## Keywords: *property UI info panel information panel properties Display Comment Color question info mark chip display comment* # How do I change the number format for values in nTop? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-do-i-change-the-number-format-for-values-in-ntop ## Question: The symbols for denoting number values differ from what I would like. How do I change them? ## Answer: nTop uses your machine's region settings to display values. To change the symbols being used, please follow the steps below. 1. Open your machine's Control Panel and select "change date, time, or number formats" under the Clock and Region heading. ![The computer settings menu of a windows machine. The change date, time, or number formats option under clock and region is highlighted.](https://files.learn.ntop.com/help-articles/user-interface/27073491880211.png) 2. On the smaller pop-up screen, select "Additional settings...". ![The region sub menu of the computer settings. The additional settings button is highlighted.](https://files.learn.ntop.com/help-articles/user-interface/27073491884179.png) 3. Using the highlighted boxes, you can change the desired Decimal symbol or Digit grouping symbol. ![The customize format settings menu. The decimal symbol and digit grouping symbol options are highlighted.](https://files.learn.ntop.com/help-articles/user-interface/27073491892371.png) ## Keywords: *settings question region format value comma number decimal symbol* # How do I zoom into my part if I can't find it on the screen? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-do-i-zoom-into-my-part-if-i-can-t-find-it-on-the-screen ## Question: How do I zoom into my part if I can't find it on the screen? ## Applies to: * nTop ## Answer: To zoom in to your part, select the block you want to find, make sure its visibility is toggled on, and hit '**Z**' to zoom in to fill the viewport with your part. ## Keywords: *part help zoom question find can't hot key extent extents home lost Z* # How do nTop block and software versions work? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-do-ntop-block-and-software-versions-work ## Summary: This article covers versioning for the nTop software and its blocks. It also includes instructions on maintaining compatibility and switching back to the old version if needed. As always, feel free to contact [support@ntop.com](mailto:support@ntopology.com) if you have any issues related to versioning. * ### [Block Versions](#h-01jjsvt507vje9cavgpqk2r295) * ### [Software Versions](#h-01jjsvt507t5qwffsnkj4y52ra) * ### [Backwards Compatibility Notices](#h-01jjsvt507641mrr24tcdgwmsk) ## Question: I want my workflow to stay the same, and I don't want future updates to affect it. How can I prevent any unwanted changes? ## Applies to: * nTop ## Answer: #### **Block Versions:** A new block version is available when we add a new feature, when the output of the block changes, or when we fix issues related to a block. > [!NOTE] > > **Note: Starting with nTop 5.15, we have revised our block version to be the same as the nTop version in which the block is released/updated. This change only affects blocks that are released or updated after 5.15.** As you can see in the image below, the explanation of why a block is updated when an update is provided is given. We don't have any auto-update functionality at a notebook level. A yellow warning symbol appears in the corner of the block to notify you when a newer version is available; however, you must manually update it by selecting the "Update" button. ![A Mesh from Implicit Body block with a warning message. The warning says that it is a deprecated block and there is an update button included to update the block to the latest version.](https://files.learn.ntop.com/help-articles/user-interface/45445313729555.png) We can change a block's version by right-clicking on it, selecting the Version Number option, and then selecting the version number. ![The sub menu of a mesh from implicit body block. The sub menu has the version number option highlighted, with a smaller menu open showing the available block versions.](https://files.learn.ntop.com/help-articles/user-interface/45445337925907.png) You might not be able to access all the block versions because of the change in the number of inputs in the block. To access the other versions, you would have to switch the overload of this block to the first option, and you will notice it has different inputs than the current version. If you cannot switch to other overloads, try clearing the inputs and checking again. If you prefer the result or use of a deprecated block ([What is a deprecated block?](/help-articles/knowledge-base/user-interface/what-is-a-deprecated-block)), you can still access it through the search bar. If a deprecated block doesn't appear in the search results, please ensure the option is enabled in settings. ![The General settings menu of nTop. The image is used to show where the Show Deprecated Blocks option is in settings.](https://files.learn.ntop.com/help-articles/user-interface/45445313735315.png) Occasionally, we choose to remove blocks from the software. If a block is removed, its title will say “Invalid Block.” An example of this is shown below. You will need to delete the block as it no longer exists. Please reach out to Product Support if you encounter an invalid block. ![An image of a block that has been removed from nTop. When a block is removed it will show as "Invalid Block".](https://files.learn.ntop.com/help-articles/user-interface/NvUfcRwQSUsCBgC9qgdB3pLdN7z8bfKZJQPRCtIeD-mag29DQhdNsrN9YyirNJq8rXELW2nhRmoFPV5sXK6Vwa9SKWsjEse9Z_3dQ-q2w7RZGoY5gb0V9ghH3C4UoIifWD4zxhmnAR74U3GA3UejLz.png) #### **Software Versions:** We release frequent software updates as we always try to improve our product. Most releases are feature updates, added blocks, and bug fixes. Occasionally, we will release a more significant update (such as our lattice transition from nTop 3.26) that has a far more substantial impact on how things work in nTop. If you have a workflow that you do not want to change in any way, the easiest way to do this is to stop updating nTop. **nTop will never update on its own without manually selecting the update button.** To view the version of nTop you are currently working on, click on the question mark in the top right corner of the program window and then select "About." ![The Help menu expanded in the nTop user interface. The About option is highlighted.](https://files.learn.ntop.com/help-articles/user-interface/45445313735955.png) You may encounter a situation where you receive a file from product support, a learning course, or a colleague created in a nTop version that is newer than your installed version. If this occurs, a warning will prompt you to update the software to edit the workflow. We recommend visiting the support site's [What's New](https://support.ntopology.com/hc/sections/360011659053) page for a full breakdown of new features and updates. From there, you can see past Release Notes for software updates. Overall, we recommend using the latest version of the blocks and software to achieve the best possible performance and results. #### **Backwards Compatibility Notices:** Occasionally, we will make changes to the software that are so impactful that they completely disrupt workflows. When these changes occur, we will release an article describing the impact, why the change is happening, how it will affect you, and what to do about it. These articles are in our Support Site's [Backwards Compatibility Notices](https://support.ntopology.com/hc/en-us/sections/13651549033235-Backwards-Compatibility-Notices) section. The article will clarify which version of the software will contain the changes, so if you don't want to experience them, you don't have to update to that version. > [!NOTE] > > **Note: If you use older blocks or software versions, you may experience issues already fixed in new releases. nTop does not support outdated software issues or deprecated blocks.** ## Keywords: *block update ntop question version old deprecated* # How to add a ribbon toolkit Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-add-a-ribbon-toolkit ### Objective: Adding toolkits to your ribbon ### Applies to: * Beta * Rib Design \[Beta] * Additive Manufacturing * Architected Materials * Design Analysis * Lightweighting ### Procedure: 1. Click on the hamburger menu in the top left of nTop 2. Select "Settings" 3. Go to the "Ribbon" tab 4. Check the box next to any toolkit you want to be visible in your ribbon 5. Click "Ok" And that's it! You've successfully added toolkits to your ribbon. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ![The Ribbon sub menu of the Settings menu in nTop.](https://files.learn.ntop.com/help-articles/user-interface/41070396251539.png) ## Keywords: *toolkits ribbon toolkit* # How to combine scalar lists together as text Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-combine-scalar-lists-together-as-text ## Objective: Learn how to combine scalar lists as text. In this example, we are creating a Custom Block to combine the Points and Vectors from a Displacement Point Map as well as the Von Mises stress values. The result combines the Points, Vectors, and Scalar values into a text file. ## Applies to: * Exporting * Simulation * Lists ## Procedure: #### **Create the Custom Block** **1. Set up the inputs** Decide what inputs are necessary for your custom block. In this example, we want a Point, a Vector, and a Scalar value. * Add a **Point** block. * The format of this block has its own line for each X, Y, Z. In order to easily enter the list values into this block, we want it to be in a different format, where the X, Y, Z are all in one line. To do this: * Right-click on the block and select 'Make model input' or just drag the block into the Input section to turn the **Point** block into an Input * Drag the block body back into the Notebook (this turns the variable in the Input section into the proper format) * Delete the **Point** block in the Notebook and keep the **Point** block Input * Repeat this process for the **Vector** block * Add a **Scalar** variable and move it into the Input section ![Creating the input variables for the custom block.](https://files.learn.ntop.com/help-articles/user-interface/1500013889022.png) **2. Convert the values to Text** Next, we need to convert the values from Scalar to Text. It's easiest to do this while we create a **Text List** at the same time. * Add a **Text** **List** block * Insert a **Text from Scalar** block into the input **Value:** Now we need to link each of our inputs into a **Text from Scalar** block using the Value inputs. Since we are linking Points and Vectors, we need a [Text from Scalar](https://support.ntopology.com/hc/en-us/articles/360058140834) block for every unique X, Y, Z value. * Link the Point X property to the Value input * Open up the Point input Properties and drag the 'X' chip into the Value input **Reference:** This input is used to maintain a consistent output. If you are exporting in units of millimeters, then a value of 1 mm would be entered into this value. * Set the Reference to 1 mm **Precision:** The number of significant digits for formatting the values as text. * Set the Precision to 1 ![A Text from Scalar block inside a Text List block. This is the general structure for converting the Scalar values to text that will be repeated below.](https://files.learn.ntop.com/help-articles/user-interface/1500013898762.png) * Select the '+' icon to add another list input on the Text List block * Repeat the process of adding the **Text from Scalar** block and linking it to the next input until all inputs are linked to the **Text List** block * For the Vector variables, set the Reference to 1 mm and keep the Precision at the default 17 * For the Scalar variable, set the Reference to 1 Pa and keep the Precision at the default 17 ![The completed Text List containing 7 Text from Scalar blocks. Each block converts a different simulation result scalar value into text.](https://files.learn.ntop.com/help-articles/user-interface/1500014174061.png) **3. Concatenate the Text List** * Add a **Concatenate Text** block * Insert the **Text List** from Step 2 * Set a Delimiter (this character will be what separates the values) ![Using a Concatenate Text block to combine the Text List.](https://files.learn.ntop.com/help-articles/user-interface/1500014177001.png) * Drag the **Concatenate Text** block into the Notebook Output **4. Save the Custom block** Remember the Custom Block has the same name as the Notebook Name. Due to this, we recommend naming the block the same as the Notebook Name. #### **Combine and Export the Values** **1.** Open an existing file or build up a new one where you want to export the values. We are using [this file](https://ntopology.app.box.com/s/9iyzgrxtqclqsu4ls6bjesqvje863us6) from a previous [Static Analysis](https://support.ntopology.com/hc/en-us/articles/360054149874) example. **2.** **Import the Custom block** * Select the '+' symbol in the Notebook and Import the Custom block we just created (this automatically adds the block to the Notebook) **3. Input the values** The example file used doesn't have the Displacement Point Map created yet. Add a **Displacement Point Map** block and input the **Static Analysis** block * Open up the properties of the **Displacement Point Map** block and drag the Points chip into the Point input of the Custom Block * Open up the properties of the **Displacement Point Map** block and drag the Values chip into the Vector input of the Custom Block * Open up the properties of the **Von Mises Point Map** block and drag the Values chip into the Von Mises input of the Custom Block ![A gif demonstrating the use of the created Concatenate Results custom block. The points and values lists are drag and dropped from a Displacement Point Map into their respective variables. The values list from a Von Mises Stress point Map are added to the Von Mises input.](https://files.learn.ntop.com/help-articles/user-interface/1500013932082.png) 4. Concatenate Text List * Add a **Concatenate Text** block * Change the Overload to 'Text List, Text' * Set the Delimiter to a unique character that is different from the first delimiter. This character separates the group of values at each point. If this was a CSV file, this value would be a line break. * Insert the Custom Block into the Text input (it may be slow depending on how many values are being concatenated) **5. Export the values** * Add an **Export Text** block * Insert the **Concatenate Text** block from Step 4 and choose a directory to save the file ![A concatenate text block is then used to combine the Concatenate Results custom block list. The concatenate text is then used as the Text input for the Export Text block with a specified file path.](https://files.learn.ntop.com/help-articles/user-interface/1500013933362.png) And that's it! You've successfully combined a list of scalar values into a text file. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Custom block](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Combine%20Scalar%20Lists%20to%20Text.ntop) ## Keywords: *simulation list map lists results combine csv point scalar vector how-to exporting values text concatenate* # How to create a custom block Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-create-a-custom-block ## Objective: Learn what a custom block is and how to: * [Create a custom block](#h-01fc47wr7z0rq1qxegwsmcrjqy) * [Best practices for creating a custom block](#h-01g68hvv0xj0e2k9m2qde49bd8) ## Answer: > [!NOTE] > > This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: > > * **Learning Center course:** > * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) > * **Articles:** > * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) > * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) Custom blocks are notebooks with defined outputs and custom inputs with descriptions packaged into a single block to reuse in notebooks. ## To create a custom block: 1. Create a workflow in the **“Body”** of a new notebook. 2. Identify the parameters that will serve as Inputs to the custom block, and there are different ways to make them inputs. * Move them to the “Inputs” section of the notebook. * Drag and drop Variables into the Inputs section. * Right-click and select “Make model input” to move to-be variables out of the body into the Inputs section. 3. Identify the output that will be accessible once compiled into a custom block. To add an output, drag the block containing the output into the “Output” section of the notebook or type the object's name in the Output section text field. Both of these methods will produce an output variable chip. 4. Name your custom block by double-clicking the name at the top of the notebook **"Notebook Name"**. This name is independent of the nTop file name. 5. Once inputs and output are defined, save the file. ![A diagram showing the necessary components of an nTop notebook used to create a custom block.](https://files.learn.ntop.com/help-articles/user-interface/19456051342867.png) ## Best Practices for custom blocks: ### Notebook Name and File Name To ensure clarity, a Custom Block's **File Name** should be the same as its **Notebook Name**. The File Name / Notebook Name should describe the function of the block as distinctly and succinctly as possible. **Acceptable Custom Block Names** * Mirror Implicit Body * Mesh Triangle Selection * Filter Mesh * Centroid of 3 Points * Scale Body \[Non-Uniform] * Boolean Intersect \[Listless] * Donut **Ineffective Custom Block Names** * mirror implicit body \<- *Improper capitalization scheme* * Lattice Fill & Shell Compound Block \<- *Mentions compound block nature* * Better Translate \<- *Extraneous descriptor* * Boolean Intersect (Listless) \<- *Parentheses usage (creates confusion with lists)* ### Description A Custom Block's **Description** should be written in easy terminology to promote clarity and understanding. A good description should address the following: * What does the Custom Block do? * What kind of output can a user expect from using the Custom Block? * Are there circumstances or modifiable inputs that can greatly impact the speed/efficiency of the Custom Block? * Are there significant circumstances where the Custom Block will not work? **Acceptable Description for a “Mirror Implicit Body Block”** * This Custom Block mirrors an Implicit Body across the selected plane. The original object is not preserved. **Ineffective Description for a “Mirror Implicit Body Block”** * This Custom Block mirrors the input object across the input plane. \<- *The description is technically correct, but vague and does not address potentially pertinent specifics like the preservation of the original object.* * This Custom Block mirrors the input Implicit Body object across the input plane through a remap. The accuracy of the bounding box is not retained due to the remap, so the tolerance of the Refine Bounding Box attempts to fix this as best as possible. This block does not work on Spatial3D objects that are not Implicit Bodies. The original Implicit Body is not preserved. \<- *Description is extremely technical and references nuances involving blocks used internally. This can be acceptable for more complex blocks with nuanced outputs, but the Mirror functionality has an expectation of functional simplicity. Also, constantly referencing types is redundant when an Input/Output Type diagram is provided. Use your best judgment.* ### Variable Names A Custom Block's **Input and Output Variable Names** should very briefly describe how it will be used in three words or less. Capitalization of Input Variable Names should match native block input capitalization schema. (First word capitalized only) **Acceptable Custom Block Input Variable Names** * Implicit body * Feature tolerance * Mesh list **Ineffective Custom Block Input Variable Names** * Implicit Body \<- *Improper capitalization scheme* * Feature tolerance for voxel grid \<- *Too descriptive (will be truncated and not visible)* * Displacement vector field \<- *Possibly too long (will be truncated and not visible)* ### Descriptions A Custom Block's **Input and Output Descriptions** should indicate what kind of values should be used for the input. Input Description is a good place to be verbose where the **Input Variable Name** could not. A good input description should address the following if pertinent: * What units are compatible with this input? * What range of values should a user use? * Are there inputs that can greatly impact the speed/efficiency of the Custom Block? * Are there significant inputs that should be avoided? **Acceptable Description for a “Scalar Input Variable”** * **Tolerance of conversion is determined by the distance of the resultant Implicit body to the surface of the CAD body. “0.01 mm” is an acceptable value for CAD bodies with planar surfaces. “0.001 mm” or smaller should be used if the CAD body has contours or curvature.** # How to create variables Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-create-variables ## Objective: Learn what a variable is and how to: * [Create a block variable](#h-01fc47wr7z0rq1qxegwsmcrjqy) * [Create a parameter variable](#h-01fc47wz5zhvm0ntdm1gdh19x6) * [Use the info panel to create property variables](#h-01fc47x5z77etp8zempbc5sabj) * [Remove the contents of a variable](#h-01fc47xc7v9de32qg6v4nk08y6) ## Answer: A variable can be any block or parameter in the Notebook. By declaring a block as a variable, entire parts can be changed quickly and parametrically. An entire Notebook of functions can automatically be computed and rebuilt by changing values in the variable. Variables allow for quick and easy organization and understanding of your Notebook since the variable blocks don't get nested within another block. #### **To create a Block variable:** * Select the block * R-click along the top of the block * Select "Make Variable" A block variable looks different from a regular block. The block name moves to the left and sits on top of the block color (related to the block type). Below you can see a variable vs a regular block. ![Two cube blocks in nTop. One of the blocks has been converted into a variable named "Variable".](https://files.learn.ntop.com/help-articles/user-interface/4404667084307.png) A block variable never "nests" inside another block. Instead, a "chip" is created to show that the variable is inserted in that block. Watch this quick gif below to see how to create a variable, re-name it, and insert it into another block. ![The gif shows how to create a variable, re-name it, and insert it into another block. ](https://files.learn.ntop.com/help-articles/user-interface/4689408659603.png) #### **To create a Parameter variable:** * R-click over a parameter name * Select "Make Variable" A parameter variable is a useful way to quickly change a specific aspect of a block. It makes it clear what input can change. See the gif below on how a parameter variable is made. ![The gif shows how to make a parameter variable.](https://files.learn.ntop.com/help-articles/user-interface/4689408547475.png) #### **Use the Info Panel to Create Property Variables:** * Expand the (?) symbol on the block to open the Info Panel * Go to the Properties Tab * Drag any property into the Notebook to create a variable of that property (these properties are linked to the block they came from). You can also drag any chip directly into an input, instead of the Notebook. ![The gif shows how to extract property chips from a block's property panel. The extracted chips are converted into variables when they are placed in the nTop notebook.](https://files.learn.ntop.com/help-articles/user-interface/4689408423827.png) #### **Removing Variable Contents:** * Empty a variable by R-clicking on the variable and selecting "Remove Contents" Emptying a variable allows you to quickly change the contents of that variable while keeping the variable chip inserted as inputs in other blocks. In this example, the contents of a **Cube** block variable are being removed. In order to allow any Implicit Body input, the variable block type icon needs to change from Cube to Implicit Body. To do this, click on the icon and search the list or type in the desired input type. Changing the **Sphere** and **Cube** into variables allows you to quickly replace them without having to R-click and remove contents. ![The gif demonstrates how to remove variable contents from a cube variable. After Removing Variable contents, the input type is changed to implicit body, which allows for the sphere to be inserted.](https://files.learn.ntop.com/help-articles/user-interface/4689381686803.png) ## Keywords: *block variable create parameter edit what is change using info vary creating removing variables make input chip nest* # How to filter lists based on odd and even items Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-filter-lists-based-on-odd-and-even-items ## Objective: Filter Lists based on odd and even Items ## Procedure: 1. Use **Sequence** block to generate Odd and Even numbers. ![A list of points is generated by using a Random Points in Body block on a Cube block. Two Sequence blocks are added that both have an Increment value of 2 and a Count value of 115. The difference is that one Sequence's Start value is 0 and the other is 1. ](https://files.learn.ntop.com/help-articles/user-interface/4406024603539.png) 2. Use the 2 **List Element** blocks to create even items and odd items list * **List:** Input your list * **Index:** Drag and drop the round chip from the **sequence** properties ![Using a List Element block, the Random Points in Body point list is inserted in the List input. Inside the properties panel of the Sequence starting with 0, the round property chip is extracted and placed in the Index input. This creates a list of only the even values since the Sequence starts on an even number. The same process can be repeated using a second List Element block and the round property chip from the Sequence block that starts at 1.](https://files.learn.ntop.com/help-articles/user-interface/4406024688915.png) And that's it! You've successfully created two lists with odd and even items. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://storage.googleapis.com/files-learn/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Filter%20List%20Odd%20and%20Even.ntop) ## Keywords: *lists filter how-to odd even* # How to modify a custom block Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-modify-a-custom-block ## Modifying Example: ![An example of how to modify a custom block that has been imported into an nTop notebook.](https://files.learn.ntop.com/help-articles/user-interface/49625537156115.png) ## Frequently Asked Questions: #### **What are the primary scenarios when editing Custom Blocks?** There are 4 primary scenarios when editing Custom Blocks, each one will show a different pop-up window when the BACK button is selected. 1. Update (no inputs/output change) - the most common scenario that occurs when a change is made to a Custom Block that does not modify its inputs or output or is a name change. ![Modified Custom Block pop-up window that indicates the notebook should be updated to reflect the changes.](https://files.learn.ntop.com/help-articles/user-interface/8326109419667.png) * Update - (**Recommended**) Accept the changes made to all instances of Example within the main notebook. * Discard - Discard the changes we made in Example. * Cancel - Ignore the changes. This will store the unsaved changes of Example that you can apply later through the Imported Blocks menu. 2. Add to Notebook (inputs/output change) - the scenario when a Custom Block's inputs or outputs are changed. You need to add it to the notebook. ![Modified Custom Block pop-up window that indicates a custom blocks inputs or outputs have changed.](https://files.learn.ntop.com/help-articles/user-interface/8326130278419.png) 1. Add to Notebook - (**Recommended**) Add the Custom Block to the notebook as a new instance. From there, you will likely need to replace your old Example instances with this new Example instance. 2. Discard - Discard the changes we made in Example. 3. Cancel - Ignore the changes. This will store our unsaved changes of Example that we can apply later through the Imports menu. 4. Manage (nested change) - the scenario that occurs when you open a Custom Block from the Imports menu that is more than a single level deep in the Custom Block hierarchy tree and go back to the main notebook. ![Modified Custom Block pop-up window that indicates a nested custom block has been modified and you return to the top level of the notebook.](https://files.learn.ntop.com/help-articles/user-interface/8326154408595.png) 1. Manage Blocks - (**Recommended**) Opens the Imports menu where you can manually manage your changes. You will have to open up the Custom Block that was 1 level higher in the Custom Block hierarchy tree that contains the nested Custom Block and apply your edits there. Continue working your way back up the Custom Block hierarchy tree until you reach the main notebook level and apply your edits. 2. Discard - Discard the changes we made in Example. 3. Cancel - Ignore the changes. This will store our unsaved changes of Example that we can apply later through the Imports menu. 4. Invalid - the scenario that occurs when a Custom Block has no inputs or output. ![Modified Custom Block pop-up window that indicates the changes made resulted in an invalid block.](https://files.learn.ntop.com/help-articles/user-interface/8326131799443.png) 1. Go Back - (**Recommended**) Reopens the Custom Block back up where you can proceed to fix the errors. 2. Discard - Discard the changes we made in Example. 3. Cancel - Ignore the changes. This will store our unsaved changes of Example that we can apply later through the Imports menu. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Imports Menu Indicators** ![The Imports Menu with indicators referring to the state of the custom blocks in the notebook.](https://files.learn.ntop.com/help-articles/user-interface/49625537157779.png) **1. Dependent Blocks Indicator -** The red circle means that dependent blocks have changes. If the block is collapsed, click the chevron to see which dependent blocks have changes. To modify dependent blocks within this it, right-click and select "Open", then proceed to update blocks within it. **2. Edited Block Indicator -** The yellow circle means a block has been edited and requires further action. The pop-up window will have information on what action is required. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Will my Custom Blocks changes be applied outside my file?** Once a Custom Block is imported into a file, it becomes internalized to that file. Any changes made will be within the context of that file but not reflected externally. Please export Custom Block to a directory to share or update any that were imported and edited within a file. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Will my Custom Blocks changes be applied to all instances within my file?** Any changes made to a Custom Block within a file will be applied to all instances of the Custom Block (including nested Custom Blocks, Custom Blocks within Custom Blocks) in your file. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **What does the version number mean?** Whenever a Custom Block is edited within a file, we automatically increment the block version. The example below shows the original Place Image using Cell Map custom block and the updated version. The updated custom block is indicated by the version number next to it. ![The imports menu showing multiple versions of an imported custom block.](https://files.learn.ntop.com/help-articles/user-interface/49625520833683.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **What is the Custom Block hierarchy tree?** The Custom Block hierarchy tree shows in the Imported Blocks menu. Every Custom Block that contains Custom Blocks within it, nested Custom Blocks, will have a chevron that you can expand/collapse to show the nested Custom Blocks. If a Custom Block does not have a chevron, it does not contain any nested Custom Blocks. In the example below, the Place Image using Cell Map custom block contains a nested Remap Scale Body custom block. ![The imports menu showing the hierarchy tree of custom blocks. Any custom blocks that have nested custom blocks will have a chevron next to their name. Clicking the chevron will show any nested custom blocks.](https://files.learn.ntop.com/help-articles/user-interface/49625520839187.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Can I make changes to nested Custom Blocks?** Nested Custom Blocks, Custom Blocks within Custom Blocks, can be viewed and edited within a file. To edit them, we recommend opening each Custom Block to get to the lowest nested Custom Block. Then make your changes to the lowest nested Custom Block, then go back to the next highest Custom Block level and apply your changes - eventually working your way back up to the main notebook level. ![A gif showing how to modify a custom block that is nested within a custom block.](https://files.learn.ntop.com/help-articles/user-interface/49625520841491.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Keywords: *block update open edit custom how-to modify* # How to overload custom blocks Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-overload-custom-blocks ## Question: How to overload custom blocks ## Applies to: * Custom Blocks ## Answer: > [!NOTE] > > This article uses a Custom Block to create our desired outcome. If you are new to using Custom Blocks, learn how to import, modify, and update them with the following resources: > > * **Learning Center course:** > * [Intro to Automation](https://learn.ntopology.com/intro-to-automation) > * **Articles:** > * [How to update a Custom Block in an active notebook](/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook) > * [How to open up a Custom Block](https://support.ntop.com/hc/en-us/articles/4402068300435) 1. Create the custom block by following the article or the learning center course. ![The block structure for creating the Center of Gravity custom block. The body to have its center of gravity evaluated is a lattice type.](https://files.learn.ntop.com/help-articles/user-interface/21486881283603.png) ![The Center of Gravity custom block.](https://files.learn.ntop.com/help-articles/user-interface/21486932630291.png) 2. Copy and paste the nTop file to modify the custom block to be overloaded. ![The file explorer view of the center of gravity custom block. The file is copy and pasted to create a duplicate.](https://files.learn.ntop.com/help-articles/user-interface/21486959769747.png) 3. Open the Copy custom block, make changes, and save it. ![The block structure of the copy of the center of gravity custom block. The body input type has been changed from a lattice to an implicit body.](https://files.learn.ntop.com/help-articles/user-interface/21487148027539.png) 4. Import both custom blocks. ![Importing both versions of the center of gravity custom block into an nTop notebook.](https://files.learn.ntop.com/help-articles/user-interface/21487119016467.png) ## The Center of Gravity custom block with the overload menu expanded. There are two options depending on using an implicit body input or a lattice input. ## Keywords: *block custom overloading* # How to reduce the file size using Manual Run Mode Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-reduce-the-file-size-using-manual-run-mode ## Objective: Reduce the file size to share by using Manual Run Mode Reduce the file size to share it with nTop Support ## Procedure: **What is Manual Run Mode?** Manual Run Mode allows you to explicitly prevent a block from running automatically. This feature allows you to make a series of iterative upstream changes to your notebook without automatically running downstream blocks, which could be computationally expensive and time-consuming. > [!NOTE] > > *Note: By using the Manual Run Mode, we are transferring the computation to the receiving party. If you don't wish to do the same, kindly don't use this method.* #### **1. Check the File Size and Open the nTop file** Right-click the file on Windows Explorer and click Properties to view the file size and check if it takes up excessive storage space. If it is, consider reducing the file size using a **Manual Run Mode**. Open the nTop file. ![The properties menu of an example nTop file in file explorer. The image is used to show the file size.](https://files.learn.ntop.com/help-articles/user-interface/15872315740435.png) #### **2. Adding Manual Run Mode** The blocks that consume the most amount of space are Meshing and Simulation blocks. Please identify these blocks in our workflow and locate the topmost one. If we change upstream, it will remove all the data stored in downstream blocks. **Why the topmost block?** We are toggling the *Manual Run Mode* to pause the block from computing. This pause makes sure that the results are not stored. If we choose a block downstream to pause, it is less effective since other blocks in the workflow have computed and stored results. i. Right-click on the Meshing/Simulation block and select *Manual Run Mode*. This activates the feature, and a flag displaying a pause icon appears to the right of the block. If you hover over the pause icon, a tooltip reads *“Manual Run Mode.”* ![An example of how to apply manual run mode to a block.](https://files.learn.ntop.com/help-articles/user-interface/15835590185363.png) ii. Change an input value in either an upstream block or the block you applied the Manual Run Mode. Once one of these blocks has been changed, the block with the Manual Run Mode applied to it will change its icon to a play button. You can replace the original value you changed to ensure you get the same results as earlier. We need to make the change to ensure that the block will erase the data stored and will ensure that the computation is paused. ![The example shows how downstream blocks will not calculate if an upstream block is set to manual run mode.](https://files.learn.ntop.com/help-articles/user-interface/15840926163219.png) The color of the Information Panel (Question Mark icon) changes depending on the status of the block. * Blue: Unbuilt block. * Grey: Block built successfully. > [!TIP] > > **Tip:** If you have multiple blocks with Manual Run Mode applied to them, and they are interconnected to one another in the notebook, you can either Run each block one at a time or you can choose to Run the most downstream block, which will trigger all upstream blocks to Run too. #### **3. Saving the File** If you don't wish to rerun the blocks in the original file, you can use the Save As option to store the *Manual Run Mode* version separately to share it with others. You can now open Windows Explorer to check the File size to see how much we have reduced it. ![The properties menu of an example nTop file in file explorer. The image is used to show the file size. Since the file has been resaved with manual run mode enabled on an upstream block, the file size is now significantly smaller.](https://files.learn.ntop.com/help-articles/user-interface/15872376958227.png) We can see that the file size has been reduced from 196 MB to 307 KB. #### **4. Embedding the CAD Parts** We highly recommend embedding your CAD parts or Mesh files when sharing as they are crucial to your workflow, and you don't need to share the CAD part or Mesh files ([How do I embed my imported part/mesh?](/help-articles/knowledge-base/interop/how-do-i-embed-my-imported-part-mesh)). ![The sub menu that appears when a user right clicks the import part block. The Embed option is highlighted.](https://files.learn.ntop.com/help-articles/user-interface/15841044942867.png) ## Keywords: *ntop file with reduce run size mode manual large file size share* # How to update a Custom Block in an active Notebook Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-update-a-custom-block-in-an-active-notebook ## Question: How do I update a Custom Block that is being used in my Notebook? ## Applies to: * Custom Blocks ## Answer: To update a Custom Block, you need to re-import it into your Notebook. Once you modify the Custom Block and save it: * You can delete the block from your current Notebook. * Leave it and let it update automatically when you import the modified block. You can choose from the following import methods: 1. File->Import->Custom Block. 2. Open the Imported Blocks folder and select Import Block. 3. Save the modified Custom Block in your 'My Blocks' folder. * When you use this method, you need to open a new instance of nTop to use the updated block. * You need to re-add the block to your Notebook to use the updated version. If you change the inputs and use the same Custom Block Notebook name, you will see a popup message notifying you that a custom block has been modified. Indicators in the 'Imports' tab will also clarify which blocks have been affected. ![After editing a custom block in an active notebook, the popup message shown below will appear when you return to the notebook. The Imports tab of the left panel will also have indicator icons next to the custom block that has been modified. ](https://files.learn.ntop.com/help-articles/user-interface/49588924237203.png) After clicking the Update button, you will notice that the new version is automatically placed into your active notebook. It is also clearly indicated which version of the block you are currently working with. ![The new version of the custom block will have a version number noted next to it if multiple copies of the same custom block are present in the imports tab.](https://files.learn.ntop.com/help-articles/user-interface/49588883403795.png) ## Keywords: *import block update question custom overload active automatic* # How to use lists to iterate your designs Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-use-lists-to-iterate-your-designs ## Objective: Learn how to use a List input to run a single block multiple times, creating a list of results. ## Applies to: * List processing * Quick design iteration ## Procedure: If you search for blocks, you will sometimes see a "*Block Name* List" pop up. These can be used as an input into another block to run it multiple times. The block that ran will turn into a List block with a (#) behind the name. The (#) corresponds to how large the list is. Lists can be used in the input of [custom blocks](https://support.ntop.com/hc/en-us/articles/360047299534), so customized functions can be performed on multiple listed inputs at once. Want to List Process and don't know where to start? * Determine the input you want to iterate * Open up the info panel and find the input type * Search for that type of list in the Notebook search (ex. Scalar List, Point List, Vector List...) In this example, we are creating multiple cylinders of different heights through one block. 1. Add a **Cylinder** and set the Radius to 5 mm 2. Add a **Point List** block and hit the '+' to add 5 inputs * Set the inputs to be: * (0,0,5) * (0,0,10) * (0,0,15) * (0,0,20) * (0,0,25) 3. Input the Point List into the Point 2 input in the Cylinder block. The block now runs 5 times and shows (5) behind the block name. Only one cylinder will appear as all of the cylinders have the same origin. 4. Open up the Properties of the Cylinder block and scroll down to see all of the bodies in the List. To extract one, drag it into the Notebook. ![A list of 5 cylinders generated by inserting a Point List into the Point 2 input of the Cylinder block. The properties panel of the Cylinder block is open to show the individual cylinder bodies.](https://files.learn.ntop.com/help-articles/user-interface/1500001521362.png) **Optional:** Follow these steps to translate the parts to see them all at once 5. Add a **Translate Object** block 6. Add a **Vector** block. Set the X and Z inputs to 0 mm 7. Input a **Sequence** block into the Y-Input of the Vector block * Set the Sequence to: * Start: 0 mm * Increment: 12 mm * Count: 5 8. Input the **Cylinder** block into the Object Input to translate all 5 parts by increments of 12 mm ![A Translate Object list created using the list of cylinders and a vector list.](https://files.learn.ntop.com/help-articles/user-interface/360102584393.png) And that's it! You've successfully iterated a cylinder design by using lists. Are you still having issues? Contact the [support team](https://support.ntopology.com/hc/en-us/requests/new), and we'll be happy to help! ## Download the Example file: * [Example file](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/cylinder_lists.ntop) ## Keywords: *list lists design point processing scalar input process iterate quick designing* # How to use logic blocks Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-use-logic-blocks ## Summary: This article explains how to use nTop's logic blocks and the **Await** block in your workflow. You can use these blocks to change how your workflow calculates results. ## Applies to: * Logic blocks * Await block Logic blocks use bools to change the outcome of a result. A bool is a data type that can have one of two possible values, these values are usually represented as true or false. You can use logic blocks to easily change between multiple workflow outcomes. Using this example, we can highlight the different interactions between logic blocks in nTop. The screenshot below shows our starting geometry and two bool inputs we can use to change the outcome of our workflow. ![A notebook example of how to use Logic blocks. The notebook contains an imported cad part, that has been converted to an implicit body and mesh. The Sharpen and Simplify bool options of the Mesh from Implicit Body block have been converted to variables. There is also a Plane from Normal block specifying the meshes starting location.](https://files.learn.ntop.com/help-articles/user-interface/39543576007955.png) #### **If-Else:** The **If-Else** block returns one of two possible values depending on a bool condition. If the bool is true, the block computes the 'Then' input. If the bool is false, the block computes the 'Else' input. In the example below, we start with a meshed block. The 'Sharpen' bool from the original mesh is being used to determine which input of the **If-Else** block should be computed. The 'Sharpen' bool is originally off, therefore the **Remesh Surface** block is computed. Once the 'Sharpen' bool is toggled on, the **Orient Object** block is computed. ![An example of using the If Else block. The If Else is set up with the Sharpen variable as the Condition. The Then input contains an Orient Object block and the Else input contains a Remesh Surface block. If Sharpen is enabled, the mesh is moved to a new plane location using the Orient Object block. If Sharpen is not enabled, mesh is remeshed using the Remesh Surface block.](https://files.learn.ntop.com/help-articles/user-interface/39544221808659.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Not** The **Not** block returns a true value if the input condition is false. By inserting the **Not** block into the 'Condition' input, we can reverse the outcome of the first example. The gif starts by showing that the 'Sharpen' input is not enabled, therefore the condition is true and the **Orient Object** block is calculated. Once the 'Sharpen' input is toggled, the bool becomes false and the **Remesh Surface** is calculated. ![An example of using the If Else block with a Not block applied to the condition. The If Else is set up with the Sharpen variable inside the Not block as the Condition. The Then input contains an Orient Object block and the Else input contains a Remesh Surface block. If Sharpen is enabled, mesh is remeshed using the Remesh Surface block. If Sharpen is not enabled, the mesh is moved to a new plane location using the Orient Object block.](https://files.learn.ntop.com/help-articles/user-interface/39544206799763.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Or** The **Or** block returns a true value if either of the two input values are true. In the example below, the **Or** block starts as false because neither of the two conditions are true. When the 'Sharpen' input is toggled on, 'Value A' becomes true and therefore the **Or** block is true. The block will remain true as long as one or both of the conditions are being met. ![An example of using the If Else block with an Or block applied to the condition. The If Else is set up with the Sharpen and Simplify variables as the inputs for the Or block as the Condition. The Then input contains an Orient Object block and the Else input contains a Remesh Surface block. If Sharpen or Simplify is enabled, the mesh is moved to a new plane location using the Orient Object block. If neither Sharpen or Simplify is enabled, the mesh is remeshed using the Remesh Surface block.](https://files.learn.ntop.com/help-articles/user-interface/39546911723667.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **And** The **And** block returns a true value if both of the two input values are true. In the example below, the **And** block starts as false because neither of the two conditions are true. When the 'Sharpen' input is toggled on, 'Value A' becomes true but the block is still false. The block will remain false until both of the conditions are being met. Once the 'Simplify' input is toggled on, we can see the **And** block becomes true. ![An example of using the If Else block with an And block applied to the condition. The If Else is set up with the Sharpen and Simplify variables as the inputs for the And block as the Condition. The Then input contains an Orient Object block and the Else input contains a Remesh Surface block. If Sharpen and Simplify are enabled, the mesh is moved to a new plane location using the Orient Object block. If both Sharpen and Simplify are not enabled, the mesh is remeshed using the Remesh Surface block.](https://files.learn.ntop.com/help-articles/user-interface/39546922763923.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **Await** The **Await** block will execute once the 'Wait For' input is built, and will produce the object in the 'Return' input as the output. You can use this to force blocks to compute in serial order instead of in parallel. This is helpful for users running resource intensive workflows. The gif below shows how nTop normally works by starting to compute the **Static Analysis** and **Topology Optimization** blocks at the same time, in parallel once the FE Model is computed. ![The gif below shows how nTop normally works by starting to compute the Static Analysis and Topology Optimization blocks at the same time, in parallel once the FE Model is computed.](https://files.learn.ntop.com/help-articles/user-interface/39546911725459.png) By using the **Await** block, we can force the blocks to run in series instead of parallel. In the gif below, the **Await** block is placed in the 'Value' input of the **Volume Fraction Constraint**. This causes the **Topology Optimization** to wait until the **Static Analysis** finishes before it can start computing. ![the Await block is placed in the 'Value' input of the Volume Fraction Constraint. This causes the Topology Optimization to wait until the Static Analysis finishes before it can start computing.](https://files.learn.ntop.com/help-articles/user-interface/39546911726483.png) [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) ## Example File: * [Logic Blocks Example](https://storage.googleapis.com/files-learn/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Logic%20Blocks%20Example.ntop) ## Keywords: *blocks not document and equal equals or if else if else greater less logic xor great* # How to use Run Command block Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-use-run-command-block ## Question: Learn how to use the **Run Command** block ## Answer: The **Run Command (Beta)** block allows you to run any command-line command directly within nTop. This block enables the execution of diverse external processes, such as executing complex simulations, interfacing with external design tools, or integrating manufacturing processes. The following examples are the common use cases: * **Connecting applications:** Any command line executables of design, analysis, or manufacturing software and tools * **Automation:** Execute Command Line or PowerShell commands for automation. * **Scripting:** Execute commands in Python, Lua, or any other scripting language you choose. ![The run command block.](https://files.learn.ntop.com/help-articles/user-interface/24856433061395.png) ## Notes on receiving technical support Please note that supporting/troubleshooting workflows that contain run command and external scripts may be difficult and might result in additional information needed and/delayed time to resolution. ## Tips 1. Permission Setting for Run Command blocks. * **Prompt per file**: each time you create or open a file that contains run commands, you will be prompted to trust the file. * This is helpful when you have many Run Command blocks in your file or use list processing because trusting the file will allow everything to run. * Once you trust a file, all future changes and additional Run Command blocks will be trusted. * This option is less secure because you cannot pick specific Run Commands to trust. * **Prompt per block**: each time a Run Command block tries to run, you will be prompted to trust that instance to run. * This default setting gives you the most control over Run Command blocks in your file. * This setting is less convenient when you have several Run Command blocks or list-processing because you will be prompted many times. * **Disallow all**: all Run Command blocks will not be able to run, and you will not be prompted. * This is the most secure setting. * Note: * Changing the permission setting will require you to close and reopen nTop. * The trust settings are saved for the ***duration of your session.*** This means if you trust a file and then close and reopen that file later, you will be asked to trust the file again. * When using Run Command, the Trust Settings for **nTopCL** can be passed with the **--trustnotebook** option. ``` ntopcl --trustnotebook [nTop Notebook Path] ``` 2. Working Directory Input * The Working Directory input lets you set a relative directory dynamically associated with the process. * Note: The default Working Directory is not where your file is located. It is the directory of the parent process. This means the default directory depends on how nTop is opened; opening nTop from the standard installation will result in the directory "C:\Program Files\nTopology\nTopology". This will differ if you open or execute the nTop Notebook via PowerShell. Running an external process through the default nTop directory could lead to library collisions. * If you happen to experience library collisions, please manually set a Working Directory. ## Examples: #### **1. Getting files from a directory (Powershell Commands)** We will run the PowerShell command through the **Run Command** block for this example. The PowerShell command returns all the files in a directory. ``` Powershell 'Get-ChildItem -Name ' ``` We will recreate the command using a combination of the **Concatenate Text** blocks and File Path variables. [Files in Directory.ntop](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Run%20Command%201-%20Files%20in%20directory.ntop) ![An example setup for the run command block to use powershell to open a directory.](https://files.learn.ntop.com/help-articles/user-interface/24857629760659.png) This custom block returns all the file paths of a specific file type in a directory. To use this block, select one reference file, and the block will use the parent folder. The output of the PowerShell cmdlet is then filtered and parsed using blocks. We can save the entire workflow as a Custom block ([How to create a custom block](/help-articles/knowledge-base/user-interface/how-to-create-a-custom-block)) and import it to return all files. [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Run%20Command%201-%20Example.ntop) ![An example of using the run command custom block to source files in a directory. The custom block is the input for the import part block.](https://files.learn.ntop.com/help-articles/user-interface/24857639993235.png) #### **2. Plotting CSV results with Python** We will run a Python script through the Run Command block for this example. We will be parsing data to Python in two methods. Before we start, ensure you have Python, Matplotlib and the Pandas library installed. 1. Command-line arguments * This works best with fewer inputs like file paths, scalars, etc. In this example, we will parse the headers and plot type as command-line arguments. 2. Temporary Files * This is to be used when you have many variables, long lists, etc. We will use a .csv export created using the **Export Table** block. We have a [Python script](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Run%20Command%202-%20Plot.py) that takes in input CSV, X-Axis Header, Y-Axis Header, and Plot Type as input. ``` python ./Plot.py ./Result.csv Mode Eigenfrequencies Bar ``` We will recreate the command using a combination of the **Concatenate Text** blocks and File Path variables. [2D Plot.ntop](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Run%20Command%202-%202D%20Plot.ntop) ![An example setup for the run command block being used to run python to plot data.](https://files.learn.ntop.com/help-articles/user-interface/24857997008275.png) This custom block runs the Python script and our selected CSV file and header. To use this block, select the correct inputs. The output of the command is a resultant Python window with the plot. [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Run%20Command%202-%20Plot.zip) ![The Plot 2D custom block that was created using the run command block. The bar graph created by the custom block is shown next to the custom block.](https://files.learn.ntop.com/help-articles/user-interface/24858076439059.png) #### **3. nTop \<>Fluent** We will generate an FE Mesh, export it to Ansys Fluent, and then import the CFD Results back. This example briefly explains the steps involved in exporting, importing, and parsing data between nTop and Ansys. I recommend you check our [How to export your design to Ansys Fluent](/help-articles/knowledge-base/interop/how-to-export-your-design-to-ansys-fluent) article to learn more about preparing your model for Ansys Fluent. This example uses an **Await** block that lets you pause and await a block completion before running the **Run Command** Block. * The Await block contains two input variables of **Any** type to facilitate this synchronization. The first input, *Await,* is for the block awaiting completion. The second input, *Return,* is the output once the Await is completed. ![The Await block.](https://files.learn.ntop.com/help-articles/user-interface/24860653890835.png) We will use a .jou command file for Fluent Call. Once the FE Mesh is generated, we will Delete All Files. The next step is to export the CFD Mesh with Boundaries ([How to create CFD Boundaries](/help-articles/knowledge-base/structures/how-to-create-cfd-boundaries)). ![An example of using the Await and Run command blocks to generate an FE Mesh, export it to Ansys Fluent, and then import the CFD Results back.](https://files.learn.ntop.com/help-articles/user-interface/24860653899923.png) Once the FE Mesh is exported and the Fluent is run, we will import the results using another **Await** block and **Import CFD Analysis Result** block. [Example File](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/User%20Interface/Run%20Command%203-%20fluent_example.zip) ![The CFD Results that were created in Fluent and imported back into nTop.](https://files.learn.ntop.com/help-articles/user-interface/25446923628691.png) # How to use the Field Viewer Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-use-the-field-viewer ## Objective: This article will guide you through using the Field Viewer to visualize and inspect field data in your model. ### Note: The Field Viewer lets you inspect field data by visualizing it on a plane, offering insights into field values. You can access this tool with the “Field Viewer” button in the view toolbar, the “F” hotkey, or by right-clicking on an object and choosing “Field Viewer” in the menu. You can read more about the Field Viewer in the Documentation by going to Help > Documentation in nTop. ## Procedure: **1. Activate the Field Viewer** * Activate with the “Field Viewer” button in the view toolbar, the “F” hotkey, or right-click on an object and choose “Field Viewer” in the menu. * The Field Viewer will automatically activate on the object that you have selected. If no object is selected, the tool will open, and you can manually specify the object by typing the object's name into the **Object** Input in the panel. **2. Adjust the Field Plane Display** * **Transparency:** By default, the Field Viewer will display the field with semi-transparency, so you can see the field data overlaid on your object while maintaining visibility of the underlying geometry. Use the **Opacity** Slider in the Tools panel to adjust the transparency level. * **Size of the Field Plane:** The size of the field plane is automatically adjusted based on the selected object or the current view in the 3D scene, ensuring it is appropriately scaled for your visualization. If you want to reset the size of the plane, click the **Reset Button** next to the size input in the Tools panel to quickly set the plane to a size that fits the current viewport. You can also manually adjust the size of the plane by modifying the **Size** input in the panel. * **Position and Orientation of the Field Plane:** When the Field Viewer is triggered by right-clicking on an object in the viewport, the field plane will automatically be centered on the selected object and oriented based on the surface normal. This provides a quick way to inspect the field data on the object's surface. You can adjust the position or rotation of the plane manually if needed using the controls in the Tools panel and the gimbal in the 3D scene. * **The Colormap:** The Field Viewer allows you to select different colormaps for better visual representation of the field data. * Implicit Bodies: An Implicit colormap will be applied automatically when analyzing implicit bodies. This colormap is optimized to provide a clearer distinction of field values inside and outside the body. * Scalar Fields: The default colormap for scalar fields is Turbo. However, you can select the Distance Field colormap or the Implicit colormap from the Colormap Dropdown to view the field with a different color scheme. * **Field Value Display:** Isolines help visualize the shape of the field data by showing lines of equal field value. By default, isolines are enabled and automatically adjust their visible interval as you zoom in or out, ensuring they are always visible. You can customize the interval of the isolines by entering specific values in the **Interval** input in the panel (0 is the adaptive interval). You can also display a specific range of values using the **Custom Range** option. **3. Using the Probe Feature** * The **Probe** feature is enabled by default, allowing you to see the field values at any point on the field. When you hover over the field, the probe will display the field value at that location and highlight the corresponding isoline to show where that value occurs. This feature helps you quickly inspect the distribution of field values and understand how they vary across the field. You can disable the probe feature in the panel. ![An example of using the field viewer on a gyroid body. The field viewer has a probe feature to analyze the field values and isolines to help visualize the shape of the field.](https://files.learn.ntop.com/help-articles/user-interface/49588304925075.png) ## Keywords: *field viewer implicit how to view use fields object real hot key f* # How to use the measure tool Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-use-the-measure-tool ## Summary: The measure tool lets you measure the distance between two points in your 3D scene for quick inspection. It provides the total distance and the breakdown along the global X, Y, and Z axes. This article explains how to use the measure tool. ## How to use: To activate the measure tool, you can either select the measure icon from the View Tools toolbar, or you can use the "M" hotkey on your keyboard. ![The measure icon highlighted in the nTop user interface.](https://files.learn.ntop.com/help-articles/user-interface/39335585586451.png) Click on any geometry to set the first point, then click again for the second. The distance will appear in the viewport and the right-side panel in the Tools tab. Enable the "Show XYZ" checkbox in the right-side panel to display dimension lines for X, Y, and Z in the 3D view. ![A gif demonstrating how to use the measure tool.](https://files.learn.ntop.com/help-articles/user-interface/39365025648147.png) ## Known Limitations: * **No Snapping:** Measurements approximate distances based on the position of the point clicked in the view. For precise results, always use blocks and their properties. * **No Section Cut Compatibility:** Workaround: Use boolean subtraction for interior measurements. * **Non-Automatable:** Measures are for quick inspections and can't be saved or added to notebooks. We recommend using a block to create a repeatable measurement in the notebook. ## Keywords: *view measure tools tool shortcut document distance measuring* # How to use the Notebook Outline Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-use-the-notebook-outline ## Question: How to use the Notebook Outline? How to close the Notebook Outline? ## Applies to: * Notebook Outline ## Answer: The Notebook Outline lets you view the blocks in your notebook from a high level and quickly select and navigate to them. The Outline lives in the left-hand sidebar that can be **expanded** and **collapsed** by selecting the icon at the top-left of the Notebook. ![The nTop user interface with the notebook outline open. The show/hide outline button is highlighted.](https://files.learn.ntop.com/help-articles/user-interface/49587433724051.png) In addition to quickly navigating to blocks, the Outline provides a visual tracing for where variables are used in your notebook. When you select a block in the Outline, a bright blue highlight will appear on that block. If that block is a variable instanced within another block, a duller blue highlight will appear on the block that references it. In the below video, “Y Bound Lengths” is a variable being used within “Remapped Gyroid,” as indicated by the dull blue highlight. ![A gif showing how to use the notebook outline. An input is selected in the outline, and the block that contains the input is highlighted.](https://files.learn.ntop.com/help-articles/user-interface/49587433726995.png) ## Keywords: *how to notebook question close outline* # How to work with lists Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/how-to-work-with-lists ## Objective: Learn what a list is and how to use them. ## Procedure: #### [What is a list?](#h-01ezwyh081f92zfvtm3mjvge58) #### [Creating Lists](#h-01fdzjt6yqbe2zq75jw1fr4nn8) #### [List Errors](#h-01fdzjtfqs5gfvq47nbtnqc419) #### [Lists in Lists](#h-01fdzk9jw5qd2xycw6f5chd51x) #### [List Properties](#h-01ezwyh7660bsvm3j1kkjne8a8) #### [Manipulating Lists](#h-01ezwyhe149jdqm9mv2g62f2s3) #### [Auto-Populated Lists](#h-01ezwyhmrrs53c4v4s99426d2z) #### [Lists of One (1)](#h-01ezwyhtxmhqg2pedw3qvr9tba) #### [Groups](#h-01ezwyzsm36mz14jhet4xt4y66) #### [Filter](#h-01ezwyzsm36mz14jhet4xt4y66) #### [Sort](#h-01kjx6m2nm3nkx1h8m4kd3mdkf) #### [Concatenate Lists](#h-01kjxcy62ppsne8z57yy2h9khb) #### [Using Lists](#h-01ezwyj0hkap8jfneazfg9rnk3) #### **What is a list and list processing?** All blocks in nTop can exist as singular entities or as a list. A list contains multiple items of the same type in a block, like a list of points. When a process runs on a list block, it runs the process on every list item. Working with list blocks is called List Processing. ![An example of a list in nTop. The image highlights the List Icon and List Size indicators.](https://files.learn.ntop.com/help-articles/user-interface/21427543929363.png) #### **Creating Lists** To create a list of any type, type 'list' into the search bar, along with the block type you would like to create. Lists are denoted in nTop by three small rectangles of increasing width in the bottom left corner of the data type icon. The list size is shown in parentheses next to the Block type. Not all lists are created from the search bar; some are made unintentionally or automatically with certain blocks. Some blocks turn a singular entity into a list, and some merge lists together. #### **List Errors** ***1. Invalid list item at index:*** **Issue:** Your list has an error at the index indicated. Using a list as an input into another Block can lead to errors if the values used in the list are incorrect. **Applies to:** Any block that can accept a list type as input. **Common examples include:** Using an invalid item in an Implicit Body List, then using it as a Body input for a Mesh from Implicit Body. This results in errors when using the Mesh from Implicit Body as an input into other Blocks. **Cause:** The values used in a list item are incorrect, causing a block to fail when it builds. Using a list as an input into another Block can lead to errors if the values used in the list are incorrect. **Solution:** In the error message, note the index number of the list item causing the error. Use the index to identify the list item causing the error. All nTop lists begin at index 0. ***2. Input list length mismatch.*** **Issue:** When two lists of different lengths are input into a block. The block can't run because it tries to match the two lists together. **Applies to:** Any block that accepts two or more list inputs **Cause:** Lengths of lists are not equal. Unintentional lists of (1) are used with another list input. Open up the input block's properties to check if it is a list type. It will have (#) in the block name. **Solution:** Ensure that the list length of both operands is the same. If you do have an unintentional list of (1), open up the block properties and drag out the chip that has \[0] in the name (typically beneath all other properties). Drag this into the Notebook or directly into another block input. #### **Lists in Lists - Inputting a list block within another list block** A list block can't be input into another list block. However, if you want to input a list into a block that doesn't accept lists, you can create a Custom Block to run the list instead. This works because the inputs of a notebook are contained in variables, and variables cannot process lists. However, once it's being used as a Custom Block, it's a block like any other and, therefore, can process lists. This is not equivalent to putting the list into the input but rather running the Custom Block workflow multiple times, once for each element. #### **List Properties** List block properties contain a set of Properties at the top under the Properties chevron and individual properties for each item under the List Elements chevron. The individual properties can be dragged from a List to create an individual item. The arrow next to the individual entities can be expanded to reveal more information on each individual list entity. You can click and drag the individual chips into the notebook to create a new single variable separated from the list. ![The gif shows the properties panel of an example mesh list. By clicking on the List Element tab in the properties panel, you can access the properties of each item in the list.](https://files.learn.ntop.com/help-articles/user-interface/21442865613587.png) #### **Manipulating Lists** There are two methods to add blocks to a list: 1. Drag a new block into a List block. Remember that all entities in a list must have the same block type (i.e., they must have the same icon in the top left corner of the block). 2. Select the '+' next to the View Block Details icon to add more inputs. If you add too many, use the '-' on the left of the input to remove them. ![The image is highlighting the Add List Item button that will be present list blocks. The button is indicated by a plus sign in the top right corner of the block.](https://files.learn.ntop.com/help-articles/user-interface/21442366391059.png) The order of list entities can be changed by dragging list entities around within the List block. Other list manipulation tools are in the Utilities Ribbon Tab, under 'General'. These blocks are outlined below. * **List Element:** Extract a single entity from a list based on its index number. * **Insert:** Combine two lists into one by inserting a list into another at a specified index location. * **Sub List:** Extract a smaller list from a larger input list based on a starting index and the desired size of the sub-list. * **Remove:** Remove one or more entities from a list based on a starting index and the number of removed entities. #### **Auto-Populated Lists** Some blocks use list inputs and combine them into a singular entity. An example is the **Boolean Union** block, which takes in a list of bodies and generates a single unioned body. Blocks like this are auto-populated with an empty list, which is useful for quickly dragging bodies inside to complete the operation. ![When adding a boolean union block to your workflow, it will auto-populate an Implicit Body List in the Bodies input.](https://files.learn.ntop.com/help-articles/user-interface/21442419299731.png) Sometimes, a user already has a list prepared that they would like to perform a boolean union operation on. In this case, the auto-populated list must be deleted and replaced by the desired list. ![By right clicking the Implicit Body List in a Boolean Union block, you can access the block's menu options. The image is highlighting the delete option of the menu.](https://files.learn.ntop.com/help-articles/user-interface/21442462935187.png) #### **Lists of One (1)** You may encounter a situation where you try to add your parts to a block that accepts a list of inputs, and it won't let you. ![Sometimes blocks can generate a list of one item. The image below shows an imported CAD part properties panel. The part only has a single body, but the bodies property chip of the Import Part block is always a list type. Therefore it is a list of one bodies.](https://files.learn.ntop.com/help-articles/user-interface/21442613633811.png) This is because the input you are trying to add looks like "**Block Name (1)**". Somewhere, a List of One was created. Lists of one are sometimes unintentionally created by the user or during CAD/Part importing. They can be converted to singular entities by dragging the entity out of the List Elements section of the Properties tab in the Block Details or by using the **List Element** block. One common error when using Lists of One is solved using the instructions in this article ([The simulation results window isn't appearing).](/help-articles/knowledge-base/structures/the-simulation-results-window-isn-t-appearing) To drag the entity out, open the Properties tab, expand until you find the part, and drag the part chip into the Notebook. This creates a block in the Notebook that doesn't have a list. You can also drag the chip out directly into an input. ![By clicking the list element drop-down of the Bodies list, users can access the singular body chip.](https://files.learn.ntop.com/help-articles/user-interface/21442649165075.png) #### **Groups** Groups in nTop are the same as lists, except they can contain a combination of block types. For example, the group below consists of a point, a sphere, and a cube. The same list manipulation operations described can be performed on groups. ![Lists can only be of the same block type, while Groups can contain multiple block types.](https://files.learn.ntop.com/help-articles/user-interface/4944038281107.png) #### **Filter** The **Filter** block removes items from a list based on a **Bool List**, which must be the same length as the List input. The default state of the **Filter** block takes in a Bool list, which is a series of checkboxes, where items in the list can be kept or removed from the input lists by toggling the checkboxes. ![An example of how the default Filter block works.](https://files.learn.ntop.com/help-articles/user-interface/49631784486163.png) The overload of the **Filter** block allows a list to be filtered by a scalar list of the same length. The example below shows how the Spheres are filtered based on their X coordinate value. ![An example of how the Filter overload works with two compared lists.](https://files.learn.ntop.com/help-articles/user-interface/49631784496403.png) #### **Sort** The **Sort** block will rearrange a list from the lowest to the highest value. If you would like the values sorted from highest to lowest, you can use the 'reversed' scalar list in the block's properties. The example below shows how a list of random numbers in random order, are sorted from lowest to highest using the **Sort** block. ![An example of how the default Sort block works.](https://files.learn.ntop.com/help-articles/user-interface/49631743716883.png) The overload of the **Sort** block sorts a list based on a scalar list. In the example below, a list of spheres in random order are sorted based on their X coordinate value. ![An example of how the Sort overload works by comparing two lists.](https://files.learn.ntop.com/help-articles/user-interface/49631784498835.png) #### **Concatenate Lists** Multiple lists can be added together using the **Concatenate Lists** block. In order to do this, the Lists must be of the **same type**. ![An example of using the Concatenate Lists block to create a single list.](https://files.learn.ntop.com/help-articles/user-interface/49635291909267.png) #### **Using Lists** 1. Add a **Sphere List** (notice the list icon on top of the sphere icon). 2. Add a **Sphere** block into each input of the **Sphere List.** Change the x-value center point of each sphere to 0, 10, and 25, respectively. Then change the radius to 3, 5, and 8 mm. ![The example shows two different methods of using lists to create multiple bodies. The first example is a Sphere List block, with three Sphere blocks inside it. The second method is a single Sphere block with a Point List in the Center Point input and a Scalar List in the Radius input. This also generates a sphere list.](https://files.learn.ntop.com/help-articles/user-interface/21442739141395.png) 3. Add a **Spherical Volume Lattice** block, a **Walled TPMS Unit Cell,** and enter Approx. thickness of 0.5mm. Now insert the **Sphere List** into the Body input. This runs the operation on each object in the list. ![An example of using a sphere list as the volume input for a Spherical Volume Lattice block. By using list processing, multiple lattices can be created using one block.](https://files.learn.ntop.com/help-articles/user-interface/46470384733459.png) ## Keywords: *remove list properties lists element processing group groups insert sub one input run manipulate batch (1)* # I ran into a UE96 Error Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/i-ran-into-a-ue96-error ## Issue: I ran into a UE96 error when running my block. ## Applies to: * Meshing * Hardware and Systems ## Cause: The cause for this error is usually due to your machine running out of memory as it is running the block. ## Solution: There are a few fixes we can suggest when this occurs: * * If it happened when you were using a meshing block, try increasing the tolerance of edge length sizes. * If you aren't able to do this, open Task Manager and watch your memory when you are running the process in nTop. See if your memory hits its limit. * If the memory is hitting its limit: Make sure your hardware matches the minimum system requirements: [nTop System and Licensing Requirements Guide.](/help-articles/access-and-installation/system-requirements/system-requirements-guide) If it doesn't, it may need to be upgraded in order to optimally run nTop. * If the memory isn't hitting its limit, contact Support. If you still need assistance, reach out to Support and we will assist you. ## Keywords: *error mesh meshing system memory ram manager issue hardware UE96 96 UE task* # I ran into "Failed to initialize OpenGL error" Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/i-ran-into-failed-to-initialize-opengl-error ## Issue: Users have reported receiving a graphics driver error notification and encountering nTop to unexpectedly exit in specific contexts, despite their machines meeting the [minimum system specifications](https://support.ntopology.com/hc/articles/360061698333). ## Applies to: ![The Failed to Initialize OpenGL error message in nTop.](https://files.learn.ntop.com/help-articles/user-interface/7256192260243.png) ## Cause: Different factors appear to compound, thereby increasing the likelihood of the seemingly unwarranted error: * Resuming use of a running instance of nTop after waking the computer from a sleep state * The installation of Windows “quality update” KB5013942 * The use of one or more monitors in portrait mode ## Solution: If you restart your system, it alleviates the issue but does not guarantee that the same system state can be avoided in the future: if you encounter this error and know your system specs are adequate, it is recommended that you perform a Windows update. ## Keywords: *error graphics gpu OpenGL failed driver* # nTop 4.0 UI Changes Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/ntop-4-0-ui-changes ## Summary: The purpose of this document is to showcase the new UI changes made to nTop for its 4.0 release. ## Applies to: * nTop 4.0 ## Table of Contents ### 1. [Ribbon](#h-01gz1rhw32kr6djqzgngcy7x0y) ### 2. [Menu](#h-01gz1rksvtxp79f2j5qgvddmtt) ### 3. [Hide/Show Left Bar icon and Imported Blocks button](#h-01gz1rn1kv8qz14k387bt208r5) ### 4. [Color](#h-01gz1rnn4t24h29makrgtnmhwq) ### 5. [Ruler](#h-01gzcdk1jzwd6e90vtk6bfcj0w) ## 1. Ribbon The ribbon has been condensed into a more efficient space to allow for a taller notebook view. No changes have been made to the tabs or their underlying blocks; this is predominately a visual/location change. If you have enough tabs enabled to fill the ribbon, you can navigate to the hidden tabs by using the arrow keys on the ends of the ribbon. The tabs on the ribbon can still be customized by going to **Settings->Ribbon**. **Old Ribbon:** ![The nTop Ribbon before the release of nTop 4.0.](https://files.learn.ntop.com/help-articles/user-interface/16108221733395.png) **New Ribbon:** ![The nTop 4.0 ribbon](https://files.learn.ntop.com/help-articles/user-interface/16108226383379.png) ## 2. Menu The file menu has been condensed to a single icon. Clicking on the menu icon reveals a drop-down of most options that were previously presented on the top toolbar. The Window section of the menu has been removed, and the ribbon display toggle has been moved to the View section. The grid, ruler, and ribbon toggles have changed the terminology from "display" to "show." **Old Menu:** ![The nTop menu before the release of nTop 4.0.](https://files.learn.ntop.com/help-articles/user-interface/16108687953171.png) **New Menu:** ![The nTop 4.0 menu](https://files.learn.ntop.com/help-articles/user-interface/16108690408211.png) ## 3. Hide/Show Left Bar icon and Imported Blocks button The Hide/Show Left Bar icon has moved from the notebook header to the top toolbar. The functionality is the same; we moved the icon to be more discoverable. The View Imported Blocks button has been removed; all Custom Block import functionality will now be displayed in the Imports tab of the Left Bar. **Old Icon Location with View Imported Blocks button:** ![The user interface before nTop 4.0 release. The hide/show left bar icon is highlighted and the imported blocks button is highlighted.](https://files.learn.ntop.com/help-articles/user-interface/16115553243795.png) **New Icon Location with View Imported Blocks button removed:** ![The nTop user interface in nTop 4.0. The hide/show left bar icon has been moved to the top left corner and the imported blocks button has been removed.](https://files.learn.ntop.com/help-articles/user-interface/16115257664275.png) ## 4. Color We have unified the blue color used for block selection highlighting, ribbon tab highlighting, context search, and other icons. It's a slight change but allows for a stronger contrast against the background for improved readability. **Old Color:** ![The nTop user interface before nTop 4.0. The image is referencing the color that highlights blocks and bodies when selected.](https://files.learn.ntop.com/help-articles/user-interface/16147243499667.png) **New Color:** ![The nTop user interface in nTop 4.0. The image is referencing the color that highlights blocks and bodies when selected.](https://files.learn.ntop.com/help-articles/user-interface/16147288273811.png) ## ## 5. Ruler The ruler has been shifted so there is no longer any overlap with the notebook. **Old Ruler:** ![The ruler configuration before nTop 4.0.](https://files.learn.ntop.com/help-articles/user-interface/16248749541651.png) **New Ruler:** ![The new ruler configuration in nTop 4.0.](https://files.learn.ntop.com/help-articles/user-interface/16248735463443.png) ## Keywords: *update ntop ribbon UI user interface document changes File menu 4.0* # What are beta blocks? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/what-are-beta-blocks ## Question: [What are beta blocks?](#h-01fbhp80h6d6z6w9g4kn5mr5th) [Can I use beta blocks for production workflows?](#h-01fbhp86x3axdfxs11ccnatqar) [How do I enable beta blocks?](#h-01fbhp8cs9nt5a77jaqt188v92) [How do I use beta blocks?](#h-01fbhp8k6m6jfmbgyr33qe6cp2) [How long is a block in beta for?](#h-01fbhp8smntz4t8rf1h7fjxwg4) [What if I find a bug while using a beta block?](#h-01fbhp90qg6nggx3wg9tj5gfvh) ## Applies to: * nTop ## Answer: #### **What are beta blocks?** Beta features include blocks and other features that are in development and may be subject to change before transitioning to general availability. These are meant to enable early access to upcoming features to collect user feedback. They have not undergone rigorous testing, are not fully documented, and may result in unexpected behavior. They will undergo additional testing, documentation, and refinement and their behavior may change when they reach general availability. If you have feedback about beta features, especially desired improvements or unexpected behavior, please report it to nTop support so we can consider it for inclusion for general availability. #### **Can I use beta blocks for production workflows?** We do **not** recommend Beta blocks for production workflows. Beta blocks are subject to increased updates and changes, which may cause issues in productions workflows. #### **How do I enable beta blocks?** To enable Beta blocks, go to the top left menu of your nTop window. Select **Settings** and a new window will appear. On the **General** tab, check the **Show Beta Blocks** box. ![The gif shows how to open the settings in nTop to enable beta blocks.](https://files.learn.ntop.com/help-articles/user-interface/46402294882963.png) #### **How do I use beta blocks?** A Beta tab will show up in the Ribbon once the Show Beta blocks option is turned on. You can search for Beta blocks in the Searchbar by typing in "beta". Add a Beta block to your Notebook to use it. To see the full list of Beta blocks, go to Documentation > Block Documentation > Blocks > Beta. #### **How long is a block in beta for?** The timeline for each block to be in Beta varies depending on the testing and development ongoing for that block. #### **What if I find a bug while using a beta block?** If you find a bug while using a Beta block, [contact support](https://support.ntopology.com/hc/en-us/requests/new) with the following information: issue, file, [crash files](https://support.ntopology.com/hc/en-us/articles/360039628273) if applicable, and the steps to reproduce. More on this topic: * [Get to know the User Interface](https://support.ntop.com/hc/en-us/articles/360046004994) * [Self-Training Guide](/help-articles/knowledge-base/implicit-modeling/self-training-guide) ## Keywords: *blocks ribbon question beta setting* # What are block overloads? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/what-are-block-overloads ## Question: I am trying to use an alternate function of a block, but I don't know how to access it. What are block overloads and how do I use them? ## Applies to: * nTop blocks ## Answer: Certain blocks in nTop have what is called an Overload, which means they have multiple input configurations and may have the option to return different Output types. Not every block function has an overload, but blocks that do have a chevron icon next to their name. This icon indicates a drop-down menu that contains the block's overloads. For example, with the Add block, a user can select the following overloads for both inputs “Operand A” and “Operand B”. Below are the overloads for the Add block. ![](https://support.ntop.com/hc/article_attachments/54741943189139) ## Keywords: *question overload* # What are the hot keys? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/what-are-the-hot-keys ## Question: What are the keyboard shortcuts? What are the hotkeys? ## Answer: ![hotkeys update.jpg](https://files.learn.ntop.com/help-articles/user-interface/50881956312083.png) ## Keywords: *cut zoom fast quick hot key short shortcut keyboard z x ctrl shift board f hotkeys keys* # What is a deprecated block? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/what-is-a-deprecated-block Question: [What is a deprecated block? Why does my block say "Deprecated" on it?](#h-01fbaez8qj9m8rsfrs2wxnvq33) [Why is a block deprecated?](#h-01fbaezgevahcv806spy58rvpw) [How do I upgrade my workflow to use a deprecated block?](#h-01fbaezpqdh36xr9csyh0mx1z5) [Can I still use a deprecated block?](#h-01fbaezxb9n1qcmgsb7p7amar4) [How do I use a deprecated block?](#h-01fbaf043mw6yns7gmjy9brtks) [What if I find a bug while using a deprecated block?](#h-01fbaf0ayaktg5mdmyz0g01h1g) ## Applies to: * nTop ## Answer: #### **What is a deprecated block?** A deprecated block is one that has moved out of production. This means it will not receive future updates, development work, or bug fixes. #### **Why is a block deprecated?** A block is deprecated when, as decided by nTop, there is no longer any need for it. This can happen when it is replaced by a [beta block](/help-articles/knowledge-base/user-interface/what-are-beta-blocks) or a production block that encompasses the functionality of the deprecated block. #### **How do I upgrade my workflow that uses a deprecated block?** You will most likely be prompted to update the blocks upon opening the software. If selected, the blocks will automatically update to their replacement block. The appropriate steps and support material will be provided if the process is more involved. #### **Can I still use a deprecated block?** Yes, workflows using this block will still run, but we encourage you to update any workflows that use this block and avoid further dependencies on deprecated blocks. Any deprecated block may be put into End of Life status, which signifies that it will be removed from the software in the future. If the block does enter this phase, all users will receive advanced notice and a timeline of its removal. #### **How do I use a deprecated block?** Go to **File > Settings > Enable Deprecated blocks** to enable deprecated blocks. With this setting enabled, you can find all deprecated blocks in the search bar. Deprecated blocks are not found in the Ribbon. ***Keep in mind that we do not encourage the use of deprecated blocks.*** #### **What if I find a bug while using a deprecated block?** Bug fixes won't be supported for deprecated blocks. If you happen to have a bug, we recommend using the appropriate replacement block to address the issue. ## Keywords: *block of use workflow bug upgrade end phase fix deprecated life maintenance* # What is a Precise Render? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/what-is-a-precise-render ## Question: How to get the most Precise Render? What is a Precise Render? ## Applies to: * Precision Render ## Answer: nTop enables the creation of highly complex geometry that is impossible in more conventional CAD environments. Models with sharp, thin features or intricate internal structures - easily achievable using field-driven implicit modeling - can pose visualization challenges, particularly when regions of fine detail are very small relative to the overall model size. Typical visualization problems include: * The appearance of holes and surface irregularities in very thin regions. * Intricate geometry (such as internal lattice structures) appears as “floating” artifacts disconnected from the body. * Aliasing artifacts like the Moire effect in some cases of small-scale repeating geometry. > > > > > > > > >
    > ![2 example images of lattices in nTop. Two of the images are shown using high resolution and the other two are using Precise Render. The images are meant to compare the results between the two view options.](https://files.learn.ntop.com/help-articles/user-interface/8288060693139.png) > > ![2 example images of lattices in nTop. Two of the images are shown using high resolution and the other two are using Precise Render. The images are meant to compare the results between the two view options. The lattice has very small beams that are not fully visible in high resolution. The beams are fully visible when using Precise Render.](https://files.learn.ntop.com/help-articles/user-interface/8288115320339.png) >
    The above images show how geometry visualized using the Highest Resolution differs considerably from the geometric truth, the implicit equation; Precise Render mode (accessed using **Ctrl + H** on a selected implicit body) allows visualization of the selected part in infinite resolution, and thus provides an accurate representation of the body. Visualization artifacts do not always mean that the geometry is broken or non-manufacturable, just difficult to render - Precise Render provides a means of visually validating geometry by rendering a ground-truth image of your complex model. The Precise Render mode can be accessed (when the Field Viewer is not active) via: * Select a single body, press **Ctrl + H**, or choose **'Precise Render…'** from the View dropdown. ![The View sub menu of the nTop Menu button. You can turn on Precise Render through this menu when an implicit body is selected.](https://files.learn.ntop.com/help-articles/user-interface/18647097725587.png) ## Keywords: *render resolution question precise high* # What is adaptive resolution? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/what-is-adaptive-resolution ## Overview: The purpose of this article is to explain the new Adaptive resolution feature in nTop. ## Table of Contents ### [1. What does this feature do?](#h-01h0g08j3pxch3wd2cvayahmx2) ### [2. Why did we make this feature?](#h-01h0g096r7cbbqgd6tmrdfk10p) ### [3. Where is this feature in nTop?](#01hrq78db2pejnn9shs8wznjn8) ### [4. Current Beta Limitations](#01j6f20h50qr65nb91x849ecpr) ### [5. FAQ](#01j6f21jwb1pav0ndkbr6kyn4n) ## 1. What does this feature do? Adaptive Resolution increases rendering quality for complex implicit models by dynamically adjusting the local implicit resolution based on your view. The maximum resolution reachable is about 20x higher in each spatial dimension compared to “Highest Res.” ## 2. Why did we make this feature? With the current Resolution settings (Low, Medium, High, and Highest), fine details, thin surfaces, and sharp edges are often lost. Even though the geometry is precise, the display only sometimes appears to be so. When modeling, you must be acutely aware of the ideal geometry vs. the actual display, or it becomes easy to mistake a low resolution display for the exact geometry. Previously, users had to use the Precise Render mode to generate a ground-truth image of the actual geometry. This tool only works on one implicit at a time, requiring users to activate the mode and wait for an image to view the geometry. Precise Render both takes time to compute and freezes the user interface, which is inconvenient when you're in the flow of modeling in nTop. ![An image showing 3 different view options of a lattice in nTop. The left image is static resolution on low, the middle is precise render mode, and the right is adaptive resolution.](https://files.learn.ntop.com/help-articles/user-interface/33024729324947.png) *A comparison of Medium Resolution, Precise Render, and Adaptive Resolution* Adaptive Resolution intends to alleviate the limitations of the static resolution options by creating an image on the fly based on the geometry you are looking at. nTop can dynamically and efficiently create the best image possible for the current view context without additional inspection tools. When this setting is on, you will be less likely to need the Precise Render feature to view the detail in your implicit model, and you should not have to worry about manually changing your resolution to arrive at the right level of detail. Try this feature with details like logo embossing or debossing, high-density lattice infill, surface texture, and other multi-scale 3D geometry to see its full effect. ![The gif shows how adaptive rendering works as you zoom in on an implicit body.](https://files.learn.ntop.com/help-articles/user-interface/33032528270739.png) *Zooming in on a textured part using Adaptive Resolution* This will improve the experience when modeling a wide range of parts. Intricate features like thin structural ribs, dense interior channels, grilles, screens, filters, personalized textures, and more will all be easier to see without Precise Render. ## 3. Where is this feature in nTop? The new Adaptive Resolution will be available alongside the current Implicit Resolution settings (Low, Medium, High, Highest, Adaptive). ![The nTop user interface with the resolution menu highlighted and expanded. The adaptive resolution option is further highlighted.](https://files.learn.ntop.com/help-articles/user-interface/33032528273043.png) ## 4. Current Beta Limitations Adaptive resolution is currently a beta feature in nTop. Below is a list of current limitations that our team is aware of when using the Adaptive resolution feature. The plan is to resolve as many of these as possible before elevating this feature to production: * First rendering time: Users should expect a longer wait time when viewing an implicit for the first time. This time will most likely increase with the number of implicits on screen. * GPU acceleration off: If GPU acceleration is turned off, there is a chance that having multiple implicits on the screen will cause the UI to freeze. * Framerate: Depending on your machine's specifications, the framerate may drop when rotating/moving in the viewport. * Slower nTop: When using nTop concurrently with other GPU-intensive applications, users may experience slower UI and computation times. The following features are currently unsupported when using Adaptive resolution. These may not be supported at the production launch, but we plan to support them. * Interactive live rendering (see the gif in [this article](/help-articles/access-and-installation/setup-and-install-troubleshooting/why-isn-t-the-gpu-acceleration-working)) * Surface Plot ## 5. FAQ #### **1.0 What specifications do I need to run this feature?** For Adaptive Resolution to run correctly, a minimum of 4GB of VRAM is required. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **2.0 Do I need to have GPU Acceleration turned on?** No, you do not. While this feature utilizes the GPU, the GPU acceleration setting for implicit evaluation does not affect it. > [!NOTE] > > **Note: Currently, a bug potentially causes the UI to freeze when GPU acceleration is turned off and Adaptive resolution is enabled. This bug will be fixed before adaptive resolution is moved out of beta.** [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **3.0 The rendering isn't working or is slow even when I have the recommended hardware. How do I fix this?** First, ensure that your graphics card is set up correctly in nTop with the help of [this article](/help-articles/access-and-installation/system-requirements/how-to-enable-high-performance-graphics-card-settings). If you are still having problems, you can raise the Memory Usage level in the nTop settings: Settings > Display > Adaptive Resolution \[BETA] > GPU Memory Usage [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) #### **4.0 Does Adaptive resolution replace the Precise Render feature?** No, this is not meant to replace Precise Render. In many cases, Adaptive Resolution will produce an image nearly indistinguishable from an image created by Precise Render, but this is not always true. We hope Adaptive Resolution reduces the dependency on Precise Render, but it is not a complete replacement. [Back to top](#h-01g2x52dkzt33pd8hjygc9g2ag) **If you have any questions, please contact nTop Product Support at** [**support@ntop.com**](mailto:support@ntop.com)**.** ## Keywords: *render rendering settings view resolution gpu adaptive* # What is the difference between Duplicate with References and Duplicate? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/what-is-the-difference-between-duplicate-with-references-and-duplicate ## Question: What is the difference between Duplicate with References and Duplicate? ## Answer: When you right-click on a block, there are two options for copying the block: Duplicate and Duplicate with References. #### **Duplicate:** Makes a copy of the block and a copy of all blocks inside of that block. ![Demonstrates how the Duplicate function works for copying blocks.](https://files.learn.ntop.com/help-articles/user-interface/49665913478291.png) In this case, think of Duplicate as "copy block & nested blocks". Duplicate won't make copies of variable chips. It creates a whole new block and new nested blocks. This is useful when you want to copy a block set up and be able to change all of the parameters without links back to the original. **When to use:** If you want to copy a block you already have and change its block inputs. #### **Duplicate with References:** Makes a copy of the block but uses the original referenced blocks (referenced blocks aren't copied). ![Demonstrates how the Duplicate with References function works for copying blocks.](https://files.learn.ntop.com/help-articles/user-interface/49665913481619.png) In this case, it creates a copy of the top-level block, but not any of the nested blocks. The nested blocks are the same block as the original, and therefore will update values when one of them is changed. This is useful for changing parameters on the top-level block while keeping the input the same. When using this, don't forget that the referenced inputs are the same to save any mistakes down the road. **When to use:** If you want to copy a block but keep the same block references. In both cases, a new block is being created, therefore Duplicate and Duplicate with References are not recommended as a substitute for creating a variable. ## Keywords: *to ntop what the difference between of duplicate ref references with them when use copy modelling modeling* # Where can I find the log panel for a detailed summary of my error? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/where-can-i-find-the-log-panel-for-a-detailed-summary-of-my-error ## Issue: I've run into an error and I need to troubleshoot my notebook to find the cause. ## Applies to: * Troubleshooting ## Solution: The log panel is accessed at the bottom right of the screen. Select the ^ icon to expand the Bottom Panel. ![The nTop user interface with the Show Bottom Panel button highlighted.](https://files.learn.ntop.com/help-articles/user-interface/49687092846739.png) The log panel shows each function performed in the notebook with calculation timestamps. It also shows warnings and errors that may occur in your notebook. ![The nTop user interface with the Bottom Panel open to show the Log.](https://files.learn.ntop.com/help-articles/user-interface/49687092848019.png) #### **Locating logs** The system generates a log for every instance nTop is run. Find the logs here (copy and paste the location into File Explorer): ``` %TEMP%\nTopology\Log ``` ![A demonstration of how to locate nTop log files in the file explorer.](https://files.learn.ntop.com/help-articles/user-interface/49687092855315.png) ## Keywords: *error mesh help of panel find issue log detailed summary expand repair detail errors* # Why am I getting different values on using units with math blocks? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/why-am-i-getting-different-values-on-using-units-with-math-blocks ## Question: Why am I getting different values on using units with mod block? ## Applies to: * Mod block * Math blocks ## Answer: The Mod block has two inputs that could be Scalars, Integers, or Scalar Fields. The block returns the remainder from the division of the first input (the dividend) by the second input (the divisor). ![An example of using the Mod block without units.](https://files.learn.ntop.com/help-articles/user-interface/4431394692627.png) When the first input is completely divisible by the second, the value returned should be 0. There are instances when the value returned by the Mod block is not equal to 0 such as the example below. ![An example of using the Mod block with units.](https://files.learn.ntop.com/help-articles/user-interface/4418668052499.png) This is a result of the system not processing this as 60 mod 20. nTop uses MKS (meters/kilograms/seconds), and thus the behavior of 0.06 and 0.02 ends up being the one that prevails for 60mm and 20mm. Unfortunately, This is an unavoidable effect of using **discontinuous functions on real numbers.** As a workaround, you can use the Mod block without units to get your intended results. ## Keywords: *question units values mod equals different* # Why is there an error beside certain property chips? Source: https://docs.ntop.com/help-articles/knowledge-base/user-interface/why-is-there-an-error-beside-certain-property-chips ## Question: Why is there an error beside certain property chips when I run my block? ## Applies to: * User interface ## Answer: Sometimes, when you run a block and open up the Info panel, there are red error markings beside certain property chips. This error is alerting you that the property is **empty** and won't have any output. If you were to use that property chip, the error would come with it and there would be no output. For example, a **Topology Optimization** block doesn't have an associated temperature, therefore, the temperature property chip that builds with the block is empty and gives you the error: Incorrect units to use property. ![Sometimes blocks have a placeholder property chip even though they don't have associated values for that property. This image shows how the temperature property chip of a Topology Optimization yields the incorrect units to use property error. This is because Topology Optimizations don't use temperature values.](https://files.learn.ntop.com/help-articles/user-interface/49669230656659.png) ## Keywords: *error property question empty output units chips incorrect* # Release updates Source: https://docs.ntop.com/help-articles/whats-new/index > **[What's New](/help-articles/whats-new/whats-new/ntop-5-40-what-s-new)** > > Learn about improvements in the latest release of nTop. > **[Backwards Compatibility Notices](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-20-curve-and-profiles-update)** # nTop 4.0 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-0-what-s-new > [!NOTE] > > You may already call us nTop; so now we're [making](https://ntop.com/resources/blog/re-introducing-ntop/) it official. **nTop 4.0** is here! This new [major release](https://ntop.com/resources/blog/introducing-ntop-4/) brings an updated software icon, color theme and home screen. Apart from these cosmetic changes, you will see adjustments to the naming of our products and services. Additionally, this release refreshes UI to provide you with a more intuitive and optimized user experience and improvements to wireframe rendering. Scroll down to read about new features, block updates, usage improvements and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [nTopology is now nTop!](#h-01gz1w36x0wxe807p0vzn87g1e) * ### [UI Refresh](#h-01gz1w3eyez6mr4zta8vw3sfrk) * ### [Flip Mesh Normals](#h-01gz1w3rjnhc9sv084m4zq11jx) * ### [Wireframe Rendering Improvements](#h-01gz1w44428rzraw63n02nrwkd) * ### [Usage Improvements](#h-01gz1w4c929r8nd9gxr9fhhq42) * ### [Block Updates](#h-01gz1w4vz0jqt03mwexp1rwkf4) * ### [Bug Fixes](#h-01gz1w5mq1f53estvbk8z2bt5f) * ### [Workaround for Known Issues](#h-01gz1w5vd6e0pstmw39z7d1zz0) #### [nTopology is now nTop!](#h-01gz1w36x0wxe807p0vzn87g1e) nTopology is more than just Topology optimization! We've renamed our brand and application to reflect the endless possibilities that nTop 4 brings to the table. With this change, you'll find: * New Application Name * New logo, with a new wordmark and symbol * New Desktop Icon #### [UI Refresh](#h-01gz1w3eyez6mr4zta8vw3sfrk) ![A walk through of the nTop 4.0 user interface redesign.](https://files.learn.ntop.com/help-articles/whats-new/16151616968339.png) We've changed the layout of our notebook, ribbon, colors, and top bar to provide you with a more intuitive and optimized nTop user experience! * Ribbon/Notebook Changes * We decreased the ribbon's width to maximize the notebook's height. The increased width gives you more space to read and work in the notebook! As a bonus, you also have more space to navigate the Left Bar. * Modern Color Theme * We unified the colors of our application to be simpler and more consistent, providing higher contrast for improved readability. * Top Bar Changes * We condensed the File menu into a single “hamburger” icon for more room along the top bar. * The Hide/Show, Left Bar icon, has moved from the notebook into the top bar to improve usability and discoverability. * We removed the Imported Blocks icon on the notebook, and you can now easily navigate to the Imports tab on the left bar. * We have moved the tabs for navigating the ribbon to the top bar, allowing for more vertical space in the viewport. * We have added Left and right chevron arrows for ribbon tab overflow for navigation ease of use. * Ruler * We moved the ruler out from under the notebook to span the width of the visible viewport for easier measurement. * Menu Item Changes * We have grouped Menu items together that toggle UI elements for consistency. * Window > Ribbon is now available as View > Show Ribbon * View > Display Grid and View > Display Ruler are now View > Show Grid and View > Show Ruler * “Window” has been removed. * “Imported Blocks” has been removed. #### [Flip Mesh Normals](#h-01gz1w3rjnhc9sv084m4zq11jx) * The **Flip Mesh Normals** block reverses the normal of each face of the input Mesh. * You can use this block for visualization purposes to make an imported mesh easier to view or for workflows that utilize mesh normals for extrusion, part splitting, etc. * Block Name: Flip Mesh Normals * Location: Modeling > Utilities * Description: Flips the normal of each face of the input Mesh. * Input 1 : Mesh: Mesh from which to flip faces. * Output: Mesh ![An example of how the Flip Mesh Normals block inverts mesh faces.](https://files.learn.ntop.com/help-articles/whats-new/16151618263443.png) #### [Wireframe Rendering Improvements](#h-01gz1w44428rzraw63n02nrwkd) * We improved the rendering of our wireframe meshes to visualize the object better when zoomed out. >
    **Before** **After**
    ![Zooming out on a wireframe mesh before nTop 4.0. The visualization isn't very good as the mesh gets dark.](https://files.learn.ntop.com/help-articles/whats-new/16151634947347.png) ![Zooming out on a wireframe mesh in nTop 4.0. The visualization is improved and the mesh contours are more visible.](https://files.learn.ntop.com/help-articles/whats-new/16151669505299.png)
    #### #### [Usage Improvements](#h-01gz1w4c929r8nd9gxr9fhhq42) * We added a grouping in the Properties panel to help you better distinguish which object properties are type conversions. > [!NOTE] > > *Note: These will match some types shown in the Information Panel's Converts To section and the variable type dropdown (top left of variable blocks).* *![A sphere block with its properties panel open. The properties are now split into two categories, Properties and Conversions.](https://files.learn.ntop.com/help-articles/whats-new/16151670859667.png)* * We added a grouping in the Properties panel for List objects to help you better distinguish which object properties are List Elements. ![A sphere block with its properties panel open. The properties are now split into three categories, Properties, Conversions, and List Elements.](https://files.learn.ntop.com/help-articles/whats-new/16151656872083.png) * Selecting “Remove Unused Blocks” in the Imports tab in the left side panel will no longer force your notebook to re-run. ![Using the Remove Unused Blocks function no longer forces the notebook to rerun.](https://files.learn.ntop.com/help-articles/whats-new/16151728085011.png) > [!TIP] > > *Tip: This option can help reduce the file size by removing unused Custom Blocks in all nested levels.* #### [Block Updates](#h-01gz1w4vz0jqt03mwexp1rwkf4) * The **Homogenize Unit Cell** block is updated to include the thermal homogenization capability. With this update, the block can calculate the equivalent thermal properties of a unit cell, such as conductivity and specific heat, in addition to the elastic properties. A set of boolean inputs named 'Mechanical' and 'Thermal' enable users to choose the desired homogenization type. Deselecting both inputs will cause the block to calculate only the density of the unit cell. ![The Homogenize Unit Cell block now has a thermal bool input for running thermal homogenization analyses.](https://files.learn.ntop.com/help-articles/whats-new/16151714925331.png) * We released a new version of the **Implicit Body from Voxel Grid** block and deprecated version 1.0.0. Version 1.1.0 will generate faster if GPU acceleration is on, and the implicit bodies created are now more reliable and robust for modeling operations such as shelling, offsetting, etc. * We released a new version of the **Refine Bounding Box** block and deprecated version 1.1.0. In version 1.2.0, we fixed an issue that created too small of a bounding box in some instances, cutting off the input Body. The new version also runs faster. >
    An issue in **Refine Bounding Box** version 1.1.0 the result is too small and cuts the input Body. Version 2.0.0 is faster and more reliable. Assuming that the input has a bounding box containing the Implicit Body, the output is guaranteed to contain the body, never producing a too-small box fully.
    ![An issue with version 1.1.0 of the Refine Bounding Box block that caused it to cut off parts of the implicit body.](https://files.learn.ntop.com/help-articles/whats-new/16151732138643.png) ![Version 2.0.0 of the Refine Bounding Box block now works as intended and doesn't cut off part of the implicit body.](https://files.learn.ntop.com/help-articles/whats-new/16151732721043.png)
    * We released a new version of the **Smoothen Body** block and deprecated version 1.3.0. Version 1.4.0 runs faster, and we fixed an issue in previous versions when provided a Domain input that produced an inaccurate bounding box in some instances. #### [Bug Fixes](#h-01gz1w5mq1f53estvbk8z2bt5f) * We fixed an issue causing an Invalid Block Error when Custom Blocks stored in the MyBlocks folder were used as inputs to other Custom Blocks stored in the MyBlocks folder. * We fixed an issue with the **Boolean Union** block that produced a zero-span bounding box in the output after performing a union on a list of points. * We fixed an issue with the **Lattice from Volume Mesh** block that caused nTop to unexpectedly exit if you provided an empty Volume mesh input. * We fixed an issue that caused inaccurate gradients in the implicit body output of the **Cone** block when the cone was not oriented with X/Y/Z axes. Since this bug produced incorrect results, we did not version the block when implementing this change. In nTop 4.0, and all future versions of nTop, version 1.0.0 of the **Cone** block will have this bug fix. Downstream blocks that utilize gradient calculations may produce a slightly different topological output. For example, mesh element layout and node count might change, but your discretized geometry is still guaranteed to be within your target tolerance. Read [nTop 4.0 - Cone Gradients Update](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-0-cone-gradients-update) to understand more about this change. #### [Workarounds for Known Issues](#h-01gz1w5vd6e0pstmw39z7d1zz0) * We have added a new [support article](https://support.ntopology.com/hc/en-us/articles/16137664743059) to list all the workarounds for known issues when upgrading. * If you still see the old icon when you search for nTop in the Start Menu, it is caused by Windows caching icons. To fix it, follow the steps in the link below. * [Icons not showing Correctly in Windows Search](https://appuals.com/fix-icons-not-showing-correctly-in-windows-10-search/) Note: nTop didn't write the article in the link above, and this link will take you to a different website * If you still see the app name as nTopology and cannot see Recent Files when you right-click the nTop icon from Taskbar, we recommend unpinning the old nTop icon and pinning the new nTop again to fix it. ## Keywords: *new release notes whats 4.0 4* # nTop 4.1 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-1-what-s-new > [!NOTE] > > nTop 4.1 is here! This is a lighter release with usage improvements and bug fixes to improve your nTop experience. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Type System Updates](#h-01h0gm0prtjtjxjp6qw4zdrgph) * ### [Usage Improvements](#h-01h0gm0wgcb6j5przfn6mb1pgv) * ### [Block Updates](#h-01h0gm12p510k336jj18zay8yq) * ### [Bug Fixes](#h-01h0gm18fqtqtvvvhjftj5rer3) #### Type System Updates With the release of nTop 4.1, we want to ensure that the nTop programming language can grow in a scalable manner to enable more powerful and robust computational design workflows in the future so that you can build the best parts. We fully maintained backward compatibility for this type update so any previous notebooks can be opened, viewed, run, and edited in nTop 4.1+ and future versions. In the new system, behaviors will be changed if you are working with: * Lists * Groups * Abstract Types (e.g. Material, Spatial3D) * Interface Functions (e.g. Translate Object, Rotate Object) For more information, see our detailed support page [here](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-1-type-system-change-notice). #### Usage Improvements * When automatically switching from an overloaded block that has an input containing an auto-populated default value, nTop will no longer prevent you from switching overloads and will discard the default value (shown below with Subdivisions input). > [!NOTE] > > *Note: If you delete the default value and type in any user-defined value, the overload will be prevented from switching until the value is cleared.* ![Switching the overload of the FE Lattice Component block.](https://files.learn.ntop.com/help-articles/whats-new/Overload_Auto_Switching.gif) * The notebook description has been moved into the scrollable notebook body to allow you to view more of your workflow at a glance. ![The notebook description has been moved into the scrollable notebook body to allow you to view more of your workflow at a glance.](https://files.learn.ntop.com/help-articles/whats-new/Description.gif) #### Block Updates * We moved the **Natural Frequency Response** block for optimization to production version 1.0.0. You can find the block in the Optimization ribbon under the Responses section. * We released new versions of the **Sweep** and **Twisted Sweep** blocks and deprecated versions 1.0.0. Version 1.1.0 of the **Sweep** and **Twisted Sweep** blocks include bug fixes, produces better fields with accurate gradients, and will run faster. We have also fixed the discontinuities in the interpolation of the twist angle in the **Twisted Sweep** block. >
    **Before** **After**
    ![An example of the twisted sweep block before nTop 4.1. The sweep has been meshed and the mesh quality is poor.](https://storage.googleapis.com/ntop_installers/releaseNotes/4.1/image%20\(1\).png) ![An example of the twisted sweep block in nTop 4.1. The sweep has been meshed and the mesh quality is much better than previous nTop versions.](https://files.learn.ntop.com/lessons/ui-and-blocks-2/image.png)
    The mesh quality of the output of **Twisted Sweep** version 1.0.0 is poor due to issues with the implicit's field. Mesh result in nTop 4.1 using **Twisted Sweep** version 1.1.0
    * We consolidated certain blocks into one block with multiple overloads. For the changes listed below, if you have been using the latest block versions, our backwards compatibility system will take care of this update for you. You do not need to make any manual changes to your notebook. * The **Collapse Mesh Vertices** and **Collapse Lattice Vertices** blocks are now one block with multiple overloads, and we simplified the name to **Collapse Vertices** We also added another overload that accepts a Graph as an input. * The **Merge Meshes** and **Merge Lattices** blocks are also consolidated into one block with multiple overloads, and there is a new overload for the Graph data type. Note that the merge operation does not collapse vertices. If needed, use **Collapse Vertices** prior to merging. * We added an overload to the **Trim Lattice** block that accepts a Graph. This overload, as well as those mentioned above, gives you more control over your Graph when creating a custom Unit Cell for latticing. * We separated version 1.0.0 of the **Mesh from Implicit Body** block from the versions 2.0-2.4 grouping, and renamed the block to **Mesh from Implicit by DC**. This block has a lower computational overhead than **Mesh from Implicit Body**, however the result may contain self-intersections and non-manifold edges or vertices. #### Bug Fixes * We fixed an issue allowing you to import a file from the home screen but have the imported file hidden. You will no longer be able to import from the home screen. You can import once a file is created or opened. * We fixed an issue that prevented warnings from displaying on the **Merge Meshes** block. The block warnings will correctly appear when the output has issues, such as self-intersecting elements. * We fixed an issue in the **Homogenize Unit Cell** block to restore the speed of the material property calculation to its original performance. ## Keywords: *ntop new release notes whats 4.1* # nTop 4.10 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-10-what-s-new > [!NOTE] > > nTop 4.10 is here! This release features our new Rigid Connector block for use in simulations where only the mass of the auxiliary components affects the analysis, while the geometry of these components can be neglected. We also have usage improvements to the gimbal and our user dashboard (app.ntop.com). Please scroll down to read more about these and our bug fixes below. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Rigid Connector \[Beta\]](#h-01hamnn6ww2fnss3963xhxt7f2) * ### [FE Point Attribute](#h-01hamnn6ww7bbxpt5x4csvs8ha) * ### [Gimbal Improvements](#h-01hamnn6ww6dtjx8cqw24184c8) * ### [User Dashboard Updates](#h-01hamnn6wwjvyb011ste3n1ntp) * ### [Block Updates](#h-01hamnn6wweqw8dvf8jawbredc) * ### [Bug Fixes](#h-01hamnn6wwfbm83mghgvkvsvrs) #### Rigid Connector \[Beta] ![An diagram showing how a Rigid Connector block is applied to an assembly model.](https://files.learn.ntop.com/help-articles/whats-new/RigidConnector.png) * In a simulation or optimization study, the **Rigid Connector** block can define connections (B) between a point (A) and a component's surface. This is typically used in multi-component simulations where only the mass of the auxiliary components affects the analysis, while the geometry of these components can be neglected. * This **Rigid Connector** block, in combination with point masses, can be used in studies where the mass participation of the components is essential, like a Modal Analysis, a Buckling Analysis, or an Optimization study (Topology or Field Optimization) with a Frequency Response as a constraint or an objective. * Block Name: Rigid Connector * Location: Beta>Simulation * Description: Defines a rigid element connector between a Point and FE Boundary. The connector may be Flexible (RBE3) or Rigid (RBE2). * Point: Point to create the connector from. * FE Boundary: FE Boundary to be connected to Point. * Connector: Option to create a Flexible (RBE3) or Rigid (RBE2) connector. * Output: FE Connector ![A gif showing an example workflow setup of using a Rigid Connector block to create a camera bracket optimization set up.](https://files.learn.ntop.com/help-articles/whats-new/RigidConnector.png) #### FE Point Attribute * The **FE Point Attribute** block can assign the mass properties to the remote point in the **Rigid Connector** block. It defines the component's mass and moment of inertia represented in a structural analysis or optimization study. Combining the FE Point Attribute, FE Component, and the Rigid Connector blocks enables users to define a remote point mass connected to the finite element model through a rigid or flexible connector. * Block Name: FE Point Attribute * Location: Simulation>Material Attributes * Description: Define material properties as attributes of a Point. * Mass: Mass of the point. * Offset: Offsets the center of mass from the attachment point. * Inertia XX: Component of mass moment of inertia in XX * Inertia YY: Component of mass moment of inertia in YY * Inertia ZZ: Component of mass moment of inertia in ZZ * Inertia XY: Component of mass moment of inertia in XY * Inertia YZ: Component of mass moment of inertia in YZ * Inertia XZ: Component of mass moment of inertia in XZ * Output: FE Attribute #### Gimbal Improvements * We've updated our interactive gimbal for improved usability * We have added a hover state to the control handles so users are confident they are selecting the desired handle * We have increased the scale of the gimbal. * We have updated the colors of the control handles. * We have implemented all these improvements in all instances of the gimbal in nTop. >
    **Before** **After**
    ![The gimbal display before nTop 4.10.](https://files.learn.ntop.com/help-articles/whats-new/before.png) ![The gimbal display in nTop 4.10.](https://files.learn.ntop.com/help-articles/whats-new/after.png)
    #### User Dashboard Updates * The Account Settings page has been updated to support multiple licenses. You can now see if you have licenses for individual nTop Applications. ![An example account settings page on app.ntop.com. This page now displays all licenses assigned to a user.](https://files.learn.ntop.com/help-articles/whats-new/UserDashboard.png) * The License Management page has been updated to support multiple license chips per user in the User tab, and we have added an Application column in the Licenses and Floating tabs to indicate what the license is for. ![The license management page on app.ntop.com.](https://files.learn.ntop.com/help-articles/whats-new/UserDashboard2.png) #### Block Updates * The **FE Component** block is updated with an overload that defines a point as an FE Component and assigns FE attributes. This block is meant to be used with the new **Rigid Connector** block to connect remote point masses to other FE components in the FE Model. This new overload takes the following inputs: * Point: Point to create a component. * Attribute: Point attribute. ![The FE Component block. This block has an overload for using a point and defining attirbutes.](https://files.learn.ntop.com/help-articles/whats-new/FEComponent.png) * We updated the **Export Material** block to follow the Unit system input when exporting anisotropic materials. * We updated the **Import Topology Optimization Result** block to convert non-tetrahedral solid elements in a \*.op2 file, such as pyramids, wedges, and hex elements, into tetrahedral elements #### Bug Fixes * We fixed an issue where making a **Topology Optimization** block a variable would cause the Live results to disappear until the block finished running. * We fixed an issue where the color picker wouldn't close after selecting a color in the Right Side Panel. * We fixed an issue where the transition information in the original Block Details flyout for Information and Display would not display correctly for different monitor resolutions. * We fixed an issue where opening a new file and recomputing properties of **Random Points in Body** would cause nTop to exit unexpectedly. * We fixed an issue where the overload of the **Add** block would default to the Scalar List overload instead of the Scalar, Scalar overload when using context search on a Scalar block. ## Keywords: *new release notes whats 4.10* # nTop 4.11 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-11-what-s-new > [!NOTE] > > nTop 4.11 is here! This release features usage improvements and block updates. Scroll down to read more about each update. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01hbrf9we4hx7hhhw3p741m6d4) * ### [Block Updates](#h-01hbrf9we4pvqt6pbaz3svtz2a) * ### [Bug Fixes](#h-01hbrf9we5dbs9bhvhrekr2g3w) #### Usage Improvements * The block input you've selected in the notebook will now be highlighted on the Right Side Panel to help guide you to its location. ![When you place your cursor in a block input, the corresponding input will be highlighted in the right side panel.](https://files.learn.ntop.com/help-articles/whats-new/RSP-Highlighting.gif) * The Right Side Panel now displays the colored tags and icons to help you form stronger associations for each type. ![The right side panel now displays the block type for the input.](https://files.learn.ntop.com/help-articles/whats-new/RSP.png) * We added Volumetric heat generation and Convection coefficient to the list of Compound units in the Settings > Units menu. The **Volumetric Heat Generation** block and the **Convection Boundary Load** blocks will utilize these units for their inputs. ![Volumetric heat generation and Convection coefficient have been added to the Compound units list.](https://files.learn.ntop.com/help-articles/whats-new/CompoundUnits.png) * Switching away from and back to an overload with pre-populated default values will now re-populate those default values. ![Default values that are populated, now become repopulated if the overload is changed.](https://files.learn.ntop.com/help-articles/whats-new/DefaultOverload.gif) #### Block Updates * We promoted the following blocks from beta to production version 1.0.0: * **Associate FE Mesh**: Associates an FE Mesh with a CAD Body. Boundary Conditions applied to the CAD Body will then be transferred to the associated FE Mesh. This block can be found in the Simulation ribbon under the Mesh tab. * **Region by Body**: Identifies an Implicit Body to intersect with an FE Mesh to select a subset of elements. This block can be found in the Simulation ribbon under the Utilities tab. * **Boundary by Body**: Identifies an Implicit Body to intersect with an FE Mesh to select faces, edges, or nodes on the mesh boundary. This block can be found in the Simulation ribbon under the Utilities tab. * We released the block overload that takes a CAD Face List input for the following boundary condition and connector blocks from beta to production version 1.0.0: * **Force** * **Displacement Restraint** * **Bearing Force** * **Convection Boundary Load** * **Point Force** * **Point Moment** * **Point Restraint** * **Pressure** * **Structural Bonded Contact** * **Surface Force** * **Surface Heat Flux** * **Temperature Restraint** * **Thermal Bonded Contact** * **Cylindrical Restraint** * We updated the **Topology Optimization** and **Field Optimization** blocks to update the convergence graphs in the Display panel while the blocks are running as variables ![In nTop 4.11, the display tab contains the optimization plots. These update while the optimization is running.](https://files.learn.ntop.com/help-articles/whats-new/TopOptDisplay.png) * We updated the **Mesh Quality** block to enable users to zoom into the location of intersecting elements (either using the 'Z' hotkey or from the View > Zoom to selected option) while in the Intersecting Elements view. We also added an option to toggle between the elements that are a part of the intersection to allow users to zoom into these selected elements while investigating the model. Users can also enter the intersection number to visualize the element on the screen. ![The image shows an updated heads up display for the mesh quality block.](https://files.learn.ntop.com/help-articles/whats-new/MeshQuality.png) #### Bug Fixes * We fixed an issue with not being able to import a valid Custom Block of “Unknown” type into a notebook. * We fixed an issue with the **Rigid Connector** block where the point mass used in the FE Model was ignored in a **Topology Optimization** analysis when the Connector input was set to 'Flexible'. * We fixed a numerical precision issue that was impacting the following blocks: * **Closest Point to Body** * **Evaluate Field** * **Evaluate Field Gradient** * **Mesh from Implicit Body** when the Sharpen input is selected, or Sharpen Iterations is greater than 0 * See the Backwards Compatibility notice [nTop 4.11 - Precision Improvements](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-11-precision-improvements) for details. ## Keywords: *new release notes whats 4.11* # nTop 4.12 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-12-what-s-new > [!NOTE] > > nTop 4.12 is here! This release features our new Min and Max Feature Size Constraints for Topology Optimization. We have also improved the Context Menu so you can quickly navigate block commands. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Min Feature Size Constraint \[Beta\]](#h-01hcwzgyryv73sdde5gs7t81bx) * ### [Max Feature Size Constraint \[Beta\]](#h-01hcwzgyryxzgh3qsmf8eewz9s) * ### [Context Menu Improvements](#h-01hcwzgyry1hxpfgdz3wtj002r) #### Min Feature Size Constraint \[Beta] ![The design space for a topology optimization.](https://files.learn.ntop.com/help-articles/whats-new/image1.png)![A diagram showing how a disconnected area of a design can be solved by implementing a Min Feature Size Constraint.](https://files.learn.ntop.com/help-articles/whats-new/image4.png) * The Min Feature Size Constraint block can be used as a constraint in Topology Optimization to maintain the feature sizes of the optimized design space above a user-defined value. * This block is typically used to correct disconnected features in the optimization result and to enforce a minimum feature size limit for manufacturability. * Block Name: Min Feature Size Constraint * Location: Beta > Topology Optimization * Description: Define a constraint on the minimum feature size * Feature Size: The desired minimum feature size for the final object * Output: Optimization Constraint #### Max Feature Size Constraint \[Beta] ![A design space to be used for Topology Optimization.](https://files.learn.ntop.com/help-articles/whats-new/image1.png)![A diagram showing the difference between two different results of a Topology Optimization. The design on the right utilizes the Max Feature Size Constraint to remove unwanted material.](https://files.learn.ntop.com/help-articles/whats-new/image6.png) * The Max Feature Size Constraint block can be used as a constraint in Topology Optimization to maintain the feature sizes of the optimized design space below a user-defined value. * This block is typically used with the Min Feature Size Constraint to enforce an upper and lower limit to the feature sizes generated from Topology Optimization. * Block Name: Max Feature Size Constraint * Location: Beta > Topology Optimization * Description: Define a constraint on the maximum feature size * Feature Size: The desired maximum feature size for the final object * Output: Optimization Constraint #### Context Menu Improvements * We updated the right-click context menu so you can quickly navigate block commands. * Isolate, Visibility, Transparency, Wireframe, and Field Viewer have been consolidated into a "Display" submenu. ![A new Display option in the block right click menu is available for all display controls.](https://files.learn.ntop.com/help-articles/whats-new/image3.png) * The display submenu is disabled for non-viewable object types like Text, Scalar and Integer. * Added "Add Block (S)" to the menu. * Appended the type name to the "Export" menu item to built blocks to clarify what type will be exported. ![The Export function in the block right click menu now specifies the block type that you are exporting.](https://files.learn.ntop.com/help-articles/whats-new/image5.png) * We renamed "Make Model Input" to "Make Notebook Input" * We renamed "Export/Open Block" to "Export/Open Custom Block" * We renamed "Copy Selection" to "Copy" and "Rename Output/Variable" to "Rename" * We hid irrelevant menu items. * "Go to Block" option for variable blocks (only shows for variable chips). * "Open/Export Block" option for non-custom blocks. # nTop 4.13 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-13-what-s-new > [!NOTE] > > nTop 4.13 is here! This release features our new If-Else (Beta) block for an improved workflow logic experience. We also moved some block information to the Right Side Panel and right-click context menu. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [If-Else (Beta)](#h-01he12j32v7n9mca2nmcpc49sw) * ### [Usage Improvements](#h-01he12j32vv2wsjrmbbxny5h8n) * ### [Block Updates](#h-01he12j32vs663367c6d8a2w5f) * ### [Bug Fixes](#h-01he12j32wt0s5qsjw7hpjsfy5) #### If-Else (Beta) ![An example of using the If-Else block to control which input block runs based on the bool condition.](https://files.learn.ntop.com/help-articles/whats-new/ifelse.gif) * The **If-Else (Beta)** block provides control flow to your nTop workflow, enabling it to decide based on a condition. It evaluates the boolean Condition input and returns the Then input if the Condition is true or the Else input if the Condition is false. The primary overload of **If-Else (Beta)** works differently than other nTop blocks. When set up correctly, only the Then or Else input will run based on the Condition, returning that output value to the **If-Else (Beta)** block. Your nTop workflow not running the unneeded branch is beneficial if you run computationally expensive workflows (e.g., meshing) or have a branch that produces a failure. ![A flow diagram explaining how the if else block determines an output.](https://files.learn.ntop.com/help-articles/whats-new/ifelsechart.png) * This block is used in General Logic, Mesh Setup, Simulation Setup, Scan Data Alignment, Field Logic workflows, and many others. * Block Name: If-Else * Location: Beta > Create * \ Description: Returns a value based on a given condition. * Condition (Bool): Condition used to evaluate execution. * Then (Any): Output when the Condition is True. * Else (Any): Output when the Condition is False. * Output: Any (Matches Then and Else inputs) * \ Description: Returns a field of values evaluated based on a given condition * Condition: Condition used to evaluate execution at a field point. * Then: Output when the field value of Condition is True at the evaluated point. * Else: Output when the field value of Condition is False at the evaluated point. * Output: Scalar Field * \ Description: Returns a field of values evaluated based on a given condition * Condition: Condition used to evaluate execution at a field point. * Then: Output when the field value of Condition is True at the evaluated point. * Else: Output when the field value of Condition is False at the evaluated point. * Output: Vector Field ![An example of using the If-Else block to control the output scalar field of an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/ifelsefield.gif) #### Usage Improvements * We added a size and reversed property to the List Interface type so that you can now compose generic functions that operate on lists. ![The updated properties panel of the Lister Interface type that now includes a size and reversed property chips.](https://files.learn.ntop.com/help-articles/whats-new/listsize.gif) * We are now showing the object name and type at the top of the Display tab of the Right Side Panel so you have more clarity around which object is selected. ![The display tab in the right side panel now displays the selected block's object name.](https://files.learn.ntop.com/help-articles/whats-new/objectnamedisplay.png) * We moved the block version near the top of the Information tab of the Right Side Panel and now show the release stage as well. ![The information tab of the right side panel now shows the block version.](https://files.learn.ntop.com/help-articles/whats-new/blockversioninfo.png) * We moved the Version Number selection menu and Cache Locally option from the Information tab of the Block Details flyout to the right-click context menu. ![An image showing how the cache locally and version number options are now available in the block right click menu.](https://files.learn.ntop.com/help-articles/whats-new/cachelocally.png) * We modified the viewport size to not span underneath the notebook, ribbon, and side panels for a more consistent and efficient nTop experience (see Heat Sink example file before/after below). ![An example showing the updated view when using the zoom to selected function in nTop. The geometry is no longer covered by the notebook.](https://files.learn.ntop.com/help-articles/whats-new/viewportzoom.png) #### Block Updates * We updated the **Topology Optimization** and **Field Optimization (Beta)** blocks to support multiple **Remap Constraint (Beta)** blocks in the **Optimization Constraint List**. * We updated the **Modal Analysis** block to automatically switch from the 'Block Lanczos' method to the 'Subspace' method to avoid frequency and mode shape calculation failures. #### Bug Fixes * We fixed an issue where you could not switch the type of an Any variable to an appropriate type. * We fixed an issue where switching the type of a List Element variable would cause nTop to exit unexpectedly. * We fixed an issue where you could not switch types of list variables properly. * We fixed an issue involving block icons not showing in the Right Side Panel. * We fixed an issue with transparent rendered objects turning opaque when using interactive input controls. ## Keywords: *ntop new what's new release notes whats 4.13* # nTop 4.14 - What’s New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-14-what-s-new > [!NOTE] > > nTop 4.14 is here! This release features our new Column from Text and Table from Columns blocks that lets you create Tables easily. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Column from Text](#h-01hf4mtdjs1wzht261pdn4j8nn) * ### [Table from Columns](#h-01hf4mtdjs411cthdhf4p0hrc8) * ### [Block Updates](#h-01hf4mtdjsfm5vs31kx2zqrk3y) * ### [Bug Fixes](#h-01hf4mtdjszmyrf3nz5qcwxn58) #### Column from Text * The **Column from Text** block can be used to create Columns from text lists directly in nTop. You can then use the Columns to compose a Table using the **Table from Columns** block. * You can use this block in general data processing, design exploration, and design reporting workflows, among many others. * You can use this block with the **Text from Scalar** block to convert Scalar values into Text values. * Block Name: Column from Text * Location: Utilities > General * Description: Creates a Column from a Text List. * Rows: Text List to convert to a Column. * Header (Optional): Option to define a Header value. If undefined, the resulting Column will have an invalid Header. * Output: Column ![An example of using the Column from Text block to create a column using the input text list and header.](https://files.learn.ntop.com/help-articles/whats-new/ColumnfromText.png) #### Table from Columns * You can now use the Table from Columns block to compose Tables directly in nTop. * You can use this block in general data processing, design exploration, and design reporting workflows, among many others. * You can use this block with the **Export Table** block to export the table to an external directory as a CSV file. * Block Name: Table from Columns * Location: Utilities > General * Description: Combines multiple Columns of data into a single Table. * Columns: Columns to be combined. * Output: Table ![An example of using the Table from Columns block to generate a table from four input columns.](https://files.learn.ntop.com/help-articles/whats-new/TablefromColumns.png) #### Block Updates * **Table** type has two changes: * The existing property "columns" has been renamed "column count" for clarity. * There is a new property, "columns", that is a list of the new **Column** type. >
    **Before** **After**
    ![The properties panel of the Table block before nTop 4.14.](https://files.learn.ntop.com/help-articles/whats-new/before.png) ![The properties panel of the Table block after nTop 4.14. The columns chip has been updated, as well as a new column count chip.](https://files.learn.ntop.com/help-articles/whats-new/after.png)
    * **Extract Columns** block has been renamed to **Extract Columns as Text** to distinguish from the new Column type. * We updated the **Export FE Mesh to CFD** block to support the STL file format for FE surface meshes. This update lets you apply names to element sets defined with the **CFD Boundary on FE Mesh** block for STL files. Although the element set or boundary names are available in the STL file, the boundary types are not supported for this format. #### [Bug Fixes](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * We fixed an issue with the "Cache Locally" and "Version Number" options appearing between Run and Manual Run Mode instead of after in the right-click context menu. * We updated the **Thermal Analysis** and **Nonlinear Thermal Analysis** blocks to use a pseudo-static solver when radiation boundary loads are applied to improve the accuracy of the thermal results. ## Keywords: *new what's new release notes whats new* # nTop 4.15 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-15-what-s-new > [!NOTE] > > nTop 4.15 is here! This release features our new Surface Plot block. You can now visualize data directly on their implicit bodies. Scroll down to see example use cases and read about other updates and usage improvements. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Surface Plot (Beta)](https://app.ntop.com/release-notes#Surface%20Plot) * ### [Tab](https://app.ntop.com/release-notes#Tab) * ### [Usage Improvements](https://app.ntop.com/release-notes#Usage%20Improvements) * ### [Block Updates](https://app.ntop.com/release-notes#Block%20Updates) * ### [Bug Fixes](https://app.ntop.com/release-notes#Bug%20Fixes) #### [Surface Plot (Beta)](https://app.ntop.com/release-notes#new-features-and-improvements) ![An example of using imported CFD results to shade an implicit body using the Surface Plot block.](https://files.learn.ntop.com/help-articles/whats-new/SurfacePlot.gif) * Surface Plot (Beta) block is used to shade implicit bodies with any scalar field, either user-defined or imported from an external source. You can visualize data directly on their implicit bodies to investigate metrics such as performance and manufacturability. You can also use the combination of the section cut feature with this block to visualize results within the implicit bodies. * Shading implicit bodies with simulation results, pore sizes of lattice structures, and overhang locations are typical use cases for this block. * Block Name: Surface Plot * Location: Beta > Utilities * Description: A shaded view of a Scalar Field on a Body. * Body: Implicit Body to contour. * Value: Values to plot on Body. * Output: Surface Plot #### [Tab](https://app.ntop.com/release-notes#new-features-and-improvements) * Tab returns a constant text value of a single Tab character. * Tab can be used in text parsing workflows. * Block Name: Tab * Location: Utilities > General * Description: Returns a single Tab character.![An example of using the Tab block to modify text.](https://files.learn.ntop.com/help-articles/whats-new/Tab.png) #### [Usage Improvements](https://app.ntop.com/release-notes#new-features-and-improvements) * We made the Block Details flyout window taller and consolidated the headers of the Properties tab to give you even more space to view the property tree. >
    **Before** **After**
    ![The properties panel of an example Box before nTop 4.15.](https://files.learn.ntop.com/help-articles/whats-new/before.png) ![The properties panel of an example Box after nTop 4.15. The panel is much taller so that information is not cut off at the bottom of the properties.](https://files.learn.ntop.com/help-articles/whats-new/after.png)
    #### [Block Updates](https://app.ntop.com/release-notes#new-features-and-improvements) * We added a Learn More link containing more If-Else documentation in the Right Side Panel Information section. We updated the icon of If-Else to be more visually consistent. * We added a Learn More link for the Mesh Quality block with detailed explanations for each quality metric reported by the block. >
    **Before** **After**
    ![The information tab of the If-Else block before nTop 4.15.](https://files.learn.ntop.com/help-articles/whats-new/Before2.png) ![The information tab of the If-Else block after nTop 4.15. The Learn More button has been added and the block icon has been updated.](https://files.learn.ntop.com/help-articles/whats-new/After2.png)
    #### [Bug Fixes](https://app.ntop.com/release-notes#new-features-and-improvements) * We fixed an issue where list-processed Custom Blocks containing many warnings would freeze the nTop application. * We fixed an issue with being unable to reference elements of a Group if it was a notebook input. * We fixed an issue with the Right Side Panel being scrollable while empty. * We fixed an issue with the **Import CFD Analysis Result** block that caused nTop to exit unexpectedly when accessing the velocity results from the Properties panel. ## Keywords: *ntop new what's new what's 4.15.3 4.15* # nTop 4.16 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-16-what-s-new > [!NOTE] > > nTop 4.16 is here! This release features improvements to viewing Table Data and our new Demold Constraint (Beta) block used in Topology Optimization to create parts manufactured with molds. Scroll down to read about these in detail. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [View Table Data](https://qa.app.ntop.com/release-notes#View%20Table%20Data) * ### [Cartesian Product](https://qa.app.ntop.com/release-notes#Cartesian%20Product) * ### [Demold Constraint (Beta)](https://qa.app.ntop.com/release-notes#Demold%20Constraint%20\(Beta\)) * ### [Usage Improvements](https://qa.app.ntop.com/release-notes#Usage%20Improvements) #### [View Table Data](https://qa.app.ntop.com/release-notes#new-features-and-improvements) ![A demonstration of using the View Data button to visualize data as a Table.](https://files.learn.ntop.com/help-articles/whats-new/ViewTableData.gif) * Any blocks that output a Table or Column type can now be viewed directly in nTop in the Bottom Panel. Additionally, You can view any block that outputs a Scalar List, Integer List, Text List, or Point List type more intuitively in the Bottom Panel. Each open tab will remain in the bottom panel until it is closed. * Location: Right Side Panel > Display > View Data #### [Cartesian Product](https://qa.app.ntop.com/release-notes#new-features-and-improvements) The **Cartesian Product** block creates combinations using input Columns. You can create a Cartesian product from any number of columns that contain rows of different sizes. * You can use the Cartesian Product block to generate the combinations needed to run parameter sweeps directly in nTop. This block helps you explore designs for applications such as heat exchangers and architected materials. * Block Name: Cartesian Product * Location: Utilities > General * Description: Creates a Table of all possible combinations from a set of Columns. * Columns: List of Columns to generate combinations from. * Output: Table Type![An example of using the Cartesian Product block to combine input columns.](https://files.learn.ntop.com/help-articles/whats-new/CartesianProduct.png) #### [Demold Constraint (Beta)](https://qa.app.ntop.com/release-notes#new-features-and-improvements) > > > > > > > > >
    > ![A bracket to be used as the input for a Topology Optimization.](https://files.learn.ntop.com/help-articles/whats-new/Demold1.png) > > ![A gif showing how the bracket is optimized when the Demold Constraint is applied.](https://files.learn.ntop.com/help-articles/whats-new/Demold2.gif) >
    ![A diagram showing how a cantilever bracket is optimized depending on the specified draw direction in the Demold Constraint block.](https://files.learn.ntop.com/help-articles/whats-new/Demold3.png) The **Demold Constraint** block is a constraint for Topology Optimization to generate parts that are moldable/castable. The constraint can ensure that the topology optimization results have an optimum 3D parting line/surface and will avoid any undercuts with respect to the pull direction(s). In addition to optimizing the parting surface, users can define their own surface and use the constraint for single-draw methods. You can now generate parts manufactured with molds using this block alongside other optimization objectives and constraints. * Block Name: Demold Constraint * Location: Beta > Topology Optimization * Description: Define a demold constraint for a topology optimization process. The constraint ensures no undercuts in the optimized result, enabling mold release in the specified demold direction. * Demold Direction: The mold pull direction. * Auto Split Surface: Optimize the parting surface. If selected, the optimization will result in a part intended for a split mold manufacturing process, where you optimize the mold splitting surface during the topology optimization. If unselected, the resulting part will assume a single-draw mold. * Region: Region where the demold constraint is applied. If left blank, the constraint is applied to the entire model. * Output: Optimization Constraint #### [Usage Improvements](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * The Information tab of the Right Side Panel will now automatically scroll to the corresponding selected input, even if it's out of view.![A gif showing how the information tab will automatically scroll up or down based on your selected block input.](https://files.learn.ntop.com/help-articles/whats-new/RSP.png) ## Keywords: *ntop new what's new 4.16* # nTop 4.17 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-17-what-s-new > [!NOTE] > > nTop 4.17 is here! This release features two new blocks. The **Extract Optimization History** block enables you to export convergence history. The **Run Command** block enables you to run any command-line command within nTop. Scroll down to read more about these blocks. This release also includes bug fixes and improvements to viewing simulation result plots. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Extract Optimization History (Beta)](#h-01hkmnbkfh4pgr4zj7jprdagh2) * ### [Run Command (Beta)](#h-01hkmnbkfj6vypc9at8097ekhs) * ### [Updated Plot Views](#h-01hkmnbkfj4y4a940v9av7r5wm) * ### [Usage Improvements](#h-01hkmnbkfjzed8qacksanqjr5d) * ### [Bug Fixes](#h-01hkmnbkfj3rv1p4crce826r59) #### Extract Optimization History (Beta) * The **Extract Optimization History** block allows users to extract the objective and constraint values for every iteration of a **Topology Optimization** or **Field Optimization** result. * This block helps you examine the convergence of a Topology Optimization or Field Optimization result. * You can view the Table by clicking on the *View Data* button on the Display tab in the Right Panel * Block Name: Extract Optimization History * Location: Beta > Topology Optimization * Result: Result to extract convergence history from. * Unit System: Unit system that the convergence data should be translated to. * Precision: The number of significant digits for formatting the output value. * Output: Table ![An example of using the Extract Optimization History block to extract objective and constraint values for every iteration of a Topology Optimization.](https://files.learn.ntop.com/help-articles/whats-new/24942644271379.png) #### Run Command (Beta) * The **Run Command** block allows users to run any command-line command directly within nTop. This block enables the execution of diverse external processes, such as executing complex simulations, interfacing with external design tools, or integrating manufacturing processes. * Connecting applications: Any command-line executables of design, analysis, or manufacturing software and tools * Automation: Execute command-line or PowerShell commands for automation. * Scripting: Execute commands in Python, Lua, or any other scripting language you choose. * Block Name: Run Command * Location: Beta > Utilities * Description: Executes a command on your local machine. * Command: Command to execute. * Timeout: Option to cancel execution if unfinished after a set time period. * Working Directory: Option to set a working directory for external command. * Output: Command Result You can find examples of the Run Command block [here](/help-articles/knowledge-base/user-interface/how-to-use-run-command-block). *The GIF below shows an example of the Run Command block used to plot with Python Script with input variables from nTop.* *![an example of the Run Command block used to plot with Python Script with input variables from nTop.](https://files.learn.ntop.com/help-articles/whats-new/24942644300051.png)* #### Updated Plot Views * We have moved the Plots to the right-side panel so you can quickly view the data when the object is selected. * When you click on a plot, it will open a larger view in the bottom panel so you can take a closer look. You can resize the panel and switch which plot you want to view there. * Tip: You can view plot updates while your optimization is running. * Location: Right Side Panel > Display > Plots ![A demonstration showing the updated plot views of a topology optimization. The plots can be accessed through the right side panel in the display tab.](https://files.learn.ntop.com/help-articles/whats-new/24942659707795.png) #### Usage Improvements * You can now use the “View Data” feature to open Scalar List, Temperature List, Boolean List, Integer List, Text List, Vector List, Point List, CAD Body List, Part List, Component List, Filepath List, Scalar Point Map, Vector Point Map, Temperature Point Map, Tables and Columns types in the bottom panel. ![An example of using the View Data feature to visualize point map data as a table.](https://files.learn.ntop.com/help-articles/whats-new/24942644330387.png) * We added the hotkey **Ctrl + 3** for the bottom panel so you can quickly open and close it to view tables, lists, and plots. * We removed the old “Information” and “Display” tabs from the block details window. The “Properties” tab is now the default. #### Bug Fixes * We fixed an issue with the **Export Slices to CLS** block that produced empty slices. * We fixed an issue with the “View Data” feature so more blocks that output tables and list types can be viewed in the bottom panel, such as “Concatenate Lists” (using text lists) and “Scalar from Text List”. ## Keywords: *new release notes command run whats extract optimization 4.17* # nTop 4.18 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-18-what-s-new > [!NOTE] > > nTop 4.18 is here! This release features three new blocks. The **Add Draft** block enables you to add a draft angle to assist with moldability. The **Await** block enables you to run blocks in a serial order. The **Transform Material** block enables you to modify the material with a tensor. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. ### [Add Draft](#h-01hmh8q0fy4p280jr2gn3v185z) ### [Transform Material](#h-01hmh8q0fyfrpjg3mk1t38cb4s) ### [Await](#h-01hmh8q0fycdn8chtr1vce352j) ### [Bug Fixes](#h-01hmh8q0fymwq63rqt6bs7dhyd) #### Add Draft * The **Add Draft** block applies draft to a mesh to aid manufacturing (specifically casting). * We recommend using the **Add Draft** block for parts that have undergone topology optimization with the demold constraint. You can also apply a certain draft angle to a region using the **Add Draft** block for any surface mesh. * The algorithm optimizes every face of the input shape to have the needed draft angle while ensuring the shape is only affected where required. * Block Name: Add Draft * Location: Beta Manufacturing * Description: Applies a draft/taper angle to a mesh or a region of a mesh. * Mesh: Mesh body to apply draft to. Draft will be applied to the entire body unless a region is specified. * Demolding Direction: Vector representing the demolding direction. The draft will be applied in this direction. * Draft Angle: Draft angle to apply to mesh. * Max Iterations: The maximum number of iterations per attempt to converge each mesh element to comply with the desired draft. Increasing the number of iterations is beneficial for meshes with many faces. * Max Attempts: The maximum number of attempts to achieve a mesh compliant with the draft angle. While a larger number of attempts increases solve time, it also increases the likelihood of creating convergent meshes on more complex parts (overhangs, larger draft angles, etc). As soon as all faces of the initial region achieve the input draft, the block finishes execution successfully. * Smoothening: Value used to adjust the smoothness. Values can range from 0-1, with 0 turning off the smoothening function and 1 making the output shape as smooth as possible. * Height Stability: Value to adjust the importance of maintaining height values (according to demolding direction). Values can range from 0-1, with 0 allowing unlimited movement and 1 allowing very little movement. * Region: Optional input to limit the draft to being applied only to a specific region of the input mesh. * Output: Mesh ![A diagram showing the difference between an implicit body with the Add Draft block applied and the same body without it. The Add Draft block applies a draft angle to the bodies edges.](https://files.learn.ntop.com/help-articles/whats-new/25349246281619.png) #### Transform Material * The **Transform Material** block enables you to transform a material from basis Source \{X,Y,Z} to new basis Destination \{X,Y,Z} with tensor omega\_ij=dot(Destination\_i,Source\_j). * You can use the **Transform Material** block to transform the Field-based material model for various simulation problems involving orthotropic material models. One of the primary use cases will be to enable the transformation of material models used in \*\*Field Optimization\*\*. e.g., Conformal ribbing and simulation with conformal orthotropic materials. * Block Name: Transform Material * Location: Beta Simulation * Description: Transforms a material from basis Source \{X,Y,Z} to new basis Destination \{X,Y,Z} with tensor omega\_ij=dot(Destination\_i,Source\_j). * Material: The underlying material * Source X: First component of the source frame * Source Y: Second component of the source frame * Source Z: Third component of the source frame * Destination X: First component of the destination frame * Destination Y: Second component of the destination frame * Destination Z: Third component of the destination frame * Output: Anisotropic Material The image below shows an example of using a **Transform Material** block to rotate the material field by switching the Source and Destination vectors. ![A Transform Material block example. The Transform Material is being used to rotate the material field of a homogenize unit cell block.](https://files.learn.ntop.com/help-articles/whats-new/25349374256019.png) #### Await * The **Await** block is used to execute once the *'Wait For'* input is built and will produce the object in the *'Return'* input as the output. This way, the **Await** block runs blocks one after the other in a serial order. * The **Await** block combined with the **Run Command** block runs commands after input completion. * Block Name: Await * Location: Utilities General \* Description: The \*\*Await\*\* block will execute once the \*'Wait For'\* input is built, and will produce the object in the \*'Return'\* input as the output. This way the \*\*Await\*\* block can be used to force blocks to run one after the other in serial order. * Wait For: The data that is required to be available before executing the block * Return: The value to be returned when the \*'Wait For'\* input has been executed * Output: Any The image below shows an example of using the **Await** block to wait to complete the \*\*Export Mesh\*\* block before running the **Run Command** block with the Python script. ![An example of using the Await block to prevent a Run Command block from running until the Export Mesh block completes.](https://files.learn.ntop.com/help-articles/whats-new/25349824999059.png) #### Bug Fixes * We fixed an issue with the Right Click Flood Fill selection that caused nTop to exit unexpectedly. * We fixed an issue with the incorrect rendering of the **Cylinder** and **Cone** blocks when their axes were aligned with the Y-Axis. # nTop 4.19 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-19-what-s-new > [!NOTE] > > nTop 4.19 is here! This is a lighter release with our new **FE Volume Mesh from CAD** block to quickly generate FE Volume Mesh from an input CAD with no intermediate blocks and the ability to preserve CAD face. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com) to gain access to helpful tutorials and support articles. ## [FE Volume Mesh from CAD](#h-01hnwszq7m85f56nhq64a5wnsm) ## [Block Updates](#h-01hnwt32712jbfhxnhc0pmjw2v) ### FE Volume Mesh from CAD * The **FE Volume Mesh from CAD** block makes generating an FE Volume Mesh easier by eliminating the intermediate steps of converting the imported CAD into a surface mesh, volume mesh, and then into an FE volume mesh into one block. * The **FE Volume Mesh from CAD** block features a Preserved CAD Faces input to retain the faces in the resulting FE Mesh. * The generated FE mesh will be associated with the CAD bodies used. This removes the need to associate mesh with the CAD bodies for boundary selection. * This block can be used in workflows where CAD parts are imported for any simulation or optimization into nTop. * Block Name: FE Volume Mesh from CAD * Location: Simulation > Mesh * Description: Create an FE Mesh of solid elements from a single solid CAD Body by discretizing and adding integration points of the desired order to each element within the mesh. * Body: The input geometric discretization. * Edge Length: The target edge length of the elements. * Geometric Order: The geometric order of the finite elements. * Span Angle: The maximum spanning angle for elements on a curved surface. * Growth Rate: The rate at which the size of adjacent elements can grow. * Feature Angle: The maximum angle used to compute the preserved edges in the input surface automatically. * Min Edge Length: The minimum allowed edge length of the generated elements in the output mesh. * Chord Height: The maximum distance from the midpoint of an element edge to the input surface. * Min Feature Size: The minimum small feature size to control the deletion of small features. * Preserved Faces: Faces to preserve in the resulting FE Mesh. An undefined value turns off face preservation. ![A mesh generated using the FE Volume Mesh from CAD block.](https://files.learn.ntop.com/help-articles/whats-new/25962618296211.png) ### Block Updates * We have updated the Import CFD Analysis Result block to support importing the Ensight case gold file (\*.encas and \*.case) formats. * We have updated one of the internal computations of the listed blocks. The observable changes would be a higher voxel count, different Mesh/CAD topologies, or vertex/face counts. However, the Mesh/CAD Body will remain within the specified tolerance. * **Offset Voxel Grid** * **Smoothen Voxel Grid** * **Voxel Grid from Implicit Body** * **Implicit Body from Voxel Grid** * All versions of **Mesh from Implicit Body** * **CAD Body from Implicit Body** * See the Backwards Compatibility notice [nTop 4.19 - Internal Computation Update](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-4-19-internal-computation-update) for details. ## Keywords: *ntop new what's new release notes 4.19* # nTop 4.2 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-2-what-s-new > [!NOTE] > > nTop 4.2 is here! This release features our nTop Automate for Linux, improvements to our ribbon, an update to our Transient Thermal Analysis (Beta) block, and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [nTop Automate for Linux](#h-01h1qa348rk6b82xb79nr222en) * ### [Usage Improvements](#h-01h1qa3amjjb3qa0bqdmgyz22p) * ### [Block Updates](#h-01h1qa3j9scqavg679d7nv1dn3) * ### [Bug Fixes](#h-01h1qa3t5e8zfvq4vrg8yyj4ma) #### nTop Automate for Linux * nTop Automate for Linux is now available on [nTop Dashboard](https://app.ntop.com/). More information and the download link are enabled for the paid customers of nTop Automate, formerly known as nTop Command Line Interface (CLI). More information and updates will be separately available in this support article: [nTop Automate for Linux - Update](/help-articles/knowledge-base/ntop-automate/ntop-automate-for-linux-update). ![There is now a link on app.ntop.com to download nTop Automate for Linux.](https://files.learn.ntop.com/help-articles/whats-new/linux.png) #### Usage Improvements * We have resized the ribbon to display more tabs for easier navigation. ![The ribbon in the nTop platform.](https://files.learn.ntop.com/help-articles/whats-new/Larger_Ribbon.png) * We have updated the arrow to display a blue underline when a selected tab is out of view. ![The ribbon navigation arrows will now have a blue underline if the selected ribbon tab is offscreen.](https://files.learn.ntop.com/help-articles/whats-new/Ribbon_Hovers.gif) * We have updated the double-click on collapsed long (3+ lines) descriptions or comments to expand to the full height, so you can quickly view the text at a glance. ![Double clicking on a long comment will highlight and reveal all of the text.](https://files.learn.ntop.com/help-articles/whats-new/Long_Comment.gif) #### Block Updates * We updated the **Transient Thermal Analysis (Beta)** block with an input that accepts a user-defined value or field for the initial temperature of the analyzed components. In addition to this, we also updated several inputs to the block for better control of the analysis. The block inputs for the latest version are as follows : * Model: The finite element model. * Load case: The restraints and applied thermal loads. * Initial temperature: The initial temperature of the components in the FE Model. * Duration: Duration of the simulation. * Initial time step: Initial time step for the transient analysis. The program will control the step size for subsequent steps. * Save increment: Controls the amount of data stored and accessible after the simulation completes. The default value of 1 will save results for all increments, whereas a value of 0 will save only the first and last increment. For any value N > 1, the block will save results for every N increment. * Fixed time step: Option to fix the initial time step for the entire analysis. If this option is unchecked, the solver uses an automatic time-stepping scheme that varies the initial time step based on the stability of the analysis. * In addition to these inputs, We also updated the HUD to reflect the *Time* duration elapsed for a specific *Iteration* (previously called *Solution Step*) selected by the user as shown in the screenshot below : >
    **Before** **After**
    ![The Transient Thermal Analysis block before nTop 4.2.](https://files.learn.ntop.com/help-articles/whats-new/t1.png) ![The Transient Thermal Analysis block in nTop 4.2. The block has additional inputs for Duration, Initial Temperature, Save Increment, and Fixed Time Step.](https://files.learn.ntop.com/help-articles/whats-new/t2.png)
    ![The Time Dependent Thermal Results HUD before nTop 4.2.](https://files.learn.ntop.com/help-articles/whats-new/t3.png) ![The Time Dependent Thermal Results HUD in nTop 4.2. The HUD now displays the time interval.](https://files.learn.ntop.com/help-articles/whats-new/t4.png)
    #### Bug Fixes * We fixed an issue that caused nTop to exit unexpectedly if you attempted any boolean operation on the implicit body property of an empty mesh. * We fixed an issue in the **Merge Graphs,** and **Merge Lattices** block that prevented face-based graphs or lattices from merging correctly if two faces were identical but with opposite normals. * We fixed an issue where Point List and Vector List inputs were not displayed in the notebook after saving the file in nTop Automate. * We fixed an issue with multiple block messages getting cut off when displaying from a block positioned at the top of the notebook. * We have updated the URLs connecting to nTop from ntopology.com to ntop.com, and you can learn more about it in our [Allowlisting Guide](/help-articles/access-and-installation/accounts-and-licensing/ntop-allowlisting-guide). ## Keywords: *new release notes whats 4.2* # nTop 4.20 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-20-what-s-new > [!NOTE] > > nTop 4.20 is here! This release features a **Natural Frequency Constraint** block, making constraining the Topology Optimization in the defined frequency range easier. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ## [Natural Frequency Constraint](#h-01hq22kt599ges29rp0rff0b27) * ## [Usage Improvements](#h-01hq22kt59fwb7f7q6ka3kcvwq) * ## [Block Updates](#h-01hq22kt59b41zv7zx19trtekk) ### Natural Frequency Constraint * The **Natural Frequency Constraint** combines design response constraint and natural frequency response. This block makes it easier for you to constrain the topology optimization to generate shapes with natural frequencies inside or outside the specified range. * Block Name: Natural Frequency Constraint * Location: Optimization > Constraints * Description: Define a natural frequency constraint for optimization to generate shapes with natural frequencies inside or outside the specified range. * Number of Modes: Number of modes that will be searched for and included in the constraint computation. * Band Type: This defines whether the natural frequency of the optimized shape lies inside or outside the range defined by the Min Frequency and Max Frequency inputs. * Min Frequency: The lower bound of the natural frequency range. * Max Frequency: The upper bound of the natural frequency range. * Load Case: Load case for the constraint. * Output: Optimization Constraint The image below shows an example of avoiding any modes from 7500Hz (Lower Bound) to 25000Hz (Upper Bound) ![An example Topology Optimization run using the Natural Frequency Constraint block.](https://files.learn.ntop.com/help-articles/whats-new/nfc.png) ### Usage Improvements * We added a new Recent Files tab in the Welcome Screen. ![The Recent Files tab that was added to the welcome screen of the nTop platform.](https://files.learn.ntop.com/help-articles/whats-new/recent.png) ### Block Updates * We have updated the FE Region and FE Boundary types to include "fe mesh" in the properties panel to access the selected mesh region and "parent mesh" to access the entire mesh used to select the boundary. ![The FE Region by Body block now has an FE Mesh and Parent Mesh property chips.](https://files.learn.ntop.com/help-articles/whats-new/fe_region.png) * We have updated the **Point Force** and **Point Moment** blocks to include the Rigid (RBE2) or Flexible (RBE3) Connector input. ## Keywords: *new what's new 4.20 4.20.2* # nTop 4.21 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-21-what-s-new > [!NOTE] > > nTop 4.21 is here! This release features our new CAD View capability, making filtering out CAD body features easier. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ## [**CAD View**](#h-01hr56y18bfwmr03pt6mzc565p) * ## [**Usage Improvements**](#h-01hr56y18bpjb898rxfyhhkp88) ### CAD View * The “CAD View” checkbox in the properties panel filters out all of the non-CAD properties so you can quickly look through the CAD geometry. * Location: The checkbox is available in the property window for all CAD types (parts, bodies, assemblies, components, instances). ![An example of using the CAD View option in the Import Part properties panel. This isolates the properties to only display CAD elements.](https://files.learn.ntop.com/help-articles/whats-new/cad_view.gif) ### Usage Improvements * We improved the nTop UI performance when working with many blocks in a workflow. * We have improved our HUDs to be persistent where possible. Now, when re-running blocks such as “Static Analysis”, the HUD showing the results will keep options constant where possible (color settings etc). ## Keywords: *ntop new what's new 4.21* # nTop 4.22 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-22-what-s-new > [!NOTE] > > nTop 4.22 is here! This release features simulation updates and improvements, as well as several bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com) to gain access to helpful tutorials and support articles. * ## [Usage Improvements](#h-01hsy86f17vcb3m934fwbteb7p) * ## [Block Updates](#h-01hsy86zr1fyeh2bnt5ca7zz5v) * ## [Bug Fixes](#h-01hsy88n2r3hsnq1cmt06rfrmx) ### Usage Improvements * You can now view the output of CFD Boundaries. ### Block Updates * The **Thermal Analysis** block has been versioned, and the new version will no longer support Radiation Boundary Loads; instead, a **Nonlinear Thermal Analysis** block must be used. The **Nonlinear Thermal Analysis** block has been updated for linear material properties. ### Bug Fixes * We fixed an issue with the **Smoothen Body** block that caused nTop to unexpectedly exit when a single point input or empty bounding box was used. * We fixed an issue where the transparency slider did not affect Vector Point Map indicators. * We fixed an issue where CAD bodies would render incorrectly in some cases. ## Keywords: *ntop new what's new 4.22* # nTop 4.23 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-23-what-s-new > [!NOTE] > > nTop 4.23 is here! This release features new overloads for the **Evaluate Field** and **Evaluate Field Gradient** blocks and some minor bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Block Updates](#block-updates) * ### [Bug Fixes](#bug-fixes) #### Block Updates * We added overloads for the **Evaluate Field** and **Evaluate Field Gradient** blocks to allow for a Point List input instead of a single point. Using the Point List overload, the block can now utilize multithreading for evaluating multiple points instead of list processing. The multithreading evaluation speed should be significantly faster in most cases than previously used list processing. #### Bug Fixes * We fixed an issue with the **Static Analysis** block that caused nTop to apply initial temperatures incorrectly during structural thermal analysis. * We fixed an issue with the **Export FE Mesh to CFD** block that caused nTop to export duplicate meshes when exporting as an \*.STL. * We fixed an issue with the **Import CFD Analysis Result** block that caused nTop to exit unexpectedly when importing velocities with scalar values instead of vector values. * We fixed an issue with the **Topology Optimization** block that caused nTop to display natural frequencies in the convergence graphs with incorrect units. * We fixed an issue with the **FE Volume Mesh from CAD** block that caused nTop to require re-running the block upon opening a file from a previous version. * We fixed an issue where the implicit view for unit cells would not update when changing the resolution. ## Keywords: *new release notes whats 4.23* # nTop 4.24 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-24-what-s-new > [!NOTE] > > nTop 4.24 is here! This is a lighter release with multithreading evaluation for filtering blocks and a few bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com) to gain access to helpful tutorials and support articles. ## [Block Updates](https://support.ntop.com/hc/en-us/articles/undefined#h_01HVH4MSHK02VXTR5GRYVBF9JG) ## [Bug Fixes](https://support.ntop.com/hc/en-us/articles/undefined#h_01HVH4N1XN4433CF3QWB2HQZ7E) ### Block Updates * We updated four built-in custom blocks **Filter Points by Volume, Filter Scalar Point Map by Volume, Filter Vector Point Map by Volume,** and **Filter Beams by Containment**. The blocks now utilize multithreading for evaluating multiple points instead of list processing. The multithreading evaluation speed should be significantly faster in most cases. > > > > > > > > >
    > ![An example of the Filter Points by Volume block calculation time in nTop 4.23.](https://files.learn.ntop.com/help-articles/whats-new/28444663725587.png) > > ![An example of the Filter Points by Volume block calculation time in nTop 4.24. The block processes much faster.](https://files.learn.ntop.com/help-articles/whats-new/28444673805971.png) >
    ### ### Bug Fixes * We fixed an issue where plots were not displaying when a **Topology Optimization** was dragged out of a list. * We fixed an issue that caused nTop to unexpectedly exit when importing CFD Results that contained velocities of different dimensions (scalar vs vectors). ## Keywords: *new release notes whats 4.24* # nTop 4.25 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-25-what-s-new > [!NOTE] > > nTop 4.25 is here! This release features our new manufacturing constraints: 3-axis milling constraint and 5-axis milling constraint. Scroll down to read more about it. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. ## [3-Axis Milling Constraint](#h-01hwnhej6g9xnh5jmtksz038p1) ## [5-Axis Milling Constraint](#h-01hwnhej6hfqnkx0nwhq6pxhes) ### 3-Axis Milling Constraint The **3-Axis Milling Constraint** block enables three-axis milling constraints on Topology Optimizations. The constraint ensures the Topology Optimization result can be manufactured without contact between the tool head and the design domain. It ensures no features are generated smaller than the smallest cutting tool would allow. * Block Name: 3-Axis Milling Constraint * Location: Beta > Topology Optimization * The block has the following inputs: * Head Radius: The radius of a half sphere used to represent a simplified drill chuck. This will ensure the cutting tool can access specific regions without interference. The head radius should be larger than the min tool radius. * Tool Length: The length of the cutting tool, measured from the tip to the drill chuck. * Min Tool Radius: The radius of the cutting tool. This input controls the radii that can occur in the results. * Approach Directions: These are the possible milling directions. If left blank, the default directions are +X, -X, +Y, -Y, +Z, and -Z. You can select multiple approach directions for one milling configuration to allow for multi-sided machining. * Output: Optimization Constraint ![An example of a Topology Optimization run using the 3-Axis Milling Constraint.](https://files.learn.ntop.com/help-articles/whats-new/28905999628307.png) The above image shows an example of a Cantilever Beam optimized using the 3-Axis Milling Constraint on one axis. ### 5-Axis Milling Constraint The **5-Axis Milling Constraint** block enables five-axis milling constraints on Topology Optimizations. The constraint ensures the Topology Optimization result can be manufactured without contact between the tool head and the design domain. It ensures no features are generated smaller than the smallest cutting tool would allow. * Block Name: 5-Axis Milling Constraint * Location: Beta > Topology Optimization * The block has the following inputs: * Head Radius: The radius of a half sphere used to represent a simplified drill chuck. This will ensure the cutting tool can access specific regions without interference. The head radius should be larger than the min tool radius. * Tool Length: The length of the cutting tool, measured from the tip to the drill chuck. * Min Tool Radius: The radius of the cutting tool. This input controls the radii that can occur in the results. * Output: Optimization Constraint ![An example of a Topology Optimization run using the 5-Axis Milling Constraint.](https://files.learn.ntop.com/help-articles/whats-new/28905999637779.png) The above image shows an example of a Cantilever Beam optimized using the 5-Axis Milling Constraint. ## Keywords: *ntop new release notes 4.25* # nTop 4.26 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-26-what-s-new > [!NOTE] > > nTop 4.26 is here! This release features our new Slice Body by Marching Squares block that uses the marching squares algorithm and usage improvements. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Slice Body by Marching Squares](#h-01hxfzaepc5dsg12cry9pzvas5) * ### [Usage Improvements](#h-01hxfzaepcsxmpzs32bh7rzq79) #### Slice Body by Marching Squares * The new **Slice Body by Marching Squares** block enables users who need to slice an Implicit Body using a large feature size for performance reasons but cannot tolerate occasional artifacts introduced by sharpening. * Block Name: Slice Body by Marching Squares * Location: Beta > Manufacturing * Description: Create a stack of cross-sectional slices with even spacing between layers, oriented by a frame. The frame will act as the origin of the slice data. This block uses marching squares instead of dual contouring. * Body: Implicit body to slice. * Layer height: Spacing between slice layers. * Feature size: Minimum feature size is needed to capture details accurately. * Include negative Z: Option to include layers with negative Z values with respect to the frame, if any. By default, this block will slice only in the positive Z direction. * Frame: Frame to orient the slicing and act as the origin of the slice data. If no frame is provided, the slices are generated from the origin and parallel to the XY plane in the positive Z direction. * Output: Slice Stack ![An example of a body being sliced using the Slice Body by Marching Squares block.](https://files.learn.ntop.com/help-articles/whats-new/29332318331667.png) #### Usage Improvements * We have updated the Min and Max in Point Map HUD to indicate the Maximum and Minimum values in the Point Map. * We have improved the internal computation of the **FE Boundary by Body** and **FE Region by Body** blocks. In certain cases, the block will run much quicker, and files containing these blocks will open faster. * We have added two additional graphs to our Topology Optimization results. You can view them by clicking the Right Side Panel > Display and locating the Plots section. * Time per iteration/Total time for the optimization process * Maximum design change through iterations. ![An example of how to access the Topology Optimization graphs using the display tab.](https://files.learn.ntop.com/help-articles/whats-new/29332318353683.png) ## Keywords: *new what's new 4.26* # nTop 4.3 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-3-what-s-new > [!NOTE] > > nTop 4.3 is here! This release features our new **Export Implicit Body (Beta)** block that lets you export implicit bodies as \*.implicit files, which can be imported directly into an EOS printer with our new beta **nTop Plugin for EOSPRINT**. We are also releasing our **Anisotropic Material** block and blocks to define its properties: **Anisotropic Stiffness Tensor, Anisotropic Thermal Property**, and **Anisotropic Thermal Expansion Property**. Please scroll down to learn more about these blocks and our new capabilities. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Export Implicit Body (Beta)](#h-01h2ra62gnvwdgys3p5gwaeex7) * ### [nTop Plugin for EOSPRINT (Beta)](#h-01h2ra6d6wnk0pvfg7v5v0mvms) * ### [Anisotropic Material](#h-01h2ra6jraszac9g79xx0sxkea) * ### [Anisotropic Stiffness Tensor](#h-01h2ra6stqtr5jke6pcqz0zttr) * ### [Anisotropic Thermal Property](#h-01h2ra70qrxk2fmfmf56rqajs8) * ### [Anisotropic Thermal Expansion Property](#h-01h2ra77zz90mmb5y9xwxf0gh4) * ### [Usage Improvements](#h-01h2ra7cp0facevpbwax8fv9xe) * ### [Block Updates](#h-01h2ra7hgrkkbsnrbdty3gcy0w) * ### [Bug Fixes](#h-01h2ra7pb50pek20nje5zf78xr) #### Export Implicit Body (Beta) * We are excited to announce that the **Export Implicit Body** block is now available in beta. With this block, you can conveniently export an Implicit Body as an nTop Implicit File (\*.implicit), which is our proprietary file format designed specifically for seamless integration with our products, including the nTop Core library and nTop Plugin for EOSPRINT.![An example of using the Export Implicit Body block to export an implicit.](https://files.learn.ntop.com/help-articles/whats-new/export-implicit-body.png) * Generating an nTop Implicit File is not only simple but also remarkably fast. In fact, the process typically takes less than a second, allowing you to swiftly proceed with your workflow. * Furthermore, we are pleased to inform you that the **Import Implicit Body** block is currently available as a private beta. However, we have plans to promote it to the beta stage later this year. Stay tuned for this exciting development, as it will provide you with even more flexibility and convenience when working with nTop products. * Block Name: Export Implicit Body * Location: Beta > Manufacturing * Description: Export an Implicit Body to a file * Path: The output file path * Body: Implicit Body to export #### nTop Plugin for EOSPRINT (Beta) * We are excited to announce that the **nTop Plugin for EOSPRINT** is now available in beta for all nTop customers using **EOSPRINT 2.14** or later. * With our cutting-edge Implicit Interop technology, the nTop Plugin enables you to seamlessly import nTop Implicit Files directly into EOSPRINT for efficient slicing and manufacturing. * Generating an nTop Implicit File is simple—just utilize the **Export Implicit Body (Beta)** block in nTop. * To gain access to the plugin, kindly reach out to our Support team, and you will find it conveniently available in the Add-ons tab of your [customer dashboard](https://app.ntopology.com/app.ntop.com). The installation instructions can be found in [this support article](/help-articles/knowledge-base/interop/ntop-plugin-for-eosprint-overview). ![On the left is an implicit body generated in nTop. The right image shows the same implicit body imported into the nTop Plugin for EOSPRINT.](https://files.learn.ntop.com/help-articles/whats-new/t1.png) * By utilizing the **nTop Plugin for EOSPRINT**, you can eliminate the challenges associated with data exchange bottlenecks caused by meshing. Traditional mesh files are often large, time-consuming to generate, and can compromise the accuracy of the final part. Moreover, meshing becomes impractical or impossible for complex geometries. However, by transferring your designs using an nTop Implicit File and leveraging the **nTop Plugin for EOSPRINT**, you can overcome these obstacles effectively. ![The Add-Ons page on app.ntop.com. The nTop Plugin for EOSPRINT can be downloaded from here when available.](https://files.learn.ntop.com/help-articles/whats-new/t2.png) #### Anisotropic Material * The **Anisotropic Material** block enables you to define an Anisotropic material by providing an Anisotropic material list of elastic and thermal properties and the density of the material. * This block is used to apply anisotropic material properties to FE Models in a Static, Modal, Buckling or Thermal analysis to determine the model's performance. The properties are typically derived from data sheets, experimental data or a Homogenization analysis performed in nTop. * Block Name: Anisotropic Material * Location: Simulation > Material Attributes * Description: Defines an Anisotropic Material by providing a list of Anisotropic Material Properties and the material density. The properties of an Anisotropic Material can vary in any direction. * Properties: The list of anisotropic material properties that define the material. * Density: The material density. * Output: Anisotropic Material #### Anisotropic Stiffness Tensor * The **Anisotropic Stiffness Tensor** block enables you to define the linear elastic properties of an anisotropic material. * This block is added to the Anisotropic Material Property List to apply elastic properties to an FE model used in a Static, Modal or Buckling analysis. * Block Name: Anisotropic Stiffness Tensor * Location: Simulation > Material Attributes * Description: Defines an Anisotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship:![Anisotropic Stiffness Tensor](https://files.learn.ntop.com/help-articles/whats-new/AM1.png) * Providing scalar fields as inputs will result in spatially varying material properties. * Cij: Material Stiffness Component i,j (Note: The block has a total of 21 material stiffness component inputs as indicated in the following screenshot) ![Anisotropic Stiffness Tensor matrix has 21 material stiffness component inputs.](https://files.learn.ntop.com/help-articles/whats-new/AM2.png) * Output: Anisotropic Linear Elastic Property #### Anisotropic Thermal Property * The **Anisotropic Thermal Property** block lets you define an anisotropic material's thermal properties, such as conductivity and specific heat. * This block is added to the Anisotropic Material Property List to apply thermal properties to an FE model used in a Thermal analysis. * Block Name: Anisotropic Thermal Property * Location: Simulation > Material Attributes * Description: Defines an Anisotropic Thermal Property by specifying specific heat capacity and a second order thermal conductivity tensor, Kij, for the constitutive relationship between heat flux and the temperature gradient, qi=-Kij\* (dT/dxj). Providing scalar fields as inputs will result in a spatially varying material property. * K11: Thermal conductivity component 1,1. * K12: Thermal conductivity component 1,2. * K13: Thermal conductivity component 1,3. * K22: Thermal conductivity component 2,2. * K23: Thermal conductivity component 2,3. * K33: Thermal conductivity component 3,3. * Specific Heat: Specific heat capacity. * Output: Anisotropic Thermal Property #### Anisotropic Thermal Expansion Property * The **Anisotropic Thermal Expansion Property** block lets you define an anisotropic material's thermal expansion properties. * This block is added to the Anisotropic Material Property List to apply thermal expansion properties to an FE model used in a Static analysis to study temperature change induced strains. * Block Name: Anisotropic Thermal Expansion Property * Location: Simulation > Material Attributes * Description: Defines an Anisotropic Thermal Expansion Property by specifying a matrix of thermal expansion coefficients in Voight notation, ![The equation to calculate the Anisotropic Thermal Expansion Property](https://files.learn.ntop.com/help-articles/whats-new/AM3.png) * where T is the current temperature, and T\_o is the baseline reference temperature. Providing scalar fields as inputs will result in spatially varying material properties. * Alpha1: Thermal expansion coefficient, Alpha 1 * Alpha2: Thermal expansion coefficient, Alpha 2 * Alpha3: Thermal expansion coefficient, Alpha 3 * Alpha4: Thermal expansion coefficient, Alpha 4 * Alpha5: Thermal expansion coefficient, Alpha 5 * Alpha6: Thermal expansion coefficient, Alpha 6 * Output: Anisotropic Thermal Expansion Property #### Usage Improvements * The “Spatial3D” type has been renamed to “Transformable” to improve clarity. #### Block Updates * We moved the default overload of the **Cylindrical Restraint** block that takes an FE Boundary input to production version 1.0.0. With this version update, we improved the automatic axis detection to be robust for both the **FE Boundary by Body** and the **FE Boundary by Flood Fill** boundary input selection methods.The block is located in the Simulation ribbon under the Boundary Conditions section. #### Bug Fixes * We fixed an issue with the **Rectangular Cell Map** block that caused nTop to hang at the "Refining Bounding Box" step when using a Volume input with NaNs. * We fixed an issue with the **Polygon from Points** block that allowed non-coplanar points as input values and created an unusable result. If input points are not coplanar, the block will throw an error. * We fixed an issue with un-built blocks having all their properties showing the building progress wheel. * We fixed an issue with the information panel during Precise Render that caused the panel to stay open and active. * We fixed an issue that did not update the property panel when switching to an element in a Group with a different type. ## Keywords: *new release notes whats 4.3* # nTop 4.4 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-4-what-s-new > [!NOTE] > > nTop 4.4 is here! This is a lighter release with bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01h3wmh9mqymznt8tsfzsyw33a) * ### [Bug Fixes](#h-01h3wmhh2xd3b4qdh6hwwfhzhp) #### Usage Improvements * You can now hide/show the Left Bar by pressing "Ctrl + \[". #### Bug Fixes * We fixed an issue where the wrong units would be displayed incorrectly on block inputs when you close a file, change units, and re-open a file. * We fixed an issue causing nTop to unexpectedly exit when you made the block a model input and then opened the properties panel. * We fixed an issue where the description of a Custom Block without inputs would not show after you made it a variable. * We fixed an issue where if there are multiple instances of a specific analysis block (Static, Modal, Thermal, or Buckling) that share the same FE Model, the fields in the properties tab of these analysis blocks would show the values of the block that ran last in the notebook. * We fixed an issue in the **Cylindrical Restraint** block to improve the automatic axis detection for CAD faces. ## Keywords: *new release notes whats 4.4* # nTop 4.5 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-5-what-s-new > [!NOTE] > > nTop 4.5 is here! This is a lighter release with block updates and bug fixes. Please scroll down to read more about them. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Block Updates](#h-01h50q3hf5ec1qccga46fjk6cf) * ### [Bug Fixes](#h-01h50q3n903dq9h8w33pash85s) #### Block Updates * We consolidated certain blocks into one block with multiple overloads. If you have been using the latest block versions for the changes listed below, our backward compatibility system will take care of this update. You do not need to make any manual changes to your notebook. * The **Mass Properties from Body** and **Mass Properties from Mesh** blocks are now one block with two overloads, and we simplified the name to **Mass Properties**. * The **Surface Area from Body** and **Surface Area from Mesh** blocks are now one block with three overloads, and we simplified the name to **Surface Area**. * The **Set Body Bounding Box** and **Set Field Bounding Box** blocks are now one block with two overloads, and we simplified the name to **Set Bounding Box**. * We moved the **Mass Response**, **Center of Mass Response** and the **Moment of Inertia Response** blocks for optimization to production version 1.0.0. You can find these blocks in the Optimization ribbon under the Responses section. * We moved the **Mesh Quality** block to production version 1.0.0. The block calculates the mesh quality metrics such as orthogonality, skewness, and a composite mesh quality metric for FE Meshes, Volume Meshes, and Surface Meshes. You can also use it to identify intersecting elements in the input mesh. You can find this block in the Simulation ribbon under the Mesh section. * We updated the Modal Analysis Result type to shift the location of the eigenfrequency list from the Conversions section to the Properties section. The resulting frequency values from the Modal Analysis Block are now available in the Properties panel under *Properties > eigenfrequencies > List Elements* ![The eigenfrequencies property chip of the Modal Analysis block is now located under properties instead of conversions.](https://files.learn.ntop.com/help-articles/whats-new/Modal.png) #### Bug Fixes * We fixed an issue with the **CAD Body from Implicit Body** block that caused nTop to hang and become unresponsive if you canceled the block immediately after it started executing. * We fixed an issue with the **Perpendicular Distance** block that caused it to output the wrong field for any vector other than \<0, 0, 1>. Since the result was incorrect, we did not version the block. Version 1.0.0 now has this bug fix. * We fixed an issue with the **Abs** block that caused the result to have a 0 bounding box. ## Keywords: *new release notes whats 4.5* # nTop 4.6 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-6-what-s-new > [!NOTE] > > nTop 4.6 is here! This release features our new Implicit Body from Field Optimization (Beta) block, which lets you extract the Implicit Body from intermediate iterations of field optimization along with quality-of-life enhancements. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Implicit Body from Field Optimization (Beta)](#h-01h64d2w8jg1f4nt835ea5v1kw) * ### [Usage Improvements](#h-01h64d31jndex6k8n4gkakq4qx) * ### [Block Updates](#h-01h64d37xh9dkgrty7qv6v55ae) * ### [Bug Fixes](#h-01h64d3dvdzx330zzn0mz3yv1n) #### Implicit Body from Field Optimization (Beta) * With this block, users are able to extract geometry from intermediate iterations in the Field Optimization block. Users can input the desired iteration number and the component number in a multi-component optimization setup. The resulting type is an Implicit Body. * Block Name: Implicit Body from Field Optimization * Location: Beta > Field Optimization * Description: Extract an Implicit Body from a Field Optimization result. * Result: Result to extract body from. * Iteration: Iteration number which the Implicit Body will be extracted from. If not provided, the last iteration will be used. * Component number: Component number which the Implicit Body will be extracted from. If not provided, the first component will be used. * Output: Implicit Body ![An example of generating an implicit body using the Implicit Body from Field Optimization block. The body changes depending on the specified iteration value.](https://files.learn.ntop.com/help-articles/whats-new/ImplicitBodyfromFieldOptimization.gif) #### Usage Improvements * “Capture Image” will now default to the same directory that was last used so that when capturing multiple images, you won't have to navigate back to the prior directory for each. ![An image showing where to find the capture image function in the nTop menu. It is located under the view options.](https://files.learn.ntop.com/help-articles/whats-new/CaptureImage.png) #### Block Updates * We separated the **Remesh Surface** and the **Remesh Surface with Cyclic Symmetry** blocks which were previously overloads of each other. * We have released a newer 2.0.0 version of the **Slice Body to B\&W Image Stack** block, which resulted in a reduced block runtime compared to the previous version (1.2 - 10x). Due to the performance improvement, we removed the *Feature Size* input variable that is no longer needed. #### Bug Fixes * We fixed an issue with the **Remesh Surface with Cyclic Symmetry** block that prevented cyclically symmetric components from touching the symmetry axis when meshing. * We fixed an issue with the **Von Mises Stress Point Map** block that caused nTop to exit unexpectedly when importing an analysis result with isolated nodes. ## Keywords: *new release notes whats 4.6* # nTop 4.7 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-7-what-s-new > [!NOTE] > > nTop 4.7 is here! This release features quality-of-life improvements and bug fixes. Please scroll down to read more about them. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01h790c4wv4jmb2z011tcw7c3w) * ### [Block Updates](#h-01h790c97awjd9thedsx933r9w) * ### [Bug Fixes](#h-01h790ccq0hxe51jp85ezj3870) #### Usage Improvements * We updated our CAD interoperability library. With this upgrade, * We now support SolidWorks 2023 files. * We now support SolidWorks files in nTop Automate for Linux. * Users can now see the SolidWorks CAD Body names. * We have updated the nTop Plugin for EOSPRINT (Beta) to 0.2.1.3. Users can now adjust the slicing tolerance by adding 'config.json' (see below) in the plugin installation folder. ``` { "slice_feature_size": 0.00025 } ``` #### Block Updates * We updated the **CFD Boundary on FE Mesh** block with a 'Name' input to enable custom names for the Boundary defined in the block. When a user exports a \*.msh file from the **Export FE Mesh to CFD** block containing this block, it will write these custom names and their associated boundary types into the file. We also changed the 'Boundary type' input name to 'Type'. We currently do not support these capabilities for the \*.cgns file format. * We updated the **Export FE Mesh to CFD** block with a 'Wall Name' input. This update enables you to apply custom names for the wall boundary condition by default to all the exterior walls of a meshed model that does not have a boundary type assigned with the **CFD Boundary on FE Mesh** block. When a user exports a \*.msh file with this block, it will write the wall name. We currently do not support this capability for the \*.cgns file format. #### Bug Fixes * We fixed an issue where hovering over the ribbon or moving the application window would cause nTop to exit unexpectedly. * We fixed an issue where a block tooltip would linger on the screen after selecting results in the search menu dropdowns. * We fixed an issue where the nTop version label would not show when downloading an update of nTop. * We fixed an issue where meshing a highly complex implicit body would get stuck at 100% with no warning or error. ## Keywords: *new release notes whats 4.7* # nTop 4.8 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-8-what-s-new > [!NOTE] > > nTop 4.8 is here! This release comes with usage improvements and bug fixes. Scroll down to read more about them. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01h8emer98pg5zpvt5n513f7fe) * ### [Block Updates](#h-01h8emewpca1pf7zg5x32c2trr) * ### [Bug Fixes](#h-01h8emf0v8y09hyr3nde1hs2qs) #### Usage Improvements * We've added YZ / XZ / XY default plane buttons to Section Cut & Field Viewer Panels. * Normals of the default planes can be flipped by clicking the default plane button again or clicking the “Flip Normal” button in the Section Cut panel. ![A gif showing the default section cut views available when analyzing an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/SC.gif) #### Block Updates * We updated the **Section Body** Block to include an optional input for your part's minimum feature size. Use this input when the Implicit Body has thin walls or small features that aren't being captured in the Output Profile. *Note: The new input only affects the visualization and the Polygon property of the output. The implicit body/field is unchanged.* >
    **Before** **After**
    ![An example using the section body block before nTop 4.8. The cross section is missing portions of the body.](https://files.learn.ntop.com/help-articles/whats-new/before.png) The profile of a TPMS lattice with a wall thickness of 0.75 mm. The Profile output is incorrect, with many disconnected pieces. ![An example using the section body block in nTop 4.8. The cross section is no longer missing portions of the body due to the added min feature size input in the section body block.](https://files.learn.ntop.com/help-articles/whats-new/after.png) Setting the new Min. feature size input to 0.25 mm yields a better result.
    #### Bug Fixes * We fixed an issue where editing a Custom Block directly in a file would cause nTop to unexpectedly exit. * We fixed an issue where modifying inputs of a Custom Block in your MyBlocks folder and re-importing would cause nTop to unexpectedly exit. * We fixed an issue where an error would prevent you from switching between overloaded Custom Blocks in your MyBlocks folder. * We fixed an issue with the **Export FE Mesh to CFD** block generating a surface mesh with inverted face normals when exported in the \*.msh file format. ## Keywords: *new release notes 8 whats 4 4.8* # nTop 4.9 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-4-9-what-s-new > [!NOTE] > > nTop 4.9 is here! This release features our new transparency feature that helps you toggle and set the transparency value of a block and can be enabled from our new right-side panel, allowing you to inspect different objects without adding extra, unnecessary clicks. We also have an update to our unit system, which enables you to customize it. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Transparency](#h-01h9jxfcv0eybrk1rqp2wz499k) * ### [Right Side Panel](#h-01h9jxfcv1srwe5ghqhzm3349s) * ### [Unit Enhancements](#h-01h9jxfcv1y7ck4j5c79vs9dpa) * ### [Block Updates](#h-01h9jxfcv198341vc7b6g7w1nx) * ### [Bug Fixes](#h-01h9jxfcv1xc0chybsmq6136mq) #### Transparency We've added a display feature that allows you to toggle and set the transparency value of a block in the display panel. *(See the below Right Side Panel feature for where to find the display panel)* *![A gif demonstrating the Transparency feature in nTop. An implicit bodies' transparency can be changed in the display tab of the right side panel.](https://files.learn.ntop.com/help-articles/whats-new/20496767308947.png)* **What It Does:** The feature allows the user to change the display state of a rendered object in the scene from opaque to transparent. You can also adjust the value of the object's transparency should you find the default setting not ideal for your rendered view. Transparency can be enabled for any rendered object, so we encourage users to experiment with the feature and find valuable uses for their workflows. Here are a few great uses we've discovered for using transparency when working with complex geometry in nTop: * Inspect the internal geometry of any part. * Spot hidden or unintended internal features with ease. * Visually compare two or more objects. > [!TIP] > > **Tips:** * You can toggle transparency via the checkbox in the display panel or by using the keyboard hotkey **T**, with or without the display panel open. * When the transparency is toggled “on,” you can adjust the value of transparency with the slider or the numerical input located under the checkbox. * GPU acceleration setting does not have an impact on transparency #### Right Side Panel We've added a Right Side Panel to give you more easily accessible and viewable information and display settings when needed. ![The Right Side Panel contains a block's information and display settings.](https://files.learn.ntop.com/help-articles/whats-new/20496760074259.png) **What It Does:** There are currently two tabs within the Right Side Panel - Information and Display. The Right Side Panel will stay open until closed, allowing you to inspect different objects without adding extra, unnecessary clicks. * Information * You can now view the function information for a block. You can scroll through the Right Side Panel for blocks with numerous inputs that may run off the screen. The Right Side Panel will stay open until closed, enabling you to quickly understand block information as you select blocks in the notebook. * Most of the content from the existing Information tab of the Block Details flyout window was moved to the Right Side Panel except for the Block version dropdown and the caching dropdown, which will temporarily remain in the original location. * Display * You can now glance see and modify the view settings for a block. * Most of the content from the existing Display tab of the Block Details flyout window was moved to the Right Side Panel except for Simulation plots, which will temporarily remain in the original location. > [!TIP] > > **Tips:** * You can toggle the Right Side Panel via the icon at the top-right corner of the nTop application or by using the keyboard hotkey Ctrl + 2. Note: you can now toggle the Left Side Panel via the icon at the top-left corner of the nTop application or by using the new keyboard hotkey Ctrl + 1. * When the Right Side Panel is open, you can select the object in the viewport and view/modify the display setting more quickly. #### Unit Enhancements We've added capabilities to customize how units display in certain Simulation blocks. In the Units tab of the Settings window, you now have many more options to control the units in your file. ![A gif showing the unit settings in the main settings window in nTop.](https://files.learn.ntop.com/help-articles/whats-new/20496760082067.png) **What It Does:** In the Units tab of the Settings window, you will now see four separate sections with new capabilities: * Unit system * In addition to Metric and US Customary, there is now a “Custom” system where you can mix and match Metric and US Customary units of your choosing. * Base units * No changes here. * Compound units: You now have the ability to choose document units pertaining to: * Force * Pressure * Frequency * Heat flux * Thermal conductivity * Power * Energy/Torque * Specific Heat * Reset * At the bottom of the settings section, you can select “Reset” to reset any changes to the nTop defaults for your chosen Unit system. Note: When a “Custom” unit system is chosen, this will reset to the default Metric units. In addition to the above improvements, users will now see their Compound unit selection chosen in the Units tab of the Settings window display as the units in the following five Simulation blocks: * Isotropic Thermal Property * Orthotropic Thermal Property * Heat Generation * Surface Heat Flux * Point Moment #### Block Updates * The icon for Transformable types was changed (shown below) ![A before and after image showing the old Transform block icon and the new one.](https://files.learn.ntop.com/help-articles/whats-new/20496760088083.png) #### Bug Fixes * We fixed an issue with the **Distance Along Direction** block that caused it to output the wrong field for any vector other than \<0, 0, 1>. Since the result was incorrect, we did not version the block. Version 1.0.0 now has this bug fix. * We fixed an issue with blocks in the Notebook Inputs section that would not build when inputs were modified. * We fixed an issue where Custom Blocks created within a workflow and then exported did not show any sections upon re-import. * We fixed an issue with the error log not appearing in the correct position when the Left Side Panel was open. ## Keywords: *new release notes whats 4.9* # nTop 5.0 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-0-what-s-new > [!NOTE] > > nTop 5.0 is here! This major release includes our new implicit modeling kernel, parallel surface remeshing, and the ability to import implicit body features. This release also refreshes the viewport with CAD color import, customizable glyph colors, and right-click menus. Scroll down to read about all our new features, block updates, and usage improvements. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit support.ntop.com to gain access to helpful tutorials and support articles. * ### [Implicit Modelling Kernel](#h-01j0v8yt9fmep27jfzgz2arst2) * ### [Boolean Union and Boolean Subtract](#h-01j0v8yj3448drv5t4ccxptsqk) * ### [Import Implicit Body](#h-01j0v91ap4v3zma46nke46sgmh) * ### [Parallel Remesh Surface](#h-01j0v9367bvs34xhmbjc5c48zr) * ### [CAD Color](#h-01j0v9rzmbh9vzn2bsa636q1q7) * ### [View Setting Improvements](#h-01j0v9sytcvsk2f0w2j2mzgmfw) * ### [Right Click Menu Improvements](#h-01j0v9venh6drpfj49c9ykhzsh) * ### [JSON from Dictionary](#h-01j0v9xz404qyq2w8dmxmxyz74) * ### [Export JSON](#h-01j0v9ymap3qkvh327pe7aa3n5) * ### [Usage Improvements](#h-01j0v9zyfpn1vnsrhqpz6cvz2w) * ### [Block Updates](#h-01j0va0kfx5k765nzdse2bqdpb) #### Implicit Modelling Kernel * We updated the implicit kernel to perform implicit and field calculations in nTop with increased precision. For more information on this update and recommended actions, please refer to the New [Implicit Modeling Kernel](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-new-implicit-modeling-kernel) and [Outline of expected differences](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-outline-of-expected-differences) articles on our support landing page. #### Boolean Union and Boolean Subtract * The **Boolean Union** and **Boolean Subtract** blocks now run faster on large lists of primitive shapes, with up to 100x performance improvements and up to 1000x improvement for lists of 10,000 to 100,000 items and more. This includes downstream operations such as meshing and slicing. * When the Blend type input is set to “Sharp” (fastest), “Rounded”, or “Chamfered”, and the list of inputs contains primitive shapes (sphere, cylinder, cone, box, skewed box, point, torus), the Boolean block will run faster. #### Import Implicit Body * The **Import Implicit Body** block imports a \*.implicit file from a designated path. * Common uses: * Import an Implicit Body saved from any nTop workflow to use in your current workflow. * Validate/Inspect the file before sending it to an implicit interop partner. * Share an Implicit Body designed in nTop, removing your IP-containing nTop notebooks. * Block Name: Import Implicit Body * Location: Utilities > Exchange * Path: The input file path. ![A diagram showing how you can use the Export Implicit Body block to export an implicit from a workflow. You can then open a new workflow, and use the Import Implicit Body block to import the implicit.](https://files.learn.ntop.com/help-articles/whats-new/30550222524691.png) #### Parallel Remesh Surface * The **Parallel Remesh Surface** block re-meshes an existing surface mesh using parallel processing. * The algorithm automatically partitions the input mesh and pre-meshes each partition in parallel. The number of partitions is equal to the Max Threads input. * Block Name: Parallel Remesh Surface * Location: Beta > Simulation * Surface: Surface mesh to remesh. * Edge Length: The target edge length of the generated elements. * Shape: The element shape of the output mesh. * Span Angle: The maximum spanning angles for elements generated on curved surfaces. * Growth Rate: The rate at which the size of adjacent elements can grow. * Feature Angle: The maximum angle used to compute the preserved edges in the input surface automatically. * Min Edge Length: The minimum allowed edge length of the generated elements in the output mesh. * Chord Height: The maximum distance from the midpoint of an element edge to the input surface. * Min Feature Size: The minimum small feature size to control the deletion of small features. * Max Threads: The number of parallel threads the meshing algorithm uses. If not provided, the Max Threads will be set to the maximum available on the machine up to 32. * Output: Mesh >
      **Remesh Surface** **Parallel Remesh Surface**
      ![An example mesh generated using the Remesh Surface block.](https://files.learn.ntop.com/help-articles/whats-new/30550222549011.png) ![An example mesh generated using the Parallel Remesh Surface block.](https://files.learn.ntop.com/help-articles/whats-new/30550248830867.png)
    **Time** 67,239ms 16,323ms (16 Max Threads)
    #### CAD Color * We've added a display mode for viewing the colors of imported CAD geometry. You can still change it to a custom color by switching Display Mode to “Default Color.” ![An example of how to change the Import Part display to show the CAD colors instead of the default grey.](https://files.learn.ntop.com/help-articles/whats-new/30550634873491.png) #### View Setting Improvements * We've added a Visibility checkbox to the right-side panel so you can quickly see if the selected object is visible and change its visibility near the other view settings. * The FE Cylindrical Restraint type now has an option in the right-side panel to turn the visibility of the axis on and off. The axis will be on by default. * You can now change the color of simulation glyphs with a “Custom Color” Display Mode and return to the “Default Color” Display Mode. * We've moved the view settings for Unit Cells and Cell Maps from the HUD to the right-side panel for ease of use. * If you change any display settings and save your file, the settings will be saved when you reopen the file. ![A demonstration of how to change the simulation glyph color using the display tab.](https://files.learn.ntop.com/help-articles/whats-new/30550624015379.png) #### Right Click Menus in the Viewport * You can now use right-click menus in the viewport to perform convenient actions on selected objects, including Isolate, Visibility, Transparency, Field Viewer, Section Cut, Zoom to Fit, and Precise Render. * You can also click in the empty space in the viewport for general actions, including Field Viewer, Section Cut, Zoom to Fit, Capture Image, access Named views, Select All Visible, Show Grid, and Show Ruler. * Existing viewport right-click menus specific to CAD and Meshes are still available at the top of the right-click menu. ![A gif demonstrating how additional functionality has been added to the right click menu when right clicking in the nTop viewport.](https://files.learn.ntop.com/help-articles/whats-new/30664408960147.png) #### JSON from Dictionary * The **JSON from Dictionary** block converts a Dictionary\ input into a JSON format. * JSON files can now be created and exported from data within nTop using the Export JSON block, which is used upstream. * Block Name: JSON from Dictionary * Location: Beta > Create * Dictionary: Text-based Dictionary to convert into a JSON format. * Output: JSON #### Export JSON * Export a JSON file. * Combining this block and **JSON from the Dictionary** block enables exporting information in JSON format. * Block Name: Export JSON * Location: Beta > Create * File Path: System path of exported JSON file. * JSON: JSON to export * Output: JSON File Data ![An example of using the Export JSON block and opening the JSON file in Notepad.](https://files.learn.ntop.com/help-articles/whats-new/30552889867539.png) #### Usage Improvements * We have updated the Import CFD Analysis Result and Import Static Structural Result blocks to support importing \*.vtk files. * We've updated the selection color in the viewport to the same blue as the selection color in the notebook and outline for visual continuity. ![The image shows the updated highlight color in the viewport.](https://files.learn.ntop.com/help-articles/whats-new/30552877898899.png) #### Block Updates * We updated the [six native and eight toolkit blocks](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-meshing-updates-for-simulation-optimization) related to meshing and simulation due to a meshing library update. The previous versions of these blocks have been deprecated and removed from the software. The blocks, their function, the updated version, and the performance difference from the previous version are outlined in the following table: | **Block Name** | **Function** | **Updated Version** | **Impact** | | - | - | - | - | | Remesh Surface | Remesh an existing surface mesh | 1.2.0 | Minor differences in mesh output | | Remesh Surface with Cyclic Symmetry | Remesh an existing surface mesh while imposing cyclic symmetry | BETA 1.1.0 | Minor differences in mesh output | | Topology Optimization | Perform a density-based topology optimization using a SIMP (solid isotropic material with penalization) approach | 1.1.0 | Minor changes in results with no decrease in solution quality | | Field Optimization | Perform a field optimization | BETA 1.1.0 | Minor changes in results with no decrease in solution quality | | FE Volume Mesh from CAD | Create an FE Mesh of solid elements from a single CAD body | 1.3.0 | Minor differences in mesh output | | Single Body Topology Optimization | Perform a topology optimization on a single component | 1.1.0 | Minor changes in results with no decrease in solution quality | For more information on this update and recommended actions, please refer to the [Meshing updates for Simulation & Optimization](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-0-meshing-updates-for-simulation-optimization) article on our support landing page. * We have updated the **Topology Optimization** and **Field Optimization** blocks to include improved error messaging and have added a new optional Move Limit input for the **Topology Optimization** block. * The new Move Limit input adds an upper bound on how large a step in the optimization problem can be at each iteration. This can be used to help control the convergence for complicated topology optimizations. * When this input is left blank, the current heuristic, which depends on the chosen responses and constraints, will continue to be used. * The **Field from Point Map** block has been updated to simplify the “Interpolation” and “Extrapolation” options into one single “Interpolation” input. To match the previous behavior of “Extrapolation: None,” which produced a constant field of zero outside the part's convex hull, the If-Else block can be used along with the “Body” property of **Delaunay Volume Mesh**. * The **Radial Basis Field from Point Map** block has been updated to simplify the “Factor” and “Extrapolation” options into one single “Factor” input. To match the previous behavior of “Extrapolation: None”, which produced a constant field of zero outside the convex hull of the part, the If-Else block can be used along with the “Body” property of Delaunay Volume Mesh. * The **Export Implicit Body** block and **nTop Plugin for EOSPRINT** have been moved from Beta to Production. # nTop 5.1 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-1-what-s-new > [!NOTE] > > nTop 5.1 is here! This is a minor release with bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit support.ntop.com to gain access to helpful tutorials and support articles. * ### [Bug Fixes](#h-01j29jkde4cc5ywy6cxc5695hw) #### Bug Fixes * We fixed an issue that caused exporting entity/element sets of multi-component models to be corrupted if the entity/element set did not belong to the first **FE Component** of the **FE Model**. * We fixed an issue in the **Transient Thermal Analysis** block that prevented the initial temperature from being correctly applied, which in turn caused an error in calculating the Convection Boundary Load. * We fixed an issue with the **Stress Constraint** block when used in **Field Optimization**, which caused the field optimization to halt due to improper problem definition. ## Keywords: *new release notes whats 5.1* # nTop 5.10 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-10-what-s-new > [!NOTE] > > nTop 5.10 is here! This release comes with two new major features. Rib Design blocks allow you to project conformal patterns and then extrude the patterns into solid ribs. We are also introducing our new Surface Analysis view tool for overhang and draft angle inspection. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Rib Design \[Beta\] Tab](#h-01jce1y2khv1kwa0gmqq4fwy91) * ### [2D Unit Cell](#h-01jce1y2kh86p6d621n43fmn4m) * ### [Graph by Planar Projection](#h-01jce1y2khmdb7hb855fve9kb2) * ### [Graph by Cylindrical Projection](#h-01jce1y2khvm54dr3ymqtgk40e) * ### [Graph by Swept Projection](#h-01jce1y2khh6nn6kbr8wg16t0r) * ### [Graph on CAD Face](#h-01jce1y2khrdg614acycprer9m) * ### [Graph on Quad Mesh](#h-01jce1y2khdk159ftya3pj0cpk) * ### [Ribs from Graph](#h-01jce1y2kht3m6wbr4m056cayp) * ### [Blend Intersections](#h-01jce1y2kha80te5zwfb2sp3hk) * ### [Enhanced View Tools with new Draft and Overhang Angle Inspection](#h-01jce1y2kjnrkp1ggwwhgdqh0y) * ### [Property Highlighting](#h-01jce1y2kjvpzb1wsya647zxg4) #### Rib Design \[Beta] Tab * We added a new ribbon tab called Rib Design \[Beta]. This tab includes all the recommended blocks for Rib Design workflows. * Go to File > Settings to enable Beta blocks and check the Show Beta Blocks box. #### 2D Unit Cell * The **2D Unit Cell** block provides common 2D tessellation patterns as graph unit cells. The beams are located on one face of the domain and are designed for use in ribbing workflows. * Location: Rib Design \[Beta] > Create * Description: The selected Unit Cell for the graph generation workflow. This block is used as an input to graph projection blocks or “Periodic Lattice” on a CAD face or quad mesh. * Unit Cell: The selected unit cell for tessellation. * Orientation: The in-plane orientation of the unit cell. * Output: Volumetric Rule ![The 2D unit cell block with the unit cell input drop down expanded.](https://files.learn.ntop.com/help-articles/whats-new/35319060323603.png) #### #### Graph by Planar Projection * The **Graph by Planar Projection** block projects a graph in a constant direction to an implicit body. * Workflows: Rib Design Surface Latticing * Location: Rib Design \[Beta] > Create * Description: Creates a graph on the surface of an implicit body with planar projection. * 2D Unit Cell: Pattern used to create the graph on the body. * Body: Body on the surface of which to create the graph. * Frame: Frame that defines the orientation of the projection mapping. * Cell Length: Cell size in the length (Frame X axis) direction. * Cell Width: Cell size in the width (Frame Y axis) direction. * Reverse: Reverse the direction of projection. * Tolerance: Minimum feature size to accurately capture the boundary. * Output: Graph ![An example of using the Graph by Planar Projection block. The model shows a curved surface below a defined plane. The graph structure follows the curvature of the body it is being projected on.](https://files.learn.ntop.com/help-articles/whats-new/35319060330387.png) #### Graph by Cylindrical Projection * The **Graph by Cylindrical Projection** block projects a graph along a radial direction to an implicit body. * Workflows: Rib Design Surface Latticing * Location: Rib Design \[Beta] > Create * Description: Creates a graph on the surface of an implicit body with cylindrical projection. To set the map's orientation and position, use the Frame input. * 2D Unit Cell: Pattern used to create the graph on the body. * Body: Body on the surface of which to create the graph. * Frame: Frame that defines the orientation of the projection mapping. * Axial Height: Cell size in the axial direction. * Arc Count: Number of cells in the circumferential direction. * Reverse: Reverse the direction of projection. * Tolerance: Minimum feature size to accurately capture the boundary. * Output: Graph ![An example of using the Graph by Cylindrical Projection block. The model shows a cylindrical part with a conformal graph structure on its surface.](https://files.learn.ntop.com/help-articles/whats-new/35319043766291.png) #### Graph by Swept Projection * The **Graph by Swept Projection** block projects a graph along a radial direction relative to a centerline curve to an implicit body. * Workflows: Rib Design Surface Latticing * Location: Rib Design \[Beta] > Create * Description: Creates a graph on the surface of an implicit body with curved cylindrical projection based on a centerline curve. projection. To set the map's orientation and position, use the Frame input. * 2D Unit Cell : Pattern used to create the graph on the body. * Body: Body on the surface of which to create the graph. * Frame: Frame that defines the orientation of the projection mapping. * Axial Count: Number of cells in the axial direction. * Arc Count: Number of cells in the circumferential direction. * Centerline: Curve that defines the centerline of the projection mapping. * Reverse: Reverse the direction of projection. * Tolerance: Minimum feature size to accurately capture the boundary. * Output: Graph ![An example of using the Graph by Swept Projection block. The model shows a hollow curved cylindrical part with a conformal graph structure on its surface. There is a center spline traveling through the model that follows the same curvature as the model surface.](https://files.learn.ntop.com/help-articles/whats-new/35319060336787.png) #### #### Graph on CAD Face * This **Graph on CAD Face** block creates a periodic graph following the UV parameterization of a CAD face. * Workflows: Rib Design Surface Latticing * Block Name: Graph on CAD Face * Location: Rib Design \[Beta] > Create * Description: Creates a conformal graph to a CAD face. * 2D Unit Cell : Pattern used to create curves on the CAD face. * Face: Face on which to conform the graph. * Frame: Frame that defines the orientation of the projection mapping. * U Count: Number of cells in the U direction. * V Count: Number of cells in the V direction. * Output: Graph ![An example of using the Graph on CAD Face block. The model shows a curved CAD Face with a conformal graph structure on its surface.](https://files.learn.ntop.com/help-articles/whats-new/35319043783059.png) #### #### Graph on Quad Mesh * The **Graph on Quad Mesh** block creates a periodic graph on the faces of a quad mesh. * Workflows: Rib Design Surface Latticing * Location: Rib Design \[Beta] > Create * Description: Creates a graph that is conformal to a quad mesh. Note that the U and V orientations of individual cells will not be continuous. * 2D Unit Cell: Pattern used to create curves on the CAD face. * Face: Face on which to conform the graph. * Quad Mesh: Quad mesh that the graph will be generated from. * Output: Graph #### *An example of using the Graph on Quad Mesh block. The model shows a cylindrical model that has been quad meshed, with a conformal graph structure on its surface.* > [!NOTE] > > *Note: The U and V orientations of individual cells will not be continuous.* #### Voronoi Surface Graph * The **Voronoi Surface Graph** block creates a Graph from the Voronoi Diagram of a list of Points restricted to the surface boundary of a body. * Workflows: Rib Design Surface Latticing * Location: Rib Design \[Beta] > Create * Description: Creates a Graph from the Voronoi Diagram of a list of Points restricted to the surface boundary of a body. * Seed Points: List of Points to generate the Voronoi Graph from. * Mesh: Mesh to generate the Voronoi Graph on. * Output: Graph ![An example of using the Voronoi Surface Graph block. The model shows a cylindrical part with a conformal voronoi graph structure on its surface.](https://files.learn.ntop.com/help-articles/whats-new/35319060343315.png) #### #### Ribs from Graph * The **Ribs from Graph** block creates extruded ribs from a graph on an implicit body surface in a custom extrusion direction. * Workflows: Rib Design * Location: Rib Design \[Beta] > Create * Description: Create extruded ribs from a graph on an implicit body surface, and custom extrusion direction. * Graph: The graph to extrude into ribs * Body: The body on which the ribs will be joined downstream. This body determines the extrusion height in combination with the “Height” input. * Height: Rib height. * Thickness: Rib thickness. * Direction: The direction to extrude the ribs. To create ribs that follow the Body's normals, use the same input as the “Body” input. To use a custom direction, use another body, such as an axis or plane. * Minimum feature size: Minimum feature size to accurately capture boundary. * Output: Lattice ![An example of using the Ribs from Graph block. The model shows a wavy surface with a conformal ribs on its surface.](https://files.learn.ntop.com/help-articles/whats-new/35319043788307.png) #### #### Blend Intersections * The **Blend Intersections** block adds a blend radii between lattice beams to create a smoother transition. * Workflows: Rib Design * Location: Rib Design \[Beta] > Modify * Description: Add blend radii between lattice beams. * Lattice: The lattice to add blend radii to. * Blend Radius: Blend radius to apply to lattice vertices. * Blend Type: Type of blend between the lattice elements. * Output: Implicit Body ![An example of using the Blend Intersections block. The model shows ribs with an added blend radius at the vertices. ](https://files.learn.ntop.com/help-articles/whats-new/35319060345875.png) #### #### Enhanced View Tools with new Draft and Overhang Angle Inspection * The View Tools provide visualization options for inspecting geometry directly in the viewport, including the Section Cut and Field Viewer and the new Surface Analysis tool for overhang and draft angle inspection. * Location: The tools can be accessed with a new toolbar on the right side of the viewport or via the standard keyboard shortcuts. When a tool is activated, its settings appear in a new 'Tools' tab in the Right Panel, and the tool is highlighted in the toolbar. ![The image on the left shows the field viewer before nTop 5.10. The image on the right shows the new field viewer in nTop 5.10.](https://files.learn.ntop.com/help-articles/whats-new/35319060346899.png) * Overhang Angle * The overhang angle colors regions of your model where angles may exceed the printable threshold, helping you verify the design and identify regions needing support. ![An example of using the surface analysis tool to analyze a part for overhang angles.](https://files.learn.ntop.com/help-articles/whats-new/35319176440851.png) * Draft Angle * The draft analysis visualization colors areas of your model based on a specified draft angle relative to a pull direction (the draw direction of the mold), helping you verify that your design meets manufacturability requirements ![An example of using the surface analysis tool to analyze a part for draft angles.](https://files.learn.ntop.com/help-articles/whats-new/35319060349715.png) #### #### Property Highlighting * Upon hovering, this update displays a preview of each property in the viewport, providing immediate visual feedback as you navigate the properties panel. This will help you identify properties that you're looking for and determine the location of geometry without dragging it into the notebook. * Tip: we recommend setting the object to transparent when looking for properties in the view because the properties could be inside the object and may not be visible depending on your view. You can hide the object entirely, and the properties will remain displayed. ![A demonstration of the Property Highlighting feature in nTop. The example shows how dragging the mouse over property chips in the Closest Point in Body block, highlights the properties on the model.](https://files.learn.ntop.com/help-articles/whats-new/35319043807507.png) * *Note: The display of properties is limited to rendering performance, so it will display data types, including points, bounding boxes, line segments, arcs, circles, planes, and frames. It will display lists of these types up to 10,000 items, and lists over 10,000 will not appear on hover. It will also display individual items for axes, curves, polygons, and slices, but not lists. All other types will not display to preserve rendering performance.* ## Keywords: *release notes whats new project 2d ribbing 5.10* # nTop 5.11 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-11-what-s-new > [!NOTE] > > nTop 5.11 is here! This release features our new **Spring** block, a new FE Connector that creates a spring element between two Points. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Spring Block](#h-01jdj6b1e63tet7gmbwr0r4r6v) * ### [Block Updates](#h-01jdj6b1e6qz9h3tv4qg2h90pf) #### Spring \[BETA] * The **Spring** block creates a spring element between two Points. * The spring force is calculated using the formula F = K\*(u2-u1), where K is a stiffness tensor constructed from the stiffness inputs Kx, Ky, Kz, Kxx, Kyy, and Kzz. Vector u represents the displacement at a point, which includes both translational and rotational components. * Workflows where you could use this block: * To simulate a "Bushing/Bolt" in simulation, one would use Rigid/Flexible connectors to connect boundaries to points and a spring element between the points with the proper stiffness values. * When using the option to ground one of the points, you simulate a connection to a Rigid body outside the simulation. This is equivalent to using a spring element between two points and then applying a displacement restraint on the grounded point. * Location: Beta > Simulation * Point 1: Location of FE Component (point). * Point 2: Location of FE Component (point). * Ground Point 2: Bool Option to Ground Point 2. This option will apply a Displacement Restraint in all degrees of freedom to the point. * Kx: Stiffness value in x direction. * Ky: Stiffness value in y direction. * Kz: Stiffness value in z direction. * Kxx: Stiffness value rotating around the x-axis. * Kyy: Stiffness value rotating around the y-axis. * Kzz: Stiffness value rotating around the z-axis. * Frame: The reference frame for the components of the spring coefficients. The components are in the global coordinate system if a frame is not specified. * Output: FE Connector ![An example model setup using the Spring block.](https://files.learn.ntop.com/help-articles/whats-new/spring.png) #### Block Updates * We have moved the **Field Optimization** block and all the related Parametric FE Component blocks— **Parametric Lattice Component, Parametric Voronoi Component, Parametric Shell Component, Parametric Shell-Infill Component,** and **Parametric FE Model**—out of beta and to production. Read more about the effects of the changes [here](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-11-field-optimization-updates). >
      nTop 5.10 nTop 5.11
    Parametric Voronoi Component and subsequent Field Optimization ![A Parametric Voronoi Component in nTop 5.10.](https://files.learn.ntop.com/help-articles/whats-new/voronoi_510.png)![A Parametric Voronoi Component that has been Field Optimized in nTop 5.10.](https://files.learn.ntop.com/help-articles/whats-new/FO_voronoi_510.png) ![A Parametric Voronoi Component in nTop 5.11.](https://files.learn.ntop.com/help-articles/whats-new/voronoi_511.png)![A Parametric Voronoi Component that has been Field Optimized in nTop 5.11.](https://files.learn.ntop.com/help-articles/whats-new/FO_voronoi_511.png)
    Parametric Shell-Infill Component ![A Parametric Shell-Infill Component in nTop 5.10.](https://files.learn.ntop.com/help-articles/whats-new/shell_infill_510.png) ![A Parametric Shell-Infill Component in nTop 5.11.](https://files.learn.ntop.com/help-articles/whats-new/shell_infill_511.png)
    # nTop 5.12 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-12-what-s-new > [!NOTE] > > nTop 5.12 is here! This is a lighter release with block updates and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Block Updates](#h-01jf8vrt0pkn5jrt8brrnfg19s) * ### [Bug Fixes](#h-01jf8vrt0p8rwtv7c0nbvm1zdp) #### Block Updates * We have moved **Min Feature Size Constraint**, **Max Feature Size Constraint** and **Demold Constraint** blocks out of beta into production. #### Bug Fixes * We fixed an issue in the **Parametric Lattice Component** and **Parametric Shell-Infill Component** blocks that resulted in an incorrect geometry when using TPMS Unit Cells. ## Keywords: *release notes 5.12* # nTop 5.13 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-13-what-s-new > [!NOTE] > > nTop 5.13 is here! The last release of 2024 comes with block updates and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Block Updates](#h-01jfjk4q99jpcjbvky5416grgv) * ### [Bug Fixes](#h-01jfjk4q99bjjxbb4r4jdnzd2q) #### Block Updates * The **Transform Material**, **Combine Design Responses**, and **Reaction Force Response** blocks were moved from Beta to Production. #### Bug Fixes * We fixed an issue that caused nTop to exit unexpectedly when a **Point Attribute** was assigned to a volumetric **FE Mesh**. * We fixed an issue with the **FE Model** block that erroneously triggered an error when multiple spring elements were included in the Connector List. # nTop 5.14 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-14-what-s-new > [!NOTE] > > nTop 5.14 is here! This release features bug fixes and usage improvements. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01jhtxdtjj41d0y0svnmh6b82h) * ### [Block Updates](#h-01jhtxdtjjxyvwfaqree2cbfe0) * ### [Bug Fixes](#h-01jhtxdtjk6jfm9hfps13r6n34) #### Usage Improvements * We have added an Origin property to the Axis block. #### **Block Updates** * We have moved the **Pattern Repetition Constraint** and **Remap Constraint** blocks out of beta into production. #### **Bug Fixes** * We fixed an issue that caused **Topology Optimization** to error out in some cases when multiple **Rigid Connectors** were used in the input **FE Model**. * We fixed an issue with **Mesh from Implicit Body** that caused some components of the mesh larger than the *Min Feature Size* to be removed. To remove unwanted disconnected components in the new block version, use the *Min Feature Size* input or the combination of **Split Mesh** and **Filter** blocks. ## Keywords: *new what what's new what's* # nTop 5.15 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-15-what-s-new > [!NOTE] > > nTop 5.15 is here! This release features our new Relax Graph block, which lets you create a graph with a uniform beam length by relaxing the vertices of the input graph. Field Viewer has been updated to provide a more intuitive and efficient way to inspect field data. This release also comes with block updates and bug fixes. Scroll down to read more about them! * ### [Relax Graph](#h-01jjz919319h6xtav716nnr078) * ### [Field Viewer Improvements](#h-01jjz91931fjq32pg0zj1sg2w2) * ### [Block Updates](#h-01jjz919316zy1akt5zx0dg13w) * ### [Bug Fixes](#h-01jjz91932bp8tq13sz237mj1n) #### Relax Graph * The Relax Graph block performs a relaxation on a graph to create uniform beam lengths while keeping vertices on the surface of an implicit body. The block has optional inputs such as a minimum angle, a boundary volume, and a passive region, providing additional control for the distribution of the graph vertices. * This block is typically used in rib design and surface latticing workflows. The starting graph can come from graph projection, CAD face, or mesh. See the Rib Design tab for blocks to accomplish this. * Block Name: Relax Graph * Location: Rib Design \[Beta] > Create * Description: Perform a relaxation on the graph. This block will move the vertices to create uniform beam lengths. * Graph: The Graph to relax. * Surface: The surface which to constrain the graph vertices. Vertices starting within the domain Tolerance will be constrained to the surface of this body. * Max Iterations: The maximum number of iterations during the relaxation process. * Min Angle: The minimum angle between beams. The relaxation process will attempt to prevent any beam angles below this threshold. The input value should be between 0 and 180.0 degrees. * Volume: A secondary domain in the volume of which to constrain the graph vertices. This is typically a loop around the trimmed ends of the graph. Vertices will be able to move within this domain, but not away from it. * Tolerance: The maximum deviation outside the Domain. If no value is provided, the block will calculate a tolerance based on the graph. The input value should be always positive. * Move Limit: The maximum amount of movement per graph vertex between iterations. A smaller value may increase stability at the cost of a reduced convergence rate. If left unspecified, the block will calculate a move limit based on the graph. * Passive Region: Region in which all vertices are unmodified. All vertices within this region will have a displacement of zero. * Output: Graph ![An example demonstrating the Relax Graph block.](https://files.learn.ntop.com/help-articles/whats-new/38206406616723.png) #### Field Viewer Improvements * The Field Viewer has been updated to provide a more intuitive and efficient way to inspect field data, with improvements to the Display, Interactivity, and Colormap options. ![A gif showing an implicit body nozzle shape, with conformal ribs on its surface. The field viewer is turned on. The field plane is being moved across the yz plane to show how the field changes across the part.](https://files.learn.ntop.com/help-articles/whats-new/field_viewer.gif) * Transparency: The field display now defaults to semi-transparent, allowing you to inspect the field while keeping context visible. Opacity can be adjusted using the slider in the Tools panel. * Default Size & Position: The field plane size is automatically adjusted based on the current 3D scene view for better visualization for scalar fields or when right-clicking on an object to trigger the field viewer. Right-click will also center and orient the field plane based on where the object was clicked. A new reset button is available to update the size of the plane to fit the view in one click. * New Colormap: A new "Implicit" Colormap has been introduced for implicit bodies, improving the legibility of field data inside and outside the body. The "Turbo" Colormap is now the default for scalar fields, and the previous "Distance Field" Colormap is accessible in the "Colormap" input. * Isolines: Isolines are now enabled by default, and their visible interval is adapted as you zoom in/out, providing a clearer representation of field shapes. You can still set a custom interval and min/max value in the Tools panel. * Probe: The probe feature is now enabled by default. It highlights Isolines on hover, making it easier to inspect field data and see the shape of the field at any value. ![The image on the left shows the field viewer before nTop 5.15. The image on the right shows the new field viewer after nTop 5.15.](https://files.learn.ntop.com/help-articles/whats-new/field_viewer_update.png) #### Block Updates * We have updated our block versioning starting in nTop 5.15 to reflect the version in which the block was released or updated. For example, the **Relax Graph** block released with this version will have a block version of 5.15.0. You can learn more about block and software versions [here](/help-articles/knowledge-base/user-interface/how-do-ntop-block-and-software-versions-work). ![An example of the updated block versioning feature in nTop. Blocks are now versioned based on their release version of nTop.](https://files.learn.ntop.com/help-articles/whats-new/version.png) * We have moved the **3-Axis Milling Constraint** and **5-Axis Milling Constraint** blocks out of beta into production. * We have updated our **Import Static Structural Result** and **Import Static Thermal Result** blocks to support importing VTK Legacy format (\*.vtk). * We have updated our **Import CFD Analysis Result** to support importing VTK Unstructured Grid Files (\*.vtu) #### [Bug Fixes](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * We fixed an issue that caused the **Spring** block to unexpectedly exit when connected with a **Rigid Connector**. ## Keywords: *new what what's new what's* # nTop 5.16 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-16-what-s-new > [!NOTE] > > nTop 5.16 is here! This release features our new measurement tool. You can now directly measure distances between two points within your 3D model. Scroll down to read more about it. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit support.ntop.com to gain access to helpful tutorials and support articles. * ### [Measure Tool](#h-01jm34k7v0pdq93yfknhmsfwsp) * ### [Block Updates](#h-01jm34k7v02h06bx5eq4p94dda) #### Measure Tool * The Measure Tool lets you directly measure distances between two points within your 3D model. This feature is ideal for quick inspections and supports interactive visualization of distances along global X, Y, and Z axes. * You can activate it with the "M" hotkey or the toolbar button, click on any geometry in the viewport to set the first point, and click again for the second point. ![An example of using the measure tool on an implicit body. Select two points on the implicit body to measure the distance between them. The results are shown in the right side panel under the tools tab.](https://files.learn.ntop.com/help-articles/whats-new/measurement.gif) * The total distance and XYZ dimensions appear in the Right Panel, and you can check the "Show XYZ" checkbox to display dimension lines for X, Y, and Z in the 3D view. #### Block Updates * We have moved the **Dictionary** blocks out of beta into production. ## Keywords: *new what what's new what's* # nTop 5.17 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-17-what-s-new > [!NOTE] > > nTop 5.17 is here! This release features a block update for the Export CFD Mesh block. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit support.ntop.com to gain access to helpful tutorials and support articles. #### #### Block Updates * The **Export CFD Mesh** block was updated to throw a warning when multiple boundaries contain duplicate faces instead of an error. In such cases, the first CFD boundary that contains said faces will retain them, and the duplicates will be removed from the rest of the CFD boundaries. ## Keywords: *new what what's new what's* # nTop 5.18 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-18-what-s-new > [!NOTE] > > nTop 5.18 is here! This lighter release improves the Topology Optimization block. Stay tuned for big updates in the next release. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. #### [Usage Improvement](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * We have updated the **Topology Optimization** block to run without an Optimization Constraint list. To run a topology optimization without constraints, remove the default empty Optimization Constraint List. ## Keywords: *new what what's new what's 5.18* # nTop 5.19 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-19-what-s-new > [!NOTE] > > nTop 5.19 is here! This is a lighter release. We now officially support Windows 11 starting this release. We have major updates coming up. Stay tuned for the upcoming releases. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. #### [Supported Operating Systems](#h-01jqhah6ap63xrybz3fb4e2sva) * nTop will support the following operating systems: | Application | Supported Operating System | | - | - | | nTop (interactive environment) | - Windows 11 (64-bit Enterprise, Professional, and Education editions) | | nTop Automate (headless environment) | - Windows 11 (64-bit Enterprise, Professional, and Education editions) - Red Hat Enterprise Linux (RHEL) 8.9 (64-bit) | * We expect that nTop will continue to work on Windows 10, but with Microsoft's [announcement](https://www.microsoft.com/en-us/windows/end-of-support?r=1) to end mainstream support for Windows 10 later this year, we will no longer extensively test, support, or provide updates for Windows 10. ## Keywords: *new what what's new what's* # nTop 5.2 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-2-what-s-new > [!NOTE] > > nTop 5.2 is here! This is a minor release with CAD Color, now the default display mode, and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com) to gain access to helpful tutorials and support articles. ### Usage Improvements * We updated the CAD Color display mode, which is now the default view and includes CAD faces in addition to CAD parts and bodies. ### Bug Fixes * We fixed an issue that would cause nTop to become unresponsive when creating Lattices in some cases. * We fixed an issue where the body property of a transformed **Axis** was incorrect. * We fixed an issue with the **Implicit Body from Mesh** block and **Implicit Body from CAD Body** block that would create undesirable artifacts in some cases. * We fixed an issue that caused updating **Point Moment** to result in an error for a previously working Analysis or Optimization setup. * We fixed an issue with the **Rigid Connector** block, which caused nTop to exit unexpectedly. * We fixed an issue where right-clicking and dragging to rotate the view would change the selection. * We fixed an issue with the color of CAD geometry generated in nTop. ## Keywords: *what's new release notes 5.2* # nTop 5.20 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-20-what-s-new > [!NOTE] > > nTop 5.20 is here! This release features our new curve and profile modeling blocks, allowing more nTop modeling and enabling iteration of an entire design space. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Arc by Tangent](#h-01jrtvgp0gyk0bzakjm3vavkk8) * ### [Extruded Cut](#h-01jrtvgp0gqmp1ghw5mstz1vny) * ### [Polycurve from Curves](#h-01jrtvgp0grg1fr5kxc7fhvpbp) * ### [Polyline](#h-01jrtvgp0gkqdrc28vkgt14ydr) * ### [Profile from Curves](#h-01jrtvgp0g57dg4djs7shwjypc) * ### [Get CAD Faces by Name](#h-01jrtvgp0g1c8zy69an6f7dwws) * ### [Usage Improvements](#h-01kn9yea8bkacz274te2mcvnjv) * ### [Block Updates](#h-01jrtvgp0g3zay1d81w32j0rsn) * ### [Bug Fix](#h-01jrtvgp0g2pd40bds5mvs90fd) #### Arc by Tangent * The **Arc by Tangent block** creates an arc from a start point, tangent vector, and end point input. * Location: Create > Curves * Start Point: Start point of the arc. * Start Tangent: Vector representing the tangent direction of the arc at the start point. * End Point: End point of the arc. * Output: Arc ![An Arc by Tangent block with the arc it creates next to it.](https://files.learn.ntop.com/help-articles/whats-new/Arc_by_Tangent.png) #### Extruded Cut * The **Extruded Cut** block extrudes, and boolean subtracts a profile from a solid. The Profile will be cut through the entire Target Body input. * Location: Modeling > Operations * Profile: The profile to extrude and cut into the Target Body. * Target: The Implicit Body to cut * Blend Type: The Blend Type where the Profiles are cut from the Target Body. * Blend Radius: Radius of the blend. * Draft Angle: Draft angle applied to the extrusion. * Direction: Direction of extrusion. Uses the normals of the Profiles' plane by default. * Output: Implicit Body ![The extruded cut block cutting a hole through an example L bracket.](https://files.learn.ntop.com/help-articles/whats-new/Extruded_Cut.png) #### Polycurve from Curves * The **Polycurve from Curves** block combines a list of curves (connected set of arcs, lines, and splines) and creates a Polycurve. The input curve list should have shared endpoints. The input curves can be open or closed, planar or non-planar, but not disconnected or branching. * Location: Create > Curves * Curves: List of curves to join into a single polycurve * Output: Polycurve ![An example of generating a polycurve using the Polycurve from Curves block.](https://files.learn.ntop.com/help-articles/whats-new/Polycurve_from_Curves.png) #### Polyline * The **Polyline** block creates a polyline from an input list of points. * Location: Create > Curves * Points: List of points to connect with line segments * Output: Polycurve ![An example polyline generated using the Polyline block and a list of points.](https://files.learn.ntop.com/help-articles/whats-new/Polyline.png) #### Profile from Curves * The **Profile from Curves** block creates a single profile from an input list of curves. * Location: Create > Curves * Curves: List of Planar curves. * Normal: Direction to view the curve plane and orient open curves with respect to. * Output: Profile ![Three examples of profiles created using the Profile from Curves block.](https://files.learn.ntop.com/help-articles/whats-new/Profile_from_Curves.png) #### Get CAD Faces by Name * The **Get CAD Faces by Name** block extracts the CAD Faces from the CAD Body, Component, or Part based on the Face Name. * Location: Modeling > Utilities * Part: Part from which to get Faces. * Face Name: Name of faces to get. * Output: CAD Face List ![An Import Part block imports a cylinder CAD part. The Get CAD Faces by Name block is used to select the face with the name FIXED\_FACE. The model shows one face highlighted.](https://files.learn.ntop.com/help-articles/whats-new/Get_CAD_Faces_by_Name.png) #### Usage Improvements * We've implemented lazy loading for Toolkit blocks, resulting in faster initial load times. The Toolkit blocks will now load only when added to your nTop notebook. As a result, you may not see the start-up loader with a progress bar when you launch nTop. #### Block Updates * We have updated our curve and profile modeling blocks to allow more modeling in nTop. Many blocks have also been updated with name changes, input/output type changes, or both, but their behavior has not changed. This [support article](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-20-curve-and-profiles-update) has all the information regarding this update. | **Old Block** | **Old Output Type** | **New Block** | **New Output Type** | **Change** | | - | - | - | - | - | | Curve through Points | Curve (old) | Spline through Points | Spline | Updated Block | | Circle | Circle | Circle | Profile | Updated Block | | Curve Integral | Scalar | Curve Integral | Scalar | Updated Block *(input type change)* | | Equidistant Points on Curve | Point List | Equidistant Points on Curve | Point List | Updated Block *(input type change)* | | Extrude Profile | Implicit Body | Extrude Profile | Implicit Body | Updated Block *(input type change)* | | Graph by Swept Projection | | Graph by Swept Projection | Graph | Updated Block *(input type change)* | | Polygon from Points | Polygon | Profile from Points | Profile | Updated Block | | Regular Polygon | Polygon | Regular Polygon | Profile | Updated Block | | Revolve Profile | Implicit Body | Revolve Profile | Implicit Body | Updated Block *(input type change)* | | Section Body | Profile (old) | Section Body | Profile | Updated Block | | Surface Area | Scalar | Surface Area | Scalar | Updated Block *(input type change)* | | Sweep Profile | Implicit Body | Sweep Profile | Implicit Body | Updated Block *(input type change)* | | Implicit Body from Curve | Implicit Body | Property: Curve.Scalar Field | Scalar Field | Moved to Property | | Twisted Sweep Profile | Implicit Body | - | - | Deprecated Block *(Merged with Sweep Profile)* | | Loft between Profiles | Implicit Body | See support article FAQ | - | Deprecated Block | | Offset Profile | Profile (old) | - | - | Deprecated Block | * We have added the *Name* property to the CAD Face type to allow users to extract CAD Faces based on the Name. #### Bug Fix * We fixed an issue with the **Topology Optimization** block that errored out when multiple Flexible connectors shared nodes on an FE Boundary. # nTop 5.21 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-21-what-s-new > [!NOTE] > > nTop 5.21 is here! This release features our new blocks for creating and removing a temporary directory. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Temporary Directory](#h-01jsyhagxv8fzdhx9d7rzszkyn) * ### [Remove Temporary Directory](#h-01jsyhagxvhzr4typb8yehqyy1) * ### [Get Environment Variable](#h-01jsyhagxvrrrbv1r55awbsb1s) * ### [Usage Improvements](#h-01jsyhagxv980fzaxe9fsn22vk) * ### [Block Updates](#h-01jsyhagxvk2ss1734rrm2bdqp) * ### [Bug Fixes](#h-01jsyhagxvhb7r718v0ygrjdm5) #### Temporary Directory * The **Temporary Directory** block creates a temporary directory on disk. The returned Temporary Directory type contains the path. * Creating a temporary directory enables portable workflows by allowing the generation of intermediate files for external tools, temporary storage during meshing or simulation setup, and isolation of file outputs during batch processing—especially useful when sharing work across different machines or environments. * Location: Beta > Utilities * Rerun: A new temporary directory is generated when this input changes. Pass in a Group of all notebook inputs to ensure the block reruns any time a notebook input changes. * Output: Temporary Directory #### Remove Temporary Directory * The **Remove Temporary Directory** block deletes a temporary directory on disk, including any contained files. * The **Remove Temporary Directory** block can only be used to delete the temporary directory. nTop does not allow deleting arbitrary folders, which keeps things safe and scoped. * Location: Beta > Utilities * Temporary Directory: The temporary directory to remove * Wait For: The data that is required to be available before executing the block. * Output: File Path #### Get Environment Variable * The **Get Environment Variable** block returns the value of an environment variable. * Enables workflows to read environment variables from the OS — very useful for pulling paths to installed partner apps, detecting OS type, etc. * Location: Utilities > System * Name: The name of the environment variable * Required: An error will be raised if the specified environment variable is not set. If unchecked, an unset environment variable returns an empty Text object and raises a warning. * Rerun: The block reruns when this input changes. Pass in a Group of all notebook inputs to ensure the block reruns any time a notebook input changes. * Output: Text #### Usage Improvements * Profiles now have a Display > View Settings checkbox to turn the shaded fill on and off. * The Field Viewer Reset button will now recenter the plane to fit and resize the view. #### Block Updates * The **Run Command** Block has been updated to collect STDOUT beyond the 120-second limit. * The **Sweep** block has been updated to support Polycurves in the Curve input. #### Bug Fixes * We fixed an issue that caused nTop to unexpectedly exit when exporting a mesh via the right-click menu. ## Keywords: *new what what's new what's whats* # nTop 5.22 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-22-what-s-new > [!NOTE] > > nTop 5.22 is here! This is a minor release with under-the-hood improvements. Stay tuned for an upcoming big release. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Bug Fix](#h-01jsyhagxv8fzdhx9d7rzszkyn) * ### [Introduction to Modeling Course](#h-01jsyhagxvhzr4typb8yehqyy1) #### Bug Fix * We fixed an issue with **Profile from Curves** that caused some artifacts in rendering and the field viewer when GPU acceleration was turned on. #### Intro to Modeling Course * We have added a new course, [Intro to Modeling](https://learn.ntop.com/courses/intro-to-modeling/), on new modeling features. Revisit this course every few weeks to get the most up-to-date tutorials on our newest nTop modeling capabilities! ## Keywords: *new what what's new what's* # nTop 5.23 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-23-what-s-new > [!NOTE] > > nTop 5.23 is here! This major release features one of our most anticipated new nTop Fluids toolsets, bringing CFD into the iterative computational design loop. We also have new blocks to allow more nTop modeling. Scroll down to read more about the blocks and available resources to learn more about them. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [nTop Fluids](#h-01jvzgxed0xy89347xmezhcbmz) * #### [Flow Analysis](#h-01jvzgxed0vjqa915ntt8q2htf) * #### [Fluid Attribute](#h-01jvzgxed0gfdv8ms1pzfnyghq) * #### [Isotropic Fluid Property](#h-01jvzgxed0fecdsr0htm2c4zkz) * #### [Velocity](#h-01jvzgxed0s3rct9hdfkfqfkj4) * #### [Air](#h-01jvzgxed0dvw6fmf57w8rs33d) * #### [Water](#h-01jvzgxed04wv8mh9rgp1swxh3) * #### [Flow Analysis Results on Boundary](#h-01jvzgxed0z4r96nkq2nwx6bck) * ### [Modeling Blocks](#h-01jvzgxed0aesrz78f1hb84cdx) * #### [Rectangle](#h-01jvzgxed07j1xy4tk63f8n4d4) * #### [Rectangle by Points](#h-01jvzgxed0qnerh74bx8snq950) * #### [Slot](#h-01jvzgxed003snm3fx63jf9fw7) * #### [Slot by Points](#h-01jvzgxed0fbft56z9rjcxqkrh) * #### [Point along Curve](#h-01jvzgxed0gmfp5y7t51j7wk7v) * #### [Arc by Angle](#h-01jvzgxed00z0h4qhw96h6980j) * #### [Line by Direction](#h-01jvzgxed0dg8b77g75fjkay2y) * #### [Merge Profiles](#h-01jvzgxed0fgj57bxrvx5mzszb) * ### [Usage Improvement](#h-01jvzgxed08dd76a5dd85ghgxm) * ### [Block Updates](#h-01jvzgxed0wt66cbt38rwzg0v2) #### nTop Fluids * nTop Fluids is a new computational fluid dynamics (CFD) toolset integrated directly inside nTop. Eliminating the meshing and solving bottlenecks created by traditional tools, nTop Fluids brings CFD into the iterative computational design loop. * Workflows where you could use nTop Fluids: * Internal flow for heat exchangers, manifolds, and valves * Rapid iteration with GPU-solver and simplified meshing * Creation of training datasets for machine learning * You can access all the new toolset by enabling Beta and navigating to the new Fluids \[Beta] ribbon. To learn more about the setup and capabilities, visit our new section on the [Support site](https://support.ntop.com/hc/en-us/sections/41455255398547-Fluids) and our new [Learn course](https://learn.ntop.com/courses/flow-analysis/). ![The Fluids tab in the nTop ribbon.](https://files.learn.ntop.com/help-articles/whats-new/fluids_ribbon.png) #### Flow Analysis * Calculates the pressure and velocity on a Virtual Model. The solution uses the Lattice Boltzmann Method. * A transient simulation is initiated and continues until the flow reaches a statistically steady state, returning time-averaged pressure and velocity fields. * *Note: This block needs an NVIDIA GPU to run* * Location: Fluids \[Beta] > Analysis * Virtual Model: The Virtual Model represents the fluid domains to be simulated. * Boundary Conditions: The Boundary Conditions to be used for the analysis. At least one Pressure and one Velocity Boundary condition are required. * Cell Size: The size of the cells used in the analysis. Click on the Learn More link to find more information. * Output: CFD Analysis Result ![An example of using the Flow Analysis block.](https://files.learn.ntop.com/help-articles/whats-new/flow_analysis.png) #### Fluid Attribute * The **Fluid Attribute** block assigns the material properties as fluid attributes. * Location: Fluids \[Beta] > Material Information * Isotropic Material: The underlying material * Output: Fluid Attribute #### Isotropic Fluid Property * The **Isotropic Fluid Property** block defines an Isotropic Fluid Property. * Location: Fluids \[Beta] > Material Information * Kinematic viscosity: The fluid's kinematic viscosity * Output: Isotropic Fluid Property #### Velocity * The **Velocity** block is used to specify a fluid's velocity entering or leaving a domain. There is an overload in this block similar to other boundary conditions, to either use an Implicit Body or a CAD Face to select the boundary. * Location: Fluids \[Beta] > Boundary Conditions * Boundary: The boundary selected for constant velocity. * Velocity: Velocity Vector * Output: Velocity #### Air * General Purpose Air at NIST (293.15 K, 100 KPa) * Location: Fluids \[Beta] > Material Information * Output: Isotropic Material #### Water * General Purpose Water at NIST (293.15 K, 100 KPa) * Location: Fluids \[Beta] > Material Information * Output: Isotropic Material #### Flow Analysis Results on Boundary * Calculates the average flow property (pressure or velocity) on the input Boundary of the **Flow Analysis**. Use the same boundary in **Flow Analysis** for the correct property results. * Location: Fluids \[Beta] > Utilities * Result: The result from which to extract boundary values. * Property Field: Property field from Flow Analysis. * Boundary: Boundary to average Flow Analysis property on. The provided boundary must be the same as that used in the flow analysis. * Output: Scalar ![An example of using the Flow Analysis Results on Boundary block.](https://files.learn.ntop.com/help-articles/whats-new/flow_analysis_results.png) #### Modeling Blocks * We are releasing new modeling blocks, allowing more nTop modeling and enabling an entire design space iteration. #### Rectangle * The **Rectangle** block creates a rectangle profile from the input center point, length, and width. * Location: Create > Primitives * Center Point: Center point of the rectangle. If this does not lie on the Plane, it will be projected. * Length: Length of the rectangle along the X-axis. * Width: Width of the rectangle along the Y-axis. * Angle: Angle of the rectangle with respect to the X-axis. * Corner Radius: The circular radius to apply to the rectangle corners. The value will be queried from the Corner Radius field at the original Rectangle corners. If necessary, the value will be clamped to a valid range. * Plane: Plane to define the orientation of the Rectangle. If no Plane is provided, the global XY plane will be used. * Output: Profile ![An example of using the Rectangle block.](https://files.learn.ntop.com/help-articles/whats-new/rectangle.png) #### Rectangle by Points * The **Rectangle by Points** block creates a rectangle profile from the two input corner points. * Location: Create > Primitives * Point 1: Minimum corner point of the rectangle. If this does not lie on the Plane, it will be projected. * Point 2: Maximum corner point of the rectangle. If this does not lie on the Plane, it will be projected. * Corner Radius: The circular radius will be applied to the rectangular corners. The value will be queried from the Corner Radius field at the original Rectangle corners. If necessary, the value will be clamped to a valid range. * Plane: Plane to define the orientation of the Rectangle. If no Plane is provided, the global XY plane will be used. * Output: Profile ![An example of using the Rectangle by Points block.](https://files.learn.ntop.com/help-articles/whats-new/rectangle_by_points.png) #### Slot * The **Slot** block creates a slot profile from a center point, width, and height. * Location: Create > Primitives * Center Point: Center point of the slot. If this does not lie on the Plane, it will be projected. * Length: Length of the slot along the X-axis. Defined by the center-to-center distance of the two arcs. * Width: Width of the slot along the Y-axis. * Angle: Angle of the slot with respect to the X-axis. * Plane: Plane to define the orientation of the slot. If no Plane is provided, the global XY plane will be used. * Output: Profile ![An example of using the Slot block.](https://files.learn.ntop.com/help-articles/whats-new/slot.png) #### Slot by Points * The **Slot by Points** block creates a slot profile from the two end points. * Location: Create > Primitives * Point 1: Point 1 of the slot. If this does not lie on the Plane, it will be projected. * Point 2: Point 2 of the slot. If this does not lie on the Plane, it will be projected. * Width: Width of the slot. * Plane: Plane to define the orientation of the Rectangle. If no Plane is provided, the global XY plane will be used. * Output: Profile ![An example of using the Slot by Points block.](https://files.learn.ntop.com/help-articles/whats-new/slot_by_points.png) #### Point along Curve * The **Point along Curve** block creates a point at a specified distance along a curve. * Location: Create > Curves * Curve: Curve along which to create a point. * Distance: Distance along the curve to create the point. If this value is outside the range from zero to the length of the Curve, the point will be extrapolated. The extrapolation will be linear for Lines and Splines, and circular for Arcs. If Curve is a Polycurve, the extrapolation will be based on the type of segment at the corresponding endpoint. * Output: Point ![An example of using the Point along Curve block.](https://files.learn.ntop.com/help-articles/whats-new/point_along_curve.png) #### Arc by Angle * The **Arc by Angle** block creates an arc based on the input Center Axis, Start Point, and Angle. * Location: Create > Curves * Center Axis: Axis that goes through the center point. * Start Point: Start point of the arc. * Angle: Angle of the arc. It will be clamped to be within -360 ° and +360 °. * Output: Arc ![An example of using the Arc by Angle block.](https://files.learn.ntop.com/help-articles/whats-new/arc_by_angle.png) #### Line by Direction * The **Line by Direction** block creates a line based on the input point, direction, and length. * Location: Create > Curves * Point: Start point of the line segment. * Direction: Direction of the line segment. This vector will be normalized. * Length: Length of the line segment. * Centered: If checked, the line will be centered on the Point. * Output: Line ![An example of using the Line by Direction block.](https://files.learn.ntop.com/help-articles/whats-new/line_by_direction.png) #### Merge Profiles * The **Merge Profile** block combines multiple Profiles into a single Profile. * Location: Create > Curves * Profiles: Profiles to merge * Output: Profile ![An example of using the Merge Profiles block.](https://files.learn.ntop.com/help-articles/whats-new/merge_profiles.png) #### Usage Improvement * We have introduced a new Streamlines visualization, which enables you to intuitively view the CFD results. * View Settings is accessible in the Display tab of the Right Panel. * Seed count controls the number of streamlines. Increase the seed count for denser streamlines. * Specify Seed enables you to select a seeding region with the adjustable center point and radius. ![An example of the streamlines visualization for Flow Analysis.](https://files.learn.ntop.com/help-articles/whats-new/streamlines_1.png) ![An example of the streamlines visualization for Flow Analysis.](https://files.learn.ntop.com/help-articles/whats-new/streamlines_2.png) * We have updated the color of the blocks that output the Vector Field type to match that of the Scalar Field type. >
    **Before 5.23** **5.23**
    ![Vector Field blocks before nTop 5.23 had grey text.](https://files.learn.ntop.com/help-articles/whats-new/1_1.png) ![Vector Field blocks after nTop 5.23 have green text, the same as Scalar Field blocks.](https://files.learn.ntop.com/help-articles/whats-new/1_2.png)
    #### Block Updates * We have updated our simulation blocks to be compatible with different solvers in nTop. We have also updated the older Simulation ribbon to be Structures to align with the new simulation capabilities of nTop. Many blocks have also been updated with name changes, input/output type changes, or both, but their behavior has not changed. This [support article](/help-articles/knowledge-base/fluids/ntop-cfd-and-simulation-updates) lists all the blocks and toolkit blocks that have been updated with more information regarding this update. | **Old Block Name** | **New Block Name** | | - | - | | Boundary by Body | Virtual Boundary by Body | | FE Component (Mesh) | Solid Domain | | FE Face Boundary | FE Boundary by CAD Face | | FE Lattice Component | FE Lattice Domain | | FE Model | Simulation Model | | FE Solid Attribute | Solid Attribute | | FE Solid Component | FE Solid Domain | | Parametric FE Component | Parametric FE Domain | | Parametric Lattice Component | Parametric Lattice Domain | | Parametric Shell Component | Parametric Shell Domain | | Parametric Shell-Infill Component | Parametric Shell-Infill Domain | | Parametric Voronoi Component | Parametric Voronoi Domain | | Region by Body | Virtual Region by Body | * We have deprecated the older FE Component (Point Overload), which should be replaced with the new FE Point + Solid Domain in your workflow. >
    **Before 5.23** **5.23**
    ![The FE Component block with an FE Point Attribute inside of its Attributes input.](https://files.learn.ntop.com/help-articles/whats-new/1.png) ![A Solid Domain block with an FE Point in the Mesh input, and a Point Attribute block in the Solid Attribute List input.](https://files.learn.ntop.com/help-articles/whats-new/2.gif) ![A Spring block with two FE Point blocks in its Point 1 and Point 2 inputs.](https://files.learn.ntop.com/help-articles/whats-new/3.gif)
    * We updated the **Field Optimization** block to fix an issue that caused the Min Infill thickness to differ when results converged. ## Keywords: *new what what's new what's whats* # nTop 5.24 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-24-what-s-new > [!NOTE] > > nTop 5.24 is here! This release features new modeling blocks, allowing more nTop modeling and enabling iteration of an entire design space. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Implicit Body from Surface](#h-01jxwy4nva230409613pawa0nd) * ### [Implicit Body from Surface Boundary](#h-01jxwy4nvgre900y8pz744wzjn) * ### [Evaluate Surface](#h-01jxwy4nvkzsg5gxq8f132qn21) * ### [Distance to Curve from Axis](#h-01jxwy4nvq1sxxjejamdw3hwnz) * ### [Usage Improvements](#h-01jxwy4nvvsnkfqhbs6c72takv) * ### [Block Updates](#h-01jxwy4nvx00ht4rrdchjpt0cy) * ### [Bug Fixes](#h-01jxwy4nvzb0ww5m7cv97csfcx) #### Implicit Body from Surface * The **Implicit Body from Surface** block creates an implicit body from a surface with the zero-surface extending tangentially at the boundary. * Block Name: Implicit Body from Surface * Location: Utilities > Conversion * Surface: CAD Body, Mesh * Tolerance: Tolerance of conversion determined by the distance of the resultant Implicit Body to the surface of the CAD Body. * Output: Implicit body ![An example of using the Implicit Body from Surface block.](https://files.learn.ntop.com/help-articles/whats-new/ibsurface.png) #### Implicit Body from Surface Boundary * The **Implicit Body from Surface Boundary** block creates an Implicit Body with the zero-surface extending orthogonally at a surface boundary. * Block Name: Implicit Body from Surface Boundary * Location: Utilities > Conversion * Surface: CAD Body, Mesh * Tolerance: Tolerance of conversion determined by the distance of the resultant Implicit Body to the surface of the CAD Body. * Output: Implicit Body ![An example of using the Implicit Body from Surface Boundary block.](https://files.learn.ntop.com/help-articles/whats-new/ibsurfaceb.png) #### Evaluate Surface * The **Evaluate Surface** block creates a point at the corresponding U and V coordinates intrinsic to a CAD surface. * The **Evaluate Surface** block can be used for Flow applications, detailed rib design to locate points based on U and V coordinates. * Block Name: Evaluate Surface * Location: Utilities > Evaluate Surface * Surface: Surface to evaluate. * U: U parameter to evaluate. This value will be clamped to the range \[0,1]. * V: V parameter to evaluate. This value will be clamped to the range \[0,1]. * Output: Point ![An example of using the Evaluate Surface block.](https://files.learn.ntop.com/help-articles/whats-new/evaluatesurface.png) #### Distance to Curve from Axis * The **Distance to Curve from Axis** block computes the signed distance from a planar curve to an axis. The curve must behave like a function relative to the axis, meaning it has exactly one output distance for each input along the axis. * The **Distance to Curve from Axis** block can be used for generating variable offset fields and creating directional parameterization fields. * Block Name: Distance to Curve from Axis * Location: Modeling > Evaluation * Curve: The input 3D curve (must be planar with the axis). * Axis: The axis to measure distance to. Encapsulates origin and direction. * Direction: The direction along which to measure the distance. * Output: Scalar Field ![An example of using the Distance to Curve from Axis block.](https://files.learn.ntop.com/help-articles/whats-new/distancetocurve.png) #### Usage Improvements * We have added the ability to right-click on point and vector inputs to convert them into blocks quickly The converted block will retain existing inputs, including properties. * We have added Right-click on list inputs to easily add and rearrange list items. ![The gif demonstrates how block list orders can be changed using the right click menu. By right clicking a list item, the item can be moved up or down in the list order.](https://files.learn.ntop.com/help-articles/whats-new/rightclick.gif) * We have moved the Light mode out of Beta into Production. #### Block Updates * We have updated the **Extrude Profile** block to add a shelled extrusion overload. * We have updated the **Shell** block to support a scalar field thickness value. * We have updated the **Twist** block to support a scalar field twist rate value. * We have updated the Curves property on the Slice type to Polycurve. * Note: For backward compatibility, a block will be inserted into the notebook where the Curves property was previously used. #### Bug Fixes * We fixed an issue with the **Split Mesh** block that caused empty meshes to be returned in some rare cases. ## Keywords: *new what what's new what's* # nTop 5.25 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-25-what-s-new > [!NOTE] > > nTop 5.25 is here! This is a minor release with a new course launch and user dashboard improvements. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [nTop Foundations](#h-01jz0zgg5xcbav12tkhrgkts44) * ### [User Dashboard Improvements](#h-01jz0zgg5zkd9rc5gg7p54mnr2) #### nTop Foundations * We have added a new foundational course to establish the essential knowledge and skills you need to develop your nTop expertise. Completing these lessons will build a solid foundation supporting your continued growth and success with nTop. * Enroll in the course by following the [link](https://learn.ntop.com/courses/ntop-foundations/). #### User Dashboard Improvements * We have updated the [nTop User Dashboard](https://app.ntop.com/settings) to include Learn Live licenses. It is now easier for users to verify their access and for Org Admins to issue access to new users. Please find instructions [here](/help-articles/access-and-installation/accounts-and-licensing/how-do-you-check-for-learn-live-access). ![The organization tab on app.ntop.com. The licenses tab is showing how Learn Live licenses now appear.](https://files.learn.ntop.com/help-articles/whats-new/ll1.png)![Learn Live licenses now appear in the account settings tab of app.ntop.com if you have a license assigned to you.](https://files.learn.ntop.com/help-articles/whats-new/ll2.png) ## Keywords: *new what what's new what's* # nTop 5.26 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-26-what-s-new > [!NOTE] > > nTop 5.26 is here! This release features our new primitive blocks for Rounded Box, Rounded Cylinder, and Capsule. We are also releasing our new curvature display mode, which makes it easier for you to visualize the surface curvature of your geometry. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Rounded Box](#h-01k09qca67kjer5jbfj7scmj62) * ### [Rounded Cylinder](#h-01k09qca6brfr96a03e8tdhytz) * ### [Capsule](#h-01k09qca6e7dc2zv1xztph1p2q) * ### [Curvature Analysis](#h-01k09qca6jgg0hnmkr7ftfydx8) #### Rounded Box * The **Rounded Box** block creates a box with rounded corners from a center point, three length inputs, and an edge radius. * Use this block to quickly create base design space, enclosures, or other box-like shapes that require smooth, filleted edges. * Location: Create > Primitives * Center Point: Center Point of the box. * Length: Length of the box along the X-axis. * Width: Length of the box along the Y-axis. * Height: Length of the box along the Z-axis. * Radius: Radius applied to the edges of the box. * Output: Implicit Body ![An example of the Rounded Box block.](https://files.learn.ntop.com/help-articles/whats-new/rounded_box.png) #### Rounded Cylinder * The **Rounded Cylinder** block creates a cylinder from two point inputs and their corresponding radii. * Use this block to quickly model objects like pipes, pins, or shafts with smooth, filleted edges in a single step. * Location: Create > Primitives * Point 1: Point 1 of the cylinder. * Point 2: Point 2 of the cylinder. * Radius: Radius of the cylinder. * Cap Radius: Radius applied to the top and bottom faces of the cylinder. * Output: Implicit Body ![An example of the Rounded Cylinder block.](https://files.learn.ntop.com/help-articles/whats-new/rounded_cylinder.png) #### Capsule * The **Capsule** block creates a capsule from two point inputs and the radius. * Use this block to quickly model objects like housings, pins, or shafts with smooth, rounded ends in a single step. * Location: Create > Primitives * Point 1: Point 1 of the capsule. * Point 2: Point 2 of the capsule. * Radius: Radius of the capsule. * Output: Implicit Body ![An example of the Capsule block.](https://files.learn.ntop.com/help-articles/whats-new/capsule.png) #### Curvature Analysis * **Curvature** display mode has been added to the Surface Analysis View Tool, allowing you to visualize the surface curvature of your geometry. * Two styles are available: * Metallic: Renders the geometry with a shiny, reflective surface, which improves the clarity of curvature and surface quality. * Zebra: Displays a series of alternating black and white stripes on a surface. The reflection patterns of these stripes indicate the surface's curvature. You can select from three buttons to choose the orientation of the stripes and use a slider to adjust their spacing. * Location: View Tools > Surface Analysis > Curvature ![An example of using the Surface Analysis feature in the Curvature mode.](https://files.learn.ntop.com/help-articles/whats-new/curvature_analysis.gif)![An implicit body with the Surface Analysis feature toggled. The mode is set to Curvature and the style is metallic.](https://files.learn.ntop.com/help-articles/whats-new/curvature_analysis_2.gif) ## Keywords: *new what what's new what's* # nTop 5.27 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-27-what-s-new > [!NOTE] > > nTop 5.27 is here! This release features our new Mesh from Implicit by AT block, which uses an adaptive tessellation algorithm. We have added the ability to resize the notebook as well. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Mesh from Implicit by AT](#h-01k191x9h5enbcb0cn9k468m4x) * ### [UV Field from Surface](#h-01k191x9hb8v3w0hmt6ephmmcb) * ### [Usage Improvements](#h-01k191x9hdb85dr0m6j8spac15) #### Mesh from Implicit by AT * The **Mesh from Implicit by AT** block generates a mesh from an implicit body input using Adaptive Tessellation. * Compared to the traditional **Mesh from Implicit Body** method, Adaptive Tessellation significantly reduces computational and memory overhead, especially when finer tolerances are required, and yields fewer self-intersections. * The **Mesh from Implicit by AT** block achieves this by generating large mesh faces in flatter or less complex regions and maintaining small faces where higher fidelity is needed, resulting in a lower overall triangle count. * Location: Beta > Utilities * Body: Implicit Body to convert. * Tolerance: The maximum allowable deviation of the Mesh from the implicit geometry. The resulting mesh will be more precise as this value gets smaller, but the block will take longer to compute. * Max Edge Length: This variable specifies the largest mesh edge size. Setting this variable too small may prevent filtering out fine features. * Output: Mesh ![An example of meshing using the Mesh from Implicit by AT block.](https://files.learn.ntop.com/help-articles/whats-new/mesh_from_implicit_by_at.png) #### UV Field from Surface * The **UV Field from Surface** block creates a closest-point UV parameterization vector field from an input CAD face. The output range will be 0 to 1 from edge to edge in the U and V directions. * Location: Utilities > Conversion * Surface: Surface to create the implicit body from. * Tolerance: Tolerance of conversion is determined by the distance of the resultant Implicit Body to the surface of the CAD Body. * Output: Vector Field #### Usage Improvements * Resizing Notebook: Hover over the right side of the notebook and drag to adjust its width. Double-click to reset the size back to the default. ![Users can change the width of their notebook by dragging the side wall.](https://files.learn.ntop.com/help-articles/whats-new/resizing_notebook.gif) * Nautical Miles: You can now use Nautical Miles (nmi) as a unit in any numerical input. * To set this as the notebook unit for length, go to Settings > Units > Metric > Base Units > Length = 'nmi' * We have updated the domain of streamlines to be hidden by default, with an option to "Show Domain" in the Object Display Settings. This will show the domain at low opacity so the streamlines are legible. ## Keywords: *new what what's new what's* # nTop 5.28 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-28-what-s-new > [!NOTE] > > nTop 5.28 is here! This release features our new Spline by Tangents block, allowing you to create curves with defined tangent directions. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit support.ntop.com to gain access to helpful tutorials and support articles. * ### [Spline by Tangents](#h-01k2deccnkq1v9y7g942vmfnq9) * ### [Block Updates](#h-01k2deccnrh93wjyet52s0xr3m) #### Spline by Tangents * The **Spline by Tangents** block constructs a cubic spline through points with tangent controls. * This block creates smooth, precise curves that pass through specified points and have defined tangent directions at those points. It is helpful in design, modeling, and simulation where exact curve control is needed, such as defining precise paths or profiles for implicit surface modeling. * Block Name: Spline by Tangents * Location: Create > Curves * Points: Ordered list of points to pass the curve through. The curve will be closed if the start and end points are the same. * Tangents: Tangent vectors of the spline at each point. The magnitude of this value will determine the distance to the adjacent control points. * Output: Spline ![An example of the Spline by Tangents block.](https://files.learn.ntop.com/help-articles/whats-new/spline_by_tangents.png) #### Block Updates * The **FE Volume Mesh from CAD** and **FE Shell Mesh from CAD** blocks now include a Preserved Nodes input. This allows you to select specific nodes to be retained in the resulting mesh. We have updated the Preserved Faces input. If left empty, the block preserves all CAD face edges by default. * The **Remesh Surface** and **Volume Mesh** blocks have been updated with a Preserved Nodes input to ensure selected boundary nodes are kept in the resulting mesh. ## Keywords: *new what what's new what's* # nTop 5.29 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-29-what-s-new > [!NOTE] > > nTop 5.29 is here! This release features the Import Superelements block, allowing you to import and use stiffness and mass matrices to represent domains in your nTop simulations and optimizations. We've also added Conic and Cubic Bezier blocks to create smooth, mathematically precise curves and surfaces. Finally, the notebook description and comments now support markdown format, allowing you to add rich text and hyperlinks to your workflows and custom blocks! As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Import Superelement](#h-01k3hkakntczr90kjd9h1k023f) * ### [Conic](#h-01k3hkaknzks9kd9s4ktvz8pm0) * ### [Cubic Bezier](#h-01k3hkakp3wnnpr4tgmbjx2axy) * ### [Markdown Support](#h-01k3hkakp6q7qdh1h9qxxcndk7) * ### [Simplified nTop Automate Setup on Linux](#h-01k3hkakp8kfhh8f08xkppqm6e) #### Import Superelement * The **Import Superelement** block imports a .bdf and .fem file to represent structural components that serve as efficient building blocks in larger nTop simulations. * You can use superelements when developing a simulation or optimization workflow for efficiently modeling multi-component assemblies with repetitive components (e.g., bolts, brackets, etc.) and/or complex subcomponents that don't require in-depth analysis in nTop but can be captured via representative matrices. You can use superelements to develop hierarchical analyses and systems-level studies. * Location: Beta > Analysis Exchange * DMIG File: Path to the .bdf file containing the superelement's stiffness, mass properties, and external grid IDs. * Grid File: Path to the .fem file defining the global coordinates of the superelement's external grid points * Unit System: The unit system used for the imported superelement. This ensures consistent translation of its properties into the current analysis unit system. * Output: Superelement ![An example of the Import Superelement block](https://files.learn.ntop.com/help-articles/whats-new/superelements.png) #### Conic * The **Conic** block creates an Implicit Body defined by an implicit conic section curve. The signed distance of a planar conic segment will be returned. The block uses three control points (Point 1, Point 2, and Point 3) and a Rho (ρ) value to define the curve's shape. * Enables designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Location: Create > Primitives * Points 1, 2, and 3: Control Points for the Conic. The Z component will be ignored. * Rho: Rho value of the Conic in the range (0,1). * Output: Implicit Body ![An example of using the Conic block.](https://files.learn.ntop.com/help-articles/whats-new/conic_example.png) #### Cubic Bezier * The **Cubic Bezier** block creates an Implicit Body whose boundary is formed by a smooth, implicit cubic Bézier curve. Four input points control the shape of the curve. * Enables designing aerodynamic profiles for wings, fuselages, and other vehicle bodies. * Location: Create > Primitives * Points 1, 2, 3, and 4: Control Points. The Z component will be ignored. * Output: Implicit Body ![An example of using the Cubic Bezier block.](https://files.learn.ntop.com/help-articles/whats-new/cubic_bezier_example.png) #### Markdown Support * Markdown is now supported in comments and notebook descriptions. After editing, text with markdown syntax will be recognized and rendered as markdown. * This functionality can be used for notebook self-documentation, richer block descriptions, tables, embedded hyperlinks, and more. ![A notebook description before Markdown Support was added to nTop.](https://files.learn.ntop.com/help-articles/whats-new/markdown_0.png)![An nTop notebook description with Markdown Support added.](https://files.learn.ntop.com/help-articles/whats-new/markdown_1.png) #### Simplified nTop Automate Setup on Linux * We have streamlined the setup process for using nTop Automate on Linux. Starting in version 5.29, several LD\_LIBRARY\_PATH exports are no longer required, simplifying the environment configuration. Learn more about nTop Automate for Linux [here](/help-articles/knowledge-base/ntop-automate/ntop-automate-for-linux-update). * Before 5.29 ![Before nTop 5.29, nTop Automate for linux required additional library paths to be specified.](https://files.learn.ntop.com/help-articles/whats-new/before.png) * After 5.29 ![After 5.29, ntop automate for linux no longers requires specifying the additional library paths.](https://files.learn.ntop.com/help-articles/whats-new/after.png) ## Keywords: *new what what's new what's* # nTop 5.3 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-3-what-s-new > [!NOTE] > > nTop 5.3 is here! This release features our new **Mesh from Implicit Body 2** block, which uses our new experimental approach and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Mesh from Implicit Body 2 \[Beta\]](#h-01j4hvr8g9nee39ase0edmey0z) * ### [Block Updates](#h-01j4hvr8g9j5www3688k244p2s) * ### [Bug Fixes](#h-01j4hvr8g991s7msrwb2hktxk6) #### Mesh from Implicit Body 2 \[Beta] A new, experimental approach to meshing implicit bodies. * Block Name: Mesh from Implicit Body 2 * Location: Beta > Utilities * Description: Convert an Implicit Body to a Mesh * Body: Implicit Body to mesh. * Tolerance: The maximum allowable deviation of the Mesh from the implicit geometry. * Output: Mesh An example of a mesh generated with the new Mesh from Implicit Body 2 block. ![An example of a mesh generated with the new Mesh from Implicit Body 2 block.](https://files.learn.ntop.com/help-articles/whats-new/mesh_2.png) #### Block Updates * We have updated the **Unit System** block to include units for *Pressure, Frequency, Heat Flux, Thermal Conductivity, Power, Energy/Torque, Specific Heat, Volumetric Heat Generation, Convection Coefficient, and Density* for CAE Interoperability. If Compound units are not provided, the base units (Length, Mass, Time, Temperature) will be used to construct the Compound units. ![The updated Unit System block that now has additional optional inputs for measurement values.](https://files.learn.ntop.com/help-articles/whats-new/unit_system.png) #### Bug Fixes * We fixed an issue with the **Equidistant Points on Curve** block that caused portions of the curve to contain no points. * We fixed an issue with the **Translate Object** block that caused translation to be lost when using the Implicit Body from Voxel Grid block. * We fixed an issue with the **Surface Area** block that caused the result to be outside the relative error in certain cases. * We fixed an issue with the **Mesh from Implicit Body** block that caused the block to fail with an error in certain cases when sharpening was turned on. * We fixed an issue with the **Export FE Model** block that caused temperature units to be exported in Kelvin regardless of the units specified in the unit system block. * We fixed an issue with the **Cyclic Symmetry** that caused an error when processing cyclic symmetry. * We have updated the error message on the **Topology Optimization** block when zero-volume elements are detected to a warning message so that you can still run it. We highly recommend that element size be reasonable and uniform across the design space and that you use the *Min Feature Size* input to avoid zero-volume elements in your mesh. ## Keywords: *new release notes whats 5.3* # nTop 5.30 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-30-what-s-new > [!NOTE] > > nTop 5.30 is here! This release introduces several powerful new simulation and modeling capabilities, including porous media modeling for heat exchangers and filtration systems, infinite implicit hatching with viewport clipping controls, and an intuitive expression evaluation block for simplified mathematical operations. Additional geometry creation tools have been added for parametric modeling, along with usage improvements and block optimizations to enhance the overall user experience. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Porous Media](#h-01k4df64gwkkhfz0kjna7mcb28) * ### [Infinite Implicit Hatching](#h-01k4df64h2sc42kbfq7jyyzfrt) * ### [Evaluate Expression](#h-01k4df64h5yx8pzwtye5rz5mbs) * ### [Point between Points](#h-01k4df64h9yy477t5cf383n0ys) * ### [Offset Plane](#h-01k4df64hcnt43wp7v5h20m9dc) * ### [Point in Frame](#h-01k4df64hh13krymafkjtx5vjm) * ### [Two Body Field](#h-01k4df64hmdv4tr1q7fe544ys3) * ### [Usage Improvements](#h-01k4df64hr5xsq7smt92cyb9tt) * ### [Block Updates](#h-01k4df64hsce46rcjzv74jj43d) #### Porous Media The **Isotropic Porous Medium Property** block enables porous media modeling in nTop Fluids. This property for the fluid attribute is critical for allowing several key, large-scale application cases that were previously out of reach. * Common applications for the property are: * Heat Exchangers: Simulating large-scale heat exchangers where explicitly modeling the complex internal geometry is computationally prohibitive. * TPMS Homogenization: Analyzing the bulk flow of Triply Periodic Minimal Surfaces (TPMS) and other complex lattice structures through homogenization. * Filter Simulation: Modeling flow through various types of filtration media to predict pressure drop and performance. * Block Name: Isotropic Porous Medium Property * Location: Fluids > Material Information * Permeability: Permeability. * Forchheimer Parameter: Forchheimer coefficient (non-Darcy permeability). * Output: Isotropic Porous Medium Property #### Infinite Implicit Hatching * Infinite Implicit Hatching addresses the challenge of visualizing infinite implicit surfaces by introducing viewport clipping controls and visual feedback. This feature helps you work with implicits extending infinitely in one or more dimensions by allowing them to clip these surfaces to the current viewport for better visualization and navigation. * The new cross-hatch visualization clearly shows clipped regions (green for front faces, blue for back faces), making it easier to understand which portions of infinite geometry have been cut away. You can toggle viewport clipping on/off and update the clipping region as they move around their model. * If a bounding box is set using “Set Bounding Box”, then that will override the behavior but will still display the cross-hatch visualization if the bounding box clips the geometry. * Location: Right Side Panel > Display ![An example of the Infinite Implicit Hatching display.](https://files.learn.ntop.com/help-articles/whats-new/implicithatch_1.gif) #### Evaluate Expression * The new **Evaluate Expression** block allows you to write mathematical expressions using familiar syntax instead of having to construct complex calculations using multiple interconnected blocks. This makes creating, reading, and editing engineering expressions easier. * Block Name: Evaluate Expression * Location: Math > Utilities * Expression: Expression to evaluate. * Dimensionality: A scalar variable representing the expected dimensionality to which the expression should evaluate. * Variables: A variable to use inside the expression. * Output: Scalar Field #### Point between Points * The new **Point between Points** block creates a point linearly interpolated between two points. This is useful for setting up parametric geometry and datums. * Block Name: Point between Points * Location: Create > Vectors * Point 1: First point to be interpolated. * Point 2: Second point to be interpolated. * Output: Point #### Offset Plane * The new **Offset Plane** block creates a plane specified by an offset from another plane. This is useful for setting up parametric geometry and datums. * Block Name: Offset Plane * Location: Create > Vectors * Plane: Plane to offset. * Distance: Negative or positive distance to offset the Plane. * Output: Plane #### Point in Frame * The new **Point in Frame** block creates a point within the local coordinates of a Frame. This is useful for setting up parametric geometry, subsystems, and datums. * Block Name: Point in Frame * Location: Create > Vectors * Description: Create a point at specified local coordinates within a Frame. * X: Local X component of the Point. * Y: Local Y component of the Point. * Z: Local Z component of the Point. * Frame: Frame in which to create the Point. * Output: Point #### Two Body Field * The new **Two Body Field** block creates a linear interpolation field between two bodies. This can be used to create a parameterization field from the surface of one implicit body to another. * Block Name: Two Body Field * Location: Fields > Utilities * Implicit A: The first implicit. Values of the resulting field will be equal to -1 at the surface of this implicit. * Implicit B: The second implicit. Values of the resulting field will be equal to 1 at the surface of this implicit. * Output: Scalar Field ![An example of how the Two Body Field block operates.](https://files.learn.ntop.com/help-articles/whats-new/twobodyfield_1.png) #### Usage Improvements * Optimization plots are now exposed in the Bottom Panel, where you view tables, rather than the Right Side Panel. #### Block Updates * We have updated **Distance to Curve from Axis** to remove discretization artifacts and provide a smoother result for downstream lofting operations. * We have added a new **Ray Cast** block that now defaults to a Beta *Implicit Body* overload rather than a *Voxel Grid*, allowing you to cast straight to implicit geometry without discretizing. * We have added a new overload to **JSON from Dictionary** block that accepts a list of *Scalar* variables as *values*. ## Keywords: *new what what's new what's whats* # nTop 5.31 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-31-what-s-new > [!NOTE] > > nTop 5.31 is here! This release features a new 2D Vector Field as a block and a 3D vector field property and includes a new option to limit the number of threads utilized in parallel processing. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [2D Vector Field](#h-01k5s7a3g0d4jkfcnvxx0q2t3k) * ### [Usage Improvements](#h-01k5s7a3g926q5tgm24bbqra53) * ### [Block Updates](#h-01k5s7a3gbrj823r53nddwww64) #### 2D Vector Field * The **2D Vector Field** block outputs a 2D vector field type consisting of two scalar field components. This type is an R3 to R2 mapping, whereas the existing Vector Field type is an R3 to R3 mapping. * Spatially varying profiles and 2D implicit modeling for fuselage shaping, airfoil design, and duct design. * Block Name: 2D Vector Field * Location: Math > Vectors * Description: Create a 2D vector field from scalar field components. * X: The X component of the vector field as a scalar field. * Y: The Y component of the vector field as a scalar field. * Output: 2D Vector Field ![An example of using the 2D Vector Field block.](https://files.learn.ntop.com/help-articles/whats-new/2D_vector_field.png) #### Usage Improvements * We've added three new properties to the Vector Field type for quick access. The three new properties (XY, YZ, and ZX) output the new 2D Vector Field type. * We've added a new command-line option, --maxthreads or -m, to limit the number of threads nTop and nTop Automate use for parallel processing. ![All of the available commands in ntop automate shown in the command prompt.](https://files.learn.ntop.com/help-articles/whats-new/maxthreads.png) #### Block Updates * The **Conic** block has been updated to use the new 2D Vector Field type. * The **Cubic Bezier** block has been updated to use the new 2D Vector Field type. ## Keywords: *new what what's new what's* # nTop 5.32 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-32-what-s-new > [!NOTE] > > nTop 5.32 is here! This release features our new Aircraft Flow Analysis block, which enables CFD simulation for aerodynamic evaluation. We also updated the Markdown support to include images and GIFs for richer documentation. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Aircraft Flow Analysis](#h-01k6n1wcyy5xst5fd80nfdp2yg) * ### [Filter Cell Region](#h-01k6n1wcz6zcr73jxksjtv1crb) * ### [Markdown Support Update](#h-01k6n1wcz8re58t1t510zvfvn0) * ### [Block Update](#h-01k6n1wcza1985xbtxx6jer17d) #### Aircraft Flow Analysis * The **Aircraft Flow Analysis** block calculates the aerodynamic performance of an Implicit Body using a Lattice Boltzmann Method (LBM) simulation. It performs a transient simulation that runs until the flow reaches a statistically steady state, returning time-averaged pressure and velocity fields, as well as surface forces. * Common uses: * Calculating lift, drag, and moments on aircraft wings, fuselage sections, or complete assemblies. * Generating pressure and velocity fields to visualize flow behaviours. * Quickly assessing the impact of geometric changes (e.g., wing modifications, control surface adjustments) on overall aerodynamic performance. * Location: Fluids > Analysis * Aircraft Body: The implicit body used for aerodynamic evaluation. * Mach Number: The Mach number of the freestream. * Temperature: Defines the temperature of the freestream. * Pressure: Defines the pressure of the freestream. * Angle of Attack: The angle between the body reference line and the airflow direction. * Cell Size: The size of the cells used in the analysis. * Output: CFD Analysis Result * *Note: This block requires an NVIDIA GPU for computation* ![The Aircraft Flow Analysis block.](https://files.learn.ntop.com/lessons/what-can-you-do-with-ntop/Aircraft.gif) ![Example simulation results from running an Aircraft Flow Analysis.](https://files.learn.ntop.com/help-articles/whats-new/aircraft_1.png) * *Note: This capability is currently applicable only to subsonic flows (speeds up to Mach 0.7)* #### Filter Cell Region * The **Filter Cell Region** block creates a list of points representing the center of elements for an imported CFD Analysis Result. This Point list is explicitly filtered by the Region identifier you provide, allowing you to isolate and analyze data from a particular volume of the computational domain. * Common uses: * Isolating a specific region of the fluid domain (e.g., the wake region behind a body) for detailed post-processing and analysis. * Location: Fluids > Utilities * CFD Analysis Result: Cell region point list for the result * Region: Only include points with this region ID * Output: Point List #### Markdown Support Update * We've added support for images and GIFs within comments and notebook descriptions. * This functionality can be used for notebook self-documentation, richer block descriptions, tables, embedded hyperlinks, and more. * To insert an image, use one of the following methods: right-click and select Insert Image, paste a copied image, or drag and drop a local file. * *Note on Pasting: If copying from a web source provides only a URL instead of the image data, the image will not paste directly into the notebook. In this situation, you must first save the image to your local file system and then drag and drop or insert the saved file.* * Supported Formats are .png, .jpg, .jpeg, .bmp, .gif, and .svg. * Images are stored internally in their original format, including their original size. They are automatically scaled according to the width of the notebook in which they are visible and cannot be manually scaled. ![A demonstration of how nTop notebooks now support markdown, and the ability to expand/collapse the size of the notebook.](https://files.learn.ntop.com/help-articles/ntop-automate/notebook.gif) #### Block Update * We have enabled the Embed functionality in the **Import Superelement** block. ## Keywords: *new what what's new what's whats* # nTop 5.33 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-33-what-s-new > [!NOTE] > > nTop 5.33 is here! This release introduces new blocks for advanced surface modeling. We're excited to introduce three new sweep blocks: Conic Section Sweep, Conic Section Sweep by Tangent, and Cubic Bezier Section Sweep, giving you the control to create complex, blended surfaces. This release also includes the new Inline Custom Block feature for faster debugging and the Project Curve to Plane block, which enables the creation of 2D profiles from 3D geometry. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Conic Section Sweep](#h-01k81c3n00wdkrfss8eg5yz3nj) * ### [Conic Section Sweep by Tangent](#h-01k81c3n05e309a972n5en7jcn) * ### [Cubic Bezier Section Sweep](#h-01k81c3n0ahp3981cv2b9w4msk) * ### [Project Curve to Plane](#h-01k81c3n0gnqxbq315v20ggthy) * ### [Inline Custom Block](#h-01k81c3n0m5wektf7dbdfvn3ev) * ### [Usage Improvements](#h-01k81c3n0pbrj5sv4kj1pjnh7t) * ### [Block Updates](#h-01k81c3n0p3e6g7a5cmwy5e6dp) * ### [Bug Fixes](#h-01k81c3n0vv0f86kr2s35zptwj) #### Conic Section Sweep * The **Conic Section Sweep** block creates an implicit body by sweeping a conic implicit section along a spine curve between two rail curves. * A spatially varying Rho field controls the shape of the conic section. * This block is ideal for creating smooth surfaces with no inflections in workflows where the guide rails lie on perpendicular planes. * Location: Beta > Modeling * Inputs: * Rail 1 (Curve): The first boundary curve that guides and constrains one side of the swept conic section as it travels along the spine. * Rail 2 (Curve): The second boundary curve that guides and constrains the opposite side of the swept conic section as it travels along the spine. * Spine (Line): A line that defines the sweep path and orientation for the conic section as it moves between the two rail curves. * Rho (Scalar Field, Optional): A scalar field (0 to 1) that controls the conic shape factor at each point, where 0.5 produces a parabola, values less than 0.5 create elliptical sections, and values greater than 0.5 create hyperbolic sections. * Output: Implicit Body ![An example of using the Conic Section Sweep block.](https://files.learn.ntop.com/help-articles/whats-new/conic_section_sweep.png) #### Conic Section Sweep by Tangent * The **Conic Section Sweep by Tangent** block creates an implicit body by sweeping a conic implicit section along a spine curve between two rail curves. * The tangent fields provide additional control over the curvature at the rails. * Location: Beta > Modeling * Inputs: * Rail 1 (Curve): The first boundary curve that guides and constrains one side of the swept conic section as it travels along the spine. * Rail 2 (Curve): The second boundary curve that guides and constrains the opposite side of the swept conic section as it travels along the spine. * Spine (Line): A line that defines the sweep path and orientation for the conic section as it moves between the two rail curves. * Tangent 1 (Vector Field, Optional): A vector field that specifies the direction of the Conic tangent handle at rail 1 for each point along the spine. * Tangent 2 (Vector Field, Optional): A vector field that specifies the direction of the Conic tangent handle at rail 2 for each point along the spine. * Rho (Scalar Field, Optional): A scalar field (0 to 1) that controls the conic shape factor at each point, where 0.5 produces a parabola, values less than 0.5 create elliptical sections, and values greater than 0.5 create hyperbolic sections. * Output: Implicit Body ![An example of using the Conic Section Sweep by Tangent block.](https://files.learn.ntop.com/help-articles/whats-new/conic_section_sweep_by_tangent.png) #### Cubic Bezier Section Sweep * The **Cubic Bezier Section Sweep** block creates an implicit body by sweeping an implicit cubic Bézier section along a spine between two rail curves. * The curve's shape is precisely controlled by spatially varying tangent vector fields and their magnitudes at each rail. * The tangent vector fields define the direction of the Bézier control handles, while the magnitude fields control their lengths, offering detailed control over the surface's curvature where the guide rails lie on perpendicular planes. * Location: Beta > Modeling * Inputs: * Rail 1 (Curve): The first boundary curve that guides and constrains one end of the swept cubic Bézier curve as it travels along the spine. * Rail 2 (Curve): The second boundary curve that guides and constrains the opposite end of the swept cubic Bézier curve as it travels along the spine. * Spine (Line): A line that defines the sweep path and orientation for the cubic Bézier curve as it moves between the two rail curves. * Tangent 1 (Vector Field, Optional): A vector field that specifies the direction of the Bézier tangent handle at rail 1 for each point along the spine. * Tangent 2 (Vector Field, Optional): A vector field that specifies the direction of the Bézier tangent handle at rail 2 for each point along the spine. * Tangent Magnitude 1 (Scalar Field, Optional): A scalar field that controls the length of the tangent handle at rail 1, affecting the curve's pull toward that tangent direction. The tangent magnitude is relative to the in-plane distance between the rails. * Tangent Magnitude 2 (Scalar Field, Optional): A scalar field that controls the length of the tangent handle at rail 2, affecting the curve's pull toward that tangent direction. The tangent magnitude is relative to the in-plane distance between the rails. * Output: Implicit Body ![An example of using the Cubic Bezier Section Sweep block.](https://files.learn.ntop.com/help-articles/whats-new/cubic_bezier_section_sweep.png) #### Project Curve to Plane * The new **Project Curve to Plane** block that lets you project a 3D curve to a Plane, flattening it into a planar curve. * Common uses: * Implicit surfacing workflows * Location: Modeling > Utilities * Inputs: * Curve: Curve to project. * Plane: Plane to project to. * Output: Curve ![An example of using the Project Curve to Plane block.](https://files.learn.ntop.com/help-articles/whats-new/project_curve_to_plane.png) #### Inline Custom Block * You can now "unzip" a Custom Block directly within your nTop notebook. The Inline Custom Block feature replaces the Custom Block with its internal contents, allowing you to quickly inspect, modify, or debug its logic without having to open the block in a separate file. Values in the Custom Block's inputs prior to inlining will be linked directly to the downstream blocks previously inside the Custom Block.. * To use this feature, right-click on any Custom Block in your notebook and select **Inline Custom Block** from the context menu. ![An example of using the Inline Custom Block feature.](https://files.learn.ntop.com/help-articles/whats-new/inline_custom_block.gif) * *Note: If a Custom Block contains other nested Custom Blocks, the nested blocks will not be unzipped.* #### Usage Improvements * You can now use the hotkey Ctrl+Shift+Left Arrow to collapse all sections in the notebook. #### Block Updates * The **Pull Points to Plane** block has been renamed to **Project Points to Plane** for clarity and consistency. #### Bug Fixes * We have fixed an issue where an extra /n (newline character) was incorrectly added to the description when creating input\_template.json file using nTop Automate. ## Keywords: *new what what's new what's* # nTop 5.34 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-34-what-s-new > [!NOTE] > > nTop 5.34 is here! This release introduces Parameter Optimization (inverse design), a robust new optimization located in its own ribbon. This release also includes usability upgrades, such as the ability to view plot data directly from tables and new floating comments for better notebook organization. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Parameter Optimization Ribbon](#h-01k8x7rxpzwd9ytgef9x271y8j) * ### [Parameter Optimization](#h-01k8x7rxq26s4nyhg58ak26tms) * ### [Parameter Objective](#h-01k8x7rxq94fecantgjkrp92st) * ### [Parameter Constraint](#h-01k8x7rxqh30bmq0m2t8wwk17g) * ### [Constant Parameter](#h-01k8x7rxqp6gw5tnkp5bcm1zfk) * ### [Independent Parameter](#h-01k8x7rxqvz9hcb45eke3b7s4v) * ### [Dependent Parameter](#h-01k8x7rxr1gkd84q4fn5fc629j) * ### [Design Parameters from Optimization](#h-01k8x7rxr5debr822c5q8vnhbx) * ### [Evaluate Parameter](#h-01k8x7rxr8695d9tet2mwjc3vj) * ### [Tracked Parameters from Optimization](#h-01k8x7rxrcckda7mdzw9z79zxx) * ### [Usage Improvements](#h-01k8x7rxrgyjkh5vdad6hsp8m3) * ### [Block Update](#h-01k8x7rxrxeae8ac3ccj2vas13) #### [Parameter Optimization Ribbon](https://qa.app.ntop.com/release-notes) * Parameter optimization, also known as inverse design, determines the set of parameters that yield an optimal outcome for a specified objective function, subject to defined constraints. * This new feature is available in its own Parameter Optimization ribbon, which gathers all the necessary blocks to set up and run an optimization study. ![Ribbon](https://files.learn.ntop.com/help-articles/whats-new/parameter_optimization_ribbon.png) #### [Parameter Optimization](https://qa.app.ntop.com/release-notes) * The **Parameter Optimization** block runs an optimization algorithm to find the optimal collection of Design Parameters satisfying the Objective while satisfying all Constraints. * *Note: We recommend not making Parameter Optimization a variable to avoid a known issue of handling parameter group inputs while contained in a variable* * Location: Parameter Optimization > Optimization * Inputs: * Objective: The objective function for the optimization process. * Constraint Type: The constraints to satisfy during the optimization process. * Design Parameters: The collection of Parameters the algorithm will change in its search for the optimal solution. * Algorithm: The specific optimization method to be used. This dictates how the block will search for the optimal solution. * Max Iterations: The maximum number of iterations allowed during the optimization process. * Tracked Parameters: Additional Parameter to be tracked and logged during the optimization process. This is useful for debugging and detailed analysis. * Output: Parameter Optimization Result ![The Parameter Optimization block](https://files.learn.ntop.com/help-articles/whats-new/parameter_optimization.png) #### [Parameter Objective](https://qa.app.ntop.com/release-notes) * The **Parameter Objective** block specifies a goal for Parameter Optimization. The objective guides the optimizer on the desired outcome. * Location: Parameter Optimization > Composition * Inputs: * Goal: Optimization goal (Minimize or Maximize). * Parameter: Parameter used to define the optimization objective. * Output: Parameter Objective ![The Parameter Objective block](https://files.learn.ntop.com/help-articles/whats-new/parameter_objective.png) #### [Parameter Constraint](https://qa.app.ntop.com/release-notes) * The **Parameter Constraint** block defines a condition that a Parameter must satisfy. Parameter Constraints can be used to enforce limits on the Parameter to determine a valid solution space. * Location: Parameter Optimization > Composition * Inputs: * Parameter: Parameter to be constrained. * Constraint Type: Constraint operator (Less Than or Greater Than). * Value: Minimum or Maximum value for constraint. * Output: Parameter Constraint ![The Parameter Constraint block](https://files.learn.ntop.com/help-articles/whats-new/parameter_constraint.png) * *Note: Use the **Parameter Constraint Group** block to combine more than one constraint.* #### [Constant Parameter](https://qa.app.ntop.com/release-notes) * The **Constant Parameter** block creates a parameter with a fixed value. It is used to define a constant design variable that does not change during optimization, serving as a placeholder for a specific, unchanging value in an optimization problem. * Location: Parameter Optimization > Composition * Inputs: * Label: Unique identifier of the parameter. * Value: Default value of the parameter. * Output: Parameter ![The Constant Parameter block](https://files.learn.ntop.com/help-articles/whats-new/constant_parameter.png) * *Note: Use the **Parameter Group** block to combine more than one parameter.* #### [Independent Parameter](https://qa.app.ntop.com/release-notes) * The **Independent Parameter** block creates an independent optimization parameter that can vary within optional bounds during optimization. * Location: Parameter Optimization > Composition * Inputs: * Label: Unique identifier of the parameter. * Default Value: Default value of the parameter. * Lower Bound: Minimum allowed value of the parameter. * Upper Bound: Maximum allowed value of the parameter. * Output: Parameter ![The Independent Parameter block](https://files.learn.ntop.com/help-articles/whats-new/independent_parameter.png) * *Note: Use the **Parameter Group** block to combine more than one parameter.* #### [Dependent Parameter](https://qa.app.ntop.com/release-notes) * The **Dependent Parameter** block creates a Dependent Parameter whose value is computed from other Parameters using a specified Function. * Location: Parameter Optimization > Composition * Inputs: * Label: Unique identifier of the parameter. * Function Object: The Function Object evaluated to produce the output Parameter's value. * Input Parameters: Parameters defining Function Object inputs. The group elements correspond to the Function Object inputs by Index. * Output: Parameter ![The Dependent Parameter block](https://files.learn.ntop.com/help-articles/whats-new/dependent_parameter.png) * *Note: Use the **Parameter Group** block to combine more than one parameter.* #### [Design Parameters from Optimization](https://qa.app.ntop.com/release-notes) * The **Design Parameters from Optimization** block extracts all design parameters at a specific iteration from a Parameter Optimization result. * Location: Parameter Optimization > Utilities * Inputs: * Result: Result to extract the design parameters from. * Iteration: The Iteration number from which the Parameter Group will be extracted. If not provided, the last iteration will be used. * Output: Parameter Group ![The Design Parameters from Optimization block](https://files.learn.ntop.com/help-articles/whats-new/design_parameters.png) #### [Evaluate Parameter](https://qa.app.ntop.com/release-notes) * The **Evaluate Parameter** block computes the value of a Dependent Parameter for a specified collection of input parameters with constant or known values. * Location: Parameter Optimization > Utilities * Inputs: * Dependent Parameter: Dependent Parameter to be evaluated. * Input Parameters: Inputs used to evaluate the Dependent Parameter. If no inputs are provided, default values assigned during composition will be used. * Output: Parameterizable ![The Evaluate Parameter block](https://files.learn.ntop.com/help-articles/whats-new/evaluate_parameter.png) #### [Tracked Parameters from Optimization](https://qa.app.ntop.com/release-notes) * The **Tracked Parameters from Optimization** block extracts all Tracked parameters at a specific iteration from a Parameter Optimization result. * Location: Parameter Optimization > Utilities * Inputs: * Result: Result to extract the tracked parameters from. * Iteration: The Iteration number from which the Parameter Group will be extracted. If not provided, the last iteration will be used. * Output: Parameter Group ![The Tracked Parameters from Optimization block](https://files.learn.ntop.com/help-articles/whats-new/tracked_parameters.png) #### [Usage Improvements](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * You can now add a Comment that is not associated with a block by right-clicking in the notebook and selecting "Add Comment". You can also right-click an existing comment and select "Detach Comment" to remove its association from a block. >
    Before 5.34 After 5.34
    ![Before nTop 5.34, comments had to be attached to specific blocks in the notebook.](https://files.learn.ntop.com/help-articles/whats-new/before_comment.png) Previously, a placeholder variable was required to add comments in the notebook. ![In nTop 5.34, comments can be detached from blocks and placed anywhere in the notebook.](https://files.learn.ntop.com/help-articles/whats-new/after_comment.png)
    * You can now visualize Table data as a 2D plot. To access this feature, click the View Data button in the Display tab of the Right Panel and select the Show Plot button. Use the dropdown menus for the X-axis and Y-axis, which correspond to the table headers, to choose your data. ![Table data can now be visualized as a 2D plot using the display tab.](https://files.learn.ntop.com/help-articles/whats-new/view_plot.png) #### [Block Update](https://qa.app.ntop.com/release-notes) * We have updated the **Extract Optimization History** block to support Parameter Optimization as well. ## Keywords: *new what what's new what's whats* # nTop 5.35 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-35-what-s-new > [!NOTE] > > nTop 5.35 is here! This is a light release featuring simulation enhancements, including a new method to initialize pressure fields for Flow Analysis using the Bernoulli equation for more accurate results. We've also improved memory estimation to help you more accurately predict resource requirements for complex flow analysis. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01ka9gzg2x1b4bjmbcxzp2xcnj) #### Usage Improvements * For external aerodynamics simulations, pressure is now initialized based on the Bernoulli equation. This method uses the local velocity to compute a pressure field, providing a more physically accurate starting point for the solver. * Memory estimation has been enhanced to more accurately predict resource requirements before running a flow analysis. * The default view for the CFD Analysis Head's Up Display (HUD) has been updated to Pressure time-averaged instead of the earlier Pressure initial. ## Keywords: *new what what's new what's* # nTop 5.36 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-36-what-s-new > [!NOTE] > > nTop 5.36 is here! This release features improvements to our Parameter Optimization framework. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01kb0qa1naas42mscdw3229qr6) #### [Usage Improvements](#h-01kb0qa1naas42mscdw3229qr6) * We have added additional log information to **Parameter Optimization** to track optimization progress better. * We have enabled the **Run Command** block to be used in **Parameter Optimization**. This allows you to run auxiliary scripts that can be used as parameter objectives or constraints. * We have improved the consistency of plotting across optimization results. * We have enabled pressure boundaries with multiple magnitudes in Fluid Analysis. * We have hidden non-variable object names from the context search menu. This reduces visual clutter, making it easier for you to find specific blocks and variables. >
    **Before 5.36** **5.36**
    ![Before nTop 5.36, block object names appeared in input dropdown options.](https://files.learn.ntop.com/help-articles/whats-new/50598707416083.png) ![In nTop 5.36, block object names no longer appear in input drop down menus.](https://files.learn.ntop.com/help-articles/whats-new/50598707438099.png)
    * We have removed object names from the block header to emphasize the use of variables. Object names remain visible in the Right Side Panel, Outline, and Properties. >
    **Before 5.36** **5.36**
    ** ![Before nTop 5.36, block object names appeared in the block header.](https://files.learn.ntop.com/help-articles/whats-new/50598722744723.png)** ** ![In nTop 5.36, block object names no longer appear in the block header.](https://files.learn.ntop.com/help-articles/whats-new/50598707512339.png)**
    ## Keywords: *new what what's new what's whats new whats* # nTop 5.37 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-37-what-s-new > [!NOTE] > > nTop 5.37 is here! This release introduces new Field Viewer visualization options for inspecting discontinuities and zero values, as well as spatially varying boundary conditions for Flow Analysis. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Field Viewer Improvements](#h-01kca7z7h286warvgy45gbbqcb) * ### [Block Updates](#h-01kca7z7hm9sw6ej8wxxgw0egr) * ### [Bug Fixes](#h-01kca7z7hpwz6dnv1zzqsnkaey) #### [Field Viewer Improvements](https://qa.app.ntop.com/release-notes) * **Zero and Discontinuity Visualization:** We added new visualization toggles to the Field Viewer (shortcut F) in the right side panel to help you inspect fields: * **Show Defects:** This option visualizes areas where the field value changes abruptly (discontinuities). * **Highlight Zero:** This option renders a yellow contour line indicating where the field values equal zero. Use this to verify the exact boundary of an implicit body and prevent downstream issues during shelling or offsetting operations. * **Infinite and NaN Value Rendering:** Infinite (Inf) and NaN values now appear as a grey and white checkerboard pattern, making them easily distinguishable from the rest of the field. The color map also now ignores these values, making the rest of the field more legible. >
    Before 5.37 5.37
    ![Before nTop 5.37, it was hard to tell where field values equal zero.](https://files.learn.ntop.com/help-articles/whats-new/zero_before.png) ![In nTop 5.37, field values equal to zero are now called out using a yellow contour line.](https://files.learn.ntop.com/help-articles/whats-new/zero_after.png)
    ![Before nTop 5.37, defects in the field were visible but hard to see.](https://files.learn.ntop.com/help-articles/whats-new/disc_before.png) ![In nTop 5.37, field defects are more visible due to red contour lines.](https://files.learn.ntop.com/help-articles/whats-new/disc_after.png)
    ![Before nTop 5.37, Infinite and NaN values were hard to distinguish from other values in a field.](https://files.learn.ntop.com/help-articles/whats-new/inf_before.png) ![In nTop 5.37, Infinite and NaN values now appear as black and white checkerboard.](https://files.learn.ntop.com/help-articles/whats-new/inf_after.png)
    #### [Block Updates](https://qa.app.ntop.com/release-notes) * We have enabled spatially varying boundary values as inputs for **Flow Analysis** and **Aircraft Flow Analysis** blocks that use nTop Fluids. Boundary conditions can now be defined using spatially varying data fields. This enables complex, non-uniform scalar or vector fields to be mapped directly onto simulation boundaries, eliminating the need to rely solely on constant values. * We have updated the **Parameter Optimization** block to reduce the time taken for the normalization step and to improve the results. All previous results are cached and unchanged. However, rerunning the block may produce different results. #### [Bug Fixes](https://qa.app.ntop.com/release-notes) * We resolved an issue where importing .vtu/.vtk files could result in empty or incomplete data being returned in some cases. This fix restores full functionality to the following blocks: * Import Buckling Result * Import Modal Result * Import CFD Analysis Result * Import Static Thermal Result * Import Static Structural Result * Import Time Dependent Thermal Result * Import Time Dependent Structural Result ## Keywords: *new what what's new what's whats* # nTop 5.38 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-38-what-s-new > [!NOTE] > > nTop 5.38 is here! This release introduces our Conjugate Heat Transfer (CHT) capabilities, enabling you to analyze coupled fluid and thermal performance. This release also features the new Streamline block for creating flow-aligned structures, alongside algorithm updates for smoother meshing and improved robustness for Parameter Optimization. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Conjugate Heat Transfer](#h-01ket53z907zgznj8z585q5md7) * ### [Streamline](#h-01ket53z97mw1emjqgs645w2bb) * ### [Usage Improvements](#h-01ket53z9ec8mg31n4dz386jkn) * ### [Block Updates](#h-01ket53z9g0zfn48hn6270a691) * ### [Bug Fixes](#h-01ket53z9hjwznv7stq36nk9ft) #### Conjugate Heat Transfer * Conjugate Heat Transfer (CHT) is now enabled for nTop Fluids and can be used with our **Flow Analysis** block. This feature couples fluid flow and solid heat conduction analysis using an extended Lattice Boltzmann Method (LBM) solver. * Thermal performance in complex systems, such as heat exchangers, can now be analysed without complex meshing. * Block Name: Flow Analysis * Location: Fluids \[Beta] > Analysis * Inputs: * Model: A Simulation Model containing a Domain List with at least one fluid and one solid domain. It must include the implicit body and relevant material properties (thermal and fluid). * Boundary Conditions: A list of boundary definitions, including Velocity, Pressure, Temperature, or Heat Flux. * Cell Size: The scalar resolution of the voxel grid used for the simulation. * Output: Flow Analysis Result (containing Velocity, Pressure, and Temperature fields). ![An example set up of boundary conditions for a Conjugate Heat Transfer analysis.](https://files.learn.ntop.com/help-articles/whats-new/cht.png) #### Streamline * The new **Streamline** block generates curves that follow the path of a Vector Field within a specified Domain. These curves can be used to create flow-aligned structures. The streamline will start at the seed point and will continue up to the end of the provided domain. * Block Name: Streamline * Location: Fluids \[Beta] > Utilities * Inputs: * Vector Field: The input vector field to visualize. * Domain: The Implicit domain of the vector field. * Seed Point: The starting point (or list of points) for the streamline. * Tolerance: (Optional) Tolerance used in the integration method. If not provided, the value defaults to the domain diagonal scaled by 10^-6. * Terminal Speed: (Optional) Speed to be used as a stopping criterion for the integration method. If not provided, the value will be calculated based on the remaining inputs. * Output: Curve ![An example of the Streamline block visualizing the vector flow path.](https://files.learn.ntop.com/help-articles/whats-new/streamline.png) Tips: * Generate a single streamline from a specific seed point or use the block's point list overload to provide a list of Seed Points, creating multiple streamlines simultaneously. * The **Streamline** block offers optional Tolerance and Terminal Speed parameters for advanced users who need to fine-tune the integration method and stopping criteria. #### Usage Improvements * We have improved the **Parameter Optimization** to no longer stop when an iteration fails, instead continuing with the failed iteration and assigning it NaN values. * We have improved the error messaging for **Flow Analysis** to explicitly error when a defined bulk domain is missing from the generated voxel mesh. #### Block Updates * **Mesh from Implicit Body by AT**: We have updated the algorithm to generate smoother edges. Additionally, various fixes have been implemented to improve the overall mesh quality. #### Bug Fixes * We fixed an issue where the simulation progress percentage calculation was incorrect in **Flow Analysis** when a simulation stage exited early (e.g., due to convergence). ## Keywords: *new what what's new what's* # nTop 5.39 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-39-what-s-new > [!NOTE] > > nTop 5.39 is here! This release features a small usage improvement and some bug fixes for the **If-Else** and **Aircraft Flow Analysis** blocks. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](https://qa.app.ntop.com/release-notes#Usage%20Improvements) * ### [Bug Fixes](https://qa.app.ntop.com/release-notes#Bug%20Fixes) #### [Usage Improvements](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * We updated the icon of the 2D Vector Field type for a clearer distinction from the Vector Field type. #### [Bug Fixes](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * We fixed an issue with the **If-Else** block that caused an error to be shown unnecessarily. * We fixed an issue with the **Aircraft Flow Analysis** block where erroneously large values for initial velocities were used in rare occurrences. ## Keywords: *new what what's new what's whats* # nTop 5.4 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-4-what-s-new > [!NOTE] > > nTop 5.4 is here! This is a lighter release with bug fixes. Scroll down to read more about them. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Block Updates](#h-01j5ngrwzqpkksvfd3p7gs639b) * ### [Bug Fixes](#h-01j5ngrwzqmmdcfgfjazmhxgwj) #### [Block Updates](#new-features-and-improvements) * We have promoted the **Custom Unit Cell**, **Warp Cell Map**, and **Graph from Mesh Faces** blocks from beta into production. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue with the **Point Force** block that caused unexpected errors when multiple forces were applied to the same point in simulation and optimization blocks. * We fixed an issue with the **Trim Lattice** block that caused missing beams and incorrect trimming results to be produced in certain cases. * We fixed an issue with the **Import Scalar Point Map** that caused the imported point map to be incorrect in certain cases when combined with the Import Part block. ## Keywords: *new release notes whats 5.4* # nTop 5.40 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-40-what-s-new > [!NOTE] > > nTop 5.40 is here! This release features the Convection Boundary Load block, which enables users to apply a convection load in Conjugate Heat Transfer. This release also features improved implicit hatching, an iteration improvement for Parameter Optimization, and some helpful bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Convection Boundary Load](#h-01kh1szvernrebwhg2jjtek55x) * ### [Implicit Hatching Design](#h-01kh1szvexvtspafdp5n77jar6) * ### [Usage Improvements](#h-01kh1szvezrz73ep5g1gt87wj2) * ### [Bug Fixes](#h-01kh1szvf0hjsckg2fx5rz11nd) #### [Convection Boundary Load](#h-01kh1szvernrebwhg2jjtek55x) * We have implemented the **Convection Boundary Load** block to support Conjugate Heat Transfer (CHT). This block enables you to apply a convection load defined by a boundary zone, an ambient temperature field, and a convection coefficient field. * Block Name: Convection Boundary Load * Common Uses: * Simulate heat dissipation in electronic enclosures using known heat transfer coefficients. * Design and iterate on high-performance heat exchangers. * Model cooling or heating effects on exterior surfaces exposed to a surrounding fluid medium. * Location: Structures > Boundary Conditions * Inputs: * Boundary: The boundary faces to apply the load * Ambient Temp: The temperature of the fluid medium surrounding the boundary * Conv. Coefficient: Heat transfer coefficient that relates heat flux to the temperature difference between the fluid medium and the boundary. * Output: Convection Heat Flux #### [Implicit Hatching Design](#h-01kh1szvexvtspafdp5n77jar6) * We have updated the hatching design for implicit bodies clipped by their bounding box, improving legibility and preventing aliasing and other visual artifacts. * The design rendered on clipped faces is now screen-space hatching independent from zoom or model scale, which provides a clearer distinction from geometry in the notebook. The color is inherited from the display color of the body. ![An example of how implicit bodies now have a hatching pattern on surfaces that are cut off by their bounding box.](https://files.learn.ntop.com/help-articles/whats-new/hatching_540.gif) #### [Usage Improvements](#h-01kh1szvezrz73ep5g1gt87wj2) * We have updated the **Parameter Optimization** block iteration numbering to start at 1 for consistency across all optimization types. This update includes a new 'Iteration' column in data tables and fixes the initial value of the iteration axis in all plots. #### [Bug Fixes](#h-01kh1szvf0hjsckg2fx5rz11nd) * We fixed an issue with the **Flow Analysis** block where boundary neighbor identification in Conjugate Heat Transfer simulations could lead to divergence or stability regressions in specific setups (e.g., cold plates). * We fixed an issue with GPU Acceleration that occasionally caused implicit bodies to be rendered improperly on Nvidia GPUs. ## Keywords: *new what what's new what's* # nTop 5.41 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-41-what-s-new > [!NOTE] > > nTop 5.41 is here! This release features a new **Export CFD Analysis Result** block, enabling users to export **Flow Analysis** results. It also includes our new Custom Color Picker, which allows users to apply custom colors to their geometry. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Export CFD Analysis Result](#h-01khy2wcwkc68c6rv41xwxt1t4) * ### [Custom Color Picker](#h-01khy2wcwtjq2y9k0z0awzktny) * ### [Usage Improvements](#h-01khy2wcwwpayne70y31k9sa0c) * ### [Bug Fixes](#h-01khy2wcwyehe2tz92axy0k230) #### [Export CFD Analysis Result](https://qa.app.ntop.com/release-notes) * The **Export CFD Analysis Result** block enables you to export a Flow Analysis Result (computed on a uniform grid) to the VTK ImageData (.vti) format. The block converts all field data, including pressure, velocity, and temperature, into your specified unit system and writes them to a compressed .vti file. This output is a standard VTK XML file compatible with external tools like ParaView, and it includes special named arrays for the implicit field and cell region mask. * Applications: * Export nTop Fluids results (Flow Analysis, Aircraft Flow Analysis, CHT) for high-fidelity visualization in ParaView. * Use exported simulation data for training surrogate models. * Save simulation results in a portable, compressed format to share with collaborators. * Location: Fluids > Exchange * Path: The output file path (must use the .vti extension). * Flow Analysis: The CFD Analysis Result to be exported. * Compression: Choose from Fastest (LZ4), Balanced, Smallest (LZMA), or None. * Unit System: (Optional) The target unit system for the exported grid and data (defaults to MKS). * Output: CFDAnalysisFileData #### [Custom Color Picker](https://qa.app.ntop.com/release-notes) * You can now assign custom colors to objects using our dedicated Color Picker. This feature allows you to move beyond the standard palette by creating a separate "Custom" swatch for your specific design needs. * Whether you are distinguishing between complex assembly components or preparing models for high-quality screenshots, the custom color picker ensures your workspace remains organized and visually intuitive. * You can access the Color Picker by navigating to Display > Color > Custom. * To reuse custom color palettes, either import a new palette or export the current palette by navigating to View > Color Palette. ![An image highlighting the custom color picker function in nTop.](https://files.learn.ntop.com/help-articles/whats-new/color_picker.png) #### [Usage Improvements](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * Conservative Meshing for Aircraft Flow Analysis: Implemented conservative meshing for the **Aircraft Flow Analysis** block. This significantly increases the accuracy of results (specifically Lift and Drag calculations) when running aerodynamic simulations on very coarse mesh configurations. #### [Bug Fixes](https://qa.app.ntop.com/release-notes#new-features-and-improvements) * We fixed an issue with the visualization of the **Distance to Curve from Axis** block that occasionally caused geometry to be rendered incorrectly when GPU acceleration was enabled. * We fixed an issue that caused the notebook to scroll incorrectly when renaming a variable. * We fixed an issue with the **Flow Analysis** block that caused gaps to form between the fluid and solid domains during mesh generation. * We fixed an issue with the **Flow Analysis** block where incorrect enthalpy values were generated for boundaries touching multiple bulk domains. ## Keywords: *new what what's new what's whats* # nTop 5.42 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-42-what-s-new > [!NOTE] > > nTop 5.42 is here! This release features the new Tuple and JSON from Tuple blocks! These blocks create additional functionality of custom blocks by allowing multiple outputs from a single custom block. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Tuple](#h-01kk9vfyq9x1ekehgwtfc92bmk) * ### [JSON from Tuple](#h-01kk9vfyqf2zq543z7r3smvn7q) * ### [Usage Improvements](#h-01kk9vfyqmypym95fe695kjd9y) * ### [Bug Fixes](#h-01kk9vfyqnbej6g8n5y03b0ykn) #### [Tuple](#h-01kk9vfyq9x1ekehgwtfc92bmk) The **Tuple** block creates a Tuple from a collection of objects. The order of inputs determines the order of the list elements in the output's properties. * Applications: * Useful when attempting to propagate multiple outputs from a single custom block. * Location: Beta > Create * Input: Any * Output: Tuple ![The Tuple block in nTop.](https://files.learn.ntop.com/help-articles/whats-new/tuple.png) #### [JSON from Tuple](#h-01kk9vfyqf2zq543z7r3smvn7q) The **JSON from Tuple** block converts a Tuple type into JSON format. Tuples containing scalar elements can be converted to JSON. * Applications: * Useful when attempting to propagate multiple outputs from a single custom block. * Location: Beta > Create * Tuple: Scalar-based Tuple to convert into a JSON format. * Keys: Specify keys for JSON * Unit System: Unit system that the data should be translated to. * Output: JSON ![The JSON From Tuple block.](https://files.learn.ntop.com/help-articles/whats-new/json_from_tuple.png) #### [Usage Improvements](#h-01kk9vfyqmypym95fe695kjd9y) * Bulk Volume Calculation for Flow Analysis: Modified flow-through time calculations to evaluate bulk volume using only active fluid regions, rather than the entire bounding box. * Temperature Initialization for Flow Analysis CHT: Updated Conjugate Heat Transfer Laplace initialization to properly utilize temperatures provided by convection boundaries. * Backflow-Stabilized Pressure Boundaries for Flow Analysis: Improved pressure boundary dynamics implementation that clamps the normal velocity component on pressure boundaries. This prevents non-physical flux in the wrong direction by auto-detecting inlet versus outlet conditions from the initial velocity field. #### [Bug Fixes](#h-01kk9vfyqnbej6g8n5y03b0ykn) * We fixed an issue with **Aircraft Flow Analysis** that caused a runtime warning (divide by zero) encountered during initialization. * We resolved an issue with **Aircraft Flow Analysis** where the results had duplicate entries for velocity, pressure, and force fields. ## Keywords: *new what what's new what's* # nTop 5.43 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-43-what-s-new > [!NOTE] > > nTop 5.43 is here! This release introduces surrogate modeling via ONNX neural network import, a new overload of the Remap Field block, and the powerful new Track to Block tool for viewport-to-notebook navigation. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Import Neural Network](#h-01km3pcf7gthcwrg7s04fhnhn4) * ### [Dependent Parameter](#h-01km3pcf7pj695wt9ewkxjtqzt) * ### [Track to Block](#h-01km3pcf7sdqnqv6d7hv6ffnsh) * ### [Remap Field](#h-01km3pcf7yae58bk311kvxk1yf) * ### [Usage Improvements](#h-01km3pcf83v123vgz3f4eakxqq) #### [Import Neural Network](https://qa.app.ntop.com/release-notes) * The **Import Neural Network** block imports a pre-trained neural network model stored in the ONNX file format for direct evaluation within nTop. * By loading the model architecture and trained weights, this block creates a surrogate model that can be used for rapid evaluation of complex engineering relationships or integrated directly into optimization workflows. * Location: Parameter Optimization > Surrogates * Model: The path to the .onnx file containing the neural network definition. * Inputs: A group of parameters defining the variables to be passed to the model. * Reference Unit: The reference used to maintain a consistent output. Typically, this is 1 with the units returned by the model. * Output Index: (Optional) The index of the desired output from the ONNX model. Defaults to 0. * Output: Surrogate Model. #### [Dependent Parameter](https://qa.app.ntop.com/release-notes) * The new overload on the **Dependent Parameter** block creates a specialized scalar parameter derived from a Surrogate Model (such as a neural network). * The block evaluates the model using the provided input parameters to generate real-time predictions. Because it is a "Dependent Parameter," its value updates automatically whenever its inputs change. * Location: Parameter Optimization > Composition * Surrogate: Surrogate model to evaluate. * Label: (Optional) Unique identifier for the output parameter. * Output: Parameter #### [Track to Block](https://qa.app.ntop.com/release-notes) * The Track to Block right-click function streamlines the design process by connecting the viewport directly to your notebook. By clicking a specific region of an implicit body, nTop traces the implicit tree to identify and focus on the exact block that generated that point in space. This is especially useful for identifying which blocks drive specific surface features and debugging complex booleans. * How to use it: * Right-click on any point on an implicit body in the viewport. * Select Track to Block from the context menu. * nTop will automatically highlight the originating block in your notebook. ![An example of using the Track to Block right click function.](https://storage.googleapis.com/ntop_installers/releaseNotes/5.43/track_to_block.gif) #### [Remap Field](https://qa.app.ntop.com/release-notes) * The new default overload of the **Remap Field** block uses a Vector Field to designate the target coordinate space of the remap operation. * By making this a vector field input, it is easier for users to reuse a given remap operation. This working pattern improves readability, sharpens the mental model of remap operations, and reduces the likelihood of copy-paste errors on individual inputs. * Location: Fields > Remap * Scalar Field: Field to remap values of. * Coordinate Space: Field to evaluate to obtain XYZ components of the new evaluation location. ![An example of using the new overload for the Remap Field block.](https://files.learn.ntop.com/help-articles/whats-new/50598706580371.png) #### [Usage Improvements](https://qa.app.ntop.com/release-notes) * The **Measurement Tool** now shows the coordinates of each selected point when measuring. * The **Go to Selection** right-click function focuses on the selected block in the notebook and expands the relevant section. ## Keywords: *new what what's new what's whats* # nTop 5.44 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-44-what-s-new > [!NOTE] > > nTop 5.44 is now available, introducing significant physics improvements, including a new Knudsen-limited non-equilibrium damping boundary condition for enhanced simulation accuracy. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Block Updates](#h-01knhy6zr8f8h67jnksvfwpznh) * ### [Bug Fixes](#h-01knhy6zrc9cejhmxz21s1b61q) #### [Block Updates](#h-01knhy6zr8f8h67jnksvfwpznh) * We have updated our **Flow Analysis** block to support Knudsen-limited non-equilibrium damping for velocity and density boundary conditions to improve simulation fidelity in micro-scale or low-pressure flows. * We have updated the ***Continuous*** blend option on the **Boolean** (Union, Intersect, and Subtract), **Extrude Cut**, and **Blend Intersections** blocks with a new super-elliptic blend type for providing improved G2 continuity. * We have updated the **Import CFD Analysis** Result block to support import of \*.vti files, which should enable to you to visualize and utilize simulation data from external solvers. #### [Bug Fixes](#h-01knhy6zrc9cejhmxz21s1b61q) * We fixed an issue that caused certain blocks, such as **Radial Basis Field from Point Map**, to display in the ribbon. ## Keywords: *new what what's new what's* # nTop 5.45 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-45-what-s-new > [!NOTE] > > nTop 5.45 is here! This is a lighter release with improvements to our Fluids solver. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01kpehfj1rm5wcz9cwpy21evd2) #### [Usage Improvements](#h-01kpehfj1rm5wcz9cwpy21evd2) * We have added Knudsen-limited non-equilibrium damping velocity and density boundary conditions, improving physical accuracy for rarefied-flow regimes. * We have updated our Laplace solver's Neumann boundary handling for more accurate pressure solutions at staircase boundaries. ## Keywords: *new what what's new what's whats* # nTop 5.46 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-46-what-s-new > [!NOTE] > > nTop 5.46 is here! This release features three new blocks for curve generation. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Bridge Curve](#h-01kqt1h9zy4h8yjgkb9220gxnp) * ### [Intersection Points](#h-01kqt1ha06qh4f0tpz6jqwpdn2) * ### [Trim Curve](#h-01kqt1ha099mjry8nrd0r39cpb) * ### [Usage Improvements](#h-01kqt1ha0fvt1fp72a2eaqetq8) * ### [Block Updates](#h-01kqt1ha0j88xdec5ek85sn4j8) #### [Bridge Curve](#h-01kqt1h9zy4h8yjgkb9220gxnp) * The **Bridge Curve** block creates a smooth spline connection between two curves with controllable continuity (G0, G1, or G2). It allows you to precisely define junction points along each input curve using arc-length distances and provides an option to trim and merge the results into a single unified Polycurve. * **Common uses:** * Generating continuous, high-order curvature profiles for wings or ducting inlets. * Location: Create > Curves * Curve 1: First curve. * Curve 2: Second curve. * Distance 1: Arc length from the start point along Curve 1 to the junction. * Distance 2: Arc length from the start point along Curve 2 to the junction. * Continuity 1: Smoothness of the resulting curve at the Curve 1 junction. The higher the order, the smoother the transition. * Continuity 2: Smoothness of the resulting curve at the Curve 2 junction. The higher the order, the smoother the transition. * Tangent Scale 1: Scale factor applied to the tangent vector of the bridge curve at the Curve 1 junction. * Tangent Scale 2: Scale factor applied to the tangent vector of the bridge curve at the Curve 2 junction. * Flip 1: If checked, Distance 1 will be calculated from the end point of Curve 1 and the tangent direction of the bridge curve at this point will be reversed. * Flip 2: If checked, Distance 2 will be calculated from the end point of Curve 2 and the tangent direction of the bridge curve at this point will be reversed. * Merge With Inputs: If checked, trim the inputs and join the three resulting curves into a Polycurve. ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/bridge_curve.webp) #### [Intersection Points](#h-01kqt1ha06qh4f0tpz6jqwpdn2) * The **Intersection Points** block returns a list of all points where a specific Curve crosses the boundary of an Implicit Body. * **Common uses:** * Placing features and components precisely at intersections, creating construction geometry * Location: Create > Curves * Curve: Curve to intersect with the body. * Body: Body to intersect with the curve. * Min. Feature Size: Optional value to specify the approximate size of the smallest feature(s) on the implicit body to be detected along the curve. If not specified, a value is chosen based on the input curve. ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/intersection_points.webp) #### [Trim Curve](#h-01kqt1ha099mjry8nrd0r39cpb) * The **Trim Curve** block segments a curve based on its intersections with an Implicit Body. It splits the curve into one or more segments, allowing you to isolate only the portions of the path relevant to your design. * **Common uses:** * Creating construction geometry, controlling the termination of sweep rails. * Location: Create > Curves * Curve: Curve to trim. * Body: Body to trim the curve with. * Invert: When true, returns portions of the curve inside the body instead of outside. * Min. Feature Size: Optional value to specify the approximate size of the smallest feature(s) on the implicit body to be detected along the curve. If not specified, a value is chosen based on the input curve. ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/trim_curve.webp) #### [Usage Improvements](#h-01kqt1ha0fvt1fp72a2eaqetq8) * We have added a reversed property to all curve types to allow for better control over curve direction. ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/reversed_curve.webp) * We have added a "Show Orientation" attribute to curve types to visualize curve directionality when selected. This attribute can be toggled off in the right side panel. ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/show_orientation.webp) * You can now reorder blocks within the notebook via drag-and-drop and perform multi-selection interactions, such as Shift+Click for range selection. To support this change, block inputs can not be selected at the same time as parent blocks. ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.46/multi_select.gif) ![]() #### [Block Updates](#h-01kqt1ha0j88xdec5ek85sn4j8) * We have updated our nTop Fluids solver, which now independently calculates Bernoulli energy balances and flow parameters for physically separate fluid domains, ensuring mass conservation and correct convergence in CHT or porous-region setups. ## Keywords: *new what what's new what's* # nTop 5.47 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-47-what-s-new > [!NOTE] > > nTop 5.47 is here! This release streamlines complex surfacing and lofting workflows with the introduction of Mirror Curve, Evaluate Curvature, and Frame along Curve. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Mirror Curve](#h-01kry4eb8s698c081fzafhn2wv) * ### [Evaluate Curvature](#h-01kry4eb90r4mbsr47aj6j5qp5) * ### [Frame along Curve](#h-01kry4eb95mjb4xw8f70vfdze9) #### [Mirror Curve](https://app.ntop.com/release-notes) * The **Mirror Curve** block creates a mirrored copy of an input curve across a specified plane. It generates only the new, mirrored geometry and does not retain the original input curve in its output. * This block is used for symmetrizing curves for lofting, extruding, or sweeping operations. * Location: Create > Curves * Curve: Curve to mirror. * Plane: Plane about which to mirror the curve. * Output: Curve ![Mirror Curve](https://storage.googleapis.com/ntop_installers/releaseNotes/5.47/mirror-curve.png) #### [Evaluate Curvature](https://app.ntop.com/release-notes) * The **Evaluate Curvature** block calculates the curvature of a curve at a specified distance along its length. It returns a scalar value representing the curvature (k) at that point. * This block is used for identifying regions of rapid curvature change that may impact fluid flow * Location: Create > Curves * Curve: Curve to evaluate. * Distance: Distance along the curve. * Output: Curve #### [Frame along Curve](https://app.ntop.com/release-notes) * The **Frame along Curve** block creates a coordinate reference frame at a specific distance along a curve. The resulting frame orientation is defined by the curve's local geometry at that point. * Z-axis: Aligned with the curve tangent. * X-axis: Aligned with the curve normal. * Y-axis: Aligned with the curve binormal. * This block is used for creating local coordinate systems while lofting. * Location: Create > Curves * Curve: Curve to evaluate. * Distance: Distance along the curve to create the frame. If this value is outside of the range from zero to the length of the Curve, the point will be extrapolated. The extrapolation will be linear for Lines and Splines, and circular for Arcs. If Curve is a Polycurve, the extrapolation will be based on the type of the segment at the corresponding endpoint. * Output: Frame ![Frame along Curve](https://storage.googleapis.com/ntop_installers/releaseNotes/5.47/frame-along-curve.png) ## Keywords: *new what what's new what's whats* # nTop 5.48 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-48-what-s-new > [!NOTE] > > nTop 5.48 is here! This release includes improvements to the Display Grid across all three cardinal planes, as well as under-the-hood fixes. #### Usage Improvements * Display Grids are now available for all three cardinal planes. Individual visibility can be controlled in the Display panel when nothing is selected. ![Example image of Display Grid across all planes](https://storage.googleapis.com/ntop_installers/releaseNotes/5.48/grid.png) #### Block Updates * We have introduced a new Minimum Dissipation turbulence model for aircraft flow analysis to improve the accuracy of drag and lift predictions. ## Keywords: *new what what's new what's* # nTop 5.49 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-49-what-s-new > [!NOTE] > > nTop 5.49 is here! This release brings improvements to Profiles and Implicit Bodies. Read more about it below. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01ktykr6fakpfrcp59t3fzr866) #### [Usage Improvements](#h-01ktykr6f5srk0d5f7ve9djz0y) * We added an inverted property to Implicit Bodies and Planes for more efficient block authoring and property chains. * Profiles now auto-convert to Implicit Bodies using the same field as the distance to extrusion property for more efficient and concise block authoring. * We fixed an issue with Profile Rendering that caused the shaded profile area to render incorrectly for large scales. Additionally, the color of the profile curves now corresponds with the profile color. ## Keywords: *new what what's new what's whats* # nTop 5.5 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-5-what-s-new > [!NOTE] > > nTop 5.5 is here! This release features our new contact type to the Structural Contact block, along with usage improvements, block updates, and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Structural Contact with No Separation Contact](#h-01j6wfgdqdqxbfs1wz5sdvps7s) * ### [Usage Improvement](#h-01j6wfgdqd6n06r5vzwrp41raj) * ### [Block Updates](#h-01j6wfgdqdm7kaeqjv48eyzrk8) * ### [Bug Fixes](#h-01j6wfgdqd7j0tp2xzdp7hyqrp) #### Structural Contact with No Separation Contact * This **Structural Contact** block creates a contact condition between two surfaces. * Two contact types are now supported: Bonded and No Separation. * *Bonded* contact prohibits relative displacement in the normal and tangential directions to the contact surface. * *No Separation* contact only prohibits relative displacement in the normal direction. * Both contact types do not allow the surfaces to separate if they are within the given tolerance. * The contact constraint is enforced using the Augmented Lagrangian formulation whereby a penalty term is added to the Lagrangian function. * This block can be used to transfer loads between two interfacing parts. Correctly modeling the contact interface is paramount for accurately predicting the component's behavior under various loading conditions. Typical uses of contact include bolted, riveted, or press-fit assemblies. * Block Name: Structural Contact * Location: Simulation > Model >
    **Bonded** **No Separation**
    ![An example of analysis deformation results that were generated using the Structural Contact block with Bonded contact.](https://files.learn.ntop.com/help-articles/whats-new/no_sep_1.gif) ![An example of analysis deformation results that were generated using the Structural Contact block with No Separation contact.](https://files.learn.ntop.com/help-articles/whats-new/no_sep_2.gif)
    The GIFs above shows *Bonded* and *No Separation* contact type examples of the **Structural Contact** block. The *No Separation* type allows translational displacement between FE Meshes. The previous *Bonded* contact type prevents translational displacement between FE Meshes. #### Usage Improvement * We added more useful content to the Right Side Panel when no objects are selected, including Viewport Display Settings for easy access and helpful links to resources like nTop Learn, nTop Support, and What's New. #### Block Updates * We have updated the **Implicit Body from CAD Body** block to produce better results, which reduces rendering artifacts and small numerical precision errors for some CAD bodies. >
    **nTop 5.4** **nTop 5.5**
    ![An example body generated from the Implicit Body from CAD Body block before nTop 5.5. The body has surface imperfections around the edges and curves of the body.](https://files.learn.ntop.com/help-articles/whats-new/before.png) ![An example body generated from the Implicit Body from CAD Body block in nTop 5.5. The body has no defects around the edges and curves.](https://files.learn.ntop.com/help-articles/whats-new/after.png)
    * We have updated the **Boolean Union** and **Boolean Subtract** blocks to support faster booleans and rendering for Implicit Bodies derived from meshes or CAD bodies in addition to primitives. * We have updated the *Min* and *Max Shell Thickness* inputs of the **Parametric Shell Component** to accept the scalar field instead of the scalar type. #### Bug Fixes * We fixed an issue with the **Walled TPMS Unit Cell** and **Walled TPMS Unit Cell with Offset** blocks that caused rendering artifacts in some cases when Exact Thickness was enabled. * We fixed an issue with Notebook Inputs that prevented the right-click menu from appearing on CAD objects. * We fixed an issue with the Manual Run Mode button so that it no longer becomes stuck. ## Keywords: *ntop what's new* # nTop 5.50 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-50-what-s-new > [!NOTE] > > nTop 5.50 is here! This release introduces five new export blocks for Analysis Results, two new Conic curve blocks for aerodynamic profile design, and a Path input update that makes folder selection available across all blocks. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Conic by Points](#h-01kwa72tmsfhjnpsjp2c43x6mz) * ### [Conic by Tangents](#h-01kwa72tmwz6zvqha3m3ct3e1d) * ### [Export Static Analysis Result](#h-01kwa72tn0g94aqh738mtmvf4v) * ### [Export Buckling Analysis Result](#h-01kwa72tn40bgvdc7pz1sa0nm9) * ### [Export Modal Analysis Result](#h-01kwa72tn706xdc1jnrqm1nr8b) * ### [Export Thermal Analysis Result](#h-01kwa72tnb07n4ssz1bfwpj3wb) * ### [Export Time Dependent Thermal Analysis Result](#h-01kwa72tneydwdvx8wyr3pj0fb) * ### [Usage Improvements](#h-01kwa72tnjbag8zjjrzb7tnffc) * ### [Block Updates](#h-01kwa72tnkp3bgjzbe1sww5hy8) #### [Conic by Points](#h-01kwa72tmsfhjnpsjp2c43x6mz) * The **Conic by Points** block creates a conic curve defined by a start point, an apex point, and an end point. It is commonly used for aerodynamic profiles such as nose cones. * Location: Create > Curves * Point 1: Start point of the Conic. * Point 2: Apex point of the Conic. The tangent lines at the start and end points meet at this point. * Point 3: End point of the Conic. * Rho: Rho value of the conic. Accepted range: 0.02–0.95. * Output: Spline ![Conic by Points](https://storage.googleapis.com/ntop_installers/releaseNotes/5.50/conic_by_points.png) #### [Conic by Tangents](#h-01kwa72tmwz6zvqha3m3ct3e1d) * The **Conic by Tangents** block creates a conic curve defined by two points and their tangent vectors. The apex of the conic is determined automatically by the intersection of the tangent lines at the start and end points. It is commonly used for aerodynamic profiles such as nose cones. * Location: Create > Curves * Point 1: Start point of the Conic. * Point 2: End point of the Conic. * Tangent 1: Tangent vector at the start point. * Tangent 2: Tangent vector at the end point. * Rho: Rho value of the conic. Accepted range: 0.02–0.95. * Output: Spline ![Conic by Tangents](https://storage.googleapis.com/ntop_installers/releaseNotes/5.50/conic_by_tangents.png) #### [Export Static Analysis Result](#h-01kwa72tn0g94aqh738mtmvf4v) * The **Export Static Analysis Result** block lets you export a Static Analysis Result to a file for use outside of nTop, such as downstream reporting or data exchange workflows. * Location: Design Analysis > Export * Path: The output file path. * Static Analysis: Static Analysis Result to export. * Compression: The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size, or no compression (largest file size). Defaults to Fastest. * Unit System: *(Optional)* Target unit system for the exported data. Defaults to MKS units. * Output: Analysis File Data #### [Export Buckling Analysis Result](#h-01kwa72tn40bgvdc7pz1sa0nm9) * The **Export Buckling Analysis Result** block lets you export a Buckling Analysis Result to a file for use outside of nTop, such as downstream reporting or data exchange workflows. * Location: Design Analysis > Export * Path: The output file path. * Buckling Analysis: Buckling Analysis Result to export. * Compression: The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size, or no compression (largest file size). Defaults to Fastest. * Unit System: *(Optional)* Target unit system for the exported data. Defaults to MKS units. * Output: Analysis File Data #### [Export Modal Analysis Result](#h-01kwa72tn706xdc1jnrqm1nr8b) * The **Export Modal Analysis Result** block lets you export a Modal Analysis Result to a file for use outside of nTop, such as downstream reporting or data exchange workflows. * Location: Design Analysis > Export * Path: The output file path. * Modal Analysis: Modal Analysis Result to export. * Compression: The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size, or no compression (largest file size). Defaults to Fastest. * Unit System: *(Optional)* Target unit system for the exported data. Defaults to MKS units. * Output: Analysis File Data #### [Export Thermal Analysis Result](#h-01kwa72tnb07n4ssz1bfwpj3wb) * The **Export Thermal Analysis Result** block lets you export a Thermal Analysis Result to a file for use outside of nTop, such as downstream reporting or data exchange workflows. * Location: Design Analysis > Export * Path: The output file path. * Thermal Analysis: Thermal Analysis Result to export. * Compression: The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size, or no compression (largest file size). Defaults to Fastest. * Unit System: *(Optional)* Target unit system for the exported data. Defaults to MKS units. * Output: Analysis File Data #### [Export Time Dependent Thermal Analysis Result](#h-01kwa72tneydwdvx8wyr3pj0fb) * The **Export Time Dependent Thermal Analysis Result** block lets you export a Time Dependent Thermal Analysis Result to a file for use outside of nTop, such as downstream reporting or data exchange workflows. * Location: Design Analysis > Export * Path: The output file path. * Time Dependent Thermal Analysis: Time Dependent Thermal Analysis Result to export. * Compression: The compression objective. Choose between fastest compression (larger file size), balanced performance (medium file size), smallest file size, or no compression (largest file size). Defaults to Fastest. * Unit System: *(Optional)* Target unit system for the exported data. Defaults to MKS units. * Output: Analysis File Data #### [Usage Improvements](#h-01kwa72tnjbag8zjjrzb7tnffc) * The **File Path** input has been renamed to **Path** across all blocks and now supports selecting a folder in addition to a file. #### [Block Updates](#h-01kwa72tnkp3bgjzbe1sww5hy8) * **File Path Variable** has been renamed to **Path Variable**. * The **Cubic Bezier** block has been renamed to **Cubic Bezier Distance Field**. * The **Conic** block has been renamed to **Conic Distance Field**. ## Keywords: *new what what's new what's* # nTop 5.51 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-51-what-s-new > [!NOTE] > > nTop 5.51 is here! This release introduces Static Analysis with Inertia Relief, a new beta block for analysing unconstrained structures such as aircraft in free-body equilibrium. We also have Saved Field View configurations. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Static Analysis with Inertia Relief \[Beta\]](#h-01kx6hceahck36jp0sgq70ax05) * ### [Usage Improvements](#h-01kx6hceasmh9t16g32agjcfnk) * ### [Block Updates](#h-01kx6hceax6zer7kq7t9gptw3t) #### [Static Analysis with Inertia Relief \[Beta\]](#h-01kx6hcea4rwxaedxwzzxsrmng) * The **Static Analysis with Inertia Relief \[Beta]** block calculates displacements, strains, and stresses on an unconstrained or floating FE Model subject to applied external loads. It is useful for analyzing structures undergoing steady-state acceleration where the load-displacement relationship is assumed to be linear. The block actively calculates and applies counterbalancing inertial forces across the model's mass to achieve quasi-static equilibrium without requiring fixed boundary conditions. * A common use case is aircraft structural analysis, where the airframe is in free-body equilibrium during flight with no fixed supports. Inertia relief balances the applied aerodynamic and thrust loads against the distributed inertia of the structure itself, allowing accurate stress and deformation analysis without artificial constraints. * Location: Beta > Simulation * Model: The finite element model. * Load Case: The restraints and applied loads. * Output: Static Structural Result #### [Usage Improvements](#h-01kx6hcea99n817wx54yfxz6jp) * Field viewer configurations can now be saved and accessed by name in the new **Saved Configurations** panel in the Field Viewer tool located in the Right Side Panel. Use the New button to save the current object and display settings as a named configuration, or use the Overwrite button to overwrite an existing one. Double-click any saved configuration to switch the field viewer to that object and its settings. You can right click to Rename or Delete a view. ![Saved Field View Configurations](https://storage.googleapis.com/ntop_installers/releaseNotes/5.51/field-viewer-configurations.png) * Right-click a Custom Block and select the new \*\*Open Custom Block with Context\*\* option to open its editor pre-loaded with the actual values passed in from the parent notebook, instead of the block's own default inputs. * Inputs that were overridden this way are highlighted in yellow. Alphanumeric inputs display their actual value, while inputs of other types (e.g. implicit bodies) show "Inherited Context" as a placeholder since their value can't be displayed directly. Hover over an overridden input to see a tooltip confirming it was overridden with context from the parent notebook. ![](https://support.ntop.com/hc/article_attachments/54135887966227) #### [Block Updates](#h-01kx6hceaekej9n9d0mtxa18vp) * [Adaptive Resolution](/help-articles/knowledge-base/user-interface/what-is-adaptive-resolution) has been moved out of beta. ## Keywords: *new what what's new what's whats new whats* # nTop 5.52 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-52-what-s-new > [!NOTE] > > nTop 5.52 is here! This release introduces the new Arc Tangent to Curve block. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Arc Tangent to Curve](#h-01kyjb53gfzrgeagntnmvw4ze2) * ### [Usage Improvements](#h-01kyjb53gphmn7f4hjgtq1r6vq) * ### [Block Updates](#h-01kyjb53gqy38n5abghpp4y8xr) * ### [Bug Fixes](#h-01kyjb53gw6htzv8cdfywkk20m) #### [Arc Tangent to Curve](#h-01kyjb53gfzrgeagntnmvw4ze2) * The **Arc Tangent to Curve** block creates an Arc tangent to a curve from an end point and radius. By default, the shorter of the two valid arcs is used. * Commonly used for aerodynamic profiles, such as the leading edge of a vertical tail. * Location: Create > Curves * Curve: Curve to which the start point of the Arc will be tangent. * Point: End point of the Arc. * Radius: Radius of the Arc. * Flip: Flips the Arc to the opposite valid solution. * Output: Arc ![Arc Tangent to Curve](https://storage.googleapis.com/ntop_installers/releaseNotes/5.52/arc_tangent_to_curve.png) #### [Usage Improvements](#h-01kyjb53gphmn7f4hjgtq1r6vq) * Connector partners can now organize their blocks into ribbon subsections, giving finer-grained control over how their connector's blocks are grouped in the ribbon. * Names can now be assigned to FE and Virtual regions and boundaries via a new optional *Name* input on the **FE Boundary by Body, FE Boundary by Flood Fill, FE Region by Body, Virtual Boundary by Body, and Virtual Region by Body** blocks. These names appear as a property and carry through as set names in exported CAE files. ![](https://storage.googleapis.com/files-learn/static/ReleaseImages/5.52/fe_boundary_name.png)![]() #### [Block Updates](#h-01kyjb53gqy38n5abghpp4y8xr) * The **Translate Object** block (Utilities > Transforms) now includes an overload that translates by a direction vector and a distance, instead of a single translation vector. * The **Flow Analysis** block now includes a *Routine* input that controls how far the solver progresses before stopping: * Cell Regions: Translates the geometry into a discrete voxel grid and stops before running physics calculations. Useful for visually validating voxel resolution and boundary region assignments before running a full simulation. * Potential Flow: Runs mesh generation and a fast, simplified physics calculation to establish an initial guess. Useful for debugging boundary conditions and confirming the flow path is connected from inlet to outlet without waiting on a full solve. * Full Analysis (Default): Runs the complete pipeline — meshing, initialization, and solving — until steady state is reached, producing final CFD results. #### [Bug Fixes](#h-01kyjb53gw6htzv8cdfywkk20m) * We fixed several issues with the **Flow Analysis** block's Conjugate Heat Transfer (CHT) solver that could produce incorrect results in certain simulations, improving overall solver robustness and accuracy. * We fixed an issue where connector ribbon categories could appear in an inconsistent order between sessions. * We fixed an issue where sorting by End Date on the license table in the org admin dashboard did not work correctly. * We fixed an issue that prevented users from downloading their latest add-on licenses from the add-on's page. * We fixed an issue where an **nTop Automate** license used by **ntopcl** was not immediately returned when the process finished, delaying its availability to other users. ## Keywords: *new what what's new what's* # nTop 5.53 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-53-what-s-new > [!NOTE] > > nTop 5.53 is here! This release adds the new **Spline Distance Field** and **Extend Curve** blocks. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Spline Distance Field](#h-01kzetksatzbjcr8py2ft4atb5) * ### [Extend Curve](#h-01kzetksb18bs0rxzxr4r07h2c) #### [Spline Distance Field](#h-01kzetksanpcmxsgcbfgef5wf8) * The **Spline Distance Field** block creates an implicit Spline curve. The signed distance of a planar Spline curve is returned. * Commonly used for creating implicit profiles, for applications such as turbine blades. * Location: Create > Primitives * Control Points: List of control points of the Spline curve. * Degree: Degree of the Spline. * Coordinate Space: Vector Field representing the basis in which to evaluate the curve. * Output: Implicit Body ![Simple bezier airfoil](https://storage.googleapis.com/ntop_installers/releaseNotes/5.53/spline_distance_field.png) #### [Extend Curve](#h-01kzetksaq9mckbvv4mnn82z15) * The **Extend Curve** block extends a curve by a given distance from one or both of its ends, returning the extended curve as a Polycurve. * Commonly used for general curve construction and freeform surfacing. * Location: Create > Curves * Curve: Curve to extend. * Distance: Distance by which to extend the curve. * Extend From: End or ends of the curve to extend from. * Extension Type: Method of extension. Linear (G1) appends a straight line along the end tangent. Curvature (G2) extends along a circular arc matching the end tangent and curvature; always well-behaved. Natural (G-infinity) analytically continues the curve's own equation for an infinitely smooth junction, capping the analytic part before it can fold back on itself and continuing with an arc. * Output: Polycurve ![Comparison of Extend Curve extension types](https://storage.googleapis.com/ntop_installers/releaseNotes/5.53/extend_curve.png) ## Keywords: *new what what's new what's whats new whats 5.53* # nTop 5.54 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-54-what-s-new > [!NOTE] > > nTop 5.54 is here! This release adds multi-select support for editing display attributes, plus stability improvements and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01m0tcyt2vb5yg0fd9kw0qxjxq) * ### [Bug Fixes](#h-01m0tcyt2wwpvhjf7ngmd51g6q) #### [Usage Improvements](#h-01m0tcyt2vb5yg0fd9kw0qxjxq) * You can now select multiple objects at once and edit shared display attributes, such as color, transparency, and visibility, together in the Display Panel. Attributes that differ across the selection are shown as indeterminate until you set them. #### [Bug Fixes](#h-01m0tcyt2wwpvhjf7ngmd51g6q) * We fixed an issue where the **Table from Columns Product** block could cause nTop to unexpectedly exit. * We fixed an issue with **Static Analysis** that could incorrectly detect rigid body motion when using point restraints. * We fixed an issue where axes in the **Display Grid** could render with visual artifacts. ## Keywords: *new what what's new what's* # nTop 5.6 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-6-what-s-new > [!NOTE] > > nTop 5.6 is here! This release has our new adaptive resolution feature, which increases rendering quality for complex implicit models. Scroll down to read more about it. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Adaptive Resolution](#h-01j7xs4ym8vccchspe8659j2m8) * ### [Shift-Click and Hotkey Improvements](#h-01j7xs4ym8w9jfd0ztmcs3zw2c) * ### [Block Updates](#h-01j7xs4ym8yck2g60y6q2h8h7j) * ### [Bug Fixes](#h-01j7xs4ym8mwjqm9jkrcfsf169) #### Adaptive Resolution \[Beta] * Adaptive Resolution increases rendering quality for complex implicit models by dynamically adjusting the local implicit resolution based on your view. The maximum resolution reachable is about 20x higher in each spatial dimension compared to "Highest" Resolution. * When this setting is on, you will be less likely to need the Precise Render feature to view the detail in your implicit model, and you should not have to worry about manually changing your resolution to arrive at the right level of detail. * This feature is well-suited for intricate implicit models such as high-density lattice infill, surface texture, thin structural ribs, dense interior channels, grilles, screens, and filters. * If you want to share feedback on this new feature, send a [support ticket](https://support.ntop.com/hc/en-us/requests/new) and we will forward it to the team. * Location: Resolution dropdown in the bottom bar > Adaptive \[BETA] * [Learn more about Adaptive Resolution](/help-articles/knowledge-base/user-interface/what-is-adaptive-resolution) ![3 different options for visualizing a lattice in nTop. The left image shows the lattice with static resolution settings. The middle image shows the lattice with Precise Render enabled. The right image shows the lattice with Adaptive Resolution enabled.](https://files.learn.ntop.com/help-articles/whats-new/adaptive_res.png) The above image shows a comparison of Static Resolution (Highest), Precise Render mode while loading, and Adaptive Resolution, which is dynamically updating at the same time. #### Shift-Click and Hotkey Improvements * Shift-Click: You can easily select a sequence of blocks in the notebook by clicking on the first and last block in the set while holding down the shift key. * You can still use Ctrl-Click to add or remove from the selection. * This does not change the features that work on a multi-selection. Currently, the following hotkeys work for multi-selection: spacebar (collapse/uncollapse blocks), V (visibility), I (isolate), T (transparency), Ctrl+C (copy/paste), and Delete. * Tab: quickly navigate from block to block in the notebook with the tab key * You can also use the tab key to navigate from one input to the next. * Escape: use the escape key to deselect blocks. * If an input is selected, press escape once to deselect that input and again to deselect the block. #### Block Updates * We now support importing VTK Unstructured Grid Files (\*.vtu) files using the **Import Model Result**, **Import Static Structural Result**, and **Import Static Thermal Results** blocks. * We have updated the **Quadrangulate Mesh** block to improve the quality of the generated quad meshes. For more information, see the backwards compatibility notice [here](/help-articles/knowledge-base/backwards-compatibility-notices/ntop-5-6-quadrangulate-mesh-updates). #### Bug Fixes * We fixed an issue with the **Static Analysis** that errored out with the "Self-intersecting elements found" message when inverted elements were present using the **Mirror FE Mesh** block. * We fixed an issue with the **Implicit Body from Topology Optimization** block that caused nTop to exit unexpectedly on rare occasions. # nTop 5.7 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-7-what-s-new > [!NOTE] > > nTop 5.7 is here! This release features two new response blocks for Topology Optimization and our new **Collapse Vertices by Angle** block for filtering out unwanted vertices. We also promoted our exact thickness features out of beta! As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Reaction Force Response \[Beta\]](#h-01j921vytnwfqybg3ap26x9w5c) * ### [Combine Design Responses \[Beta\]](#h-01j921vytn5n3kw4m7j7yw4kpj) * ### [Collapse Vertices by Angle](#h-01j921vytngaxt9jw6f3pv1fhz) * ### [Block Updates](#h-01j921vytne8w4a0nh65xp3rnk) * ### [Bug Fixes](#h-01j921vytn8tb7h339c5s23vfk) #### Reaction Force Response \[Beta] * This block can be used to set reaction force limits on specific boundaries such as bolt holes while performing a topology optimization. * Block Name: Reaction Force Response * Location: Beta > Topology Optimization * Description: Create a design response that measures the sum of reaction force vectors across a boundary. The response is derived from the solution of a linear static structural finite element analysis. * Boundary: Boundary that the design response will be computed on. * Load Case: Load case for the design response. * Direction: Operation that will be applied after summing all reaction force vectors over the Boundary input. |X| will compute the magnitude of the reaction force vector projected onto the X-axis, |XY| will compute the magnitude of the reaction force vector projected onto the plane spanned by the X-axis and Y-axis, and |XYZ| will compute the magnitude of the non-projected reaction force vector. * Frame: Reference frame that the reaction force will be computed in. If a frame is not specified, the global coordinate system will be used. * Output: Data Type #### Combine Design Responses \[Beta] * This block combines a list of like design responses in topology optimization workflows, drastically reducing the length of large topology optimizations with numerous like responses. * Block Name: Combine Design Responses * Location: Beta > Topology Optimization * Description: Combines a list of design responses into a single response. The responses are combined according to the operation provided by the Aggregation input. The aggregate can be used in an optimization objective or design response constraint. * Responses: List of design responses to be combined. All elements of the list must have the same units. * Aggregation: The method of aggregation. * Output: Design Response #### Collapse Vertices by Angle * Certain methods of creating lattices can generate highly subdivided beams which conform to surfaces but are difficult to filter or measure. The **Collapse Vertices by Angle** block removes intermediate vertices with an optional threshold to keep sharp angles. There is an overload for this block to use a Lattice input instead of a Graph. Use cases for this block include simplifying highly subdivided voronoi surface lattices or ribbing layouts for filtering workflows or simulation. * Block Name: Collapse Vertices by Angle * Location: Latticing > Utilities * \ Description: Remove all of the intermediate vertices of a graph where the vertex valency is equal to 2. All intermediate vertices will be removed by default, but an optional threshold angle may be used to preserve sharp vertices. * Graph: The graph of which to collapse the beams. * Tolerance: The maximum allowed angular difference between beams joined by a single vertex. Beam angles greater than this threshold will be removed, collapsing the neighboring beams into one. A value of 180 deg will preserve all vertices. * Output: Graph * \ Description: Remove all of the intermediate vertices of a lattice where the vertex valency is equal to 2. All intermediate vertices will be removed by default, but an optional threshold angle may be used to preserve sharp vertices. * Lattice: The lattice of which to collapse the beams. * Tolerance: The maximum allowed angular difference between beams joined by a single vertex. Beam angles greater than this threshold will be removed, collapsing the neighboring beams into one. A value of 180 deg will preserve all vertices. * Output: Lattice ![The Collapse Vertices by Angle block is used to remove excessive vertices based on an input angle. The image shows a lattice before and after using the block to remove extra vertices.](https://files.learn.ntop.com/help-articles/whats-new/CollapseVerticesByAngle.png) #### Block Updates * **Walled TPMS Unit Cell** and **Walled TPMS Unit Cell with Offset** version 1.1.0 is now out of Beta. They can be found in Lattices > Unit Cells * Updated option labels in the Direction Component Enum to use |X| notation instead of |Ux| #### Bug Fixes * We fixed an issue that caused incorrect wall thickness in certain cases when using the **Walled TPMS Unit Cell** block with Exact Thickness selected. * We fixed an issue that would cause nTop to unexpectedly exit in certain cases when both field viewer and GPU acceleration were turned on. # nTop 5.8 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-8-what-s-new > [!NOTE] > > nTop 5.8 is here! This release features our new Get CAD blocks that enable the extraction of CAD geometry in new programmatic ways. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Get CAD Blocks](#h-01ja5xfmw2s5ffxsp4j3z51bsz) * ### [Block Updates](#h-01ja5xfmw2p85sv2mqgt4hwpqq) * ### [Bug Fixes](#h-01ja5xfmw33veejrr5yda0gh8z) #### Get CAD Blocks * The new “Get CAD” Blocks enable more convenient and efficient ways to extract CAD geometry for use in a programmatic workflow. You can programmatically extract CAD geometry by extracting all bodies and faces or filtering them by name or color. * Location: Modeling > Utilities **Get CAD Bodies** * Description: Extracts all CAD Bodies from a Part or Component. * Part: Part from which to get Bodies. * Output: CAD Body List **Get CAD Bodies by Color** * Description: Extracts all CAD Bodies from a Part or Component based on color. * Part: Part from which to get Bodies. * Body Color: Color of Bodies to get. * Output: CAD Body list **Get CAD Bodies by Name** * Description: Extracts all CAD Bodies from a Part or Component based on name. * Part: Part from which to get Bodies. * Body Name: Name of the CAD Bodies to get. * Output: CAD Body list **Get CAD Faces** * Description: Extracts all CAD Faces from a CAD body, Part, or Component. * Part: Part from which to get Faces. * Output: CAD Face List **Get CAD Faces by Color** * Description: Extracts all CAD Faces from a CAD Body, Part, or Component based on color. * Part: Part from which to get Faces. * Color: Color of Faces to get. * Output: CAD Face list Tips * If you are extracting by color and do not know the specific color of the face/body you're looking for, you can click on that face in the CAD object in the viewport to make it a variable in the notebook. Then, use the properties to find the color. * Remember that color can be assigned at the body or face levels, depending on how the file was created in the CAD system. If you're trying to get **CAD Bodies by Color** and it doesn't seem to work, try using the **Get Faces by Color** or vice versa. ![A gif showing an imported CAD part that has many faces of different colors. The Get CAD Faces by Color block extracts the correct faces based on the specified color.](https://files.learn.ntop.com/help-articles/whats-new/34384272444947.png) #### Block Updates * We have promoted the **Map Bitmap to Plane** block from beta into production. You can now find it located in Utilities > Transforms. #### Bug Fixes * We fixed an issue with the **Overhang Constraint** block used in Topology Optimization workflows that caused some optimizations to finish before convergence. * We fixed an issue with **Cell Map from CAD Face** and **Cell Map between CAD Faces** that caused artifacts at cell map boundaries in some scenarios when using an implicit unit cell. * We updated the error message in **Smoothen Body** to be clearer when the Grid Size input value is too small. * We fixed an issue with the Scalar Field property of **Point** that caused a null bounding box to be returned. * We fixed an issue with the **Map Bitmap to Plane** block that caused nTop to exit unexpectedly in some instances. # nTop 5.9 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-5-9-what-s-new > [!NOTE] > > nTop 5.9 is here! This is a lighter release with usage improvements and bug fixes. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ## [Usage Improvements](#h-01jbaqgbe0bfzj4w73c2996aa5) * ## [Bug Fixes](#h-01jbaqgbe0gb76nw8kahc9qn39) ### Usage Improvements * We have added two new Hotkeys. You can find all the information about our hotkeys [here](/help-articles/knowledge-base/user-interface/what-are-the-hot-keys). * “P” to open and close the properties window. * “Ctrl 4” to toggle the ribbon on and off. * You can now view the CAD Component type. ### Bug Fixes * We fixed an issue where the Heads Up Display was not updating when an object was isolated. * We fixed an issue with the **Voxel Grid from Implicit Body** block that caused voxel grids to be generated incorrectly in some cases. # nTop 6.0 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-6-0-what-s-new > [!NOTE] > > nTop 6.0 is here! This major release refreshes the UI with new Shiny Plastic and Brushed Metal display styles, and adds a new set of Shell Modeling blocks for generating, cleaning, and repairing surface meshes. Read more about the new blocks below. We've also introduced nTop Assistant for onboarding and in-context support without leaving nTop. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Visual Design Update](#h-01m2102tvwh15ay32n28fc0jgw) * ### [Shading Update](#h-01m2102tw43b9mnstfj779ef6r) * ### [Sweep along Two Rails](#h-01m2102tw7b5wya4r6v9sjaxgp) * ### [Meshes from Profiles](#h-01m2102twb4t72bqz9j636psa9) * ### [Align Mesh Normals](#h-01m2102twfjnq0g9dq7a4t1ayr) * ### [Boundary Nodes from Open Mesh](#h-01m2102twhtqjmfwa3ntbp643q) * ### [Boundary Polycurves from Open Mesh](#h-01m2102twm9qzyc8bhh0m3nwyb) * ### [Merge and Weld Meshes](#h-01m2102twrxexnwx8nxswnvcnm) * ### [Clean Mesh Faces](#h-01m2102twxv2rwkx8d7jnwp4xg) * ### [nTop Assistant](#h-01m2102tx1540hjyvq1hehs8xs) * ### [Block Updates](#h-01m2102tx5s8hwenhxngv9dryj) #### [Visual Design Update](#h-01m2102tvwh15ay32n28fc0jgw) * We've updated the UI. Colors, buttons, menus, modals, and viewport styling have all been refreshed for a modern feel. ![The updated nTop interface](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/visual-design-update-1.png)![Updated nTop UI detail](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/visual-design-update-2.png)![Updated nTop UI detail](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/visual-design-update-3.png) #### [Shading Update](#h-01m2102tw43b9mnstfj779ef6r) * We've added two new display styles: Shiny Plastic and Brushed Metal. We've also updated the color palette with more saturation, contrast, and a new distribution of default colors, giving nTop a fresh feel along with more visual clarity for understanding and presenting your designs. * To select a display style, select an object and navigate to the right side panel, where you'll find a dropdown for choosing between Diffuse, Shiny Plastic, and Brushed Metal. ![Shiny Plastic and Brushed Metal display styles](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/shading-update.png)![Display style dropdown in the right side panel](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/shading-update-2.png) #### [Sweep along Two Rails](#h-01m2102tw7b5wya4r6v9sjaxgp) * The **Sweep along Two Rails** block sweeps a profile or field along two rail curves and a spine curve. The two rail curves fully define the scale and in-plane rotation of the swept section, while the spine curve controls the alignment of the swept section, preserving its relative orientation with respect to the spine tangent. * Use case: Wings, ducts, channels, ribs. * Location: Modeling > Operations * Profile: Profile to sweep along the rails. * Spine: Spine curve to define section plane orientation. * Rail 1: First rail curve to sweep along. * Rail 2: Second rail curve to sweep along. * Caps: If checked, closes the swept body with planar caps at the start and end of the spine. * Output: Implicit Body ![Sweep along Two Rails block sweeping a profile along two rail curves](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/sweep-along-two-rails.png) #### [Meshes from Profiles](#h-01m2102twb4t72bqz9j636psa9) * The **Meshes from Profiles** block generates a list of conforming meshes from an input list of profiles. Each mesh is a separate object, but has coincident nodes at their intersections, which is what makes them conforming. * Use case: Structural analysis with shell elements. * Location: Beta > Shell Modeling * Profiles: Pre-computed planar profiles to mesh. Each profile produces one mesh in the output list. * Max. Edge Length: Maximum triangle edge length in the output meshes. Pass 0 for no size constraint. * Feature Tolerance: Controls the tolerance for resolving shared intersection vertices and sampling curved profile boundaries. Defaults to 10% of Max. Edge Length when set, otherwise 1% of the profiles' bounding box diagonal. * Output: Mesh List ![Meshes from Profiles block generating conforming meshes](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/mesh-from-profiles.png) #### [Align Mesh Normals](#h-01m2102twfjnq0g9dq7a4t1ayr) * The **Align Mesh Normals** block sweeps across a mesh and ensures that all element normals are consistently oriented. * Use case: Generating and exporting surface meshes. * Location: Beta > Shell Modeling * Mesh: Mesh whose face normals will be reoriented. * Output: Mesh #### [Boundary Nodes from Open Mesh](#h-01m2102twhtqjmfwa3ntbp643q) * The **Boundary Nodes from Open Mesh** block extracts all vertices lying on free edges of an open surface mesh. This collects nodes from all edges that are shared by only one face in the mesh. If the mesh is closed, it returns an empty list. * Use case: Static analysis on connected components. * Location: Beta > Shell Modeling * Mesh: Open surface mesh to extract free-edge vertices from. * Output: Point List ![Boundary Nodes from Open Mesh block extracting free-edge vertices](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/boundary-nodes-from-open-mesh.png) #### [Boundary Polycurves from Open Mesh](#h-01m2102twm9qzyc8bhh0m3nwyb) * The **Boundary Polycurves from Open Mesh** block extracts and chains together all free edges from an open surface mesh, returning each loop as a polycurve. If the mesh is closed, it returns an empty list. * Use case: Static analysis of connected components. * Location: Beta > Shell Modeling * Mesh: Open surface mesh to extract boundary loops from. * Output: Polycurve List ![Boundary Polycurves from Open Mesh block extracting boundary loops](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/boundary-polycurves-from-open-mesh.png) #### [Merge and Weld Meshes](#h-01m2102twrxexnwx8nxswnvcnm) * The **Merge and Weld Meshes** block joins Mesh objects together and collapses vertices that fall within a set distance of one another. * Use case: Static analysis of connected components. * Location: Beta > Shell Modeling * Meshes: Meshes to merge. * Distance Threshold: Vertices within this distance threshold will be merged together into one vertex. If not provided, meshes are concatenated without any vertex welding. * Output: Mesh #### [Clean Mesh Faces](#h-01m2102twxv2rwkx8d7jnwp4xg) * The **Clean Mesh Faces** block removes degenerate faces below a given area and small disconnected components from a surface mesh. Faces are first filtered by area, then edge-connected components with fewer faces than the minimum are removed. * Location: Beta > Shell Modeling * Mesh: Surface mesh to clean. * Min Face Area: Remove faces whose area is strictly below this value. Disabled when 0. * Min Component Faces: Remove edge-connected components with fewer faces than this count. Disabled when 0 or 1. * Output: Mesh ![Clean Mesh Faces block removing degenerate faces from a mesh](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/clean-mesh-faces.png) #### [nTop Assistant](#h-01m2102tx1540hjyvq1hehs8xs) * We've released **nTop Assistant**, which puts onboarding and support right inside your nTop session, so you don't have to switch to your browser. ![nTop Assistant icon in the toolbar](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/ntop-assistant.png) * nTop Assistant opens to two tabs: **Onboarding**, a five-screen walkthrough of the features we most want new users to see, and **Assistant**, the same nTop Docs Assistant available on our website. * Ask a question, attach a file, or take a screenshot of what you're working on to get answers in context. You can also pin the Assistant window on top of your other windows while you work. * *Note: nTop Assistant runs separately from nTop and does not have direct access to your open notebook. Download it from*[*app.ntop.com*](https://app.ntop.com/)*.* ![nTop Assistant window with Onboarding and Assistant tabs](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/ntop-assistant-2.png) #### [Block Updates](#h-01m2102tx5s8hwenhxngv9dryj) * We've added a new overload for the **Remesh Surface** block that gives more options to preserve geometry through the remesh process. The new *Preserved Lines* input ensures that specified edges survive remeshing, and the new *Preserved Region* input preserves edges and faces that occur within a specified body. * Location: Structures > Mesh * Preserved Lines (new): A list of polycurves whose edges will be recovered in the output mesh. Each polycurve is sampled at the target edge length, and the resulting edges are guaranteed to appear in the remeshed output. * Preserved Region (new): An implicit body defining the region to preserve. Edges and faces of the input mesh that lie within the body are kept intact. * Output: Mesh ![Remesh Surface block preserving lines and regions during remeshing](https://storage.googleapis.com/ntop_installers/releaseNotes/6.0/remesh-surface.png) ## Keywords: *new what what's new what's* # nTop 6.1 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-6-1-what-s-new > [!NOTE] > > nTop 6.1 is here! This is a lighter release with stability improvements for nTop Fluids and some UI polish. As with every release, nTop's dedicated support team is ready to answer your questions. Please visit [support.ntop.com](https://support.ntop.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01m32q1jfh4528gmwk1t6khff5) * ### [Bug Fixes](#h-01m32q1jfny55w327ctzab0mak) #### [Usage Improvements](#h-01m32q1jf07eqxejxqa963qjvk) * We made minor spacing and chip outline polish for variable blocks. #### [Bug Fixes](#h-01m32q1jf417fscpejxyq33byn) * We fixed an issue in **nTop Fluids** where simulations on fluid and solid meshes with a degenerate coarse mesh level could silently produce incorrect velocity results instead of properly converging or diverging. * We fixed an issue in **nTop Fluids** where density near certain mesh boundaries was calculated incorrectly during heat transfer simulations using wall functions. * We fixed an issue in **nTop Fluids** where regions with boundary conditions were reported to fail during voxelization. * We fixed an issue where the body would shift in the viewport when a block's Angle input field was selected while scrubbing. ## Keywords: *new what what's new what's whats new whats* # nTop Platform 2.00 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-00-what-s-new ### Summary > [!NOTE] > > nTopology announces the latest version of their computational-modeling software, nTop Platform 2.0, the only engineering software that enables engineers to simultaneously consider geometry, performance and manufacturability all within a single, reusable workflow. This major release includes support for prepackaged, application-specific nTop Toolkits, letting engineers quickly learn and use its most powerful capabilities right out of the box. > > nTop Platform was developed to solve engineering problems where geometry is a bottleneck. It can handle complexity and iteration with speed and ease. The prepackaged Toolkits and authoring capabilities can both be used to automate engineering workflows, delivering efficiencies and scaling an organization's best talent across the enterprise. With nTop Platform, teams can automate tasks that take hours, days or weeks with traditional design tools because of the ability to build reusable workflows. > > “We are excited to release 2.0 of nTop Platform,” says Bradley Rothenberg, CEO of nTopology, “nTop Toolkits enable the best engineering workflows to spread wide throughout industries, making the most advanced modeling technology accessible to any design engineer.” > > nTopology is also partnering with industry leaders in additive manufacturing hardware to deliver new capabilities to their users. “The flexibility and high-performance of nTopology software and its ability to package-up customer workflows helps us and our customers to create advanced Digital Foam,” says Fabian Krauss, Global Business Development Manager at EOS. “We use it in projects to create 3D-printed products with architected materials properties tailored exactly to customer needs. It unlocks the true potential of generative design in Additive Manufacturing for Digital Foam and for many other applications.” > > In addition to the new prepackaged Toolkits, nTop Platform's authoring capabilities allow your most advanced engineers to create their own proprietary toolkits, enabling secure knowledge transfer across your organization. > > For more information about our toolkits, please visit our [website](https://ntopology.com) ### New Features and Improvements * #### [New TPMS Blocks](#new-tpms-blocks) * #### [Topology Optimization: Element Densities as a Point Map](#topology-optimization-element-densities-as-a-point-map) * #### [Topology Optimization: Export Convergence History](#topology-optimization-export-convergence-history) * #### [Topology Optimization: Displacement and Stress Constraints](#topology-optimization-displacement-and-stress-constraints) * #### [Random Points on Mesh Block](#random-points-on-mesh-block) * #### [New Information Tree Panel](#new-information-tree-panel) * #### [Curve Integral block](#curve-integral-block) * #### [Usage Improvements](#usage-improvements) #### [New TPMS Blocks](#new-features-and-improvements) * The old TPMS blocks have been replaced with new ones that are scaled more appropriately than the old ones, which fixes issues that can occur with the geometry at larger scales. * The blocks have also been broken into two families – **Walled TPMS** and (solid) **TPMS**, and their related cylindrical and spherical conterparts. This replaces the old functionality of having thickness produce walls, unless it is 0 or less. * nTop files containing old TPMS blocks will still load. #### [Topology Optimization: Element Densities as a Point Map](#new-features-and-improvements) * Convert the element densities from topology optimization into a point map and then to a field. * This field can be used like any other in our software and allow you to drive geometric parameters based on the results of topology optimization. #### [Topology Optimization: Export Convergence History](#new-features-and-improvements) * Export the convergence history of a topology optimization algorithm for verification. #### [Topology Optimization: Displacement and Stress Constraints](#new-features-and-improvements) * The topology optimization can now be performed considering displacement and stress constraints. #### [Random Points on Mesh Block](#new-features-and-improvements) * We've updated the Random Points on Mesh block to include a new input called **Spatial weighting** which enables users to create a variable point density. Below is an example of a variable voronoi boundary lattice generated from a list of points, variably spaced, using this revised block. ![A voronoi lattice structure.](https://files.learn.ntop.com/help-articles/whats-new/360075336594.png) #### [New Information Tree Panel](#new-features-and-improvements) * We've added an intuitive way to navigate any block's properties via the Properties panel. * In addition to displaying the properties of a block, you can now access individual list items and their properties. * To view the properties or objects within objects, click the triangle to the left of the chip to expand. * Lastly, units and values are displayed to the right of each chip. You can now right click each line to copy the text to your clipboard. ![Each block has a properties panel that displays properties of the implicit body.](https://files.learn.ntop.com/help-articles/whats-new/360076500833.png) #### [Curve Integral Block](#new-features-and-improvements) * The Curve Integral block lets users integrate a function over a curve. * **Inputs**: * Curve: The curve to integrate across. * Integrand: The function that will be integrated. * Relative Error: The relative error used to determine convergence. * **Output**: real #### [Usage Improvements](#new-features-and-improvements) * **Comment Tab:** The description tab located in the block information panel is now called “Comment”. * **Visualize Scalar Fields Shortcut** You are now able to access the field viewer directly from the right-click menu of the block. Use hotkey '**F**' with a block selected to open the field viewer. * **Simulation HUD Improvements:** We have updated our HUD UI for a cleaner look. See below ![The simulation hud that appears when analyzing results.](https://files.learn.ntop.com/help-articles/whats-new/360075336614.png) ## Keywords: *ntop new what's new release notes what's 2.0 platform release notes* # nTop Platform 2.01 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-01-what-s-new ### Summary > [!NOTE] > > nTopology's nTop Platform 2.1 is here! This release has some improvements to the usability of the system, as well as an improvement to the functionality of the Random Points in Volume block. The usability improvements include a dragging interaction from the properties to the tree, as well as an improvement in the support for headers or comments in imported CSV files. The functionality improvements of the Random Points in Volume block allow for more accurate results. ### New Features and Improvements * #### [Drag Property Blocks to Tree](#drag-propety-blocks-to-tree) * #### [CSV Header/Comment Support](#csv-header-comment-support) * #### [FE Model Property Access](#fe-model-property-access) * #### [Random Points in Volume Improvement](#random-points-in-volume-improvement) * #### [Usage Improvements](#usage-improvements) #### [CSV Header/Comment Support](#new-features-and-improvements) * Any block that imports a CSV file will now support files that have a header or comment, denoted with a # at the beginning. * Any line that starts with a # will be ignored when processed. * This currently affects the blocks Import Points, Import Real Point Map, and Import Vector Point Map. #### [Drag Property Blocks to Tree](#new-features-and-improvements) * You can now drag values straight from the property list into the notebook. * When you drag a property chip into the tree, it will automatically create a variable for it and place it where you drag it to. ![A box block with its properties panel open. You can extract property chips and place them in the notebook.](https://files.learn.ntop.com/help-articles/whats-new/360076500753.png) ### FE Model Property Access * Quickly access useful information associated with a specific FE Model, such as the FE mesh for setting up loads & boundary conditions and element count. * This also enables workflows where the FE model is imported or created using a custom block as the underlying FE Meshes can be accessed from the property tree. See the new property structure below: * **FE Model** * list **FE Component** * FE Mesh * Element count * Node count * list **FE Attribute** * Material * Frame * Region * list **Connectors** ### Random Points in Volume Improvement * The **Random Points in Body** block has been improved to return a more accurately spaced set of points, based on user input. * Files that use the previous version of the block with less accurate values will still load in and return the previous values, and you can switch to the new one by selecting it in the ribbon or searching for it in the Add Block search bar. ### Usage Improvements * Axis block now has a vector property. * Homogenization results can now be utilized as a material. * Offsetting the body of a honeycomb lattice with a thickness of 0 mm no longer results in a hard crash. * nTop Body/Mesh from CAD Body no longer throws runtime errors if the tolerance is too low. * Random points in body “point spacing” now returns the correct spacing. In previous versions, the point spacing was larger than specified. * The transfer function now work with implicits. * Thermal Analysis with disconnected regions no longer leads to a failed solver. * Users can now type “um” for units of microns. ## Keywords: *2.1 ntop new what's new release notes what's platform release notes* # nTop Platform 2.02 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-02-what-s-new ### Summary > [!NOTE] > > nTopology's nTop Platform 2.2 is here! This release features exciting new user interface updates including the ability to personalize the ribbon, block version information, better commenting features, and a new field viewer probe enabling users to query field values in real time with a mouse. We've also updated our Import Part block functionality to improve the ease of use when importing and using CAD parts containing single or multiple CAD bodies. In addition, this release includes new voxel grid blocks, the ability to slice unthickened beam lattices, and a new conformal lattice Isogrid type. ### New Features and Improvements * #### [Block Versioning](#block-versioning) * #### [Commenting feature updates](#commenting-feature-updates) * #### [Field value probe](#field-value-probe) * #### [Hide and order tabs in the Ribbon](#hide-and-order-tabs-in-the-ribbon) * #### [Import Part update](#import-part-update) * #### [Isogrid in the circumferential direction](#isogrid-in-the-circumferential-direction) * #### [Offset & Smoothen Voxel Grid blocks](#offset-smoothen-voxel-grid-blocks) * #### [Slice directly from an unthickened lattice](#slice-directly-from-an-unthickened-lattice) * #### [Usage Improvements](#usage-improvements) #### [Block Versioning](#new-features-and-improvements) * All native nTop Platform blocks now contain versioning, which enables the user to switch between older and newer versions, if available. In the event that a block's structure or underlying algorithm changes, old files will continue to use the older version. The user can then decide if they want to update the block manually. * To access a block's version, select the question mark icon located in the upper right corner and scroll to the bottom of the information panel to the version dropdown menu. ![A box block with its properties panel open to the information tab. Here users can select the block version.](https://files.learn.ntop.com/help-articles/whats-new/360076500373.png) #### [Commenting feature updates](#new-features-and-improvements) * We've improved our commenting feature for blocks to include the following: * A dropdown arrow to expand and collapse text, which appears once text extends beyond 3 lines. * A scroll bar for text that extends beyond 30 lines ![Block comments now have a scroll bar for long comments.](https://files.learn.ntop.com/help-articles/whats-new/360076500393.png) #### [Field value probe](#new-features-and-improvements) * You can now see the individual values of a field by enabling the “Probe Values” checkbox in the field viewer and hovering your mouse over the visible field. * To access the Field Viewer either right click the block containing the field to view and select “Field Viewer” from the menu or select the block and press the hotkey “F”. ![Users can move their mouse over a field to probe the field values.](https://files.learn.ntop.com/help-articles/whats-new/360075336214.png) #### [Hide and order tabs in the Ribbon](#new-features-and-improvements) * You can now hide and unhide tabs in the ribbon by going to File > Settings > Ribbon and enabling the visibility by checking or disabling the visibility by unchecking. * You can also rearrange the order in which they appear from left to right by selecting the up or down arrow. * Once you are ready to commit your changes, select **Apply** and then **OK**. ![The ntop settings menu open to the ribbon tab. Users can choose which ribbon tabs are visible in their interface.](https://files.learn.ntop.com/help-articles/whats-new/360076500413.png) #### [Import Part update](#new-features-and-improvements) * The Import Part block has been updated so that it can no longer be added to the input of others blocks, without explicitly extracting the CAD Body or Bodies as variables. * In previous versions, the Imported Part block could serve as the input to another block, but this would spawn a list of outputs, which was causing issues in downstream processes. #### [Isogrid in the circumferential direction](#new-features-and-improvements) * We have introduced a new conformal lattice option for Isogrids called “Triangular Honeycomb Rotated”. This new unit type is available in the **Conformal Lattice between CAD Faces** and the **Conformal Lattice from CAD Face** blocks. Below is an image of the new Isogrid lattice. ![We have introduced a new conformal lattice option for Isogrids called “Triangular Honeycomb Rotated”. This new unit type is available in the Conformal Lattice between CAD Faces and the Conformal Lattice from CAD Face blocks. Below is an image of the new Isogrid lattice.](https://files.learn.ntop.com/help-articles/whats-new/360076500433.png) #### [Offset & Smoothen Voxel Grid blocks](#new-features-and-improvements) * We've introduced two new voxel grid blocks: **Offset Voxel Grid** and **Smoothen Voxel Grid**. Below are their descriptions and inputs: * **Offset Voxel Grid**: Apply an offset to the narrow band of a voxel grid. * **Grid**: The voxel grid to offset. * **Distance**: The amount to offset the voxel grid in world space. A positive value will offset inward while a negative value will offset outward. * **Smoothen Voxel Grid**: Apply a filtering function to smoothen a voxel grid. * **Grid**: The voxel grid to smoothen. * **Filter**: The smoothening method to use. * **Iterations**: The number of filter iterations to apply. * **Width**: The width of the filter kernel in voxel units. This value is only used for the Gaussian, Median, and Mean techniques. #### [Slice directly from an unthickened lattice](#new-features-and-improvements) * Users can now slice unthickened beam based lattices directly. * This gives users slices that are composed of points that represent the beam instead of contours. * This enables users to control beam thickness by modifying the laser parameters as an alternative to creating thickened geometry. ![An example of using the Slice Lattice block to slice an unthickened lattice.](https://files.learn.ntop.com/help-articles/whats-new/360076500453.png) #### [Usage Improvements](#new-features-and-improvements) * **Closest Point** block now works inside of an object. * Frame input in the **Remote Point Force** and **Moment** blocks has been corrected. * New descriptions are available for the Remap blocks located in the field tab. * **Box**: Changed input name order to say Length, Width, Height. The first input maps to the x-axis while the second maps to the y-axis. * **Extrude** renamed to **Extrude Profile** * **Loft** renamed to **Loft between Profiles** * **Revolve** renamed to **Revolve Profile** * **Sweep** renamed to **Sweep Profile** * **Twisted Sweep** renamed to **Twisted Sweep Profile** * **Mix** has been moved to move to Math/Utilities ## Keywords: *ntop new what's new release notes what's 2.2 platform release notes* # nTop Platform 2.03 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-03-what-s-new ### Summary > [!NOTE] > > nTopology's nTop Platform 2.03 is here! This release features an improved commenting feature that informs users of nested blocks containing comments, as well as usage improvements and toolkit updates. We are working on some big new features that'll be available soon. Stay tuned! ### New Features and Improvements * #### [Improved Notebook Commenting](#improved-notebook-commenting) * #### [Usage Improvements](#usage-improvements) * #### [Toolkit Updates](#toolkit-updates) #### [Improved Notebook Commenting](#new-features-and-improvements) * Users can now easily identify blocks with comments that are nested within other blocks. * In previous versions, there was no way for a user to know if a block had a description if it had been nested within another block. * As shown below, blocks with comments that are nested within other blocks now have a comment icon that appears to the left of the visibility icon. ![An example of adding a comment to a notebook block.](https://files.learn.ntop.com/help-articles/whats-new/360075336154.png) #### [Usage Improvements](#new-features-and-improvements) * Resolution Tab names updated to the following: * Low Res * Medium Res * High Res * Highest Res #### [Toolkit Updates](#new-features-and-improvements) * Toolkits 0.2.2 is now available for all cloud licensed users through app.ntopology.com * For non-cloud licensed users, please contact [support@ntopology.com](mailto:support@ntopology.com) if you'd like to receive the latest toolkit installer and example files. * Below are the latest updates: * **Topology Optimization Toolkit**: * Bug fix for the **Construct Optimized Body** block, where if saved in nTop Platform 2.1, it would throw an error in nTop Platform 2.2. ## Keywords: *ntop new what's new release notes what's platform 2.3 release notes* # nTop Platform 2.04 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-04-what-s-new ### Summary > [!NOTE] > > nTopology's nTop Platform 2.4 is here! This release features a new license login screen, a powerful new orthofoam lattice block, and an important update to the toolkit installer. As with every release, nTopology's dedicated support team is ready to help answer your questions. ### New Features and Improvements * #### [New nTop Platform Login Window](#new-ntop-platform-login-window) * #### [New Orthofoam Lattice Block](#new-orthofoam-lattice-block) * #### [Toolkit Updates](#toolkit-updates) #### [New nTop Platform Login Window](#new-features-and-improvements) * **Cloud Licensed Users** * If you are a new cloud licensed user, log in to nTop Platform by providing your email and password. * If you are an existing cloud licensed user, the login window will not appear unless: * Your license has expired. * You've been disconnected from the internet for more than 10 days. * You've logged out of nTop Platform (File > Logout) * **Local Licensed Users** * If you are a new local licensed user, load your local license by selecting the **Use Local License** feature beneath the **Login** button. * If you are an existing local licensed user, the login screen will not appear unless: * Your license has expired. * You've deleted your license. ![The nTop platform login window.](https://files.learn.ntop.com/help-articles/whats-new/360075336054.png) #### [New Orthofoam Lattice Block](#new-features-and-improvements) * We've significantly improved the computation speed of the orthofoam algorithm and have introduced several new inputs as a result. Below is an overview of the new orthofoam lattice block. * **Orthofoam Lattice**: Create an orthofoam lattice by generating beams between points within a certain distance and direction of each other. A scaling vector field is used to help influence the direction in which points will be connected. * **Vertices**: List of points to generate the orthofoam lattice from. * **Scale Vector**: Vector field to scale the distance function used to connect neighboring vertices together. * **Valency**: Minimum number of nearest vertices to join each vertex. * Previous Orthofoam blocks will be deprecated. ![An example lattice generated using the Orthofoam Lattice block.](https://files.learn.ntop.com/help-articles/whats-new/360075336074.png) #### [Toolkit Updates](#new-features-and-improvements) * Toolkits can now be installed from a non-admin account. * Toolkits 0.2.3 is now available for all cloud licensed users through app.ntopology.com. * For non-cloud licensed users, please contact [support@ntopology.com](mailto:support@ntopology.com) if you'd like to receive the latest toolkit installer and example files. ## Keywords: *ntop new what's new release notes 2.4 what's platform release notes* # nTop Platform 2.05 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-05-what-s-new ### Summary > [!NOTE] > > nTopology's nTop Platform 2.5 is here! This release features significant updates such as multithreaded simulation blocks for improved computation speed, improvements to our Slice and Slice Lattice blocks to give users more explicit slicing control, Type descriptions in block documentation to improve onboarding, and a handful of other great usage improvements. As with every release, nTopology's dedicated support team is ready to help answer your questions. ### New Features and Improvements * #### [Block Documentation Type Descriptions](#block-documentation-type-descriptions) * #### [Documentation in Program Data](#documentation-in-program-data) * #### [Multithreaded Simulation](#multithreaded-simulation) * #### [Slice & Slice Lattice Block Updates](#slice-slice-lattice-block-updates) * #### [Usage Improvements](#usage-improvements) #### [Block Documentation Type Descriptions](#new-features-and-improvements) * We've updated the Type catalog in Block Documentation to include Type descriptions to help users better understand the function of each Type. * To access Block Documentation, go to **Help > Documentation** and navigate to the **Block Documentation** menu and select **Types**: See an example below: ![The image shows the block documentation for the circle block. ](https://files.learn.ntop.com/help-articles/whats-new/360076500253.png) #### [Documentation in Program Data](#new-features-and-improvements) * Documentation now resides in Program Data, which enables all users to access documentation regardless of their user privileges. * If you'd like to access documentation, please go the **Help > Documentation**. #### [Multithreaded Simulation](#new-features-and-improvements) * In order to utilize all the cores of your system and improve computation speed, the following simulation blocks are now multithreaded: * Buckling Analysis * Homogenize Unit Cell * Modal Analysis * Static Analysis * Topology Optimization * Thermal Analysis #### [Slice & Slice Lattice Block Updates](#new-features-and-improvements) * **Slice**: * Renamed to **Slice Body**. * **Frame** input is now optional and a toggle for **Include negative Z** has been introduced. When toggled to true, this feature will slice the object in the negative z-axis of the frame. By default, the frame is set at the XYZ origin. * Backward compatibility: Files containing the previous version of this block will open. Since the Frame input used to be required, it will remain in the now optional input. The Include negative Z parameter will be turned to true since this was the default behavior prior to introducing this option. ![An example of using the Slice Body block on a cube.](https://files.learn.ntop.com/help-articles/whats-new/360075335814.png) * **Slice Lattice**: * **Frame** input is now optional and a toggle for **Include negative Z** has been introduced. When toggled to true, this feature will slice the object in the negative z-axis of the frame. By default, the frame is set at the XYZ origin. * Backward compatibility: Files containing the previous version of this block will open. Since the Frame input uses to be required, it will remain in the now optional input. The Include negative Z parameter will be turned to true since this was the default behavior prior to introducing this option. ![An example of using the Slice Lattice block.](https://files.learn.ntop.com/help-articles/whats-new/360075335834.png) #### [Usage Improvements](#new-features-and-improvements) * All Math blocks have been updated and optimized to handle large lists. * Collapse Mesh Vertices block now has a Distance Threshold parameter. **Distance Threshold**: Max distance to determine if vertices should be joined. * Exported FE Lattice with the lattice saved as a .cdb/.k format now imports properly. * nTop Platform no longer becomes unresponsive if the user downloads the latest update and closes the software. * STEP assemblies can now be imported, but like all other assembly types, they are currently imported as a flattened list of CAD Bodies. * The login window for nTop Platform now provides feedback when loading an expired local license. ## Keywords: *ntop new what's new release notes 2.5 what;s platform release notes* # nTop Platform 2.06 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-06-what-s-new ### Summary > [!NOTE] > > nTopology's nTop Platform 2.6 is here! This release features significant updates to our section cut tool, which now lets users cut through multiple objects at once. We've also introduced new menus for account settings, support, and software updates. The new software update menu also includes a progress bar to track the download of the latest release. In addition, local licenses are now hosted on app.ntopology.com. nTopology's dedicated support team is ready to help answer any questions you may have about this new release. ### New Features and Improvements * #### [Topology Optimization Objective and Constraint Graphs](#topology-optimization-objective-and-constraint-graphs) * #### [Toolkits now ship with nTop Platform](#toolkits-now-ship-with-ntop-platform) * #### [New Help Menu](#new-help-menu) * #### [New User Profile Menu](#new-user-profile-menu) * #### [Local Licenses on app.ntopology.com](#local-licenses-on-app-ntopology-com) * #### [New Software Updates Menu](#new-software-updates-menu) * #### [New Section Cut Functionality](#new-section-cut-functionality) * #### [Usage Improvements](#usage-improvements) * #### [Toolkit 0.3 Updates](#toolkit-0-3-updates) #### [Topology Optimization Objective and Constraint Graphs](#new-features-and-improvements) * Topology Optimization results now include graphs for all objectives and constraints in the Display tab. * To access the Display tab, select the question mark icon at the top right of the Topology Optimization block to open the information panel. Once open, select the Display tab and select the objective or constraint graph you'd like to see. ![Graphs of the optimization objective and constraints are now visible in the display tab of a completed topology optimization block.](https://files.learn.ntop.com/help-articles/whats-new/360076500153.png) #### [Toolkits now ship with nTop Platform](#new-features-and-improvements) * The following Toolkits now ship with nTop Platform: * Additive Manufacturing * Architected Materials * Design Analysis * Lightweighting * Topology Optimization * There is no additional installation process required. * The toolkits installer, which was originally hosted on user accounts at app.ntopology.com has been removed. * All toolkit example files are hosted on user accounts at app.ntopology.com. * To modify the visibility of the above toolkits and all other tabs in nTop Platform, go to **File > Settings > Ribbon** and check or uncheck the tab name to change visibility. To modify the order, select the up or down arrows to the right of the tab name in this window. * **Note:** Having an older version of the toolkits installed will not cause any conflicts. If you installed an older version with the separate .msi file, you can safely uninstall them from the Windows **Add and Remove Programs** section in the windows settings. #### [New Help Menu](#new-features-and-improvements) * The Help menu, which is now represented as an icon, appears to the far right of the user interface and includes the following menu options: * About * Documentation * What's New * Support #### [New User Profile Menu](#new-features-and-improvements) * We've introduced a new User Profile menu that links users directly to their online nTopology account at [app.ntoplogy.com](https://app.ntopology.com/). * If you do not have an nTopology account, please reach out to [**support@ntopology.com**](mailto:support@ntopology.com). #### [Local Licenses on app.ntopology.com](#new-features-and-improvements) * We now offer the ability to have your local license hosted on your nTopology account. * If you'd like to have an nTopology account at [app.ntoplogy.com](https://app.ntopology.com/) and would like to have access to your local license through your account, please reach out to [**support@ntopology.com**](mailto:support@ntopology.com) #### [New Software Updates Menu](#new-features-and-improvements) * We've introduced a new software update icon and menu to the far right of the user interface that turns green when a new release is available. * When this happens, select the icon to expand the menu and select the option to update to the latest release. * Once the download begins, a progress bar will appear indicating the time remaining for the download. * You can cancel at any time by selecting the **X** next to the progress bar. * Once the new version has been installed, the Icon will turn grey, indicating that no new release is available at this moment in time. #### [New Section Cut Functionality](#new-features-and-improvements) * We've improved our section cut tool to let users cut through multiple objects at once. * We've introduced **x** as a shortcut to activate this feature. * To cut through individual objects, change the Mode from **Global** to **Selection**. * To invert the direction of the section cut, select the **Flip Normal** button beneath the Plane normal parameters. * By default, the outline of the display style is set to **Outline**. You can remove the outline by changing the display style to **Shaded**. ![An example of using the section cut function on an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/360075335734.png) #### [Usage Improvements](#new-features-and-improvements) * Upon solving a Static Analysis, Von Mises Stress Results now appear as the first stress option when the stress overload is selected in the Heads Up Display (HUD). #### [Toolkit 0.3 Updates](#new-features-and-improvements) * **General:** * Toolkits now support block deprecation. Any files that contain older deprecated blocks from a toolkit will continue to load if you update the toolkit to a newer version, and run as they did before. * Toolkits will now only show a single instance of a toolkit block in the search even if that block shows up in 2 or more toolkits. * **Architected Materials Toolkit:** * **Infill Orthofoam Lattice**: * Now using the new Orthofoam Block, which uses a different algorithm, but has major improvements on speed. * **Voronoi Bubbles:** * A new parameter added called **Feature size** enabling the user to control the underlying mesh feature size of the object. Users can increase this value to improve speed while texturing large scale objects. * **Lightweighting Toolkit:** * **Shell and Gyroid:** * Bug Fix: Blend radius now works. * **Shell and Voronoi:** * Bug Fix: Blend radius now works. ## Keywords: *ntop new what's new release notes 2.6 what's platform release notes* # nTop Platform 2.07 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-07-what-s-new ### Summary > [!NOTE] > > nTopology's nTop Platform 2.7 is here! This release features some significant updates such as the ability to automatically hide nested blocks, the ability to import and export meshes in a .3mf file format, a new Slice Mesh block in the manufacturing pipeline, and a new Point Restraint boundary condition block in the simulation pipeline. In addition, there are several major usage improvements, such as saving views in the viewport, new mathematical constant blocks in the Math tab, improved zoom functionality, Type icons in block documentation, and new logout prompts. As with every release, nTopology's dedicated support team is ready to answer your questions. ### New Features and Improvements * #### [Auto-Hide Nested Blocks](#auto-hide-nested-blocks) * #### [Import / Export Mesh as .3MF](#import-export-mesh-as-3mf) * #### [Point Restraint Block](#point-restraint-block) * #### [Save Views](#save-views) * #### [Slice Mesh Block](#slice-mesh-block) * #### [Usage Improvements](#usage-improvements) #### [Auto-Hide Nested Blocks](#new-features-and-improvements) * Users can now automatically turn off the visibility of nested blocks by enabling the **Auto-Hide Nested Blocks** functionality in the settings window. * For example, if this feature is enabled and a user were to join two objects using the Boolean Union block, the two objects would no longer have their visibility enabled once the two inputs of the Boolean Union block are satisfied and the block runs successfully. The only object visible at this point would be the resulting object. See the example below: ![Users can now automatically turn off the visibility of nested blocks by enabling the Auto-Hide Nested Blocks functionality in the settings window.](https://files.learn.ntop.com/help-articles/whats-new/360075335634.png) * To access this setting, go to **File > Settings > General**. This option is turned “off” by default. #### [Import / Export Mesh as .3MF](#new-features-and-improvements) * Users can now import and export Meshes as .3mf. * There is now an additional .3mf option at the bottom of the Mesh file types drop down menu when importing or exporting meshes. * .3mf mesh file types are lighter in file size than .stl file formats. #### [Point Restraint Block](#new-features-and-improvements) * The simulation pipeline now includes a Point Restraint block, which is located in the Boundary Condition menu of the Simulation tab. * The Point Restraint block applies a displacement restraint to a remote point. Below are the inputs: * **Point:** The restraint application point. * **Boundary:** The boundary entities containing the nodes to restrain. * **Ux:** Option to restrain translation along the x-axis. * **Uy:** Option to restrain translation along the y-axis. * **Uz:** Option to restrain translation along the z-axis. * **Rx:** Option to restrain rotation along the x-axis. * **Ry:** Option to restrain rotation along the y-axis. * **Rz:** Option to restrain rotation along the z-axis. * **Frame:** The coordinate system for the point restraints. * Below is an example in context: ![An example static analysis run using the Point Restraint block.](https://files.learn.ntop.com/help-articles/whats-new/360075335654.png) #### [Save Views](#new-features-and-improvements) * Users can now save views in the viewport. * Select **Views > Named Views** to open the Named Views window. * From the Named Views window, users can select the following default views: * Home * Top * Right * Front * From the Named Views window, a user can also create, name, update, and delete their own views using the **New Named View** option below the list of available views. * In addition, users can update the Home view. * Named Views are saved per file. ![You can now save specific views in the named views window.](https://files.learn.ntop.com/help-articles/whats-new/360075335674.png) #### [Slice Mesh Block](#new-features-and-improvements) * Users can now directly slice meshes using the Slice Mesh block. * The Slice Mesh block creates a stack of cross-sectional slices from a mesh. Below are the inputs: * **Mesh:** the mesh to slice. * **Layer Height:** Spacing between slice layers. * **Include negative Z:** Option to include layers with negative Z values with respect to the frame, if any. By default, this block will slice only in the positive Z direction. * **Frame:** Frame to orient the slicing and act as the origin of the slice data. If no frame is provided, the slices are generated from the origin and parallel to the XY plane in the positive Z direction. #### [Usage Improvements](#new-features-and-improvements) * **Export Text List:** Users can now export a list of text to a single file using the **Export Text** block. This operation is available as an overload, and can be accessed via the overload dropdown of the block. Each item of text in the list will be written to a new line in the output file. * **Implicit Body, Scalar Field, Scalar type name change:** * We have changed the names of a few objects in our system: * nTop Bodies are now Implicit Bodies. * Reals are now Scalars. * Real Fields are now Scalar Fields. * **Affects of this change:** * All references to the old names will be replaced with the new names. * Blocks like nTop Body from Mesh will now be Implicit Body from Mesh. * **Not affected:** * Files from previous versions will be unaffected, and all original functionality will remain. * Only the block names and some property chips will have changed. * Any Custom naming, Descriptions, or Comments will not be changed. * **Implicit Rendering Enhancements:** Rendering speeds of native implicit geometry has been improved by a factor of 1.5x to 15x”. * **New Logout Prompts:** in the user profile menu, users are now prompted when they select logout. * **New Mathematical Constants:** Euler's number, Gravity, Pi, and the Golden Ratio are now available in a new menu called **Constants** in the Math tab. * **Type Icons in Documentation:** Type icon images are now included in the Type documentation. To access Type documentation, go to **Documentation > Block Documentation > Types**. * **Zoom to Cursor:** the camera now zooms to the cursor using the following actions: Ctrl + right mouse button + move mouse. ## Keywords: *ntop new what's new release notes what's 2.7 platform release notes* # nTop Platform 2.08 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-08-what-s-new #### Summary > [!NOTE] > > nTopology's nTop Platform 2.8 is here! This release is full of great new features, such as new user profiles that make onboarding and getting started with nTop Platform quick and easy, a Viewport Ruler that gives users the ability to measure objects in orthographic view, new mesh utility blocks for splitting and merging mesh entities, a Bearing Load boundary condition in the simulation pipeline, and several impactful usability improvements. As with every release, nTopology's dedicated support team is ready to answer your questions. ### New Features and Improvements * #### [Bearing Load Boundary Condition Block](#bearing-load-boundary-condition-block) * #### [Configure Proxy Settings](#configure-proxy-settings) * #### [Enhanced User Profiles](#enhanced-user-profiles) * #### [Go To Variable Feature](#go-to-variable-feature) * #### [New Mesh Utility Blocks](#new-mesh-utility-blocks) * #### [Pre-Select Toolkit Visibility](#pre-select-toolkit-visibility) * #### [Search Results in Documentation](#search-results-in-documentation) * #### [Selection Mode](#selection-mode) * #### [User Interface Ruler](#user-interface-ruler) * #### [Usage Improvements](#usage-improvements) #### [Bearing Load Boundary Condition Block](#new-features-and-improvements) * **Description:** Apply a bearing force on a cylindrical boundary. * **Boundary:** The boundary to apply the bearing force to. Requires a boundary of 2-D entities. * **Vector:** The bearing force vector. * **Frame:** The orientation for the bearing force. * **Output:** FE Force ![A static analysis simulation run using the Bearing Force block.](https://files.learn.ntop.com/help-articles/whats-new/360075335474.png) #### [Configure Proxy Settings](#new-features-and-improvements) * Users can now manually configure Proxy Settings via the nTop Platform Login window. * To do so, select Configure proxy settings at the bottom of the login screen. * The following screen will provide users with the option to override their existing settings and to manually specify the host and port of the proxy server. * This feature has been implemented to enable customers to setup cloud licensing in enterprise environments. * If configuring proxy settings is applicable to you, please contact your IT administrator for assistance or please reach out to [support@ntoplogy.com](mailto:support@ntoplogy.com) for additional setup information. ![The nTop login window open to the proxy settings.](https://files.learn.ntop.com/help-articles/whats-new/360075335514.png) #### [Enhanced User Profiles](#new-features-and-improvements) * We've completely redesigned your nTopology user account to improve your onboarding experience. * User profile onboarding material includes example files, video tutorials, and links to marketing and support content. * To access your user profile, go to [app.ntoplogy.com](https://app.ntopology.com/) and provide your credentials. * If you are a customer or user and do not yet have an nTopology account, please reach out to product support at [support@ntopology.com](mailto:support@ntopology.com) and request access. ![The ntop user dashboard open to the resources tab on app.ntop.com.](https://files.learn.ntop.com/help-articles/whats-new/360076500053.png) #### [Go To Variable Feature](#new-features-and-improvements) * We've introduced a new feature called “Go To Variable” which lets users locate referenced variables. * To utilize this feature, right-click on the input to a block that is referencing a variable and select **Go To Variable**. * The referenced variable will highlight at the root level. See an example below: ![You can now right click an input variable and select "Go to variable block". This will automatically highlight the variable in the workflow.](https://files.learn.ntop.com/help-articles/whats-new/360075335494.png) #### [New Mesh Utility Blocks](#new-features-and-improvements) * **Split Mesh Block:** * **Description:** Split a mesh into a list of connected components. * **Mesh:** Mesh to Split. * **Output:** Mesh list * **Filter Mesh Block:** * **Description:** Filter a mesh list using a volume threshold. * **Mesh list:** Mesh list to filter. * **Volume threshold:** Absolute value of volume above which meshes will be kept. * **Output:** Mesh list * **Merge Mesh Block:** * **Description:** Merge multiple meshes into a single mesh. * **Meshes:** Meshes to merge. * **Output:** Mesh #### [Pre-Select Toolkit Visibility](#new-features-and-improvements) * When installing for the first time, users will be prompted to select which toolkits they'd like to have available in the ribbon via the installer. * For all upgrades, the installer will pre-select toolkits that are already visible in the ribbon. * This feature controls the visibility of the toolkits in the ribbon. This feature does not install or uninstall toolkits. * To modify the visibility of toolkits in the ribbon post installing nTop Platform, please go to File > Settings > Ribbon and select or deselect the appropriate items. #### [Search Results in Documentation](#new-features-and-improvements) * Users can now search in the documentation and all resulting matches will display on their own page. ![The search bar function in ntop block documentation.](https://files.learn.ntop.com/help-articles/whats-new/360075335454.png) #### [Selection Mode](#new-features-and-improvements) * We've introduced a new selection mode feature that let's users interactively select objects from the viewport in order to assign them to object inputs. See an example below: ![An image showing the new selection capabilities of nTop 2.8.](https://files.learn.ntop.com/help-articles/whats-new/360076500033.png) #### [User Interface Ruler](#new-features-and-improvements) * The user interface now includes an optional ruler so users can measure objects within the viewport. * This feature only works with orthographic views. * Users can slide the ruler from left to right by simply holding the left mouse button and dragging. * If you just adjust the position of the ruler, the ruler position will be saved when opening the file at a later date. * This feature is turned off by default. Please go to File > Settings > General and select **Show Ruler Over Scene**. ![There is now a ruler at the bottom of the ntop viewport.](https://files.learn.ntop.com/help-articles/whats-new/360075335534.png) #### [Usage Improvements](#new-features-and-improvements) * FE Mesh now supports quadrilateral and quad-dominated surface meshes * The Shell block has been updated to include a new parameter called Direction which let's the user specify which way the shelling will occur based on the value provided in the Thickness input. The options are: Inward, Outward, and Center. ## Keywords: *ntop new what's new release notes what's 2.8 platform release notes* # nTop Platform 2.09 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-09-what-s-new #### Summary > [!NOTE] > > nTopology's nTop Platform 2.9 is here! This release features Space Mouse support, two new simulation blocks for applying heat generation boundary condition, and the ability to import and export the .3MF lattice file format. As with every release, nTopology's dedicated support team is ready to answer your questions. ### New Features and Improvements * #### [Import & Export 3MF Lattice File Format](#import-export-3mf-lattice-file-format) * #### [Simulation: Heat Generation Block](#simulation-heat-generation-block) * #### [Simulation: Volumetric Heat Generation Block](#simulation-volumetric-heat-generation-block) * #### [Space Mouse Support](#space-mouse-support) * #### [Usage Improvements](#usage-improvements) #### [Import & Export 3MF Lattice File Format](#new-features-and-improvements) * **Import Lattice:** this block now includes a 3mf file format (\*.3mf) import option. * **Import Thick Lattice:** this block now includes a 3mf file format (\*.3mf) import option. * **Export Lattice:** this block now includes a 3mf file format (\*.3mf) export option. #### [Simulation: Heat Generation Block](#new-features-and-improvements) * **Description:** Applies a total heat generation to the selected entities. The quantity of heat generation is distributed across the nodes based on volume fraction. * **Region:** The region of elements load will be applied to. * **Magnitude:** The quantity of heat generation. * **Output:** FE Heat Generation #### [Simulation: Volumetric Heat Generation Block](#new-features-and-improvements) * **Description:** Applies a heat generation to a volume. The quantity of heat generation can be uniform across the entire object by using a scalar input or vary spatial by using a scalar field. * **Region:** The region of elements load will be applied to. * **Magnitude:** The amount of heat generation per unit volume. * **Output:** FE Heat Generation #### [Space Mouse Support](#new-features-and-improvements) * nTop Platform now supports the use of a 3Dconnexion Space Mouse for manipulating your geometries in 3D space. * **Note:** Specific actions cannot be mapped directly to space mouse buttons yet. #### [Usage Improvements](#new-features-and-improvements) * The automatic block visibility setting is now **on** by default. If you'd like to change this to off, please go to File > Settings > General and uncheck “Automatic Block Visibility”. * The UI Ruler is now **on** by default. If you'd like to change this to off, please go to File > Settings > General and uncheck “Show Rule Over Scene”. ## Keywords: *ntop new what's new release notes what's 2.9 platform release notes* # nTop Platform 2.10 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-10-what-s-new #### Summary > [!NOTE] > > nTopology's nTop Platform 2.10 is here! This release features a powerful enhancement to our high resolution render feature, new mass property blocks for meshes, and new simulation boundary condition blocks for radiation and convection. In addition, there are a handful of awesome new usability improvements, such as more informative block messaging and customizable settings for the viewport grid and ruler. As with every release, nTopology's dedicated support team is ready to answer your questions. ### New Features and Improvements * #### [Customizable Grid Options](#customizable-grid-options) * #### [Customizable Ruler Options](#customizable-ruler-options) * #### [High Resolution Render](#high-resolution-render) * #### [Informative Block Messages](#informative-block-messages) * #### [Mass Properties & Surface Area from Mesh Blocks](#mass-properties-surface-area-from-mesh-blocks) * #### [Radiation and Convection Boundary Condition Blocks](#radiation-and-convection-boundary-condition-blocks) * #### [Usage Improvements](#usage-improvements) #### [Customizable Grid Options](#new-features-and-improvements) * Users can now easily customize the size, spacing, and subdivisions of the viewport grid by selecting **View** > **Display Settings** from the overhead menu. * From this window, users will have the ability to: * Turn the visibility on and off. * Adjust the Size (mm) * Adjust the Primary Spacing (mm) * Adjust the Subdivisions per cell ![The background grid size can now be adjusted using the display tab in the settings menu.](https://files.learn.ntop.com/help-articles/whats-new/360075335334.png) #### [Customizable Ruler Options](#new-features-and-improvements) * Users can now easily customize the Ruler settings by selecting **View** > **Display Settings** from the overhead menu. * From this window, users will have the ability to: * Turn the visibility on and off. * Adjust the Orientation: * Top of UI * Bottom of UI * Adjust the Alignment: * 0 mm aligned to the left of the UI * 0 mm aligned to the right of the UI * 0 mm aligned to the center of the UI #### [High Resolution Render](#new-features-and-improvements) * We've made significant improvements to our High Resolution Render, which can be activated by selecting the object you wish to render and then selecting **View** > **High-Res Render** from the overhead menu. In a matter of seconds, a crisp static image of your geometry will appear. See a real time video below: * Alternatively, you can select the object and then select the hotkey combination **Ctrl+H**. * If you move your camera position, the high resolution render will cancel and your geometry will be visualized at the level of resolution set in the resolution menu at the bottom right of the viewport. ![Implicit Bodies can now be rendered using High Resolution.](https://files.learn.ntop.com/help-articles/whats-new/360076499853.png)[Block Messages](#new-features-and-improvements) * We've updated the warnings across the block system to provide users with more informative messages about why a block has not run. Below is an outline of all the new changes and warnings: * The “Alert” title has been changed to “Unbuilt Block” * If Autobuild is off: * “Turn on Autobuild to run block” * If Queued: * “Queued block - Notebook building in progress” * If All inputs empty: * “Provide required inputs to run block” * If Some inputs are empty: * “Provide required inputs to run block” (a line of text for each input is listed) * “\[Input name]: Empty input” * If Inputs with unrun/error blocks in them: * “\[Input name]: \[object name] output is empty #### [Mass Properties & Surface Area from Mesh Blocks](#new-features-and-improvements) * **Mass Properties from Mesh** * **Description**: Calculate mass properties from a mesh. * **Input 1**: Mesh (type: Mesh, description: The mesh.) * **Input 2**: Density (type: scalar|scalar field, description: The density of the component.) * **Output**: Mass Properties * **Surface Area from Mesh** * **Description**: Calculate the surface area of an open or closed mesh. * **Input 1**: Mesh (type: Mesh, description: The mesh.) * **Output**: Scalar - length^2 #### [Radiation and Convection Boundary Condition Blocks](#new-features-and-improvements) * **Convection Boundary Load** * **Description**: Applies a radiation load to the face of specified elements. * **Input 1**: Boundary (type: FE Boundary, description: The region of elements the load will be applied to.) * **Input 2**: Ambient Temperature (type: Scalar | Scalar Field, description: The temperature of the fluid medium surrounding the boundary.) * **Input 3**: Convection Coefficient (type: Scalar | Scalar Field, description: Heat transfer coefficient that relates temperature difference to heat flux for convection.) * **Output**: FE Heat Flux * **Radiation Boundary Load** * **Description**: Applies a radiation load to the face of specified elements. * **Input 1**: Boundary (type: FE Boundary, description: The region of elements the load will be applied to.) * **Input 2**: Ambient Temperature (type: Scalar | Scalar Field, description: The temperature of the fluid medium surrounding the boundary.) * **Input 3**: Emissivity (type: Scalar | Scalar Field, description: “Non-dimensional measure of the ability of the object to emit radiation energy. * **Output**: FE Heat Flux #### [Usage Improvements](#new-features-and-improvements) * All beta blocks in nTop Platform have been promoted. * Mesh to Implicit auto-casting has been disabled to improve performance across the system. * The Body Mass Properties type has been renamed to **Mass Properties**. * The Evaluate Field block now contains a Vector Field overload. * The following blocks have been deprecated and contain the following message: * **Import Tet Mesh**: This block has been deprecated. This method of Tet Mesh import is no longer supported. * **Extract Surface from CAD Body**: This block has been deprecated. Please use the List Element block and use the CAD Body's 'Faces' Property, or access the individual face directly through the properties. * Split and Filter Mesh blocks now handle quad-based meshes. ## Keywords: *ntop new what's new release notes what's platform release notes 2.10* # nTop Platform 2.11 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-11-what-s-new #### Summary > [!NOTE] > > nTopology's nTop Platform 2.11 is here! This release features new section cut capabilities for sectioning tetrahedral meshes and static analysis results, as well as a handful of new simulation boundary condition blocks for specifying the coefficient of thermal expansion and applying temperature loads. In addition, this release gives users the ability to perform a free-free modal analysis and the ability to subdivide an FE Lattice Mesh to more accurately model a beam's behavior. As with every release, nTopology's dedicated support team is ready to answer your questions. ### New Features and Improvements * #### [Concatenate Lists Block](#concatenate-lists-block) * #### [Section Cut Static Analysis Results](#section-cut-static-analysis-results) * #### [Section Cut Tet Meshes](#section-cut-tet-meshes) * #### [Simulation: Coefficient of Thermal Expansion Blocks](#simulation-coefficient-of-thermal-expansion-blocks) * #### [Simulation: Free-Free Modal Analysis](#simulation-free-free-modal-analysis) * #### [Simulation: Subdivide FE Lattice Mesh](#simulation-subdivide-fe-lattice-mesh) * #### [Simulation: Temperature Load Boundary Conditions](#simulation-temperature-load-boundary-conditions) * #### [Usage Improvements](#usage-improvements) #### [Concatenate Lists Block](#new-features-and-improvements) * **Ribbon Location:** Utilities/General * **Description:** “Append the items of List 2 to the end of List 1. The lists must be of the same type. To insert a list into another list at specified location (instead of at the end), use the Insert block.” * **Input 1:** List 1 * Type: list * Description: “First list to concatenate.” * **Input 2:** List 2 * Type: list * Description: “Second list to concatenate.” * **Return Type:** list #### [Section Cut Static Analysis Results](#new-features-and-improvements) * Users can now cut sections through Static Analysis results in order to see stresses internal to analyzed geometry. ![The gif shows how Static Analysis results can now be section cut to analyze the interior results.](https://files.learn.ntop.com/help-articles/whats-new/360076499733.png) #### [Section Cut Tet Meshes](#new-features-and-improvements) * Users can now cut sections through tet meshes to visually inspect the tetrahedral element sizing and quality internal to the geometry before creating an FE mesh and model. ![The gif shows how Tet meshes can now be section cut to analyze the interior elements.](https://files.learn.ntop.com/help-articles/whats-new/360075335154.png) #### [Simulation: Coefficient of Thermal Expansion Blocks](#new-features-and-improvements) * **Isotropic Coefficient of Thermal Expansion Property Block** * **Description:** “Defines an Isotropic Coefficient of Thermal Expansion Property by specifying the thermal coefficient of expansion, alpha. Providing a scalar field will result in spatially varying material properties” * **Ribbon Location:** Simulation/Material Attributes * **Input 1:** Alpha * Type: Scalar field * Description: “Linear coefficient of thermal expansion.” * **Return Type:** Isotropic Coefficient of Thermal Expansion Property * **Orthotropic Coefficient of Thermal Expansion Property Block** * **Ribbon Location:** Simulation/Material Attributes * **Description:** “Defines an Orthotropic Coefficient of Thermal Expansion Property by specifying the thermal coefficient of expansion, alpha in directions X, Y, and Z. Providing a scalar field will result in spatially varying material properties” * **Input 1:** Alpha X * Type: Scalar field * Description: “Linear coefficient of thermal expansion in the X direction.” * **Input 2:** Alpha Y * Type: Scalar field * Description: “Linear coefficient of thermal expansion in the Y direction.” * **Input 3:** Alpha Z * Type: Scalar field * Description: “Linear coefficient of thermal expansion in the Z direction.” * **Return Type:** Orthotropic Coefficient of Thermal Expansion Property #### [Simulation: Free-Free Modal Analysis](#new-features-and-improvements) * The Modal Analysis block has been updated to enable users to perform a free-free modal analysis. The boundary condition list is now an optional input. Not providing the optional boundary condition list input leads to a free-free modal analysis. #### [Simulation: Subdivide FE Lattice Mesh](#new-features-and-improvements) * We've updated the FE Lattice Mesh block to include a new parameter to subdivide beam elements into a specified number of segments so that simulation engineers can better model the beam segment's behavior. * **New Input:** Subdivisions * Type: Integer * Description: “The number of finite elements that each beam in the lattice will be subdivided into.” #### [Simulation: Temperature Load Boundary Conditions](#new-features-and-improvements) * **Initial Temperature Block** * **Ribbon Location:** Simulation/Boundary Conditions * **Description:** “Defines the baseline temperature to be used for a thermal stress analysis. The amount of thermal stress in a model will be calculated from the difference in temperature between the initial temperature and the applied temperature.” * **Input 1:** Initial Temperature * Type: Scalar field * Descriptions: “Temperature that is used as the baseline temperature for a thermal stress analysis.” * **Return Type:** Initial Temperature * **Applied Temperature Load Block** * **Ribbon Location:** Simulation/Boundary Conditions * **Description:** “Defines the applied temperature load to be used for a thermal stress analysis. The amount of thermal stress in a model will be calculated from the difference in temperature between the initial temperature and the applied temperature.” * **Input 1:** Applied Temperature * Type: Scalar field * Description: “Temperature for a thermal stress analysis from which the thermal stress will be calculated.” * **Return Type:** Applied Temperature Load #### [Usage Improvements](#new-features-and-improvements) * Degrees are now the default units for all block inputs requiring an angle. Angle inputs now include **deg** to the right of the input to indicate the unit input type. * If there is not a new version for a block, and the block has been deprecated, the block will be displayed in the add block search. We will continue to display warnings for deprecated blocks, indicate their deprecation status and notify the user of which blocks to use instead, if relevant. * Lattice objects with face elements in the **FE Lattice Mesh** block are now supported. Simulation results now render the resulting fields on both sides of the FE Surface Mesh. * Variables have been updated to enable type changes to permeate through all properties, if that property is used elsewhere as an input. ## Keywords: *ntop new what's new release notes what's platform release notes 2.11* # nTop Platform 2.12 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-12-what-s-new ## 2.12 Release Notes #### Summary > [!NOTE] > > nTopology is proud to announce the release of nTop Platform 2.12! This release features a very powerful set of blocks enabling you to convert meshes into CAD file types for export, such as STEP and Parasolid, so that nTop Platform can further integrate into your ecosystem and company tech stack. These blocks include a Quadrangulate block for applying a quad topology to a triangular mesh, a Refine Mesh block for subdividing a mesh using Catmull-Clark subdivision, and a CAD Body from Mesh block which can be used to output STEP and Parasolid file types. In addition, this release features blocks for extracting properties such as vertices and meshes from a lattice and a new section cut feature for slicing through CAD bodies, which enables users to select bodies nested within others. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials about these new features. As with every release, nTopology's dedicated support team is ready to answer your questions. ### New Features and Improvements * #### [CAD from Mesh Body Block](#cad-from-mesh-body-block) * #### [Extract Lattice Vertices Block](#extract-lattice-vertices-block) * #### [Extract Mesh from Lattice Block](#extract-mesh-from-lattice-block) * #### [New Topology Optimization Filter Boundary](#new-topology-optimization-filter-boundary) * #### [Quadrangulate Mesh Block](#quadrangulate-mesh-block) * #### [Refine Mesh Block](#refine-mesh-block) * #### [Robust Tetrahedral Mesh Block](#robust-tetrahedral-mesh-block) * #### [Section Cut CAD Bodies](#section-cut-cad-bodies) * #### [Usage Improvements](#usage-improvements) #### [CAD from Mesh Body Block](#new-features-and-improvements) * The CAD Body from Mesh block converts quad meshes (using our new Quadrangulate Mesh block) into CAD Bodies for export (STEP and Parasolid file formats), so that nTop Platform can more seamlessly integrate into your software tool set. * **Name:** CAD Body from Mesh * **Ribbon Location:** Utilities/Conversion * **Description:** “Create a CAD body from a quad mesh. This block will approximate the limit of a Catmull-Clark subdivision surface as a collection of bicubic B-spline patches. When a quad-dominant mesh is given as input, up to two levels of global Catmull-Clark refinement will be performed to create a quad mesh that can be represented by bicubic patches.” * **Input 1:** Mesh, Type: Mesh, Description: “Mesh to convert to a CAD body.” * **Input 2:** Refinement level, Type: Integer, Description: “The maximum level of adaptive refinement to allow \[0,9]. Higher values improve the precision in regions where patches only approximate the limit of the Catmull-Clark surface. Such regions occur around the one ring of an extraordinary vertex and along edges that are tagged as semi-sharp.” * **Return Type:** CAD Body ![The image shows a side by side of two bodies. The left body is meshed and the right body is a CAD body generated using the CAD Body from Mesh block.](https://files.learn.ntop.com/help-articles/whats-new/360075334834.png) #### [Extract Lattice Vertices Block](#new-features-and-improvements) * **Name:** Extract Lattice Vertices * **Ribbon Location:** Lattice/Utilities * **Description:** “Extract vertices from lattice.” * **Input 1:** Lattice, Type: Lattice, Description: “Lattice to extract vertices from.” * **Return Type:** Point List #### [Extract Mesh from Lattice Block](#new-features-and-improvements) * Users can now extract the surface mesh from a face-based lattice in order to slice a surface mesh of a face-based lattice. * **Name:** Extract Mesh from Lattice * **Ribbon Location:** Lattice/Utilities * **Description:** “Extracts the surface mesh from a face-based lattice. For lattices not containing any faces no mesh will be returned.” * **Input 1:** Lattice, Type: Lattice (graph), Description: “Lattice to extract faces and generate a surface mesh from.” * **Return Type:** Mesh * A warning will be thrown if a lattice contains no faces. #### [New Topology Optimization Filter Boundary](#new-features-and-improvements) * The Filter Boundary input for the Topology Optimization block has been updated to be a Boundary Penalization that takes a scalar field as input. * A value of 0 will enforce the previous Neumann-Regular filter along the boundary and a value of 1 will enforce the previous Dirchlect filter. * The default value of 0.5 provides a compromise between the two that is suitable for most use cases. As a scalar field, the penalization can vary across the geometry. #### [Quadrangulate Mesh Block](#new-features-and-improvements) * In order to convert meshes into CAD file formats such as STEP and Parasolid (using our new CAD Body from Mesh block, a user must first convert the target object into a mesh composed of quadrilateral faces. * **Name:** Quadrangulate Mesh * **Description:** “Quadrangulate a triangle or quad mesh by remeshing” * **Input 1:** Mesh, Type: Mesh, Description: “Mesh to quadrangulate.” * **Input 2:** Target Count, Type: Integer, Description: “Target number of quads.” * **Input 3:** Adaptivity, Type: Scalar, Description: “Adapts the target quads count in favor of better capturing the curvature of input mesh, range \[0,1].” * **Input 4:** Sharp features, Type: Bool, Description: “Auto-detect and preserve sharp features in the input mesh.” * **Input 5:** Flow angle, Type: Scalar, Description: “The minimum angle that defines a profile edge. This is an optional value that identifies edges to preserve while remeshing. The value represents a lower bound, when the dihedral angle between two faces is greater than the criteria, the edge will be tagged as a profile. When combined with preserving sharp edges, this will constraint the alignment of quad to the profile edges.” * **Input 6:** Symmetry, Type: Frame, Description: “Frame defining a symmetry plane of the model.” * **Return Type:** Mesh ![The image shows a side by side of two bodies. The left body is a triangular mesh and the right body is a quad mesh generated using the Quadrangulate Mesh block.](https://files.learn.ntop.com/help-articles/whats-new/360076499573.png) #### [Refine Mesh Block](#new-features-and-improvements) * **Name:** Refine Mesh * **Description:** “Refine a mesh with subdivision. Catmull-Clark subdivision is applied for quad dominant meshes. Loop subdivision is used for triangle meshes.” * **Input 1:** Mesh, Type: Mesh, Description: “The mesh to refine.” * **Input 2:** Refinement level, Type: Integer, Description: “The number of refinement iterations to apply \[1, 5].” * **Input 3:** Feature angle, Type: Scalar, Description: “The minimum angle that defines a sharp edge, \[0, Pi]. This is an optional value that identifies edges to preserve as sharp edges during global refinement. The value represents a lower bound, when the dihedral angle between two faces is greater than the criteria, the edge will be tagged as sharp.” * **Input 4:** Sharpness value, Type: Scalar, Description: “The degree of sharpness \[0, 1] applied to an edge during global refinement. A value of 1 indicates an infinitely sharp edge. When a feature angle is given the default sharpness value is 1.” * **Return Type:** Mesh ![The image shows a side by side of two meshes. The left body is a quad mesh and the right body is a quad mesh with smaller quads generated using the Refine Mesh block.](https://files.learn.ntop.com/help-articles/whats-new/360075334854.png) #### [Robust Tetrahedral Mesh Block](#new-features-and-improvements) * Tetrahedral Mesh block has been updated to Robust Tetrahedral Mesh. * The Robust Tetrahedral Mesh block has a new algorithm which can still handle imperfections on the input surface mesh but generate a clean volume mesh, however it is substantially faster. #### [Section Cut CAD Bodies](#new-features-and-improvements) * Users can now section cut through CAD parts in order to see and access CAD Bodies that may be “internal” to other CAD Bodies. #### [Usage Improvements](#new-features-and-improvements) * Volume mesh block now includes edge and vertice properties. * Surface mesh block now includes edge and vertice properties. * Slice and lattice selection styles have been updated to include fog and are now blue. * **New Hotkeys** * Make Variable: Alt+v * Display Ruler: Alt+r * Display Grid: Alt-g * Users can now section cut an FE Mesh in addition to a Volume Mesh. ## Keywords: *ntop new what's new release notes what's 2.12 platform release notes* # nTop Platform 2.13 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-13-what-s-new #### Summary > [!NOTE] > > nTopology nTop Platform 2.13 is here! This release features a new set of powerful simulation color maps for engineers to enhance their ability to interpret the results as well as a set of updates for transforms so users can reposition slice stacks to properly import them into print preparation tools. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. ### New Features and Improvements * #### [Reposition Slice Stack for Export](#reposition-slice-stack-for-export) * #### [Rotate Slice Stack about the Z Axis for Export](#rotate-slice-stack-about-the-z-axis-for-export) * #### [Simulation Color Maps](#simulation-color-maps) * #### [Usage Improvements](#usage-improvements) #### [Reposition Slice Stack for Export](#new-features-and-improvements) * The translate block has been updated to accept Slice Stack objects as inputs. * This feature has been added to enable users to correctly import their slice stacks into the print prep tool of their choice. #### [Rotate Slice Stack about the Z-Axis for Export](#new-features-and-improvements) * The Rotate Object block has been updated to accept Slice Stack objects as inputs. * If you attempt to rotate the Slick Stack in any axis other than the Z, the block will throw an error message. * This feature has been added to enable users to correctly import their slice stacks into the print prep tool of their choice. #### [Simulation Color Maps](#new-features-and-improvements) * We've introduced 3 new colors maps in our simulation result HUD so that simulation engineers have more perceptional consistent gradients to avoid misinterpreting results. * The 3 new maps are: **Turbo**, **Magma**, and **Viridis** (see image below): ![An image showing the 3 possible color display options for simulation results.](https://files.learn.ntop.com/help-articles/whats-new/360080423513.png) #### [Usage Improvements](#new-features-and-improvements) * The keyboard shortcut for **Make Variable** has been updated to **Ctrl + M**. * nTop Platform now supports the export of distributed loads on edges for Beam, Shell, and Solid elements. * The Evaluate Expression block has been deprecated. The Evaluate Expression block will open in older files and can still be searched for in the search bar of the notebook. * Isotropic Elastic has been updated to Isotropic Linear Elastic. ## Keywords: *what's new release notes release notes 2.13* # nTop Platform 2.14 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-14-what-s-new ## 2.14 Release Notes #### Summary > [!NOTE] > > nTopology nTop Platform 2.14 is here! This release features an image capture, which enables users to screenshot the items displayed in their viewport with the option to capture a transparent background. In addition, we've introduced a 3MF container type in beta, the ability to import a slice stack, improved default simulation displacement results to be more intuitive, and have given users the ability to get the surface area of sectioned bodies. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. ### New Features and Improvements * #### [Capture Image](#capture-image) * #### [Export 3MF (Beta)](#export-3mf-beta)) * #### [Import Slice Stack](#import-slice-stack) * #### [Intuitive Displacement Results](#intuitive-displacemet-results) * #### [Measure Properties of a Section](#measure-properties-of-a-section) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Capture Image](#new-features-and-improvements) * Users can now take screen captures of their work directly in nTop Platform. * To capture an image of the objects visible in your viewport, select View > Capture Image. * A modal window will appear, giving the user some additional image capture options: * **Transparent Background:** If checked, it will capture the visible objects with a transparent background. * **Highlight Selection:** If checked and the object to capture is highlighted, the image will be captured without the selection outline visible. * **Show Gimbals:** If checked and there is a gimbal visible in the viewport, the gimbal will not be visible upon export. * To export the image capture, select the Export button in the modal window. The user will be prompted to choose a location for the image to reside. * The image capture feature exports png file types. ![The nTop platform showing an implicit body with the Capture Image window open. You can use Capture Image to take a picture of a model in nTop.](https://files.learn.ntop.com/help-articles/whats-new/360080602753.png) ![The image taken using Capture Image.](https://files.learn.ntop.com/help-articles/whats-new/360079517154.png) #### [Export 3MF (Beta)](#new-features-and-improvements) * Users can now export 3MF containers to send mesh and lattice data to other programs. * Block Name: Export 3MF * Ribbon Location: Beta/3MF Exchange * Description: “Exports 3MF container(s) into a single 3MF file.” * Input 01: Path (Required) * Type: File Path * Description: “System path of export 3MF.” * Input 02: Mesh: * Type: Mesh * Description: “Mesh to be exported.” * Input 03: Lattice: * Type: Thick lattice / Lattice * Description: “Corresponding lattice to be exported.” * Input 04: Units * Type: Length Unit Enum * Description: “Units of imported file.” * Return Type: Mesh File Data * **Note:** This block is in beta and resides in the **Beta** tab. Go to Settings > General and select the **Show Beta Blocks** to make the Beta tab visible. #### [Import Slice Stack](#new-features-and-improvements) * Users can now import slice stacks into nTop Platform to rotate and reposition to correctly import into the build prep software of their choice. * Block Name: Import Slices * Ribbon Location: Manufacturing/Exchange * Description: “Import a vector-based slice stack.” * Input 01: Path * Type: Path * Description: “System path of slice file.” * Return Type: Slice Stack #### [Intuitive Displacement Results](#new-features-and-improvements) * We've improved the displacement results feature in the simulation heads-up-display (HUD) console by modifying the default in which we display displacement to a scale of 1. * Users can now type in a value greater than one to exaggerate the displacement preview. * The minimum displacement value in the HUD slider is 0. #### [Measure Properties of a Section](#new-features-and-improvements) * Users can now measure the surface area of a sectioned body. Please see the example below: ![Using the Surface Area from Body block on a Section Body block. This calculates the area of the cross section of the body.](https://files.learn.ntop.com/help-articles/whats-new/360080602833.png) #### [Usage Improvements](#new-features-and-improvements) * We've reintroduced beta blocks to nTop Platform. Beta blocks are generally not recommended for production use but are made available to users for early access to upcoming features. All beta blocks will reside in a designated Beta tab, which is an optional feature. To make the Beta tab visible, go to Settings > General and check the **Show Beta Blocks** option. * We've introduced a new parameter in the Remesh Surface block called “Minimum edge length,” which enables users to specify the minimum edge length when generating an FE mesh. Below is a description of the new parameter: * Name: Minimum edge length: * Type: Scalar * Description: “The minimum allowed edge length of the generated elements in the output mesh.” #### [Bug Fixes](#new-features-and-improvements) * Exporting the same mesh file from nTop Platform would produce different mesh results after each export if the nTop file was saved, closed, and then reopened between each export. * FE Boundary by Flood Fill angle input was in radians but is now in degrees. * Orthotropic thermal material properties units for Specific Heat have been corrected to be mm^2/(s^2 K). * Point maps laid out in 1d and 2d space now interpolate in Field from Point Map. * Simulation HUD wouldn't appear if there were variables in Model inputs. ## Keywords: *what's new release notes release notes 2.14* # nTop Platform 2.15 - What's new Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-15-what-s-new ## Summary > [!NOTE] > > nTopology nTop Platform 2.15 is here! The main feature of this release is a brand new lattice pipeline (currently in beta), featuring 14 new blocks that will significantly streamline your lattice generation capabilities. There's also a powerful new slicing capability that allows you to export slices to black and white image stacks for DLP, SLA, and other similar resin-based machines. In addition, this release features new slicing utilities for simplifying and trimming slice stacks, as well as new simulation units and new list sorting blocks. As with every release, nTopology's dedicated support team is ready to answer your questions. ### New Features and Improvements * #### [New Lattice Pipeline (Beta)](#new-lattice-pipeline-beta)) * #### [Slice Body to Black & White Image Stack](#slice-body-to-black-white-image-stack) * #### [Simplify Slice Stack (Beta)](#simplify-slice-stack-beta)) * #### [Trim Slice Stack (Beta)](#trim-slice-stack-beta)) * #### [Heat Flux Result Vector](#heat-flux-result-vector) * #### [US Customary Units for Simulation Parameters](#us-customary-units-for-simulation-parameters) * #### [Show Volume Mesh Elements with the Section Cut Tool](#show-volume-mesh-elements-with-the-section-cut-tool) * #### [Sort List & Sort List by Proxy](#sort-list-sort-list-by-proxy) * #### [Bug Fixes](#bug-fixes) #### [New Lattice Pipeline (Beta)](#new-features-and-improvements) * We've introduced a new lattice pipeline that provides you with a more flexible yet unified framework for generating complex lattice structures. This framework consists of three primary steps: * **Select a Unit Cell** * **Define a Cell Map** * **Generate a Lattice Body** ![The Periodic Lattice Body block, with 3 examples of generating a lattice body.](https://files.learn.ntop.com/help-articles/whats-new/360082688574.png) * Whether you are looking to apply a lattice to a CAD face or are looking to fill a volume with one, you only need to follow the three steps above to generate a lattice. * We've published support articles to help you learn how to use these new features: * [**Introduction to the New Lattice Pipeline**](https://support.ntopology.com/hc/en-us/articles/360050828294) * [**Lattice Workflow: Cell Map on CAD Face**](https://support.ntopology.com/hc/en-us/articles/360052199633) * [**Lattice Workflow: Lattices from Mesh**](https://support.ntopology.com/hc/en-us/articles/360052248093) * This new pipeline is currently in Beta. Beta blocks are generally not recommended for production use as they may change but are made available to users for early access to upcoming features. To see all Beta blocks, please go to File > Settings > General and check **Show Beta Blocks**. * We will upgrade all features of the previous lattice pipeline to work with the new pipeline as these beta blocks transition into production. * Although this new lattice pipeline is in Beta, it will transition to production in the next several months. At this point, all files containing the previous pipeline blocks will still be openable, but the blocks themselves will only be available via the search bar. #### [Slice Body to Black & White Image Stack](#new-features-and-improvements) A new Slice Body to B\&W Image Stack has been added, which allows you to create manufacturing data for DLP, SLA, and other similar resin-based machines. You can specify your own physical build volume as well as an image resolution of up to 1 billion pixels. The resulting .png file format image stack will be placed in a zip file in a folder that you choose. Below is an outline of this new block. * **Slice Body to B\&W Image Stack** * Return Type: Slice Image Data * Ribbon Location: Manufacturing/Exchange * Description: “Slices an implicit body and generates an image for each slice in the stack.” * Inputs * Path * Type: File Path * Description: “Path to zip file for exporting the image stack.” * Fill suffix * Type: Bool * Description: “Enabling will fill the suffix with zeros based on the number of slices.” * Implicit * Type: Implicit Body * Description: “Implicit Body to Slice.” * Layer height * Type: Scalar * Description: “Spacing between slice layers.” * Frame * Type: Frame * Description: “Manufacturing coordinate system that is placed on the build plate.” * Print volume * Type: Bounding Box * Description: “Volume that encompasses the printable volume of the machine.” * Image X resolution * Type: Integer * Description: “Defines the number of pixels in the X direction.” * Image Y resolution * Type: Integer * Description: “Defines the number of pixels in the Y direction.” * Grayscale bits * Type: Slice Png Style Enum * Description: “Number of bits per pixel of the output png.” * Feature size * Type: Scalar * Description: “Minimum feature size to accurately capture details. Leaving this empty will sample at the pixel resolution specified above.” ![An implicit body being used in the Slice Body to Black & White Image Stack block.](https://files.learn.ntop.com/help-articles/whats-new/360082688674.png) *The Implicit body to slice.* ![The slices generated from using the Slice Body to Black & White Image Stack block.](https://files.learn.ntop.com/help-articles/whats-new/360083860433.png) *The resulting black and white png image slice stack.* #### [Simplify Slice Stack (Beta)](#new-features-and-improvements) * We have introduced a new Simplify Slice Stack that reduces the size of vector-based slice files through a point reduction technique defined by a threshold. Below is an outline of this new block: * **Simplify Slice Stack** * Return Type: Slice Stack * Ribbon Location: Beta * Description: “Reduces the number of points in open and closed polylines within a vector slice stack.” * Inputs: * Slice stack: * Type: Slice stack * Description: “Slice stack on which to perform point reduction.” * Threshold: * Type: Scalar * Description: “Deviation threshold or tolerance value for point reduction. Deviation greater than this threshold value will not occur during point reduction. Deviation up to this value may occur.” * The Simplify Slice Stack block is currently in Beta. Beta blocks are generally not recommended for production use as they may change but are made available to users for early access to upcoming features. To see all Beta blocks, please go to File > Settings > General and check **Show Beta Blocks**. ![The left image shows a slice stack and the right image shows the modified stack after using the Simplify Slice Stack block.](https://files.learn.ntop.com/help-articles/whats-new/360083860493.png) *The original slice stack (left) compared to a simplified slice stack of the original at a very high threshold (right).* #### [Heat Flux Result Vector](#new-features-and-improvements) * You can now derive the heat flux result vector from a linear steady-state heat transfer analysis. * This feature is available through the Thermal Analysis Heads Up Display, which becomes visible upon completion of the analysis. #### [Trim Slice Stack (Beta)](#new-features-and-improvements) * We have added a new Trim Slice Stack block that allows you to trim a slice stack with an implicit body, to make it fit within the body. Below is an outline of this new block: * **Trim Slice Stack** * Return Type: Slice Stack * Ribbon Location: Beta * Description: “Trims a slice stack and returns only the portion lying inside the given body. This may result in open contours.” * Inputs * Slice stack: * Type: Slice Stack * Description: “Slice stack on which the trimming will be performed.” * Trimming body: * Type: Slice Stack * Description: “Body to use to perform trimming of the slice stack.” * The Trim Slice Stack block is currently in Beta. Beta blocks are generally not recommended for production use as they may change but are made available to users for early access to upcoming features. To see all Beta blocks, please go to File > Settings > General and check **Show Beta Blocks**. ![The left image shows a slice stack and the right image shows the modified slice stack after using the Trim Slice Stack block.](https://files.learn.ntop.com/help-articles/whats-new/360083860713.png) *An example of a slice stack (left) and the same slice stack but trimmed (right).* #### [US Customary Units for Simulation Parameters](#new-features-and-improvements) * We've introduced new simulation units that can be typed in US Customary format. These units can also be combined with the rest of our system's units. Below is an outline of all new supported units : * Watt: W (including Kilowatt: kW, Megawatt: Mw) * Joule: J * Hertz: Hz * British Thermal Unit: BTU or Btu * Kilopound Per Square Inch: ksi * Below is an outline of all unit conversions: | SI | US Customary | | - | - | | N, kN | lbf | | Pa, MPa, GPa | psi, ksi | | J | Btu or BTU | | W, kW, MW | Btu/hr | | Hz | Hz | | N\*m | lbf\*ft | | N/m | lbf/ft | | W/m^2 | Btu/(hr\*ft^2) | | W/m^3 | Btu/(hr\*ft^3) | | m/s^2 | ft/s^2 | | kg/m^3 | lb/ft^3 | | | | #### [Show Volume Mesh Elements with the Section Cut Tool](#new-features-and-improvements) * You can now make the tet elements of a volume mesh visible while using the section cut tool. * To use this new feature, check the **Show volume mesh elements** option in the Section Cut window. See the example below. You can also choose to turn off the outline via the Display style dropdown menu. ![After using the Section Cut feature on a volume mesh, there is now an option to Show Volume Mesh Elements.](https://files.learn.ntop.com/help-articles/whats-new/360083860673.png) #### [Sort List & Sort List by Proxy](#new-features-and-improvements) * We've introduced a new block called Sort List, which provides you with the ability to either sort a list in ascending order or sort a list based on the order of another list, called a Proxy. * You can get the reversed order of a list by extracting the **reversed** property from the Properties tab. * This block contains two overload states, the first being Sort List and the second being Sort List by Proxy. Below is a description of each overload state and its input(s). * **Sort List** * Return Type: Any * Ribbon Location: Utilities/General * Description: “Sorts the values in the list.” * Inputs: * List * Type: List Interface * Description: “List that is to be sorted.” * **Sort List by Proxy** * Return Type: Any * Ribbon Location: Utilities/General * Description: “Sorts the values in the list based on another proxy list.” * Inputs * List * Type: List Interface * Description: “List that is to be sorted.” * Proxy: * Type: List Interface * Description: “Proxy values by which to sort the list.” #### [Bug Fixes](#new-features-and-improvements) * The thickness field in the Shell block was reading a 0.1mm thickness as less than 0. * In some instances, the Quadrangulate Mesh block was outputting bad meshes. * nTop Platform would crash when the tab button was pressed while moving the gimbal. * nTop Platform would crash when building the view of a scalar field variable with a value of x. ## Keywords: *ntop what's new release notes platform 2.15* # nTop Platform 2.16 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-16-what-s-new #### Summary > [!NOTE] > > nTopology nTop Platform 2.16 is here! The main feature of this release is an autosave setting that lets you incrementally and automatically save your files so that you can recover work in the event of an unexpected exit or if you forgot to save. In addition to usage improvements and bug fixes, we've also introduced a powerful suite of boolean blocks in our Beta tab that lets you union, subtract, and intersect slice stacks so you can combine and manipulate complex slice data. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit support.ntopology.com to gain access to helpful tutorials and support articles. ### New Features and Improvements * #### [Autosave Your files](#autosave-your-files) * #### [Boolean Union, Subtract and Intersect Slice Data](#boolean-union-subtract-and-intersect-slice-data) * #### [New Lattice Pipeline Updates](#new-lattice-pipeline-updates) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Autosave Your files](#new-features-and-improvements) * You can now enable Autosave to incrementally and automatically save your files in the background so that you can quickly recover your work in the event of an unexpected exit or the event of closing nTop Platform without saving. * This feature can be enabled by going to File > Settings > File Backup and checking the Autosave checkbox. * Once enabled, you'll have the ability to select the time interval for autosaving. The Save time interval is in minutes and includes the following intervals to select from: * 5 minutes (default) * 10 minutes * 30 minutes * 60 minutes * Lastly, you'll have the ability to specify your Autosave folder location. By default, this file path location is set to AppData > Roaming > nTopology > Autosave. * If this feature is enabled and you do experience an unexpected exit or forgot to save your work, the next time you open your file, you'll be prompted to recover your autosaved work. ![The nTop settings menu open to the file backup tab. Here users can configure the autosave function and the time interval between saves.](https://files.learn.ntop.com/help-articles/whats-new/360083892274.png) #### [Boolean Union, Subtract and Intersect Slice Data](#new-features-and-improvements) * You can now boolean union, subtract, and intersect slice data to combine and manipulate complex slice data. * **Slice Stack Boolean Union** * Location: Beta / Slicing * Description: “Combine multiple slice stacks into a single slice stack.” * Inputs: * Slice stacks: * Type: Slice Stack List * Description: “List of slice stacks to union.” * Return Type: Slice Stack * **Slice Stack Boolean Subtract** * Location: Beta / Slicing * Description: “Boolean subtract the slice stacks.” * Inputs: * Primary slice stack: * Type: Slice Stack * Description: “Slice stack to subtract from.” * Subtraction slice stack: * Type: Slice Stack List * Description: “List of slice stacks to subtract.” * Return type: Slice Stack * **Slice Stack Boolean Intersect** * Location: Beta / Slicing * Description: “Boolean intersect the slice stacks.” * Inputs: * Slice stacks: * Type: Slice Stack List * Description: “List of slice stacks to intersect.” * Return type: Slice Stack * **Note:** For each of these operations, the slices must have the same layer height between layers, and the layers must be aligned. The slice stack layers can have different bounding box Z heights. #### [New Lattice Pipeline Updates](#new-features-and-improvements) * Our new lattice pipeline now features the following blocks, which exist in the current lattice pipeline, but have been modified to work with our new architecture: * Branched Lattice Body * Collapse Lattice Vertices * Extend Open Beams * Orthofoam Lattice Body * Voronoi Surface Lattice Body * Voronoi Volume Lattice Body * In addition to adding new blocks, we've updated the Beta ribbon to include a new menu structure to make the stages of generating a lattice more intuitive. The organization is as follows: Generate, Unit Cells, Cell Map, Utilities. * Our new lattice pipeline is currently in beta. Beta blocks are generally not recommended for production use as they may change but are made available to users for early access. To see all Beta blocks, please go to File > Settings > General and check “Show Beta Blocks.” #### [Usage Improvements](#new-features-and-improvements) * The **Mass Properties from Mesh** block has been updated to output a result on non-manifold and non-closed meshes. In previous versions, if a mesh was non-manifold and or non-closed or if a mesh list contained a mesh that was non-manifold and or non-closed, the Mass Properties from Mesh block would throw an error, and the block would not run. The block will now throw a warning if an input mesh is non-manifold and or non-closed and will produce values of 0 for all meshes that are non-manifold and or non-closed. For example, the volume on a non-closed mesh will return 0.00 mm^3. * The Radial Basis Field from Point Map block can now be found in our ribbon and has an icon. * We've removed the Point Stack object and have made it a part of the Slice Stack object. When exporting CLI, if the slice stack includes points, the following warning message will be returned: “Warning this slice stack contains points which are not currently supported in the standard CLI specification. Use the “Export CLI Points” block to extract points.” Export Points to CLI block has been renamed “Export CLI Points” and has been modified to accept a slice stack instead of a point stack as an input. If the stack for Export CLI Points contains polylines, the following warning message will be returned: “Warning this slice stack contains polylines which are not exported by the Export Points to CLI block. Use the Export CLI to export the polylines from your slices.” #### [Bug Fixes](#new-features-and-improvements) * The 'g' gravity block value was incorrect in previous releases. We've updated the value to be 9.8 m/s^2 instead of 9.8 mm/s^2. * Section cutting an FE Surface Mesh will no longer cause nTop Platform to exit unexpectedly. This bug affected the following version(s): 2.15. * We've updated our topology optimization routine to not fail with multiple point restraints. This bug affected the following version(s): 2.14, 2.15. * We've updated our unit system variable so that it will not be complete if the variable is empty. The bug affected the following version(s): 2.10 to 2.15. ## Keywords: *update what's new release notes 2.16* # nTop Platform 2.17 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-17-what-s-new ## Summary > [!NOTE] > > nTopology nTop Platform 2.17 is here! The main feature of this release is nTop Command Line (**nTopCL**), unit system settings for switching between SI and US unit convention, curve list export in **Export Part**, and **Heat Flux Point Map** Block. In addition to usage improvements and bug fixes, we've also introduced many **Beta Blocks** such as **Filter**, **Import Static Analysis Results**, **Import Thermal Analysis Results**, **Thermal Bonded Contact**, **Lattice Body from Quad Mesh**, and **Cell Map Between CAD Faces**. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit support.ntopology.com to gain access to helpful tutorials and support articles. ### New Features and Improvements * #### [nTop Command Line (nTopCL)](#ntop-command-line-ntopcl)) * #### [Unit System Settings](#unit-system-settings) * #### [Export a List of Curves](#export-a-list-of-curves) * #### [Heat Flux Point Map](#heat-flux-point-map) * #### [Filter List Block (Beta)](#filter-list-block-beta)) * #### [Import Static/Thermal Analysis Results (Beta)](#import-static-thermal-analysis-results-beta)) * #### [Thermal Bonded Contact (Beta)](#thermal-bonded-contact-beta)) * #### [Lattice Body from Quad Mesh (Beta)](#lattice-body-from-quad-mesh-beta)) * #### [Cell Map between CAD Faces (Beta)](#cell-map-between-cad-faces-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [nTop Command Line (nTopCL)](#ntop-command-line-ntopcl)) * We've introduced a command-line interface called **nTopCL** dedicated to executing nTop Notebooks without a graphical user interface. * You will be able to find ntopcl.exe in the nTop Platform installation folder and the path to ntopcl.exe is: * ``` ``` "c:\Program Files\nTopology\nTop Platform\ntopcl.exe" ``` - Check out the new section of nTop Platform Documentation to learn more about [**nTopCL**](../using-ntopcl.html). ![nTop Command Line options being shown in command line.](https://files.learn.ntop.com/help-articles/whats-new/360087749073.png) #### [Unit System Settings](#unit-system-settings) - You can now choose the default unit system in Settings. - Select between Metric and US Customary unit systems. Customize further to choose specific units for Length, Time, Mass, and Angle. ![The nTop settings menu open to the units tab. Here users can configure the default units for their notebooks.](https://files.learn.ntop.com/help-articles/whats-new/360086577554.png) #### [Export a List of Curves](#export-a-list-of-curves) - We've given you the ability to export a list of curves from the **Export Part** Block - You can specify whether to export the list of curves as a .step file or a Parasolid (.x\_t) file format. #### [Heat Flux Point Map](#heat-flux-point-map) - You can now extract a point map of heat flux from linear steady-state heat transfer analysis. Allowing you to interrogate heat flux across a boundary to better optimize your thermal components. - **Heat Flux Point Map** - Return Type: Point Map - Description: Creates a scalar point map of nodal heat flux values of a linear steady-state thermal analysis - Inputs: - Thermal Analysis - Type - Steady State Thermal Analysis Result - Description - Thermal analysis to generate a point map from #### [Filter List Block (Beta)](#filter-list-block-beta)) - We've introduced a new Block that lets you filter a list of entities by a corresponding list of boolean values. - This Block is currently in beta. Beta Blocks are generally not recommended for production use as they may change but are made available to users for early access. To see all Beta Blocks, please go to **File > Settings > General** and check **Show Beta Blocks**. #### [Import Static/Thermal Analysis Results (Beta)](#import-static-thermal-analysis-results-beta)) ![An example of importing Static/Thermal analysis results into nTop.](https://files.learn.ntop.com/help-articles/whats-new/360086577834.png) - We've given you the ability to bring in linear static stress results from Ansys (.RST) and Nastran (.OP2) with this release. Allowing you to bring back validation simulations and use those to further modify the design or use the simulation data as the start point for your design workflow inside nTop. - **Import Static Analysis Results (Beta)** - Return Type: Static Analysis Result - Description: Import Static Analysis Result file from an external location - Inputs: - Path - Type: File Path - Description: System path of Static Analysis Result file - Unit system - Type: Unit System - Description: The unit system of the external results. This will be used to consistently translate the external results into the active unit system. - We've given you the ability to bring in linear steady-state heat transfer results from Ansys (.RST) and Nastran (.OP2) with this release. Allowing you to bring back validation simulations and use those to further modify the design or use the simulation data as the start point for your design workflow inside nTop. - **Import Thermal Analysis Results (Beta)** - Return Type: Thermal Analysis Result - Description: Import Thermal Analysis Result file from an external location - Inputs: - Path - Type: File Path - Description: System path of Thermal Analysis Result file - Unit system - Type: Unit System - Description: The unit system of the external results. This will be used to consistently translate the external results into the active unit system. #### [Thermal Bonded Contact (Beta)](#thermal-bonded-contact-beta)) - With the new Thermal Bonded Contact, you can easily connect two separate FE components and allow energy to flow between the two. - **Thermal Bonded Contact (Beta)** - Ribbon Location: Simulation/Model - Return Type: FE Interaction - Description: “Creates a bonded contact between two FE boundaries which allows for heat flux between the two components. Contact resistance can be defined to account for thin membrane material at the boundary such as thermal paste.” - Inputs: - Independent - Type: FE Boundary - Description: The independent FE Boundary - Dependent - Type: FE Boundary - Description: The dependent FE Boundary - Contact Resistance - Type: Scalar Field - Description: Thermal resistance of the contact elements - Tolerance - Type: Scalar - Description: Positional tolerance for dependent boundary relative to the independent boundary. #### [Lattice Body from Quad Mesh (Beta)](#lattice-body-from-quad-mesh-beta)) ![LatticeBodyFromQuads](https://files.learn.ntop.com/help-articles/whats-new/latticebodyfromquad.jpg) - Users can create a Lattice Body to fill a cell map from Quad Mesh with a unit cell. - **Lattice Body from Quad Mesh (Beta)** - Return Type: Lattice Body - Description: “Create a lattice body by offsetting a quad mesh by a desired offset distance, specifying the number of cell layers in the offset direction, and by mapping a unit cell to each generated cell.” - Inputs: \*Unit Cell \* Type: Unit Cell \* Description: “Unit cell to tessellate.” - Surface Mesh - Type: Mesh - Description: “Quad mesh that the unit cells will be mapped onto.” - Offset - Type: Scalar Field - Description: “Total length of the offset.” - Layer Count - Type: Integer - Description: “Number of layers of unit cells to apply to the input surface mesh.” - Thickness - Type: Scalar Field - Description: “Lattice Thickness.” #### [Cell Map between CAD Faces (Beta)](#cell-map-between-cad-faces-beta)) ![CellMapCadFaces](https://files.learn.ntop.com/help-articles/whats-new/cellmapcadfaces.jpg) - Users can create a cell map between two CAD faces. - **Cell Map between CAD Faces (Beta)** - Return Type: Cell Map - Description: Constructs volumetric lattice cells between two CAD faces. - Inputs \*First Face \* Type: CAD Face \* Description: First CAD surface to apply the cell map - First UV Origin - Type: UV Position Enum - Description: Starting point for the first surface UV parameterization - Flip First UV - Type: Bool - Description: Option to flip the second CAD surface - Second Face - Type: CAD Face - Description: Second CAD surface to apply the cell map - Second UV Origin - Type: UV Position Enum - Description: Starting point for the second surface UV parameterization - Flip Second UV - Type: Bool - Description: Option to flip the second CAD surface - UVW count - Type: Vector - Description: Number of cells in three directions #### [Usage Improvements](#new-features-and-improvements) - Boolean types now include an integer value. False values are 0 while true values are 1. - Blosc codec is supported for importing and exporting OpenVDB (.vdb) files. Blosc codec can compress OpenVDB files resulting in smaller file sizes. - For unbounded objects, Field Viewer now sets the size to a more reasonable default value which is 200. - SliceStacks now have a Bounding Box property for better referencing after translation or rotation. #### [Bug Fixes](#new-features-and-improvements) - We've updated our concatenate list functionality to enable a user to concatenate lists containing different types. - **Radial Basis Field From Point Map** Block was missing units for **Factor** input. We've updated the Block to process the input with units. - We've updated **Export Static Analysis** to export the studies with two-point restraints in the load case correctly. - We've updated **Evaluate Field** Block to work properly with **Vector Field** overload. - We've updated our Math Blocks to work properly with numbers greater than 1e8 ## Keywords: _what's new release notes 2.17_ ``` # nTop Platform 2.18 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-18-what-s-new nTopology nTop Platform 2.18 is here! The main features of this release are new simulation blocks enabling you to import buckling, modal, and transient heat transfer analysis results as well as a new block for defining structural bonded contacts between two FE boundaries. In addition, this release features a new block for stitching CAD faces into a single body, and a Random Points in Volume Mesh block. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit support.ntopology.com to gain access to helpful tutorials and support articles. ### New Features and Improvements * #### [Import Buckling, Modal, and Transient Heat Transfer Analyses](#import-buckling-modal-and-transient-heat-transfer-analyses) * #### [Random Points in Volume Mesh Block (Beta)](#random-points-in-volume-mesh-block-beta)) * #### [Robust Tetrahedral Mesh for Clean Mesh Generation](#robust-tetrahedral-mesh-for-clean-mesh-generation) * #### [Stitch Adjacent CAD Faces Block (Beta)](#stitch-adjacent-cad-faces-block-beta)) * #### [Stitch CAD Sheet Bodies Block](#stitch-cad-sheet-bodies-block) * #### [Structural Bonded Contact Block (Beta)](#structural-bonded-contact-block-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Import Buckling, Modal, and Transient Heat Transfer Analyses](#new-features-and-improvements) * **Import Buckling Analysis Results (Beta)** * Description: Import Buckling Analysis Result file from an external location. * Input 01: Path * Type: File Path * Description: System path of Buckling Analysis Result file. * Input 02: Unit system * Type: File Path * Description: The unit system of the external results. This will be used to consistently translate the external results into the active unit system. * Output: Buckling Analysis Result * **Import Modal Analysis Results (Beta)** * Description: Import Modal Analysis Result file from an external location. * Input 01: Path * Type: File Path * Description: System path of Modal Analysis Result file. * Input 02: Unit system * Type: File Path * Description: The unit system of the external results. This will be used to consistently translate the external results into the active unit system. * Output: Modal Analysis Result * **Import Thermal Analysis Results (Beta)** * **Note: We've updated this block to enable you to import both Thermal Analysis results and Transient Heat Transfer Analysis results. If you import a Transient Heat Transfer Analysis, you'll be able to gradually step through the results using the slider in the Heads-Up-Display that appears upon importing the analysis.** * Description: Import Thermal Analysis Result file from an external location. * Input 01: Path * Type: File Path * Description: System path of Thermal Analysis Result file. * Input 02: Unit system * Type: File Path * Description: The unit system of the external results. This will be used to consistently translate the external results into the active unit system. * Output: Thermal Analysis Result #### [Random Points in Volume Mesh Block (Beta)](#new-features-and-improvements) * Description: Generate a randomized list of points inside a volume mesh. * Input 01: Volume mesh * Type: Tet mesh * Description: Volume mesh to distribute random points inside. * Input 02: Point count * Type: Integer * Description: Number of points to distribute inside the volume mesh. * Input 03: Relaxation iterations * Type: Integer * Description: Number of iterations to evenly distribute the points on the mesh. * Input 04: Random seed * Type: Integer * Description: Seed value to generate randomness. * Input 05: Spatial weighting * Type: Scalar Field * Description: An optional input to control the spacing of the generated points. * Output: Point list #### [Robust Tetrahedral Mesh for Clean Mesh Generation](#new-features-and-improvements) * We've updated the Robust Tetrahedral Mesh block to include a new input parameter called “Regularity factor” which gives you the ability to generate more or less uniform triangles in the mesh depending on if your desired goal is to generate a volume mesh for FEA or you only want to clean a mesh for manufacturing. * **Robust Tetrahedral Mesh** * Description: Mesh a solid domain with tetrahedral elements using algorithms that are tolerant to defects such as self-intersections. This function will remesh the boundary of the input domain to generate valid, high-quality elements. If the input domain is likely to be free of any defects, consider using the faster Volume Mesh block. * Input 01: Domain * Type: Mesh * Description: The domain to mesh. * Input 02: Edge length * Type: Scalar * Description: The target edge length of the generated elements. * Input 03: Regularity factor * Type: Integer * Description: A number between 0 and 10 indicating the level of mesh optimization that will be done to improve the shape of the tets. A value of 0 indicates a minimum amount of optimization and a value of 10 indicates a high amount of optimization to achieve regular shaped tetrahedra. * Input 04: Tolerance * Type: Scalar * Description: A tolerance that controls how closely the output mesh vertices must be to the input surface. If not provided, a default value is derived by multiplying the diagonal of the bounding box of the input geometry by 0.0001. * Output: Tet Mesh #### [Stitch Adjacent CAD Faces Block (Beta)](#new-features-and-improvements) * Description: Stitches together adjacent CAD faces into a single CAD body. During this operation CAD faces are not merged into a single face or surface. When this operation results in multiple CAD bodies an error will occur, instead use Stitch CAD Bodies which can return multiple bodies. For those looking to generate a lattice across multiple CAD faces, it is recommended to generate a quad mesh from this block and then use Lattice Body from Quad Mesh.” * Input 01: CAD faces * Type: CAD Face list * Description: List of CAD faces to attempt to join into a single CAD body. * Input 02: Tolerance * Type Scalar * Description: Maximum gap width to attempt to sew adjacent CAD faces. * Output: CAD Body #### [Stitch CAD Sheet Bodies Block](#new-features-and-improvements) * Description: Attempt to merge multiple sheet bodies or CAD faces together within a tolerance, always outputs the results as a list. For those looking to join together multiple CAD solid bodies it is recommended to use the Boolean Union operation, which requires implicit bodies.” * Input 01: CAD bodies * Type: CAD Body list * Description: List of CAD surface bodies to attempt to join. * Input 02: Tolerance * Type: Scalar * Description: Maximum gap width to attempt to sew adjacent CAD surfaces. * Output: CAD Body list * **Note**: This block was previously called “Join CAD Bodies”. #### [Structural Bonded Contact Block (Beta)](#new-features-and-improvements) * Description: Creates a bonded contact between two FE boundaries which allows for mechanical load transference between the two components. A contact resistance value of one half of the sum of the young's modulus for both materials is recommended for most applications. * Input 01: Independent * Type: FE Boundary * Description: The independent FE boundary. * Input 02: Dependent * Type: FE Boundary * Description: The dependent FE boundary. * Input 03: Contact stiffness * Type: Scalar Field * Description: Structural stiffness of the contact elements. * Input 04: Tolerance * Type: Scalar * Description: Positional tolerance for dependent boundary relative to the independent boundary. Nodes in the dependent boundary beyond this will not be constrained to the independent boundary. * Output: FE Connector #### [Usage Improvements](#new-features-and-improvements) * The Axis object now features an axis view featured below: ![The Axis block with an axis show in the viewport.](https://files.learn.ntop.com/help-articles/whats-new/360088876934.png) * Enumerators now have a “names” text property for each enumerator. * nTopCL execution now has an option to save the return message as a log file using “–logfile=filename.log”. By default, the “–logfile” argument without a designated filename will generate “ntopcl.log”. #### [Bug Fixes](#new-features-and-improvements) * Calculating the average of a vector field list no longer fails. * Exporting an empty slice stack to CLF no longer causes an unexpected exit. * Exporting a thermal analysis with a convection load applied to a quad mesh no longer causes an unexpected exit. ## Keywords: *import mesh points what's new release notes tetrahedral robust whats new buckiling random 2.19* # nTop Platform 2.19 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-19-what-s-new ## 2.19 Release Notes #### **Summary** nTopology nTop Platform 2.19 is here! The release comes stacked with brand new features, such as an Import Block Manager, new Lattice Pipeline blocks, such as Custom Implicit Unit Cell and Warp Cell Map, and a new nTopCL feature for generating templates. The Import Block Manager enables you to easily manage and locate imported blocks, while also giving you the ability to unimport. The Custom Implicit Unit Cell block is a very powerful function enabling you to transform any implicit body into a unit cell to be propagated in a cell map, while the Warp Cell Map block gives you the ability to contract and expand regions of a predefined cell map. Lastly, we've introduced a new command in nTopCL that gives you the ability to create input and output JSON templates. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit support.ntopology.com to gain access to helpful tutorials and support articles. ### New features and improvements * [Import Block Manager](#h-01ejs709jt511fh9s5d5g4r4be) * [Improved Feedback for Imported Blocks](#h-01ejs7an0v2f78ee7v9x3f33j0) * [New Filter Overload](#h-01ejs7aw69w7vjscgqr36qmq4g) * [Lattice Body Beam Property (Beta)](#h-01ejs7b4gh3r26cfhgn8d66m76) * [Lattice Body from Beams Block (Beta)](#h-01ejs7bedxpdz1qx3k8mfxkkkd) * [Rib Lattice Body from Beams Block (Beta)](#h-01ejs7bq3wpvve1g94qdstvt27) * [Custom Implicit Unit Cell Block (Beta)](#h-01ejs7bxqg0spp8bpqmyjzhvsa) * [Warp Cell Map Block (Beta)](#h-01ejs7c6825txebsjw5xb6r8qd) * [New Cell Map Properties (Beta)](#h-01ejs7cftnrv9nd5sjxfjjm4eh) * [nTopCL - System Path](#h-01ejs7ctj11jgnzbswg5s730yv) * [nTopCL - Template Generation](#h-01ejs7d23n2zxhnpbkp0j6rw0n) * [Vector Point Map Display](#h-01ejs7d90pzsh01629drqv6fy1) * [Usage Improvements](#h-01ejs7dq7kmjy8v9mb0gcdshbw) * [Bug Fixes](#h-01ejs7dypefx9rkmrc8a2k5ya1) #### Import Block Manager * You can now manage the blocks that you import into your file * To launch the imported blocks window: * Select **File> Imported Blocks** * Right-click on any imported block and select the Imported Blocks option * Select the icon on the top right corner of the Notebook header ![The notebook has a button to view imported blocks.](https://files.learn.ntop.com/help-articles/whats-new/360090522474.png) * To add blocks to the file: * Select **File > Import** and choose a block from the browser * From the imported blocks window, select the “Import Block” button and choose a block from the browser ![The imported blocks menu.](https://files.learn.ntop.com/help-articles/whats-new/360092687613.png) * When blocks are imported to the file, the number in the icon updates to reflect the total number of imported blocks ![The imported blocks menu icon will display the number of imported blocks.](https://files.learn.ntop.com/help-articles/whats-new/360092687673.png) * Delete unused blocks from your file by right-clicking on the name in the imported block manager and selecting delete ![You can delete imported blocks in the imported blocks menu by right clicking them and selecting delete.](https://files.learn.ntop.com/help-articles/whats-new/360090522454.png) * A block can only be deleted if it is not used in the notebook. * If a user tries to delete a block that is in the Notebook, an error message will appear stating that all instances of that block in the notebook need to be deleted first ![The message that appears when you try to delete an imported block that is currently in use.](https://files.learn.ntop.com/help-articles/whats-new/360090522434.png) #### Improved Feedback for Imported Blocks When a new custom block has been imported to a file, the block will appear directly in the Notebook to let the user know that the import is successful. ![When you import a custom block, the block is automatically placed in the notebook.](https://files.learn.ntop.com/help-articles/whats-new/360090522414.png) #### New Filter Overload * Location: Utilities > General * Description: Filter a list of entities by a conditional statement that compares a list of corresponding values to a target reference value. * Input 01: List * Type: List Interface * Description: List to filter * Input 02: Values * Type: Scalar List * Description: The values for comparison * Input 03: Comparison * Type: Comparison Enum * Description: The comparison operator to use * Input 04: Reference * Type: Scalar * Description: The reference value to compare to the list of comparison values * Output: Any * In the example image below, we're filtering a list of points based on the distance to a target point ![The image shows how to use the Filter block to filter a list of points based on values.](https://files.learn.ntop.com/help-articles/whats-new/360092687653.png) #### Lattice Body Beam Property (Beta) * We've introduced a new Beam property for Lattice Bodies * This beam type includes the following information: * Start Point: Start point of each beam * Start Radius: Start radius of each beam * Start Valency: The number of points located at every beam's start point. This integer value is used to determine if a beam is closed, floating, or open. * End Point: Endpoint of each beam * End Radius: End radius of each beam * End Valency: The number of points located at every beam's endpoint. This integer value is used to determine if a beam is closed, floating, or open. * Line Segment: The line segment of the beam * Length: The length of the beam * Direction: The direction of the beam as a vector * Size: The number of beams in total * Reversed: The list of beams in reverse order #### Lattice Body from Beams Block (Beta) * We've introduced a block that enables you to construct a lattice body from a list of beams. If you need to filter the beams of a lattice body based on some criteria, beam length or beam angle as examples, the Lattice Body from Beams block gives you the ability to turn those lists of filtered beams back into a lattice body for further downstream operations. * Location: Beta > Lattices - Utilities * Description: Convert a list of beams into a lattice body * Input 01: Beams * Type: Beam List * Description: Convert a list of beams into a lattice body * Output: Lattice Body #### Rib Lattice Body from Beams Block (Beta) * Location: Beta > Lattices - Utilities * Description: Create directional ribs from the beams elements of a lattice * Input 01: Lattice * Type: Lattice * Description: Lattice to generate ribs from * Input 02: Direction: * Type: Scalar Field * Field to derive the normal direction from. * Input 03: Height * Type: Scalar Field * Description: Field to assign height at the rib locations * **Note:** This block also includes an overload enabling you to specify a vector field for the direction input, enabling you to create your own custom offset direction. ![An example of creating a lattice from beams using the Lattice Body from Beams block.](https://files.learn.ntop.com/help-articles/whats-new/360092687693.png) #### Custom Implicit Unit Cell Block (Beta) * You can now create your own custom implicit unit cells in our new lattice pipeline by simply providing a single implicit body and a bounding box. * Custom Implicit Unit Cell * Type: Implicit Body * Description: Implicit body to convert to an implicit unit cell. * Type: Bounding Box * Description: Bounding box to define the domain of the custom unit cell. * Location: Beta > Lattices - Unit Cells * Description: Constructs a custom implicit unit cell from an implicit body. * Input 01: Body * Input 02: Unit cell domain * Output: Unit Cell Check out [this article](/help-articles/knowledge-base/lattices/how-to-build-a-custom-lattice-unit-cell) to learn more about Custom Unit Cells. ![The left image shows a custom unit cell created using the Custom Implicit Unit Cell block. The right image shows a lattice created using the unit cell.](https://files.learn.ntop.com/help-articles/whats-new/360092687633.png) #### Warp Cell Map Block (Beta) * Location: Beta > Lattices - Cell Map * Description: Warp the unit cell size distribution of a cell map using 3 sizing fields. * Input 01: Cell map * Type: Cell Map * Description: Cell map to be warped * Input 02: Discretization * Type: Vector * Description: Dimensions of the grid in which the transfer function will be computed on. Increase to capture more detail from the input sizing fields. * Input 03: U Scale * Type: Scalar Field * Description: Field to control stretch in U-direction. Negative will shrink, positive will expand. * Input 04: V Scale * Type: Scalar Field * Description: Field to control stretch in V-direction. Negative will shrink, positive will expand. * Input 05: W Scale * Type: Scalar Field * Description: Field to control stretch in W-direction. Negative will shrink, positive will expand. * Input 06: Lock U Bounds * Type: Bool * Description: Option to freeze in-plane displacement on U boundaries * Input 07: Lock V Bounds * Type: Bool * Description: Option to freeze in-plane displacement on V boundaries * Input 08: Lock W Bounds * Type: Bool * Description: Option to freeze in-plane displacement on W boundaries * Output: Cell Map ![The left image shows a cell map created using the Warp Cell Map block. The right image shows a lattice created using the cell map.](https://files.learn.ntop.com/help-articles/whats-new/360092687713.png) #### New Cell Map Properties (Beta) * We've introduced the following new Cell Map properties: * Jacobian Determinant Scalar Field: provides a local measure of the factor by which the map expands or shrinks a unit of volume. A negative value indicates an inversion. * U Scalar Field: the map to the unit cell's X-axis * V Scalar Field: the map to the unit cell's Y-axis * W Scalar Field: the map to the unit cell's Z-axis #### nTop Command Line (nTopCL) - Installation Option for System PATH * You can add the installation folder to System PATH to enable executing nTopCL from any folder. ![You can add the installation folder to System PATH to enable executing nTopCL from any folder.](https://files.learn.ntop.com/help-articles/whats-new/360090522494.png) #### nTop Command Line (nTopCL) - Template Generation * We have given you a feature to create Input and Output JSON templates by running nTopCL command with '-t' argument. (ex. **ntopcl.exe -t myNotebook.ntop)** * Input and Output JSON templates are generated based on the default values in the nTop Notebook. * Output JSON template will not be generated unless all default values are given in the Notebook. ![An example template for a notebook to run in nTopCL. The image shows the input template on the left and the output template on the right.](https://files.learn.ntop.com/help-articles/whats-new/360090522514.png) #### Vector Point Map Display * Vector Point Maps arrows now display in screen dimensions. * Using the Heads Up Display (HUD), users can now adjust the scale of the arrows, can scale arrows based on a corresponding weight derived from the simulation results, and can also determine the bounds of the visible arrows by modifying the Lower and Upper bounds of the results. See this new feature in action below: ![The gif shows a vector point map display in nTop. The point map display can be modified using the heads up display.](https://files.learn.ntop.com/help-articles/whats-new/360092882993.png) #### Usage Improvements * The following blocks have been promoted from Beta to Production and currently reside in the Manufacturing > Slicing Menu * Slice Stack Boolean Intersect * Slice Stack Boolean Union * Slice Stack Boolean Subtract * Trim Slice Stack * Simplify Slice Stack * The Split Mesh block has been optimized to produce faster results. #### Bug Fixes * A Cylindrical Lattice Body (Beta) can now be sliced properly * We've resolved an issue where nTop files were failing to save on network drives, even though the interface indicated they saved * The Periodic Lattice Body (Beta) no longer produces graphic glitches when rotating or zooming * Units are no longer stri\[\[ed from a list of items output from a custom block ## Keywords: *ntop what's new release notes 2.19* # nTop Platform 2.20 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-20-what-s-new ## Version 2.20 > [!NOTE] > > nTopology nTop Platform 2.20 is here! This release features powerful new functions for building enhanced custom blocks. Improvements include creating optional inputs and building drop-down menus using the new Choice and Select by Choice block. This release also provides you with the ability to learn more about our block system with extended block documentation, which comes with expanded information such as a block's application, images, and downloadable example files. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. ### New Features and Improvements * #### [Third Power, Third Root, Fourth Power, and Fourth Root Math Blocks](#third-power-third-root-fourth-power-and-fourth-root-math-blocks) * #### [Delaunay Volume Mesh Block (Beta)](#delaunay-volume-mesh-block-beta)) * #### [Extended Block Documentation](#extended-block-documentation) * #### [Import Non-Linear Static Results](#import-non-linear-static-results) * #### [List Inputs for nTopCL](#list-inputs-for-ntopcl) * #### [Optional Inputs for Custom Blocks](#optional-inputs-for-custom-blocks) * #### [User Authored Drop Down Menus for Custom Blocks](#user-authored-drop-down-menus-for-custom-blocks) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Third Power, Third Root, Fourth Power, and Fourth Root Math Blocks](#new-features-and-improvements) * We've introduced four new math blocks that perform the following functions: x^(1/3), x^3, x^(1/4), and x^4. Below is a detailed overview of each block: * **Third Power** * Ribbon Location: Math > Operations * Description: “Returns the third power of an Integer.” | “Returns the third power of a Scalar.” | “Returns the third power of a Scalar Field.” * Input: Operand * Type: Integer | Scalar | Scalar Field * Description: “Value to operate on.” * Return Type: Integer | Scalar | Scalar Field * **Third Root** * Ribbon Location: Math > Operations * Description: “Returns the cube root of a Scalar.” | “Returns the cube root of a Scalar Field.” * Input: Operand * Type: Integer | Scalar | Scalar Field * Description: “Value to operate on.” * Return Type: Scalar | Scalar Field * **Fourth Power** * Ribbon Location: Math > Operations * Description: “Returns the fourth root of an Integer.” | “Returns the fourth root of a Scalar.” | “Returns the fourth root of a Scalar Field.” * Input: Operand * Type: Integer | Scalar | Scalar Field * Description: “Value to operate on.” * Return Type: Integer | Scalar | Scalar Field * **Fourth Root** * Ribbon Location: Math > Operations * Description: “Returns the fourth root of a Scalar.” | “Returns the fourth root of a Scalar Field.” * Input: Operand * Type: Integer | Scalar | Scalar Field * Description: “Value to operate on.” * Return Type: Scalar | Scalar Field #### [Delaunay Volume Mesh Block (Beta)](#new-features-and-improvements) * Location: Beta > Simulation - Mesh * Description: “Creates a volume mesh forming a Delaunay tetrahedralization from a list of points.” * Input: Vertices * Type: Point List * Description: “List of points to connect via a Delaunay tetrahedralization.” * Return Type: Tet Mesh ![An example mesh created using the Delaunay Volume Mesh block.](https://files.learn.ntop.com/help-articles/whats-new/360097468793.png) #### [Extended Block Documentation](#new-features-and-improvements) * We've introduced extended block documentation in 2.20. This additional information per block contains images, downloadable example files, and application information not readily available in the information panel of the block itself. * This release features additional information for the following blocks in our Block Documentation: * Boolean Intersect * Boolean Subtract * Boolean Union * Box from Corners * Shell * Topology Optimization #### [Import Non-Linear Static Results](#new-features-and-improvements) * You can now use the Import Structural Analysis block or the Import Thermal Analysis block to import linear and non-linear results. #### [List Inputs for nTopCL](#new-features-and-improvements) * With JSON as an input file for nTopCL execution, you have a variety of input variables that are supported for executing your notebook heedlessly using nTopCL. * You can now pass lists of these supported variables using JSON input files. Simply put these list variables into the Input section of your Notebook and run nTopCL's template generation feature to generate the JSON input file. ![The image on the left shows a JSON file open in a text editor. The right image shows the nTop notebook used to create the JSON. These images showcase how list inputs can now be used for nTopCL.](https://files.learn.ntop.com/help-articles/whats-new/360097468753.png) #### [Optional Inputs for Custom Blocks](#new-features-and-improvements) * You can now convert optional block inputs into custom block inputs. * For example, the Remesh Surface block features two optional inputs: Chord height and Min feature size. If these optional inputs are converted into variables and placed in the Inputs section of a notebook, they will appear as optional inputs when you import the notebook as a custom block. ![The image shows how custom blocks can now have optional inputs.](https://files.learn.ntop.com/help-articles/whats-new/360095174474.png) #### [User Authored Drop Down Menus for Custom Blocks](#new-features-and-improvements) * You can now create drop-down menus in custom blocks using the new Choice and Select by Choice blocks. * **Choice** * Location: Create > Notebooks * Description: “Create a set of choices.” * Input: Choices * Type: Text * Description: “Set of choices.” * Return Type: Choice * **Note:** When using the Choice block as an input to a notebook, each Choice input will be converted into an item in a drop-down menu if the notebook is imported as a custom block. * **Note:** The Choice block defaults to selecting the first choice input, index 0. * **Select by Choice** * Locations: Create > Notebooks * Description: “Select item in a list based on a choice.” * Input 01: Choice * Type: Choice * Description: “Choice to select item.” * Input 02: List * Type: List Interface * Description: “The list to get the element from.” * **Note:** The Choice input determines which item from the provided list to select. An error will be thrown if the number of choices is unequal to the number of list items. * Below is an example of using the Choice and Select by Choice blocks in a notebook for filtering Lattice Body Beams by Connectivity (Closed, Floating, Open). When this notebook is imported as a block, the three choices appear in a drop-down menu for the end-user to select from, with Closed as the default choice. ![The image shows how user created custom blocks can now be implemented in custom blocks.](https://files.learn.ntop.com/help-articles/whats-new/360097468733.png) #### [Usage Improvements](#new-features-and-improvements) * The following blocks have moved from Beta to Production: * Export 3MF * Random Points in Volume Mesh * Stitch Adjacent CAD Faces * Structural Bonded Contact * Thermal Bonded Contact * You can now transform a List of Spatial 3D Types. In previous releases, you could only transform a single Spatial 3D type at a time. #### [Bug Fixes](#new-features-and-improvements) * We've resolved an issue preventing you from rotating CAD Bodies with model translation errors or other self-inconsistencies. ## Keywords: *import mesh block static volume custom math linear what's new release notes third root delaunay non nToopCL 2.20* # nTop Platform 2.22 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-22-what-s-new > [!NOTE] > > nTopology nTop Platform 2.22 is here! It looks a little different right? We've implemented a brand new UI framework that gives nTop Platform a super fresh look. This new framework will accelerate user interface development, enabling us to deliver great new features, faster. Everything still behaves like it used to, but the user interface now looks a bit more crisp and modern. Not only does it look sharper, but we've introduced a Light Theme to give you more control and personalization over the user interface. In addition, we've introduced a Slice Layer type which holds additional information about a layer including contours and cross-sectional area and a Curve property for CAD files. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. ### New Features and Improvements * #### [Show Deprecated Blocks](#show-deprecated-blocks) * #### [Light Theme](#light-theme) * #### [New UI Framework](#new-ui-framework) * #### [Slice Layer Type](#slice-layer-type) * #### [Curve Property for CAD Files](#curve-property-for-cad-files) * #### [Extended Block Documentation](#extended-block-documentation) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Show Deprecated Blocks](#new-features-and-improvements) * You now have the option to show deprecated blocks in your search results, while looking for a block via the notebook search bar. * Go to File > Settings > General and check **Show Deprecated Blocks** and select Ok. #### [Light Theme](#new-features-and-improvements) * A new light theme is now available! By default, nTop Platform is set to Dark. To change the theme, go to File > Settings > Display and change Theme from Dark to Light. You'll be prompted with a message that reads “Theme will be applied on program restart.” Once you relaunch nTop Platform, Light theme will be activated. If you decide to switch back to Dark theme, just follow the same steps above, but select the Dark theme option instead. Below is an example of our new Light theme: ![The nTop platform now has a light them option for displaying the UI.](https://files.learn.ntop.com/help-articles/whats-new/360096732694.png) #### [New UI Framework](#new-features-and-improvements) * We've updated the framework we use to create our user interface. This new framework will enable us to deliver new user interactions and experiences that were not previously possible. ![The nTop Platform UI in nTop 2.22.](https://files.learn.ntop.com/help-articles/whats-new/360096732714.png) #### [Slice Layer Type](#new-features-and-improvements) * We've introduced a new Slice Stack property called Slices which enables you to easily extract the points of each slice so that you can apply print parameters in external programs, or quickly extract the cross-sectional area versus Z height to make more informed decisions about orientation. * The Slices type gives you access to every slice in the slice stack. Each Slice object gives you access to the following properties: * Closed curves * Cross sectional area * Hatches * Open curves * Points * Total length * Z height ![A Torus body that has been sliced using the Slice Body block. The slice body properties panel is open to show the slice property.](https://files.learn.ntop.com/help-articles/whats-new/360096732954.png) #### [Curve Property for CAD Files](#new-features-and-improvements) * nTop now imports curves in CAD files, accessible from the Curves property of a CAD Part. To access this new property, expand the information panel of any block with a CAD Part output type and select the Properties tab. #### [Extended Block Documentation](#new-features-and-improvements) * In the previous release, we introduced extended block documentation, which includes additional information, images, and example files so that you can get an in depth overview about the purpose of each block in our block system. Below is a list of blocks which we've added extended block documentation for: * Cellular Noise 3D * Clearance * Export Mesh * Extrusion Constraint * FE Model * Frame * Import Scalar Point Map * Offset Body * Ramp * Simplex Noise 3D * Simplify Mesh by Amount * Simplify Mesh by Threshold * Static Analysis * Thicken Body #### [Usage Improvements](#new-features-and-improvements) * Slice Stacks now include the new Slice Layer type as a property in the Properties tab. * If you receive a file that was saved in a newer version of nTop Platform and attempt to open it in an older version, you'll be prompted with the following message and be prevented from opening the file: “This file was saved in version X.Y.Z. Upgrade to that version or higher to open this file.” * All Toolkits have been updated to feature units for inputs which previously required user specification. #### [Bug Fixes](#new-features-and-improvements) * We've updated the Smoothen Body block so that the Grid size input is now associated with units of length. * Implicit view of a Graph Unit cell now remains visible when you switch between different resolutions. * The Displacement Constraint block in the Topology Optimization toolkit block now exposes directional displacements. * We've resolved an issue where Creo parts containing numbers in the extension were not showing in the import window. * We've updated the Homogenize Unit Cell block to better handle RAM usage when working with large mesh sizes. ## Keywords: *ntop what's new release notes 2.22.7* # nTop Platform 2.23 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-23-what-s-new > [!NOTE] > > nTopology nTop Platform 2.23 is here! This release gives you the ability to store and load all of your custom blocks from one location. In addition, 2.23 features automatic block overload detection, six new lattice beam filters, more informative unit error messages, ribbon tooltips for a better learning experience, and CAD color properties for coordinating CAD data in automation workflows. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Automatic Overload Detection](#automatic-overload-detection) * #### [Color Property for CAD Bodies and Faces](#color-property-for-cad-bodies-and-faces) * #### [Informative Unit Error Messages](#informative-unit-error-messages) * #### [Lattice Pipeline Filter Blocks (Beta)](#lattice-pipeline-filter-blocks-beta)) * #### [Local Repository for Your Custom Blocks](#local-repository-for-your-custom-blocks) * #### [Ribbon Tooltips](#ribbon-tooltips) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Automatic Overload Detection](#new-features-and-improvements) * We've introduced a new feature that automatically selects the correct overload of a block based on the type of inputs you provide. See a gif of this awesome new detection feature below: ![A gif showing how the add block automatically changes its overload depending on the input type that is placed inside of it.](https://files.learn.ntop.com/help-articles/whats-new/360100610413.png) #### [Color Property for CAD Bodies and Faces](#new-features-and-improvements) * We've introduced a new Color property to CAD Bodies and Faces that enables you to capture metadata in your automation workflows to coordinate between different CAD Parts, even if the parts geometrically change. * The property is called “Color” and the value type is a Vec3 for R,G,B values. * **Note:** Colors are not yet displayed on CAD parts in the viewport. #### [Informative Unit Error Messages](#new-features-and-improvements) * We've introduced more informative error messages when incorrect or no units have been provided for a block input that requires units. * The format for the new unit error message is as follows: *Input Field Name* expects units with *dimension of unit type*, but you provided *unit type*. Please adjust the units of the input.” * Here is an example of when incorrect units are assigned to the Edge length input of the FE Tetrahedral Mesh: *Edge length* expects units with *dimensions of length*, but you provided *no units*. Please adjust the units of the input.” #### [Lattice Pipeline Filter Blocks (Beta)](#new-features-and-improvements) * We've introduced six new lattice pipeline filter blocks for filtering the beams of a lattice body based on specific data such as beam angle, connectivity, containment, length, and thickness. Below is an outline of each new filter, all of which currently reside in Beta. * **Filter Beams by Angle** * Description: Filter the beams of a lattice body by their angle with respect to a plane. * Input 01: Lattice body * Type: Lattice Body * Description: Lattice body that is intended to be filtered. * Input 02: Condition: * Type: Comparison Enum * Description: Logical arguments used with the filter criteria, Angle. * Input 03: Angle * Type: Scalar * Description: Beam angle filter criteria. * Input 04: Plane * Type: Plane * Description: Plane used to determine the relative angle of the lattice beams. * Output: Lattice Body * **Filter Beams by Length** * Description: Filter the beams of a lattice body by a beam length criteria and a conditional. * Input 01: Lattice body * Type: Lattice Body * Description: Lattice body that is intended to be filtered. * Input 02: Condition * Type: Comparison Enum * Description: Logical arguments used with the filter criteria, Length. * Input 03: Length * Type: Scalar * Description: The filter criteria, beam length from the lattice body. * Output: Lattice Body * **Filter Beams by Connectivity** * Description: Filters the beams of a lattice body by their connectivity: Closed, Floating, Open. * Input 01: Lattice body * Type: Lattice Body * Description: Lattice body that is intended to be filtered. * Input 02: Connectivity * Type: Choice * Description: Select the condition for filtering beams: Closed, Floating (both nodes exposed), Open (one node exposed). * Output: Lattice Body * **Filter Beams by Containment** * Description: Filters beams of a lattice body by a region and a containment. * Input 01: Lattice body * Type: Lattice Body * Description: Lattice body that is intended to be filtered. * Input 02: Volume * Type: Implicit Body * Description: Volume that signifies the region to filter based on. * Input 03: Inside region * Type: Selection Containment * Description: Option to include geometry based on fill or partial containment. * Output: Lattice Body * **Filter Beams by Thickness** * Description: Filters the beams of a lattice body by a beam length criteria and a conditional. * Input 01: Lattice body * Type: Lattice Body * Description: Lattice body that is intended to be filtered. * Input 02: Condition * Type: Comparison Enum * Description: Logical arguments used with the filter criteria, Thickness. * Input 03: Thickness * Type: Scalar * Description: Beam thickness filter criteria. * Output: Lattice Body * **Filter Beams** * Description: Filters the beams of a lattice body based on a criteria. * Input 01: Lattice body * Type: Lattice Body * Description: Lattice body that is intended to be filtered. * Input 02: Values * Type: Scalar * Description: Values to compare against the criteria. * Input 03: Condition * Type: Comparison Enum * Description: Logical arguments used with the filter criteria. * Input 04: Criteria * Type: Scalar * Description: Value to determine the requirement for filtering. * Output: Lattice Body #### [Local Repository for Your Custom Blocks](#new-features-and-improvements) * We've introduced a convenient way for you to store, access, and load all of your custom blocks. We've added a “My Block Folder” which will load any and all custom blocks into all instances of nTop Platform. * By default, this folder location is set to **AppData/Roaming/nTopology/MyBlocks**. You can change this folder destination to whichever location you find most convenient, by going to File > Settings > General and selecting the folder icon next to My Blocks Folder. * You can also directly open your My Blocks Folder by going to File > My Blocks Folder * To utilize this feature, simply add your nTop files that are set up to be utilized as custom blocks to this folder. The next time you launch a new instance of nTop platform, these blocks will already be loaded and you'll be able to search for them via the search bar. * Custom blocks can also be organized into subfolders within the main folder. #### [Ribbon Tooltips](#new-features-and-improvements) * We've introduced Ribbon Tooltips to make it easier to learn about how a block functions without having to add it to your notebook to learn more. * Simply hover your mouse over the icon of a block displayed in the ribbon and a text bubble will appear displaying the title and description of the block. See an example below: ![Hovering over a block in the ribbon displays the block's tooltip. The image shows the Topology Optimization tooltip from hovering the block in the ribbon.](https://files.learn.ntop.com/help-articles/whats-new/360100610493.png) #### [Usage Improvements](#new-features-and-improvements) * We've updated our Import Part block to include a new parameter called “Heal CAD”. * Input 03: Heal CAD * Type: CAD Healing Enum * Description: Set level of automatic healing for CAD on import. This healing does not apply to x\_t and x\_b files. * The three available healing options are None, Basic, and Deep, with Basic set as the default. * The following blocks have been added to the ribbon: * Average * Location: Math > Operations * Implicit Body from Curve, Mesh from Voxel Grid, and Voxel Grid from Mesh: * Location: Utilities > Conversion * We've updated the Cell Map from CAD Face block parameter *Offset* to *Height*. * All toolkit blocks now have default units on inputs that previously required the user to specify. * Displacement Point Map, Von Mises Stress Point Map, Temperature Point Map, and Heat Point Map all have a new optional parameter called Step Number * Input 02: Step Number * Type: Integer * Description: The step number for which the point map will be created. The last step is used by default. #### [Bug Fixes](#new-features-and-improvements) * Exporting curves no longer exports each curve as thousands of curve segments. * nTop Platform no longer unexpectedly closes when you try to delete a variable when the select mode is turned on. Affects version: 2.22.7 * Split Slice Stack no longer forces nTop Platform to exit if there is only one closed contour in the stack. Affects Version 2.22.7 * Slicing a part with CAD and lattice geometry no longer creates slice artifacts. Affects version: 2.19.3 and later * The File open dialog now opens to the most recently used directory by default. Affects version: 2.22.7 * We've resolved an issue where imported CAD bodies were missing faces. Affects versions: 2.5.6 and later. * We've resolved an issue where Mirror FE Meshes were failing to run if the mirror plane wasn't directly on the mesh face. Affects version: 2.20.5 and later * We've resolved an issue where Mirror FE Meshes were not producing correct results when the merge option was not checked. Affects version: 2.20.5 and later ## Keywords: *new 2.23 whats* # nTop Platform 2.24 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-24-what-s-new Version 2.24 > [!NOTE] > > nTopology nTop Platform 2.24 is here! This release features some incredible new topology optimization features such as overhang constraints, an incremental save feature for results, and the ability to import results via the OP2 file format. In addition, 2.24 gives you the ability to create your own warning and error messages for custom blocks, tooltips for the search bar and notebook, improvements to nTopCL, and the ability to perform 2D bin packing using the new Bounding Box 2D Nesting block. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Bounding Box 2D Nesting (Beta)](#bounding-box-2d-nesting-beta)) * #### [nTopCL: Obtain Notebook with Cached Data](#ntopcl-obtain-notebook-with-cached-data) * #### [Updated Simulation Error Messages](#updated-simulation-error-messages) * #### [Search Bar and Notebook Tooltips](#search-bar-and-notebook-tooltips) * #### [Topology Optimization: Import Results via OP2](#topology-optimization-import-results-via-op2) * #### [Topology Optimization: Overhang Constraints (Beta)](#topology-optimization-overhang-constraints-beta)) * #### [Topology Optimization: Selectively Save Results](#topology-optimization-selectively-save-results) * #### [Validate Block](#validate-block) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Bounding Box 2D Nesting (Beta)](#new-features-and-improvements) * Description: Performs a 2D bin packing of bounding boxes. Boxes that fit will be placed in order of size and the remaining boxes will be placed outside and next to the build volume. * Input 01: Bounding boxes * Type: Bounding Box List * Description: Bounding Boxes to be nested. * Input 02: Build volume * Type: Bounding Box * Description: Volume in which boxes are nested. * Input 03: Part to part offset * Type: Scalar * Description: Amount of tolerance between boxes during the nest process. * Input 04: Platform offset * Type: Scalar * Description: Offset distance between boxes and build platform in Z. * Input 05: Perimeter offset * Type: Scalar * Description: Offset distance between parts and the perimeter in XY of the build volume. * Output Type: Transformation list #### [nTopCL: Obtain Notebook with Cached Data](#new-features-and-improvements) * We've introduced a new nTopCL argument **'--save'** or **'-s'** that overwrites the notebook with the input parameters and all block data generated during the nTopCL execution. * The intended use case of '--save' or 's' is to allow users to check the results after running complex Notebooks using nTopCL or creating variations of the same Notebook via Python scripts. #### [Updated Simulation Error Messages](#new-features-and-improvements) * We've updated the error messages of several simulation blocks to be more informative. They are outlined below: * **Block: FE Region by Body** * Current Message: “No mesh entities were found.” * New Message: “No mesh entities were found within the given tolerance to the implicit body. Please try either increasing the tolerance or using a different body.” * **Block: Tie Constraint, Structural Bonded Contact, Thermal Bonded Contact** * Current Message: “Tolerance too low. No nodes have been constrained.” * New Message: “No dependent nodes were found within the given tolerance to the independent boundary. Please try increasing the tolerance if that is appropriate for \* your model or using different independent or dependent boundaries.” * **Block: Simulation Analyses** * Current Message: “A mesh referenced in boundary condition list at position 1 does not match any mesh used in model.” * New Message: “An FE Boundary or FE Region references an FE Mesh that is not used in the model assembly. Please verify that all boundary conditions and regions reference the same FE Mesh as that used in the FE Model.” * **Block: Simulation Analyses** * Current Message: “Stiffness matrix is singular. Please check the FE Model.” * New Message: “Analysis is expecting a set up where all FEA bodies are constrained such that no rigid body motion occurs, but you provided an analysis set up which is not properly constrained. Please try adjusting your boundary conditions such that each body is properly constrained. " * **Block: Remesh Surface** * Current Message: “Growth rate must be greater than 1.” * New Message: “Growth rate is expecting a value greater than 1, but you provided \{Value}. Please adjust the input such that it is greater than 1.” #### [Search Bar and Notebook Tooltips](#new-features-and-improvements) * Tooltips now appear for blocks in the search bar. Simply search for a block via a keyword in the search bar and hover your mouse or cursor over the title of the block to review its description. * Tooltips also appear for variable names and variable chips. ![You can search for blocks using the nTop search bar. When you highlight a block in the search results, a tooltip will appear explaining the block's function.](https://files.learn.ntop.com/help-articles/whats-new/360099261194.png) #### [Topology Optimization: Import Results via OP2](#new-features-and-improvements) * Users can now import topology optimization results via the OP2 format, which can be produced by tools such as Altair Optistruct using the Import Topology Optimization Result block, currently located in Beta > Analysis Exchange. * **Import Topology Optimization Result (Beta)** * Description: Import Topology Optimization Result file from a supported format. * Input 01: Path * Type: File Path * Description: System path of Topology Optimization Result file. * Input 02: Unit system * Type: Unit System * Description: The unit system of the external results. This will be used to consistently translate the external results into the active unit system. * Output Type: TopOpt Result #### [Topology Optimization: Overhang Constraints (Beta)](#new-features-and-improvements) * Users can now specify overhang angle constraints for a topology optimization workflow using the new Overhang Constraint block located in Beta > Topology Optimization. * **Overhang Constraint (Beta)** * Description: Setup a maximum overhang constraint for a topology optimization process. * Input 01: Build direction * Type: Vector * Description: Build Direction. * Input 02: Max angle * Type: Scalar * Description: Max overhang angle with respect to build direction vector. * Input 03: Support boundaries * Type: FE Boundary list * Description: Support boundaries which material can be placed onto. * Output Type: Optimization Constraint ![The overhang constraint in Topology Optimization is used to add support in areas exceeding a defined angle.](https://files.learn.ntop.com/help-articles/whats-new/360099261214.png) #### [Topology Optimization: Selectively Save Results](#new-features-and-improvements) * We've introduced a new parameter to the Topology Optimization block that gives you the ability to incrementally save the results of your topology optimization routine. * New parameter: **Save increment** * Description: Controls the amount of data that is stored and accessible after the topology optimization completes. The default value of 1 will save results for all increments, whereas a result of 0 will save only the first and last increment. For any value, N, greater than 1, it will save results for every N increments. * **Note:** The last iteration will always be saved. #### [Validate Block](#new-features-and-improvements) * You can now create your own warning and error messages for your custom blocks based on a boolean value using the new Validate block, located in Create > Notebooks. * When this block is used in a notebook and the notebook is imported as a custom block, your custom warning or error message will appear in the information panel of your custom block just like they do for the blocks that come with nTop Platform. * Validate: * Description: Issues a user-defined warning or error message for a notebook imported as a block. * Input 01: Condition * Type: Bool * Description: Condition that must be true or it will produce a warning or error message. * Input 02: Message * Type: Text * Description: The message to be displayed as a warning or error in the information panel if the condition is false. * Input 03: Message type * Type: Message Type Enum * Description: The type of message to be displayed. * Output Type: Text #### [Usage Improvements](#new-features-and-improvements) * We've updated the look and feel of our support site at [support.ntopology.com](https://support.ntopology.com/hc/en-us) to improve the user experience and to make it easier to navigate and find relevant content. Check it out! * We've updated the look and feel of your user dashboard at [app.ntopology.com](https://app.ntopology.com/) to make it easier to navigate and find important account information and onboarding material. Check it out! * Vector Map and Point Map HUDs now show user-defined inputs. * We've updated the execution behavior of nTopCL to run Notebooks containing incomplete blocks with warnings now. #### [Bug Fixes](#new-features-and-improvements) * Buckling Analyses have correct units in the results now. ## Keywords: *new whats 2.24* # nTop Platform 2.25 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-25-what-s-new Version 2.25 > [!NOTE] > > nTopology nTop Platform 2.25 is here! This release features some great new features such as the round, floor, and ceiling blocks, the ability to construct a single mesh face, and a ray cast block for projecting a point along a vector. In addition, this release features several usability improvements such as tooltips for autocasting, links between blocks and documentation to increase your knowledge about a block's usage and functionality, and improved colors in both dark and light themes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Ceiling, Floor, and Round Blocks](#ceiling-floor-and-round-blocks) * #### [Create Single Face Mesh Block (Beta)](#create-single-face-mesh-block-beta)) * #### [Extended Block Documentation Links](#extended-block-documentation-links) * #### [Ray Cast Block (Beta)](#ray-cast-block-beta)) * #### [Type Autocasting Tooltips](#type-autocasting-tooltips) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Ceiling, Floor, and Round Blocks](#new-features-and-improvements) * **Ceiling** * Location: Math > Utilities * Description: Map a value to the least increment of an interval that is greater than or equal to the value. * Input 01: Value * Type: Scalar, Scalar Field * Description: The value to convert by way of the Ceiling function. * Input 02: Interval * Type: Scalar, Scalar Field * Description: The increment of the Ceiling function. * Return Type: Scalar, Scalar Field * **Floor** * Location: Math > Utilities * Description: Map a value to the greatest increment of an interval less than or equal to the value. * Input 01: Value * Type: Scalar, Scalar Field * Description: The value to convert by way of the Floor function. * Input 02: Interval * Type: Scalar, Scalar Field * Description: The increment of the Floor function. * Return Type: Scalar, Scalar Field * **Round** * Location: Math > Utilities * Description: Map a value by either rounding up to the smallest increment of an interval that is not less than the value or by rounding down to the largest increment of an interval that is not greater than the value. * Input 01: Value * Type: Scalar, Scalar Field * Description: The value to convert by way of the Round function. * Input 02: Interval * Type: Scalar, Scalar Field * Description: The increment of the Round function. * Return Type: Scalar, Scalar Field #### [Create Single Face Mesh Block (Beta)](#new-features-and-improvements) * Location: Modeling - Utilities > Beta * Description: Creates a mesh composed of a single face from a list of given points. * Input 01: Points * Type: Point List * Description: An ordered list of face vertices. Currently, lists of size 3 and 4 are supported. * Return Type: Mesh #### [Extended Block Documentation Links](#new-features-and-improvements) * You can now learn more about a block via the “Learn More” button in the information panel of a block. The “Learn More” button takes you to our extended block documentation. Below is an example: ![Most blocks now have a learn more button in their information tab. The learn more button opens the block's extended documentation.](https://files.learn.ntop.com/help-articles/whats-new/1500001522021.png) * **Note: Not all blocks have extended block documentation yet and as a result, the “Learn More” button will not be available.** * The following blocks currently have extended block documentation: * Boolean Intersect * Boolean Subtract * Boolean Union * Box from Corners * Cellular Noise 3D * Clearance * Export Mesh * Extrusion Constraint * FE Component * FE Boundary by Flood Fill * FE Model * FE Volume Mesh * Force * Frame * Import Scalar Point Map * Offset Body * Ramp * Shell * Simplex Noise 3D * Simplify Mesh by Amount * Simplify Mesh by Threshold * Slice Lattice * Static Analysis * Thicken Body * Topology Optimization #### [Ray Cast Block (Beta)](#new-features-and-improvements) * Location: Modeling - Utilities > Beta * Description: Create a ray to a voxel grid. * Input 01: Grid * Type: Voxel Grid * Description: The voxel grid to ray cast. * Input 02: Point * Type: Point * Description: The origin of the ray to intersect with the voxel grid. * Input 03: Direction * Type: Vector * Description: The direction of the rays to intersect with the voxel grid. * Return Type: Point #### [Type Autocasting Tooltips](#new-features-and-improvements) * We've enhanced our tooltips to help you better understand the types you are working with and how they autocast. Hover your mouse over a block's type Icon and a tooltip will appear indicating the current type. If the block is nested within another block, the tooltip will display the block's output type as well as the type that it has been converted to by way of nesting. Lastly, view the information panel of a block to see all the different types the output can be converted to. See examples below: ![Dragging your mouse over a block icon will display the block type.](https://files.learn.ntop.com/help-articles/whats-new/360102533493.png) #### [Usage Improvements](#new-features-and-improvements) * We've updated the Type colors in both Dark and Light themes to improve readability and the overall user experience. * Updated Geometry Error Messages * **Skewed Box** * Current Message: “Box violates right-hand rule; swap two axes to fix.” * New Message: “The axes you provided violate the right-hand rule. Please try swapping the two axes to address the issue.” * **CAD from Mesh** * Current Message: “The input mesh must be manifold.” * New Message: “Expecting a manifold mesh, the surface mesh that you provided is not manifold. Please visit support.ntopology.com for techniques to generate a manifold mesh.” * **Closest Point** * Current Message: “Could not find closest point via descent.” * New Message: “Closest point information could not be found for the specified tolerance. Increasing the tolerance may help but may reduce the accuracy of the result.” * **Frame** * Current Message: “Axes cannot be parallel.” * New Message: “The given “X-axis” and “Y-axis” were found to be parallel. Please adjust one of these two inputs so that they are not parallel.” * **Implicit Body from Voxel Grid** * Current Message: “Empty voxel body.” * New Message: “Expecting input “Voxel grid” to contain a non-zero number of voxels, however, the number of voxels is zero. Please adjust the voxel grid generation in the preceding block.” * **Import Part** * Current Message: “Failed to load interop plugin.” * New Message: “The CAD interoperability libraries were unable to be located. Please try reinstalling the application or contact support through support.ntopology.com.” * **Import Part** * Current Message: “Unable to locate Parasolid 'Schemas' directory.” * New Message: “Error occurred when loading the CAD interoperability libraries for Parasolid. Please contact nTopology Support by visiting support.ntopology.com.” * **Mesh from Implicit Body** * Current Message: “Empty mesh produced.” * New Message: “Expecting to produce a mesh that contains faces. The “Feature size” you provided results in no faces and creates an empty mesh. Please adjust the feature size to a smaller value.” * **Plane** * Current Message: “Axes cannot be parallel.” * New Message: “The given “X-axis” and “Y-axis” were found to be parallel. Please adjust one of these two inputs so that they are not parallel.” * **Point Map** * Current Message: “Point list size must match value list size.” * New Message: “Expecting “Values” list to be of equal length as “Points” list, but you provided lists that are not of the same length. Please adjust the number of entities in each so that they are of equal size.” #### [Bug Fixes](#new-features-and-improvements) * Export FE Volume Mesh has been updated to prevent unexpected exits while using the “right click - export” option. * Export Slice no longer creates files when the block errors out. ## Keywords: *update what's new 2.25* # nTop Platform 2.26 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-26-what-s-new > [!NOTE] > > nTopology 2.26 is here! This release features some powerful new blocks, such as the Angle Field block which enables you to find the angle on a surface of an object with respect to a vector as a scalar. In addition, we've enhanced the Organization Administration Licensing dashboard to make it easier for you to manage the licenses and users in your organization. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Angle Field Block](#angle-field-block) * #### [Filter Points by Volume Block](#filter-points-by-volume-block) * #### [New Org. Admin Licensing Dashboard](#new-org-admin-licensing-dashboard) * #### [Text from Scalar Block](#text-from-scalar-block) * #### [Bug Fixes](#bug-fixes) #### [Angle Field Block](#new-features-and-improvements) * **Location:** Fields > Utilities * **Description:** Generates a field that indicates angle with respect to a direction. * **Input 01:** Body * Type: Implicit Body * Direction: Implicit Body to detect the angle with respect to the direction. * **Input 02:** Direction * Type: Vector * Direction: Vector that corresponds to the direction. * **Return Type:** Scalar Field #### [Filter Points by Volume Block](#new-features-and-improvements) * **Location:** Modeling > Utilities * **Description:** Filters a list of points to those either inside, outside, or along the boundary of an implicit body and returns a point list of those satisfying the criteria. * **Input 01:** Points * Type: Point List * Description: The points that will be filtered. * **Input 02:** Volume * Type: Implicit Body * Description: Volume to perform the filtering with. * **Input 03:** Region * Type: Choice * Description: The region of points to retain via filtering. * **Return Type:** Point List #### [New Org. Admin Licensing Dashboard](#new-features-and-improvements) * We've enhanced the user interactions and experience of the Organization Administration Licensing dashboard at app.ntoplogy.com to make it easier for Org. Admins to manage licenses and users. * For those who are Org. Admins, your dashboard is now integrated into your user dashboard at app.ntopology.com * In addition, your organization's licensing and user information has been condensed into one, easy to use table. * ![The organization tab of the nTop user dashboard.](https://files.learn.ntop.com/help-articles/whats-new/360103676333.png) * With the Org. Admin. Licensing dashboard, you can: * Add new users to your organization * Create, edit, and delete teams * Add new and existing users to teams * Assign and unassign licenses from users * To learn more, review this support article here: [nTopology Organization Administration Licensing Guide](https://support.ntopology.com/hc/en-us/articles/360048735514-nTopology-Organization-Administration-Licensing-Guide) * For those interested in leveraging this feature for your organization, please contact our support team at [support.ntopology.com](https://support.ntopology.com/hc/en-us) #### [Text from Scalar Block](#new-features-and-improvements) * **Location:** Utilities > Conversion * **Description:** Convert a Scalar to Text using a specified reference to maintain consistency regardless of unit systems. * **Input 01:** Value * Type: Scalar * Description: The value to convert to text. * **Input 02:** Reference * Type: Scalar * Description: The reference used to maintain a consistent output. Typically this is a value of 1, with the desired unit. For example, if looking to export in units of millimeters, then an input of 1mm would be appropriate. * **Input 03:** Precision * Type: Integer * Description: The number of significant digits for formatting the value as text. * **Return Type:** Text #### [Bug Fixes](#new-features-and-improvements) * Field viewer units no longer remains the same after you change the global units settings. * Section cuts on geometries containing multiple lattice components no longer forces nTopology to unexpectedly exit. ## Keywords: *ntopology what's new release notes 2.26* # nTop Platform 2.27 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-27-what-s-new > [!NOTE] > > nTopology 2.27 is here! This release contains new features, such as Notebook Sections, which lets you organize, group, and collapse parts of your workflow, as well as Temperature Units, such as Fahrenheit and Celsius, that cast to other types and let you perform mathematical operations. In addition, 2.27 features a new block called Minimum Height Orientation, enabling you to orient your parts so you can minimize print duration, thus saving material and cost as well as a another new block called Minimum Support Orientation which enables you to orient your part to minimize support structures to reduce material usage and post processing time. Lastly, we've added a powerful new conversion block called Mesh from Implicit Body by Voxels. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Dictionaries (Beta)](#dictionaries-beta)) * #### [Extended Block Documentation](#extended-block-documentation) * #### [Notebook Sections](#notebook-sections) * #### [Mesh from Implicit Body by Voxels (Beta)](#mesh-from-implicit-body-by-voxels-beta)) * #### [Minimum Height Orientation](#minimum-height-orientation) * #### [Minimum Support Orientation (Beta)](#minimum-support-orientation-beta)) * #### [Temperature Units](#temperature-units) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Dictionaries (Beta)](#new-features-and-improvements) * **Description:** Creates a dictionary from a set of keys and corresponding key values. * **Input 01:** Keys * Type: Integer list * Description: The keys for returning the associated values. * **Input 02:** Values * Type: Scalar Field list * Description: The associated values per key. * **Output:** Dictionary #### [Extended Block Documentation](#new-features-and-improvements) * The following blocks now have extended block documentation: * Axis * Import FE Mesh * Import Vector Point Map * Planar Symmetry Constraint * Tie Constraint * Extended block documentation is available in the documentation that ships with nTopology. If a block has extended block documentation, a **Learn More** button will appear in the information panel which will direct you to the block's extended documentation. #### [Notebook Sections](#new-features-and-improvements) * You can now create sections in your notebook! This new feature lets you group blocks and variables into collapsible sections. * A default section called “New Section” will appear by default for every new instance of nTopology. Each time you add a block to your notebook, it'll be placed within the body of this section. * To add a section, either click on the section title, right click, and select **Add Section**, or you can right click on the notebook cursor and select **Add Section**. * Notebook sections can be moved up, moved down, renamed and deleted by right clicking the section title. * If you delete a section, the blocks within that section will be placed in the section directly above or below it. ![An image of the nTop platform. Users can now make sections in the notebook to organize their blocks.](https://files.learn.ntop.com/help-articles/whats-new/50681927176979.png) #### [Mesh from Implicit Body by Voxels (Beta)](#new-features-and-improvements) * **Location:** Beta > Utilities-Conversion * **Description:** Convert an implicit body to a mesh using voxels. * **Input 01:** Body * Type: Implicit Body * Description: Implicit body to convert. * **Input 02:** Tolerance * Type: Scalar * Description: The maximum allowable deviation of the mesh from the implicit geometry. This value will be used to formulate the resulting voxel size. * **Input 03:** Filter * Type: Bool * Description: Apply filtering when sampling the voxelization. * **Output:** Mesh #### [Minimum Height Orientation](#new-features-and-improvements) * **Location:** Additive Manufacturing (Toolkit) > Build Preparation * **Description:** Find an orientation that minimizes the height of the bounding box of an implicit body relative to a given feature. * **Input 01:** Body * Type: Implicit Body * Description: The body to orient. * **Input 02:** Frame * Type: Frame * Description: The frame that defines the height direction. The z-axis of the frame will be used as the direction to measure the height of the bounding box. * **Output:** Transformation #### [Minimum Support Orientation (Beta)](#new-features-and-improvements) * **Location:** Beta > Manufacturing - Utilities * **Description:** Find a number of orientations that attempt to minimize the volume of the support regions needed for the body. The implicit block version is more robust and likely to provide more optimal results, while the mesh block version will converge on results much faster but these may be less optimal. * **Input 01:** Body * Type: Implicit Body * Description: The body to orient. * **Input 02:** Build plane * Type: Plane * Description: The build plane. * **Input 03:** Offset * Type: Scalar * Description: The desired offset distance from the build plane to the part as the function evaluates candidate orientations. * **Input 04:** Overhang angle * Type: Scalar * Description: The overhang angle used by the function to determine where support regions may need to exist with respect to the build plane. Overhang angles below this value will likely require support regions. * **Input 05:** Min overhang angle * Type: Scalar * Description: An option to define the support volume only to this minimum overhang angle. * **Input 06:** Support region * Type: Manufacturing Support Region Type Enum * Description: An option to define whether to build supports for internal, external, or both regions of the body. * **Input 07:** Candidates * Type: Integer * Description: The number of candidate orientations the algorithm will consider before converging on an optimum. More candidates requires more iterations, resulting in a higher likelihood the global optimum is found but requiring longer time to run. * **Input 08:** Feature size * Type: Scalar * Description: The minimum feature size used to discretize the body. This input will affect the resolution of the support volume calculation as the function evaluates candidate orientation. * **Output:** Transformation list #### [Temperature Units](#new-features-and-improvements) * We have added new temperature units in our system. We now support Celsius (C and dC) and Fahrenheit (F and dF), along with the already supported Kelvin (K). * Since the temperature units can be either absolute or relative, we have introduced a new type: The “Temperature” and “Temperature Field”. This new type represents an absolute temperature and accepts units in K, C, and F. These units cannot be combined with any other units. * On the other hand, a temperature unit typed in a Scalar or Scalar Field represents a relative temperature and can be combined with other units (e.g. thermal conductivity BTU/(hr *ft* dF)). For a clear distinction against the absolute temperature units, the relative temperature should be typed as K, dC or dF. Note that for relative temperatures, K and dC are equivalent. * The new temperature type has a relative temperature (Scalar and/or Scalar Field) as a property and it autocasts to it, so that the user can utilize it in blocks that accept a Scalar or Scalar Field as an input. * You can select your temperature units of preference in File->Settings->Units. * The **Add** and **Subtract** blocks have been updated to have Temperature overloads, to permit expressions like “20C + 20dC = 40C”. * The **Point Map** and **Field from Point Map** have new Temperature overloads. * Lastly, you can visualize temperature fields via the field viewer. #### [Usage Improvements](#new-features-and-improvements) * If an object has casted to another type, a dot will appear in the top right corner of the output type icon. * Only stored iterations of topology optimization results will show in the simulation HUD. * The following blocks have been promoted from Beta to Production: * Moved to Math > Vectors * Angle with respect to Plane * Moved to Modeling > Utilities * Create Single Face Mesh * Ray Cast * Equidistant Points on Curve * Merge CAD Bodies * Moved to Manufacturing > Utilities * Bounding Box 2D nesting * The update menu now features a **What's New** button, which will take you to the latest release notes on your user dashboard. This gives you the ability to review the release notes of the latest release prior to downloading. #### [Bug Fixes](#new-features-and-improvements) * We've resolved an issue that was causing nTopology to unexpectedly exit when trying to run an FE simulation after defining different FE attribute regions # nTop Platform 2.28 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-28-what-s-new ## Version 2.28 #### Release Date: February 23rd, 2021 > [!NOTE] > > nTopology nTop Platform 2.28 is here! This release brings you the ability to import Computational Fluid Dynamics data and create new point maps from this data, such as Density, Pressure, Temperature, and Velocity point maps. In addition, we've introduced a new block for exporting slices to SLC and have given you the ability to export point exposures to a Renishaw machine in CLI format. Lastly, you can now define temperature dependent thermal properties in your isotropic material. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Define Temperature Dependent Thermal Properties in Your Isotropic Material](#define-temperature-dependent-thermal-properties-in-your-isotropic-material) * #### [Export Points Exposures to a Renishaw Machine in CLI Format](#export-points-exposures-to-a-renishaw-machine-in-cli-format) * #### [Export Slices to SLC Block (Beta)](#export-slices-to-slc-block-beta)) * #### [Filter Mesh by Flood Fill (Beta)](#filter-mesh-by-flood-fill-beta)) * #### [Import CFD data in CGNS format](#import-cfd-data-in-cgns-format) * #### [New Point Map Blocks for Import CFD Results](#new-point-map-blocks-for-import-cfd-results) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Define Temperature Dependent Thermal Properties in Your Isotropic Material](#new-features-and-improvements) * The Isotropic Thermal Property block now features an overload in Beta, that enables you to define temperature dependent isotropic thermal material properties. Below is a description of the overload. * **Location:** Simulation > Material Attributes * **Description:** Define an Isotropic Nonlinear Thermal Property by specifying the thermal conductivity and specific heat of the desired material. Providing scalar fields as thermal properties will result in spatially varying material properties. * **Input 01:** Conductivity * Type: Dictionary * Description: Thermal conductivity. * **Input 02:** Specific heat * Type: Dictionary * Description: Specific heat capacity. * **Output:** Isotropic Thermal Property * **Note:** Each dictionary should be composed of two lists: one Temperature list for the temperature references that the provided material properties correspond to, and a Scalar list of the material properties with the respective units for each material property. See an example below: ![An example Isotropic Material defined by an Isotropic Linear Elastic Property and Isotropic Thermal Property blocks.](https://files.learn.ntop.com/help-articles/whats-new/360104079633.png) #### [Export Points Exposures to a Renishaw Machine in CLI Format](#new-features-and-improvements) * We've extended our Export Slices to Renishaw block to support the point exposure method which is also known as RenExposure for Renishaw. * Your Slice Stack input should be a Merge Slice Stacks block containing Slice Lattice and other sliced geometries to use the RenExposure feature. * You can use the CLI output containing the point slices only if: * QuantAM 5.3+ is available. * Any of the parts in a Slice CLI file does not contain only point data, the file will be considered invalid and will not be imported. * The difference between the first 2 exposure layers Z-Heights is equal to the CLI Slice Thickness. * RenExposures are present in the same CLI file. #### [Export Slices to SLC Block (Beta)](#new-features-and-improvements) * SLC is a slice data file type for 3D Systems machines. You can now export the closed curves as an SLC file. * **Name:** Export Slices to SLC (Beta) * **Location:** Beta > Additive Manufacturing * **Description:** Export slice stack data to a SLC file. * **Input 01:** Path * Type: File Path * Description: Slice stack to generate SLC stack to generate SLC file from. * **Input 02:** Slice Stack * Type: Slice stack * Description: Slice stack to generate SLC file from. * **Output:** SLC slice data #### [Filter Mesh by Flood Fill (Beta)](#new-features-and-improvements) * **Location:** Beta > Modeling - Utilities * **Description:** Select faces of a surface mesh using a flood fill operation. The block chooses the closest mesh face to the specified origin (in a specific direction, if provided), and uses a flood fill operation to select all faces that can be reached from that face without crossing edges at which the angle between face normals exceeds the specified angle. * **Input 01:** Mesh * Type: Mesh * Description: The surface mesh to filter. * **Input 02:** Origin * Type: Point * Description: The origin of the direction or initial face selection. * **Input 03:** Angle * Type: Scalar * Description: The feature angle for the flood fill operation. * **Input 04:** Direction * Type: Vector * Description: The direction to intersect the mesh. If not provided, then the origin point will be projected to the nearest face. * **Output:** Mesh ![The left image shows a mesh created in nTop. The right image shows how to select a portion of the mesh using the Filter Mesh by Flood Fill block.](https://files.learn.ntop.com/help-articles/whats-new/360101908494.png) #### [Import CFD data in CGNS format](#new-features-and-improvements) * You can now import Computational Fluid Dynamics (CFD) data in a CGNS format using the new Import CFD Analysis Result block, which is currently in Beta. * This block also lets you import steady-state analysis results from CFD analysis in Ansys Fluent. * **Name:** Import CFD Analysis Result (Beta) * **Location:** Beta > Analysis-Exchange * **Description:** Import CFD Analysis Result file from an external location. * **Input 01:** Path * Type: File Path * Description: System path of CFD Analysis Result file. * **Input 02:** Unit System * Type: Unit System * Description: The unit system of the external results. This will be used to consistently translate the external results into the active unit system. * **Output:** CFD Analysis Result #### [New Point Map Blocks for Import CFD Results](#new-features-and-improvements) * We've introduced several new blocks that output the corresponding point maps out of an imported CFD analysis result. These new blocks include Velocity Point Map, Pressure Point Map, and Density Point Map. We've also introduced a new overload in the Temperature Point Map block that accepts CFD analysis results as an input. Below are the outlines of each new block and the new overload: * **Density Point Map (Beta)** * **Location:** Beta > Simulation - Exchange * **Description:** Create a Scalar Point Map from nodal density values of a CFD analysis. * **Input 01:** CFD analysis * Type: CFD analysis * Description: Density point map for the result. * **Input 02:** Step number * Type: Integer * Description: The step number for which the point map will be created. The last step is used by default. * **Output:** Scalar Point Map * **Pressure Point Map (Beta)** * **Location:** Beta > Simulation - Exchange * **Description:** Create a Scalar Point Map from nodal pressure values of a CFD analysis. * **Input 01:** CFD analysis * Type: CFD Analysis Result * Description: Pressure point map for this result. * **Input 02:** Step number * Type: Integer * Description: The step number for which the point map will be created. The last step is used by default. * **Output:** Scalar Point Map * **Temperature Point Map** * **Location:** Simulation > Exchange * **Description:** Create a Scalar Point Map from nodal temperature values of a steady-state thermal analysis. * **Input 01:** Thermal Analysis * Type: CFD Analysis Result * Description: Thermal point map for this result. * **Input 02:** Step number * Type: Integer * Description: The step number for which the point map will be created. The last step is used by default. * **Output:** Temperature Point Map * **Velocity Point Map (Beta)** * **Location:** Beta > Simulation - Exchange * **Description:** Create a Vector Point Map from nodal velocities of a CFD Analysis result. * **Input 01:** Analysis result * Type: CFD Analysis Result * Description: Velocity point map for this result. * **Input 02:** Step number * Type: Integer * Description: The step number for which the point map will be created. The last step is used by default. * **Output:** Vector Point Map #### [Usage Improvements](#new-features-and-improvements) * The Export FE Mesh now contains CGNS CFD data file (\*.cgns) as an available file format for export. * We've introduced a new error message when you try exporting FE Surface Meshes as .msh. *Export of face elements to Ansys Fluent .msh file is not supported.* * You can now section cut FE Meshes containing non-tet elements. This includes FE Component, FE Mesh, FE Model, and FE Results. #### [Bug Fixes](#new-features-and-improvements) * Export CLI block was causing nTopology to unexpectedly exit when Binary was selected as the output type. * We've updated notebook sections so that the input section of a notebook is clickable and editable, even if the first section is collapsed. * We've resolved an issue where vector inputs were accepting incorrect units. * We've resolved an issue where Offset Voxel Grid was accepting values with any units. ## Keywords: *new whats 2.28* # nTop Platform 2.29 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-29-what-s-new ## Version 2.29 > [!NOTE] > > nTop Platform 2.29 is here! This release features Maps, a powerful new capability that enables you to create functionally parameterized unit cells. In addition, this release features several user enhancements such as a new shortcut for converting a CAD face into an Implicit and a Boundary Layer Mesh block that lets you create volume meshes with high amounts of detail near the surface and less detail in the interior. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Boundary Layer Mesh (Beta)](#boundary-layer-mesh-beta)) * #### [Map from Lists (Beta)](#map-from-lists-beta)) * #### [Evaluate Map (Beta)](#evaluate-map-beta)) * #### [Convert a CAD Face to an Implicit](#convert-a-cad-face-to-an-implicit) * #### [Export Lattice Bodies and Thick Lattices as 3MF](#export-lattice-bodies-and-thick-lattices-as-3mf) * #### [nTopCL: More control over what is output in your console](#ntopcl-more-control-over-what-is-output-in-your-console) * #### [Orthotropic Nonlinear Thermal Properties](#orthotropic-nonlinear-thermal-properties) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Boundary Layer Mesh (Beta)](#new-features-and-improvements) * Boundary layer meshing is mostly used in CFD applications, where you have high temperature, velocity, and pressure gradients in the regions very close to the surface and less demanding gradients elsewhere. This block enables you to create a semi-structured mesh that models the area close to the surface mesh with very fine details but coarsens as you move away from the surface mesh. * Location: Beta > Simulation - Mesh * Description: Create a boundary layer mesh from a surface mesh. * Input 01: Domain * Type: Mesh * Description: The domain to mesh. * Input 02: Number of layers * Type: Integer * Description: Number of boundary layer elements * Input 03: Thickness * Type: Scalar * Description: Thickness of the boundary layer. * Input 04: Growth rate * Type: Scalar * Description: Successive growth rate between successive layers. * Input 05: Tetrahedralize * Type: Bool * Description: Tetrahedralize the interior. * Output: Volume Mesh #### [Map from Lists (Beta)](#new-features-and-improvements) * We're introducing the beginning of an important, broad capability called “Maps”, which have a broad number of applications. These initial blocks complement the new lattice pipeline to enable the creation of functionally parameterized unit cells. In addition, they are general purpose interoperation tools that can be used to rapidly perform lookups. * Each Map can go from a number of input dimensions to, currently, one output dimension. Up to three input dimensions are supported today. 1D->1D Maps work much like Transfer Functions today, but they exist as an independent object that can later be evaluated. 3D -> 1D Maps are like Scalar Point Maps, but the three dimensions can be of any dimensionality, not just units of length like points, and there is no associated display with the abstract map. Also, the interpolation option is included in the Map. * Like Fields and Transfer Functions, Maps can be evaluated at individual points. Like Transfer Functions and Point Maps, they may also be evaluated into continuous fields. * An example use-case of a Map would be to record how varying parameters affect a physical property via simulation or empirical measurement. For example, one might measure how the modulus of a sample varies as a function of a thin gyroid's period, wall thickness, and bias. * Location: Beta > Math - Maps * Description: Create a Map \<1d, 1d> from a collection of points using linear interpolation within the convex hull of the point set and no extrapolation. * Input 01: Input variable 1 * Type: Scalar list * Description: Data points of input variable 1. * Input 02: Output variable 1 * Type: Scalar list * Description: Data points of output variable 1. * Input 03: Interpolation type * Type: Interpolation Enum * Description: Interpolation type. * Output: Map * There are 3 overloads for this block, outlined below: * Scalar list, Scalar list, Interpolation Enum * Scalar list, Scalar list, Scalar list * Scalar list, Scalar list, Scalar list, Scalar list #### [Evaluate Map (Beta)](#new-features-and-improvements) * Location: Beta > Math - Maps * Description: Evaluate a Map. * Input 01: Map object * Type: Map Object * Description: Map \<1d, 1d> * Input 02: Input variable 1 * Type: Scalar Field * Description: Input variable. * Output: Scalar Field * There are 6 overloads for this block outlined below: * \<1d, 1d> Scalar * \<1d, 1d> Scalar Field * \<2d, 1d> Scalar, Scalar * \<2d, 1d> Scalar Field, Scalar Field * \<3d, 1d> Scalar, Scalar, Scalar * \<3d, 1d> Scalar Field, Scalar Field, Scalar Field #### [Convert a CAD Face to an Implicit](#new-features-and-improvements) * You can now right click on the face of a CAD body and convert the face into an implicit body. * The new shortcut for converting a CAD Face to an Implicit Body is **Convert Face to Implicit**. * Below is an example of the shortcuts: ![You can now right click on the face of a CAD body and convert the face into an implicit body](https://files.learn.ntop.com/help-articles/whats-new/1500003559302.png) #### [Export Lattice Bodies and Thick Lattices as 3MF](#new-features-and-improvements) * We've modified the Export Lattice body to enable you to export lattices, lattice bodies, and thick lattices. * Below are the Export Lattice overloads: * File Path, Lattice, Length Unit Enum * File Path, Lattice Body, Length Unit Enum * File Path, Thick Lattice, Length Unit Enum #### [nTopCL: More control over what is output in your console](#new-features-and-improvements) * You can now select how much information you would like to see upon the execution of nTopCL. Also, the information, warning, and error messages will show with the colored headings. * **ntopcl -v0** or **ntopcl - -verbose 0** works as a silent mode that will display no messages. * **ntopcl -v1** or **ntopcl - -verbose 1** returns the same messages as our default that will display warnings and errors. * **ntopcl -v2** or **ntopcl - -verbose 2** provides the most detailed information including the information that you would see in the debug panel. ![An image of the command line window showing the output of using the verbose commands in nTopcl](https://files.learn.ntop.com/help-articles/whats-new/1500003559322.png) #### [Orthotropic Nonlinear Thermal Properties](#new-features-and-improvements) * We've introduced a new overload for the Orthotropic Thermal Property block that enables you to input dictionaries to create an orthotropic nonlinear thermal property. Below is an overview of the new overload. * Description: Define an Orthotropic Nonlinear Thermal Property by specifying directional thermal properties of the desired material. Providing scalar fields as thermal properties will result in spatially varying material properties. * Input 01: Kx * Type: Dictionary * Description: Thermal conductivity in x-direction. * Input 02: Ky * Type: Dictionary * Description: Thermal conductivity in y-direction. * Input 03: Kz * Type: Dictionary * Description: Thermal conductivity in z-direction. * Input 04: Specific heat * Type: Dictionary * Description: Specific heat capacity. * Output: Orthotropic Thermal Property #### [Usage Improvements](#new-features-and-improvements) * Any block that formerly output Tet Meshes now outputs Volume Meshes. * The Export Part block has a new overload that enables you to export lists of bodies. #### [Bug Fixes](#new-features-and-improvements) * Sectioning Implicit Bodies derived from CAD bodies now returns expected results. * We've resolved an issue that was causing nTop Platform to unexpectedly exit when opening the properties of a degenerate mesh face. * We've resolved an issue where variables would not be editable if a comment had been added to the block. ## Keywords: *new whats 2.29* # nTop Platform 2.30 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-30-what-s-new ## Version 2.30 > [!NOTE] > > nTop Platform 2.30 is here! This release gives you the ability to import and use the properties of bitmaps to drive variables in your workflow. These new blocks can also be used to generate 3D textures. In addition to usage improvements and bug fixes, this release also features a new export block called Export Slices to CLS, which gives you the ability to export slice stack data in a ConceptLaser file format. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Import Bitmap (Beta)](#import-bitmap-beta)) * #### [Map Bitmap to Plane (Beta)](#map-bitmap-to-plane-beta)) * #### [Export Slices to CLS (Beta)](#export-slices-to-cls-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Import Bitmap (Beta)](#new-features-and-improvements) * We've introduced a new block that enables you to import Bitmap files into nTop Platform. Using this block in conjunction with Map Bitmap to Plane gives you the ability to use the properties of bitmaps to drive variables in your workflows. * Note: This first iteration supports importing .pngs only. * Location: Beta > Utilities - Exchange * Name: Import Bitmap * Description: Import Bitmap file from an external location. * Input 01: Path * Type: File Path * Description: System path of bitmap file. * Input 02: Dot Pitch * Type: Scalar * Description: The distance between the dots of a png. * Output: Bitmap * Bitmap properties include: * Dot Pitch: Scalar * Length: Scalar * Length Count: Integer * Pixels: Integer * Width: Scalar #### [Map Bitmap to Plane (Beta)](#new-features-and-improvements) * We've introduced this new block to give you the ability to drive the variables of your workflow using the properties of an imported Bitmap. One application demonstrated below shows how you can map bitmaps to create 3 dimensional textures. * Location: Beta > Modeling - Utilities * Name: Map Bitmap to Plane * Description: Place a bitmap on a plane. Bitmaps are mapped from their center to the center of the target plane. Bitmaps are displayed in the viewport. * Input 01: Bitmap * Type: Bitmap * Description: Bitmap file to map. * Input 02: Plane * Type: Plane * Description: Plane to map the bitmap to. * Input 03: Interpolation type * Type: Interpolation Enum * Description: Interpolation type used to convert a bitmap into a field. * Input 04: Length * Type: Scalar * Description: Optional input to resize the length of the bitmap. * Input 05: Width * Type: Scalar * Description: Optional input to resize the width of the bitmap. * Output: Planar Image * Planar Image properties include: * Alpha: Scalar Field * Bitmap: Bitmap * Blue: Scalar Field * Grayscale: Scalar Field * Green: Scalar Field * Hue: Scalar Field * RGB: Vector Field * Red: Scalar Field ![An example of using the map bitmap to plane block to add text to an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/1500006225322.png) #### [Export Slices to CLS (Beta)](#new-features-and-improvements) * We've introduced this new block to give you the ability to export slice stack data to a ConceptLaser (CLS) file format. With this block in beta, you can now export Slice Stacks as CLSv4 format to generate laser toolpaths for parts. * Location: Beta > Utilities - Exchange * Name: Export Slices to CLS * Description: Export slice stack data to a CLSv4 file. * Input 01: Path * Type: File Path * Description: Path to export CLS file to. * Input 02: Slice stack * Type: Slice Stack * Description: Slice stack to generate CLS file from. * Input 03: Build volume * Type: Bounding Box * Description: Build volume of the printer. * Output: CLS slice data #### [Usage Improvements](#new-features-and-improvements) * We've introduced a new property to Scalar Fields called “Normalized Field” so that you can easily normalize a scalar field to better maintain uniform wall thicknesses when you stretch geometry. The Normalized Field property description is as follows: ”A scalar field derived by dividing this scalar field by the magnitude of its gradient.” * Graph lattices generated with the new lattice pipeline are no longer automatically trimmed to the boundary volume. You must now explicitly trim a lattice if that is the desired result. This behavior is now consistent with the way TPMS lattices are generated in the new lattice pipeline. * Dictionaries now support vector fields. * We've introduced a new lattice pipeline block called Cell Map on Quad Mesh. Using this block in conjunction with the Periodic Lattice Body block will result in the same outcome as the original Lattice Body from Quad Mesh block, which is still available in the new pipeline. Below is an outline of the new block: * Location: Beta > Lattices - Cell Map * Name: Cell Map on Quad Mesh (Beta) * Description: Create a cell map that is conformal to a quad mesh. Note that the underlying U,V field properties will not be continuous. * Input 01: Surface mesh * Type: Mesh * Description: Quad mesh that the cell map will be generated from. * Input 02: Offset * Type: Scalar Field * Description: Total length of the offset. * Input 03: Layer count * Type: Integer * Description: Number of cell layers that the domain will be subdivided into. * Output: Cell Map #### [Bug Fixes](#new-features-and-improvements) * We've resolved an issue where the material frame wasn't producing different results with homogenized or orthotropic materials. * We've resolved an issue with notebook sections which was preventing you from duplicating blocks. * We've resolved an issue with the Robust Tet Mesh block which was producing flipped faces. * We've resolved an issue that was causing nTop Platform to unexpectedly exit when reparameterizing a CAD face. * We've resolved an issue that was causing nTop Platform to unexpectedly exit when rerunning a workflow with a list of CAD faces. * We've resolved an issue that was causing nTop Platform to unexpectedly exit when trying to visualize the density field property of an imported topology optimization result. * We've resolved an issue that was causing nTop Platform to unexpectedly exit when using 0 in the Operand B input of the Mod block with an integer type. ## Keywords: *whats new 2.30* # nTop Platform 2.31 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntop-platform-2-31-what-s-new Version 2.31 > [!NOTE] > > nTop Platform 2.31 is here! This release features a new block called Rotational Velocity Load (beta) that gives you the ability to apply rotational velocity to a part as a finite element force. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Rotational Velocity Load (Beta)](#rotational-velocity-load-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Rotational Velocity Load (Beta)](#new-features-and-improvements) * We've introduced a new block called Rotational Velocity Load (beta) which gives you the ability to calculate and apply an acceleration load (centrifugal force) caused by a constant rotational velocity. Below is an outline of this new block. * Name: Rotational Velocity Load (beta) * Location: Beta > Simulation * Description: Calculate and apply a load that accounts for the structural effects of a region rotating at a constant rate. * Input 01: Region * Type: FE Region * Description: Element group in which the rotational velocity load will be applied. * Input 02: Axis * Type: Axis * Description: The axis of rotation. * Input 03: Rate * Type: Scalar * Description: The rotational velocity rate. * Output: FE Force * Converts To: Boundary Condition #### [Usage Improvements](#new-features-and-improvements) * The Lattice Body from Quad Mesh (beta) block will be replaced by a new block called Cell Map from Quad Mesh (beta). This block was introduced in 2.30, however, the Lattice Body from Quad Mesh block was not yet replaced. In order to create a Lattice Body from a quad mesh, please use the Periodic Lattice Body block in conjunction with the new Cell Map from Quad Mesh block and a unit cell. Backward compatibility will be applied to files utilizing the Lattice Body from Quad Mesh block. * We've updated our HUD sliders to provide a smoother drag. #### [Bug Fixes](#new-features-and-improvements) * We've resolved an issue where the Min eigenvalue and Max eigenvalue inputs in the Buckling Analysis block were accepting any units. Eigenvalues are unitless. * In the homogenization HUD, the displacement factor used to reset to 1 every time the user switched to the “Directional” properties. We updated the HUD to keep the existing value if that value is between 0.01 and 1.0. Otherwise, the value will be clamped between 0.01 and 1.0. ## Keywords: *new whats 2.31* # nTopology 3.0 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-0-what-s-new ## Version 3.0 > [!NOTE] > > nTopology 3.0 is here! nTopology is now even faster with GPU acceleration. This new GPU-powered computational framework creates geometry previews 10x to 100x faster than our traditional nTop rendering technology. Additionally, when you open the software, you will now see a new Home Screen that gives you access to example files and learning resources. Lastly, we've introduced the ability to instantly access nTopology by creating an nTop account in two different ways. You can now download and install an interactive preview of nTopology, which lets you open, view, and interact with nTop files. Or you can choose to experience the full functionality of nTopology through a 14-day trial. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Home Screen](#home-screen) * #### [GPU Acceleration (beta)](#gpu-acceleration-beta)) * #### [Get a Preview of nTopology](#get-a-preview-of-ntopology) * #### [14-Day Trials](#14-day-trials) * #### [New Lattice Pipeline Enhancements](#new-lattice-pipeline-enhancements) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Home Screen](#new-features-and-improvements) * nTopology now features a Home Screen, which provides you with access to example application files and learning resources. * By default, nTopology will open to this Home screen. You can change this by going to File > Settings > General and check “Skip home screen on startup.” ![The nTop home screen showing example files, nTop News, and Help Center resources.](https://files.learn.ntop.com/help-articles/whats-new/HomePage.png) #### [GPU Acceleration (beta)](#new-features-and-improvements) * nTopology 3.0 includes the beginning of a new, GPU-powered computational framework that creates geometry previews faster than ever before. * A new UI control allows real-time edits to any Scalar value using your mouse. For many nTop models, editing these values produces dynamic graphical feedback. * The acceleration should be 10x-100x faster than the traditional nTop rendering technology. * By default, this feature is currently turned off. To turn GPU acceleration on, go to File > Settings > General and check the “Enable GPU Acceleration” checkbox. * CAD parts, meshes, lattices, and most implicit modeling and field-modifying blocks, support real-time modeling in nTopology. Over the coming months, we expect to accelerate more features such as Voxel Grids, primitives, and smoothened implicits. #### [Get a Preview of nTopology](#new-features-and-improvements) * We've introduced a new preview version of nTopology that gives you the ability to experience the capabilities of nTopology, without needing to have a trial or a full license. * This preview of nTopology allows you to explore and interact with exciting nTop application files without learning our software's full authoring capabilities. * With this preview of nTopology, you can open, view, and interact with files through variables in the Input section of a Notebook. You cannot add blocks, delete blocks, modify notebooks, export models or data, or save files in this preview of nTopology. * To access this preview of nTopology, visit [app.ntopology.com/signup](https://app.ntopology.com/signup) and create an account. Once your account has been set up, you'll get instant access to nTopology and other learning resources. * If you already have an nTopology license, you won't be able to experience this preview version until your current license expires. * When your license expires, nTopology will revert to this preview version, so you'll still have the ability to open, view, and interact with all of your nTop files. To purchase a new license, contact [sales@ntopology.com](mailto:sales@ntopology.com) * Do you have a colleague or friend who would get value out of using nTopology? Send them to [app.ntopology.com/signup](https://app.ntopology.com/signup) to get started with nTopology today. ![nTop has preview mode that allows a user to view a notebook but not edit it.](https://files.learn.ntop.com/help-articles/whats-new/PreviewMode.png) #### [14-Day Trials](#new-features-and-improvements) * We're now giving you the ability to access a trial of nTopology. * This trial license is a full functionality 14-day license, which, when it expires, will revert nTopology back into a preview version. * To activate your 14-day trial, select the **Activate Trial** button in the top right corner of the user interface of nTopology or visit your account at [app.ntopology.com](https://app.ntopology.com) and select the **Activate Trial** button located underneath the **Let's Talk** button on the Home page. * **Note:** If you have a full license of nTopology, you will not have the ability to access this 14-day trial. ![The activate trial window ](https://files.learn.ntop.com/help-articles/whats-new/ActivateTrial.png) #### [New Lattice Pipeline Enhancements](#new-features-and-improvements) * The Periodic Lattice Body block (beta) has been updated to include new overloads for new unit cell types that indicate the number of free parameters the unit cell has. For example: Unit Cell \<0>, Unit Cell \<1>, Unit Cell \<2>. * The Custom Implicit Unit Cell block (beta) has been deprecated, and a newer block with the same name (also in beta) has replaced it. * The new Custom Implicit Unit Cell block outputs a Unit Cell \<0> indicating that it does not have any free parameters. When used as the unit cell input of the Periodic Lattice Body block (beta), it triggers the Unit Cell \<0> overload. * We introduced a new block named TPMS Unit Cell with Bias (beta), which outputs a Unit Cell \<2> indicating that it has two free parameters (approximate thickness and approximate bias length. When used as the unit cell input of the Periodic Lattice Body block (beta), it triggers the Unit Cell \<2> overload. Below is an outline of the new block: * Block Name: TPMS Unit Cell with Bias (beta) * Location: Beta > Lattice - Unit Cells * Description: Select a unit cell from a library of TPMS unit cells with 2 free parameters. Parameter 1: Approximate thickness - Approximate thickness of the TPMS walls. Parameter 2: Approximate bias length - Approximate bias of the TPMS as a negative or positive approximate distance. This will shift the outer wall inward or outward. * Input 01: Unit cell * Type: TPMS Enum * Description: The selected unit cell for the lattice generation workflow. * Output: Unit Cell \<2> * The Orient Unit Cell block has been updated to include overloads for the new unit cell types. #### [Usage Improvements](#new-features-and-improvements) * Every object in nTopology now auto-converts to a list of 1. * The Filter Mesh by Flood Fill block has moved from Beta to Production * We've updated the name of our software product from nTop Platform to nTopology. #### [Bug Fixes](#new-features-and-improvements) * We've resolved an issue where removing an Implicit Body from a Variable was causing the visualization to permanently disappear. * We've resolved an issue where the Voxel Grid from Mesh block was not voxelizing surface boundaries of cavities or voids in shelled bodies. * We've resolved an issue where visualization would stop working when a block was made a variable and then undone (ctrl-z). * We've resolved an issue where hidden objects were becoming visible and couldn't be hidden again. * When viewing an implicit body list, changing the resolution now updates the visualization. ## Keywords: *new what whats 3.0* # nTopology 3.1 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-1-what-s-new ## Version 3.1 > [!NOTE] > > nTopology 3.1 is here! This release features a brand new Voronoi Volume Lattice Body block that not only generates a lattice body from a Voronoi diagram, but also provides you with access to each individual cell and the porosity value per cell. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [3.0 Installation Folder Change](#3-0-installation-folder-change) * #### [Voronoi Volume Lattice Body and Cell Type](#voronoi-volume-lattice-body-and-cell-type) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [3.0 Installation Folder Change](#new-features-and-improvements) * Starting with version 3.0, we have changed our software name to nTopology from nTop Platform and hence, the default installation folder has been changed to C:\Program Files\nTopology\nTopology. * This could have impacted your scripts or application calling nTopCL. #### [Voronoi Volume Lattice Body and Cell Type](#new-features-and-improvements) * We've replaced the Voronoi Volume Lattice Body block with a newer block that features new properties and a new output type called a Voronoi Volume Lattice Body. What's unique about this block is that you can access the porosity value per Voronoi cell as well as a list of every Voronoi cell via the properties. * Each Voronoi cell represent a new type called “Cell”, which contains edges and vertices as properties. * Below is an overview of this new block * Location: Beta > Lattices - Generate * Name: Voronoi Volume Lattice Body (Beta) * Description: Create a Lattice Body from the Voronoi diagram of a list of Points within a volume. * Input 01: Seed points * Type: Point list * Description: List of Points to generate the Voronoi Lattice Body from. * Input 02: Thickness * Type: Scalar Field * Description: Lattice thickness. * Input 03: Mesh * Type: Mesh, Volume Mesh * Description: Mesh or Volume Mesh to generate the Voronoi Lattice Body within. Providing a Volume Mesh will improve the speed of the operation. * Output: Voronoi Volume Lattice Body #### [Usage Improvements](#new-features-and-improvements) * We've updated the Export Slices to CLS (beta) block to give you the ability to export slice stack data of both parts and support structures to a ConceptLaser (CLSv4) file format. The optional support structure slice stack will be saved as the filename of the CSL path input with a prefix of 's\_'. * Location: Beta > Utilities - Exchange * Name: Export Slices to CLS * Description: Export slice stack data to a CLSv4 file. * Input 01: Path * Type: File Path * Description: Path to export CLS file to. * Input 02: Build volume * Type: Bounding Box * Description: Build volume of the printer. * Input 03: Part slice stack * Type: Slice Stack * Description: Slice stack to generate CLS file from. * Input 04: Support slice stack (Optional) * Type: Slice Stack * Description: Slice stack to generate CLS file from. * Output: CLS slice data * We've updated the Scalar Ramp block to throw a warning rather than an error when all output values are the same. * We've updated the Tie Constraint block to throw an error when used with hexahedral elements which are not yet supported. #### [Bug Fixes](#new-features-and-improvements) * We've made improvements to Simplify Mesh By Amount, Simplify Mesh By Threshold, and Mesh From Implicit Body By Voxels to reduce the vertex complexity around flat regions of a mesh. * We've resolved an issue where the Remesh Surface block was outputting a valid mesh, but the mesh was not considered valid when served as an input to the FE Surface Mesh block. * We've resolved an issue where sections from a previous file were showing up empty in a new file. ## Keywords: *new whats 3.1* # nTopology 3.10 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-10-what-s-new Version 3.10 > [!NOTE] > > nTopology 3.10 is here! This release features a new CAD Body from Mesh (beta) block that results in 4 to 10 times fewer CAD faces compared to the current block, which means significantly lighter part file sizes. We've updated the Mesh from Implicit Body by Voxels (beta) block, so that you can now sharpen a mesh only using this block and a new overload which provides you with more advanced options. In addition, we've introduced a new feature called Manual Run Mode, which gives you the ability to prevent specific blocks from running if upstream changes are made. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [New CAD Body from Mesh (Beta) Block](#new-cad-body-from-mesh-beta)%20Block) * #### [Updates to Mesh from Implicit Body by Voxels (Beta) Block](#updates-to-mesh-from-implicit-body-by-voxels-beta)%20Block) * #### [Manual Run Mode](#manual-run-mode) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [New CAD Body from Mesh (Beta) Block](#new-features-and-improvements) * In 3.10, we released into beta a new CAD Body from Mesh block. The beta block has an improved algorithm that results in 4 to 10 times fewer CAD faces compared to the current algorithm. In addition, users no longer need to specify a Refinement level. * **Note:** The production version of this block can still be found via the ribbon by navigating to Utilities > Conversion > CAD Body from Mesh. If you search for this block via the search bar, the Beta block will appear as the only result. The production version can also be found via the overloads drop down menu of the new beta block. * Name: CAD Body from Mesh (Beta) * Location: Beta > Utilities - Conversion * Description: Creates a CAD Body from a quad Mesh. * Input 01: Mesh * Type: Mesh * Description: Mesh to convert to a CAD body. * Output: CAD Body > [!NOTE] > > Result from current block: ![A CAD Body](https://files.learn.ntop.com/help-articles/whats-new/4406662987155.png) > [!NOTE] > > Result from new CAD Body from Mesh (Beta) block: ![A CAD Body generated from the CAD Body from Mesh block.](https://files.learn.ntop.com/help-articles/whats-new/4406662986899.png) > [!NOTE] > > Boolean union with frame performed in CAD: ![A CAD Body with optimized interior](https://files.learn.ntop.com/help-articles/whats-new/4406662986643.png) #### [Updates to Mesh from Implicit Body by Voxels (Beta) Block](#new-features-and-improvements) * We released updates to the Mesh from Implicit Body by Voxels (Beta) block in 3.10. The block has been updated to include additional inputs as well as an overload, providing users with a simple yet robust default interface, and more advanced options when needed. You now have the ability to sharpen a Mesh directly in the Mesh from Implicit Body by Voxels (Beta) block, removing the need for the The Sharpen Mesh (Beta) block that was released in 3.8. Sharpen Mesh (Beta) has been deprecated. * An optional minimum feature size input has been added for you to specify the size of the smallest feature that should be preserved during the conversion. This allows you to filter out any small feature(s) or thin edges present in the Implicit Body that should not be part of the Mesh. * The advanced overload exposes two additional inputs: sharpening iterations & sharpening extents. * Increasing the number of sharpening iterations will produce a sharper result, but will increase the block's runtime. We recommend a value between 1 and 10. * The sharpen extents input gives you the ability to limit sharpening to a particular region of the mesh. * Name: Mesh from Implicit Body by Voxels (Beta) * Location: Beta > Utilities - Conversion * **Default overload:** * Description: Creates a Mesh from an Implicit Body. Preserve sharp features by choosing the Sharpen option. Reduce the triangle count of the final result by choosing the Simplify option. Switch to the block overload for more inputs including Sharpening iterations and a region to localize sharpening. * Input 01: Body * Type: Implicit Body * Description: Implicit Body to convert. * Required * Input 02: Tolerance * Type: Scalar * Description: The maximum allowable deviation between the Mesh and the surface of the Implicit Body. If you reduce this value, the resulting mesh will be more precise, but the block will take longer to compute. * Required * Input 03: Min. feature size * Type: Scalar * Description: The approximate size of the smallest feature(s) of the Implicit Body that should be preserved during the conversion. If you input a value greater than 0, features that are smaller than the value will be filtered out and not included in the final result. Leaving the default value of 0 indicates that all features should be preserved. * Required * Input 04: Sharpen * Type: Bool * Description: Option to preserve sharp edges and vertices. If you choose this option, the block will take longer to compute. * Required * Input 05: Simplify * Type: Bool * Description: Option to reduce the triangle count as much as possible without violating the given tolerance criterion. * Required **Advanced overload additional inputs:** * Input 06: Sharpen iterations * Type: Integer * Description: Number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. We recommend values from 1 to 10. * Required * Input 07:Sharpen extents * Type: Implicit Body * Description: Optional Implicit Body defining the extent of sharpening. Use this input to limit sharpening to a particular region of the mesh. * Optional #### [Manual Run Mode](#new-features-and-improvements) * We've introduced a new feature in nTopology called “Manual Run Mode”, which provides you with the ability to explicitly prevent a block from running automatically. This feature gives you the opportunity to make a series of iterative upstream changes to your notebook without automatically running downstream blocks which could be computationally expensive and time consuming. * To apply Manual Run Mode to a block, right click and select Manual Run Mode. This will activate the feature and a flag displaying a pause icon will appear on the exterior of the block. If you hover over the pause icon, a tooltip will appear reading “Manual Run Mode”. ![The right click block menu now includes an option for Manual Run Mode.](https://files.learn.ntop.com/help-articles/whats-new/4406662985491.png) * Make a change to a block upstream that is connected to the block you applied the Manual Run Mode to downstream. Once the upstream block has been changed, the block with the Manual Run Mode applied to it will change its icon to a play button. ![A block that has already ran, with Manual Run Mode enabled, will have a pause icon next to the block visibility toggle.](https://files.learn.ntop.com/help-articles/whats-new/4406662984979.png) ![A block that has not ran, with Manual Run Mode enabled, will have a play icon next to the block visibility toggle.](https://files.learn.ntop.com/help-articles/whats-new/4406654926867.png) * If multiple blocks have the Manual Run Mode applied to them and they are interconnected to one another in the notebook, you can either Run each block one at a time or you can choose to Run the most downstream block, which will trigger all upstream blocks to Run too. #### [Usage Improvements](#new-features-and-improvements) * With GPU acceleration enabled, implicits are no longer clipped by their bounding boxes while interactively changing their values. The image below demonstrates this improvement. To enable GPU acceleration, which is currently in Beta, go to File > Settings > General and check “Enable GPU acceleration (beta)”. ![Changing the size of a cube with GPU Acceleration enabled.](https://files.learn.ntop.com/help-articles/whats-new/4406654929427.png) * Properties are now available on the Displacement Restraint, Point Restraint, and Temperature Restraint blocks to provide easy access to the underlying FE Boundary, or mesh surface the restraint is applied, as well as the components of the enforced displacement or temperature. * For single component simulations, it is no longer necessary to create an FE Model before proceeding to an analysis. You can provide all analysis blocks an FE Component directly, saving a step in the overall workflow. #### [Bug Fixes](#new-features-and-improvements) * We've resolved an issue found in 3.9 where the Sort block was not properly sorting scalar lists. * We've updated the Extrude Profile block so that render normals are no longer inaccurate. * We've resolved an issue found in 3.9 with GPU Acceleration enabled where nTopology would unexpectedly hang and then exit if a GPU view was cancelled via the progress bar. ## Keywords: *new whats 3.10* # nTopology 3.11 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-11-what-s-new Version 3.11 > [!NOTE] > > nTopology 3.11 is here! This release features an important update to the Overhang Constraint block, which now has an “Include Passive” input for including passive regions, a new Boundary by Body block, which enables you to scope boundary conditions to an implicit body, and a new overload for the FE Lattice Component block, which enables you to create an FE Component directly from a Lattice Body without having to explicitly create an FE Mesh. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit support.ntopology.com to gain access to helpful tutorials and support articles. * #### [Overhang Constraint Improvements](#h-01fg4rm7byx51p9pjyf8h61r79) * #### [Boundary by Body Block](#h-01fg4rmenmxtz1rjek2drwp0pb) * #### [New FE Lattice Component Overload](#h-01fg4rmnj426944ypkese5drwm) * #### [Usage Improvements](#h-01fg4rmwh9masn87gncg7qwk8h) * #### [Bug Fixes](#h-01fg4rn3e1h021ya6qe45q70r5) #### [Overhang Constraint Improvements](#h-01fg4qezp2q9w001x7vs97t0bm) * Based on your feedback, we've made improvements to how the **Overhang Constraint** block handles passive regions. A new input option, **Include passive**, includes passive regions in the overhang constraint calculation. The optimizer will add the necessary support to those regions as permitted by the volume fraction constraint. If **Include passive** is not selected, the optimizer ignores the passive regions in the overhang constraint calculation. #### The Overhang Constraint block * Block Name: Overhang Constraint Location: Beta->Topology Optimization Description: Defines a maximum overhang constraint for the topology optimization process. The constraint precludes designs with an inclination angle below a specified amount with respect to the build plate. Input 1: Build direction * Type: Vector * Required * Description: Build direction and normal to the build plate. Input 2: Max angle * Type: Scalar * Required * Description: Max overhang (inclination) angle of material with respect to the build plate. Input 3: Support boundaries * Type: FE Boundary List * Optional * Description: Support boundaries material can be placed onto. Input 4: Auto-detect support * Type: Bool * Optional * Description: Option to automatically detect boundary faces of the design space that can provide support for a given print direction and overhang angle. Input 5: Include passive * Type: Bool, * Default: True * Description: Option to include passive regions in the overhang constraint calculation. If selected, the optimizer will try to add the necessary support to the passive regions as dictated by the Max angle input. If not selected, the optimizer will ignore the passive regions in the overhang constraint. Output: Optimization constraint #### [Boundary by Body Block](#new-features-and-improvements) * Release 3.11 debuts the **Boundary by Body** block which allows scoping Boundary Conditions to an Implicit Body without referencing an FE Mesh. The association to the mesh is made in the analysis blocks when the Boundary Conditions are combined with the FE Model. This allows boundary conditions to be re-used on multiple meshes and eliminates the need to copy boundary conditions from a topology optimization to a downstream simulation. #### The Boundary by Body block * Block Name: Boundary by Body Location: Simulation->Utilities Description: Selects boundary entities of the FE Mesh (faces/edges/nodes) that lie within a desired tolerance of an Implicit Body. Input 1: Entity * Type: FE Boundary Enum * Required * Description: The type of mesh entity to select. Input 2: Body * Type: Implicit Body * Required * Description: The implicit body used to select the mesh entities. Input 3: Reverse * Type: Bool * Default: False * Description: Option to select entities outside the implicit body instead of inside. Input 4: Tolerance * Type: Scalar * Required * Description: The tolerance for checking at the implicit body's boundary. A positive value will effectively extend the region while a negative value will shrink it. Output: FE Boundary #### [New FE Lattice Component Overload](#new-features-and-improvements) * An overload has been added to the FE Lattice Component block which creates an FE Component directly from a Lattice Body without having to explicitly create an FE Mesh. In addition, all overloads of this block have been promoted from a toolkit custom block to a built-in custom block. #### The FE Lattice Component block * Block Name: FE Lattice Component Location: Design Analysis->Model Assembly Description: Meshes a Lattice Body using either beam or shell elements and creates an FE Component with the given material properties. Input 1: Lattice * Type: Lattice Body * Required * Description: The lattice body to be meshed. Input 2: Geometric order * Type: Geometric Order Enum * Required * Description: The geometric order of the finite elements. Input 3: Subdivisions * Type: Scalar Field * Required * Description: The number of finite elements along a lattice beam. Shell elements cannot be subdivided. Input 4: Material * Type: Isotropic Material * Required * Description: The isotropic material specification for the component. Output: FE Component #### [Usage Improvements](#new-features-and-improvements) * With GPU Acceleration (Beta) enabled, Plane, Axis, and Point types are now interactive, meaning you can change their values and see changes occur in the viewport in real time. To enable GPU Acceleration, go to File > Settings > General and check **Enable GPU acceleration (beta).** Note: Interactivity is not enabled for point lists, plane lists, and axis lists. * We've updated the Mesh from Implicit Body by Voxels (beta) block, changing the Min. feature size input from a required input to an optional input. * The Natural Frequency Response block used with topology optimization now supports free vibration by making the Load case input optional. * The **FE Lattice Mesh** block now accepts a Scalar Field for the Subdivisions input. This allows you to vary the discretization of the lattice beams. #### [Bug Fixes](#new-features-and-improvements) * We fixed a bug in the Volume Lattice block where incorrect tessellation happened when the scale was small. * We fixed an issue with the Pore Diameter from Lattice Body (beta) block that was causing the Point Map output to have a non deterministic order. Now the pore diameters are sorted according to their size, from smallest to largest. If the sizes are equal, they will be sorted by the point's coordinates. ## Keywords: *whats new 3.11* # nTopology 3.12 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-12-what-s-new Version 3.12 > [!NOTE] > > nTopology 3.12 is here! This release introduces live Topology Optimization block updates, even allowing you to adjust the threshold and density for each iteration. We've added in a new behavior where you can right-click on a mesh face and flood to the boundary, allowing for easier boundary selection. In addition, we've implemented improvements to the Mesh from Implicit Body by Voxels (beta) block to help prevent self-intersections in the resulting mesh and improvements to the CAD Body from Mesh (beta) block to ensure the surfaces have the correct normals. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Live Topology Optimization Updates and Convergence Plots](#h-01fh8j995s2dzry612r8tptmk3) * #### [Right-Click Flood Fill](#h-01fh8j9gwhy9kvvp5vjx3xy1g5) * #### [Usage Improvements](#h-01fh8j9pbcbncg5t2w60mdg80p) * #### [Bug Fixes](#h-01fh8j9w6vzs4y89hznh6t10tx) #### Live Topology Optimization Updates * When a Topology Optimization block is being computed, you can now visualize the evolution of the solution. By toggling the block's visibility icon, the density of the design space is presented for each iteration. While the solution is progressing, you can adjust the threshold or rotate, pan, or zoom on the last computed iteration. You can also review previous iterations of the solution. ![An image taken during the Topology Optimization process being run on a bracket. You can now see the iterations generate as the process runs.](https://files.learn.ntop.com/help-articles/whats-new/4408108388755.png) > [!NOTE] > > Live updates for topology optimization in the 3D scene. * In addition to the live updates, a real-time convergence plot of the topology optimization solution is available in the Display tab of the **Topology Optimization** block.![The Display tab of the Topology Optimization block will show a live updating graph of the objective convergence.](https://files.learn.ntop.com/help-articles/whats-new/convergence_chart.png) > [!NOTE] > > Real-time convergence plots for topology optimization. #### Right-Click Flood Fill * With release 3.12, you can now select a mesh face in the 3D scene and flood to the boundary. * Right-clicking on the mesh launches a context menu with the option to perform the flood fill operation. The option works for both an FE Mesh or Mesh object. The flood fill operation creates a block in the notebook with the associated inputs, so your flood selection is persisted. ![Right-clicking on the mesh launches a context menu with the option to perform the flood fill operation.](https://files.learn.ntop.com/help-articles/whats-new/FE_floodfill1.png) > [!NOTE] > > Select mesh in scene, then right click over mesh surface to bring up the **FE Boundary by Flood Fill** context menu. ![A mesh with a cylindrical boundary selected using the flood fill function.](https://files.learn.ntop.com/help-articles/whats-new/FE_floodfill2.png) > [!NOTE] > > Selecting the **FE Boundary by Flood Fill** context menu floods the mesh faces in the neighborhood of the selection point. ![The FE Boundary by Flood Fill block](https://files.learn.ntop.com/help-articles/whats-new/FE_floodfill3.png) > [!NOTE] > > The **FE Boundary by Flood Fill** context menu creates a block in the notebook to persist the selection. #### Usage Improvements * We've improved the **Mesh from Implicit Body by Voxels** (beta) block to prevent self-intersections in the resulting Mesh that were occurring when the input body had complex topology. * We made an update to the **CAD Body from Mesh** (beta) block that will ensure surface normal continuity in the output CAD Body. #### Bug Fixes * We fixed a bug in the **Mesh from Implicit Body by Voxels** block that was producing open meshes in certain cases. * Minor error message and tooltip bug fixes ## Keywords: *new whats 3.12* # nTopology 3.13 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-13-what-s-new Version 3.13 > [!NOTE] > > nTopology 3.13 is here! This release features a new property for face-based lattices that allows for automatic mesh extractions. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Faces as Mesh Property](#faces-as-mesh-property) * #### [Block Updates](#block-updates) * #### [Bug Fixes](#bug-fixes) #### [Faces as Mesh Property](#new-features-and-improvements) * A property called “faces as mesh” has been added to the Lattice data type. This property allows you to automatically extract a Mesh from a face-based Lattice. You can access the Mesh in the Properties tab of the Block Information panel or by typing “your Lattice instance name.faces as mesh” directly into an input. For beam-based lattices, this property shows an error and has no output because there are no faces. ![The image shows a lattice block with its properties panel open. There is a property chip called faces as mesh.](https://files.learn.ntop.com/help-articles/whats-new/4408669605267.png) #### [Block Updates](#new-features-and-improvements) * **Extract Mesh from Lattice** is now deprecated. Faces as mesh is now a property on the Lattice data type that you can access in the Properties tab of the Information Panel or by typing .face as mesh directly into an input. #### [Bug Fixes](#new-features-and-improvements) * We fixed a bug in the **Split Mesh** block that was producing incorrect results when the mesh input wasn't manifold. * The **Export Material** block has been updated to address a bug that resulted in incorrect shear moduli being exported for orthotropic materials. ## Keywords: *new release whats 3.13* # nTopology 3.14 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-14-what-s-new Version 3.14 > [!NOTE] > > nTopology 3.14 is here! It may not be the international Pi day, but it is 3.14 (Pi) release day at nTopology! You've been requesting this slice of pie for quite some time, and we are happy to say that we have listened and baked it up fresh! Cut, Copy, and Paste is here. You can copy blocks throughout your Notebook, into an input, and even into another instance of nTopology. The next feature served up is a beta block that packages up your ingredient (STL mesh) and sends it straight to the Oak Ridge National Laboratory Slicer 2, a tool path generation software for large-scale 3D printing. For a last highlight, be sure to check out GPU acceleration because we've added further performance enhancements. > > As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * [Cut, Copy, and Paste](#h-01fkeb7gt33mha6wghn58z8g75) * [ORNL Slicer 2 API Client (Beta)](#h-01fkebepp8e33as915gqnmcc6g) * [Block Updates](#h-01fkebgg8k0nb070125cbv1atj) * [Usage Improvements](#h-01fkebh343rpyp0sgpsjza18tv) * [Bug Fixes](#h-01fh8j9w6vzs4y89hznh6t10tx) #### **Cut, Copy, and Paste** * One of our top requested usability features is finally here! This new capability enables you to Cut, Copy, and Paste single blocks or multiple blocks at one time. * Once the blocks are on the clipboard, they can be Pasted to the notebook, or into compatible block inputs. Blocks can also be pasted between two separate instances of the software. * We've also included an option, Paste with References, which is especially helpful when Copying and Pasting between two files. This feature Pastes all dependencies and ensures there are no broken references when blocks are Pasted. * Cut, Copy, and Paste options can be accessed from the Edit drop down menu, Right-click Menu and through Keyboard Shortcuts (Ctrl+x, Ctrl+c, Ctrl+v). #### **ORNL Slicer 2 API Client (Beta)** * We've introduced ORNL Slicer 2 API Client block to send a STL mesh file from nTopology to ORNL Slicer 2, an additive manufacturing tool path generation software developed for large-scale 3D printing of metals and polymers at Oak Ridge National Laboratory. ![The right image shows a mesh generated in nTop. The right image shows the mesh imported into the ORNL Slicer 2 client.](https://files.learn.ntop.com/help-articles/whats-new/4409610818451.png) * Block Name: ORNL Slicer 2 API Client (Beta) * Location: Beta->Utilities - Exchange * Description: Sends a part to a ORNL Slicer 2 API endpoint. * Input 1: Upload name * Type: Text * Description: Display name to be requested at the ORNL Slicer 2 API. * Input 2: File * Type: File Path * Description: File to be sliced. * Input 3: Endpoint * Type: Text * Description: URL of the ORNL Slicer 2 API. Start with 'http\://' or 'https\://' to specify the protocol. * Input 4: Port * Type: Integer * Description: Port of the ORNL Slicer 2 API server. #### **Block Updates** * The behavior of the Trim Cell Map (beta) block has been updated for the fill type trimming rule “Centroid inside.” Now, when a cell's centroid is exactly on the boundary of the trimming volume, the cell is considered to be inside of the volume rather than outside. * The Delaunay Volume Mesh block has been moved out of beta and into production. * **Extract Lattice Vertices** is now deprecated. Vertices is a property of the Lattice data type that you can access in the Properties tab of the Information Panel or by typing \.vertices directly into an input. * **Implicit Body from Thick Lattice** has been deprecated. The type auto-converts to an Implicit Body, which allows you to place it into any Implicit Body input directly. #### **Usage Improvements** * We've made further performance enhancements to the GPU acceleration capabilities as we get closer to moving it out of beta for all users. Be sure to enable the GPU acceleration in the Settings panel and try it out if you haven't already! #### **Bug Fixes** * The unit system has been updated to properly distinguish between Hertz and radian/sec. Prior to this release, they were both treated as units of 1/s, and now Hz is correctly interpreted as 1 cycle/sec = 2 Pi/sec = 360 degrees/sec. If you open a file saved in a previous version of nTop, any input specified with units Hertz will have the same numerical value, but the units will automatically update to rad/sec. This changes the intent of the input, but ensures the same results are generated. We recommend reviewing any input with units Hertz and rad/sec to check if the input has been specified correctly, particularly for the Modal Analysis, Rotational Velocity Load, and the Natural Frequency Response blocks. * As part of the bug fix described above, the Modal Analysis block has been updated to version 1.1.0. The previous version is no longer available due to potential errors in the output. When opening files containing the old version of the Modal Analysis block, an error message will be issued with instructions on how to update to the new block. * We fixed an issue with the Trim Cell Map block that was causing too many cells to be removed in certain cases. * We fixed an issue that was causing the Rectangular Cell Map block to freeze in certain cases. * We fixed an issue where progress bars were not showing when the view of a Lattice Body was being computed with the GPU acceleration turned on. * We fixed an issue where already populated inputs could be unexpectedly overwritten using the interactive slider. ## Keywords: *new whats new whats 3.14* # nTopology 3.15 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-15-what-s-new Version 3.15 > [!NOTE] > > nTopology 3.15 is here! This release features two new beta blocks. The first is a new TPMS Unit Cell block that allows you to create a TPMS without a thickness. The second block, Simplified Body Representation, calculates the mass properties of your nTopology design and assigns the modified density value to the original CAD design space. Searching for blocks is now easier than ever; we added color-coded indicators for block types and tags telling you if a block is in beta. For all free Educational license users, the software will now automatically check and turn on the GPU acceleration capabilities if your hardware passes diagnostic and performance checks. This check only applies to Educational licenses as we migrate GPU Enhancements out of beta. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [TPMS Unit Cell with Bias (Beta)](#tpms-unit-cell-with-bias-beta)) * #### [Simplified Body Representation Block (Beta)](#simplified-body-representation-block-beta)) * #### [Block Search Bar Improvements](#block-search-bar-improvements) * #### [Cell Maps with Optional Frame](#cell-maps-with-optional-frame) * #### [Block Updates](#block-updates) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [TPMS Unit Cell with Bias (Beta)](#new-features-and-improvements) * A new single-parameter TPMS unit cell block: **TPMS Unit Cell with Bias** (Beta). This unit cell is non-walled, meaning that you don't assign any thickness value to the TPMS walls. The single-parameter available is for approximate bias length, which shifts the mid-surface wall inward or outward. * Along with this change, we renamed the two existing TPMS unit cells to **Walled TPMS Unit Cell** (Beta) and **Walled TPMS Unit Cell with Bias** (Beta). If you're utilizing these blocks in an existing Notebook, the block name changes automatically without any manual edits. * The new unit cell enables you to replicate the TPMS lattices under Lattices > Implicit within our new latticing beta technology. * Block Name: TPMS Unit Cell with Bias (Beta) * Location: Beta > Lattices - Unit Cells * Description: Select a unit cell from a library of TPMS unit cells with 1 free parameter. * Parameter 1: Approximate bias length - Approximate bias of the TPMS as a negative or positive approximate distance. This will shift the mid-surface wall inward or outward. * Note: The input value for bias is on the Periodic Lattice Body (Beta) block and is available at lattice creation time. > [!NOTE] > > A comparison of the new TPMS Unit Cell with Bias (Beta) block (left) and the Walled TPMS Unit Cell (Beta) block (right) ![A comparison of the new TPMS Unit Cell with Bias (Beta) block (left) and the Walled TPMS Unit Cell (Beta) block (right)](https://files.learn.ntop.com/help-articles/whats-new/4410154462867.png) #### [Simplified Body Representation Block (Beta)](#new-features-and-improvements) ![A flow diagram explaining how a CAD design can be configured in nTop and exported as a Simplified Body Representation.](https://files.learn.ntop.com/help-articles/whats-new/4410164356115.png) * nTopology designs with complex geometry may produce very large B-Rep models that are impractical to import into CAD systems. Simplified design representation can enable weight and balance calculations in CAD without the fully detailed B-Rep model. * We introduced the **Simplified Body Representation** block as a beta block to calculate the final mass properties of the nTopology design and assign the modified density value to the original CAD design space to create the simplified design representation. ![The left shows a Simplified Body Representation without the Exact COG input enabled. This body only has the correct mass property. The left shows a Simplified Body Representation with the Exact COG input enabled. This body has the correct mass and center of gravity.](https://files.learn.ntop.com/help-articles/whats-new/4410164356371.png) ![The left image shows the Simplified Body Representation without the Exact COG input, imported into Solidworks. The mass properties panel is open and shows how the part only has the correct mass. The right image shows the Simplified Body Representation with the Exact COG input, imported into Solidworks. The mass properties panel is open and shows how the part has the correct mass and center of gravity.](https://files.learn.ntop.com/help-articles/whats-new/4410164356883.png) * For mass correction only, the design space is presented as solid bodies with modified density. * For mass and center of gravity correction, we assign the design space with density = 0 by converting all solid bodies to surface bodies. Then, all mass is concentrated in a small solid body in the center of gravity. * Block Name: Simplified Body Representation (Beta) * Description: Create a simplified representation of a Body as an envelope with equivalent mass properties. * Input 1: Envelope * Type: CAD Body List * Description: An envelope surrounding the Body you wish to simplify. * Input 2: Body * Type: Implicit Body * Description: Body to be simplified. * Input 3: Density * Type: Scalar * Description: Density of the material from which the Body will be manufactured. * Input 4: Exact COG * Type: Boolean * Description: Match the center of gravity as well as the overall mass of the original body. If checked, all mass will be concentrated in a small solid body. #### [Block Search Bar Improvements](#new-features-and-improvements) * We adjusted the order of the search results to help you find blocks faster and to reduce clutter. * We added visual indicators to each search result. The color of the indicators represents the block output type. * There is a unique visual indicator icon for lists, variables and imported blocks to indicate that these are different types of blocks. * We added tags for “Beta” so search results are easier to differentiate. #### [Cell Maps with Optional Frame](#new-features-and-improvements) * We changed the behavior of the Cell Map (Beta) blocks: the frame input, which used to be required, is now optional. If you don't provide a frame, these blocks internally compute a frame using the bounding box of the volume. You can still provide a frame to override this behavior and customize the map's orientation and position. This affects the following blocks: * **Rectangular Cell Map** (Beta) * **Cylindrical Cell Map** (Beta) * **Spherical Cell Map** (Beta) * The **Cylindrical Cell Map** (Beta) block is unique amongst the cell maps. It takes into account the volume's rotation and appropriately rotates the map based on the body's principal axes. * This change is backward compatible, and any Cell Map (Beta) blocks you're currently using will produce the same results in 3.15. > [!NOTE] > > The Rectangular Cell Map prior to 3.15. The default frame is unaware of the input volume's geometry: ![A rectangular cell map block with a box block in the volume input and a Frame block in the Frame input. The Cell Map is larger than the body.](https://files.learn.ntop.com/help-articles/whats-new/4410164354067.png) > [!NOTE] > > The Rectangular Cell Map block in 3.15, which uses the min point of the volume's bounding box as the cell map's starting point: ![A rectangular cell map block with a box block in the volume input. The Cell Map is conformal to the box size.](https://files.learn.ntop.com/help-articles/whats-new/4410164354323.png) > [!NOTE] > > The Cylindrical Cell Map block prior to 3.15. This block used the default frame and is unaware of the geometry of the input volume: ![The Cylindrical Cell Map block prior to 3.15. This block used the default frame and is unaware of the geometry of the input volume:](https://files.learn.ntop.com/help-articles/whats-new/4410164355091.png) > [!NOTE] > > The Cylindrical Cell Map block in 3.15 with the frame auto-compute feature: ![The Cylindrical Cell Map block in 3.15 with the frame auto-compute feature:](https://files.learn.ntop.com/help-articles/whats-new/4410169995027.png) #### [Block Updates](#new-features-and-improvements) * The **TPMS Unit Cell** (Beta) and **TPMS Unit Cell with Bias** (Beta) blocks have been renamed to **Walled TPMS Unit Cell** (Beta) and Walled **TPMS Unit Cell with Bias** (Beta) to differentiate them from the new non-walled unit cell. See [TPMS Unit Cell with Bias (Beta)](#new-features-and-improvements) for more information. * The **Overhang Constraint** block for topology optimization has been moved out of beta and promoted to a full production block. * We improved the isotropic and orthotropic material blocks. You can now access all the directional material properties from the block Properties tab. We renamed the Isotropic Coefficient of Thermal Expansion Property and Orthotropic Coefficient of Thermal Expansion Property blocks to Isotropic Thermal Expansion Property and Orthotropic Thermal Expansion Property, respectively. Lastly, we have standardized on using numerical indices 1, 2, and 3 to denote the material directions x, y, and z for material property inputs. * The Anisotropic Material object has also been extended to allow direct access to the stiffness and compliance coefficients via the Properties tab. An Anisotropic Material is the primary output from the **Homogenize Unit Cell** block. #### [Usage Improvements](#new-features-and-improvements) * For all free Educational license users, the software will now automatically check and turn on the GPU acceleration capabilities if your hardware passes diagnostic and performance checks. This check occurs once you update to version 3.15, and it will respect your “Enable GPU acceleration” option in the Settings panel from that point forward. This check gets skipped if you already have GPU acceleration turned on. Currently, this only happens for Educational users, but it's a first step toward migrating the GPU capability out of beta. * We now support the Solidworks Assembly file format (.SLDASM) as an eligible input type for the **Import Part** block. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue in the **CAD Body from Mesh** (Beta) block that was preventing the block from completing when the input object was cylindrical or torus-like in shape. * We fixed an issue with the **CAD Body from Mesh** block that prevented face consolidation from happening in some cases. We only applied this fix to the newer, Beta version of CAD Body from Mesh. The CAD Body output had one face for each of the quads of the input mesh instead of merging mesh elements, and some users saw an output with upwards of 10,000 CAD faces in some cases. > [!NOTE] > > The output from the CAD Body from Mesh block. The block Properties shows 7452 faces. ![The output from the CAD Body from Mesh block. The block Properties shows 7452 faces.](https://files.learn.ntop.com/help-articles/whats-new/4410169995411.png) > [!NOTE] > > Output in the CAD Body from Mesh (Beta) block that received the bug fix. Note that there are now two CAD faces. ![Output in the CAD Body from Mesh (Beta) block that received the bug fix. Note that there are now two CAD faces.](https://files.learn.ntop.com/help-articles/whats-new/4410169995667.png) * We fixed an issue in the **Mesh from Implicit Body by Voxels** (Beta) block that was creating bad outputs for beam-based lattices. > [!NOTE] > > Output of Mesh from Implicit Body by Voxels (Beta) prior to the fix in 3.15: ![Output of Mesh from Implicit Body by Voxels (Beta) prior to the fix in 3.15. The mesh is missing large portions of its lattice structure.](https://files.learn.ntop.com/help-articles/whats-new/4410164355603.png) > [!NOTE] > > After the fix: ![The same mesh in nTop 3.15 with the lattice bug fixed.](https://files.learn.ntop.com/help-articles/whats-new/4410164355859.png) > [!NOTE] > > A comparison with the block Mesh from Implicit Body. The newer beta block will take longer to run, but is more robust and the output is closer to the original body's geometry: ![A mesh created from the Mesh from Implicit Body block. The mesh is of a beam based lattice.](https://files.learn.ntop.com/help-articles/whats-new/4410169995923.png) * We fixed an issue where turning off a view while it's generating did not cancel the view computation. * We fixed a number of GPU view generation issues that were happening for some NVIDIA hardware. ## Keywords: *new whats 3.15* # nTopology 3.16 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-16-what-s-new Version 3.16 > [!NOTE] > > nTopology 3.16 is here! This release features a new “Name” property for Part and CAD Bodies imported from your native CAD program, allowing you to identify which part chips you need since they have the same CAD names. The Mesh from Implicit Body by Voxels block is in full production as a version of the Mesh from Implicit Body block. It creates an even better conversion experience, guaranteeing manifold meshes if the sharpen option is unchecked. Lastly, visit the [User Dashboard](https://app.ntopology.com) to go through an enhanced onboarding experience to get the most out of your first few sessions in nTopology. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to access helpful tutorials and support articles. * #### [Name Property for Part and CAD Body](#name-property-for-part-and-cad-body) * #### [Enhanced User Onboarding Flow](#enhanced-user-onboarding-flow) * #### [Usage Improvements](#usage-improvements) * #### [Block Updates](#block-updates) * #### [Bug Fixes](#bug-fixes) #### [Name Property for Part and CAD Body](#new-features-and-improvements) * We've added a “Name” property to the Part and CAD Body variable types. * The Properties tab of the **Import Part** block shows the names of imported parts and bodies as defined in CAD so you can quickly identify the bodies you need. * Part names are generated from its filename, and CAD Body names are generated from the CAD data. These names are loaded as text variables and aren't editable. ![An import part block with its properties panel open. The properties panel shows the imported part with its name next to it. The CAD body property chip also has its name next to it.](https://files.learn.ntop.com/help-articles/whats-new/4412676734227.png) #### [Enhanced User Onboarding Flow](#new-features-and-improvements) nTopology now provides a more targeted onboarding and activation flow through our [User Dashboard](https://app.ntopology.com) designed to enable first-time users to learn about the product with greater context, learning materials, and steps to take during a trial or first use. Learn about the product's core value proposition and capabilities with onboarding videos, how-to guides, and training sessions for the specific nTop applications that interest you. Tips: * Leverage Activation Tasks targeted at the stage you're in (Preview or Trial). * Review content personalized to you based on your application interests. * Partake in courses designed to ramp up your understanding of nTop workflows. * The Get Started page hosts a repository of all onboarding material, activation tasks, and content for later review. ![Trial Activation tasks that users can review and accomplish.](https://files.learn.ntop.com/help-articles/whats-new/4412669143827.png) ![Personalized Content on app.ntop.com based on a users interest.](https://files.learn.ntop.com/help-articles/whats-new/4412676733331.png) #### [Usage Improvements](#new-features-and-improvements) * The documentation now features a “Getting Started” section. It includes information on System Requirements, Licensing, Upgrading, the Login Screen, and the Support System. #### [Block Updates](#new-features-and-improvements) * **Mesh from Implicit Body by Voxels** moved out of beta and into production as version 2.0.0 of **Mesh from Implicit Body**. **Mesh from Implicit Body** version 2.0.0 uses a robust meshing algorithm that can handle more complex geometry and results in cleaner meshes than version 1.0.0. When the sharpen option is unchecked, the mesh is guaranteed to be manifold and have no self-intersecting elements. The block overload exposes more options, including increasing the number of iterations to produce a sharper result and a region to localize sharpening to a specific area. **Mesh from Implicit Body** version 1.0.0 is still available for you to use, but we won't be doing new development work or bug fixes for version 1.0.0. * We changed the behavior of the block version drop-down to show all available block versions. Previously the drop-down on blocks such as the **Volume Mesh** block did not display all available versions, and users had to search for the deprecated version using the search bar. Similar to the behavior for block overloads, if there are a different number of inputs and one or more inputs contain a value, you will not be able to switch to a different version. Delete the input's value to enable switching: > [!NOTE] > > Version 1.0.0 is displayed but grayed out. Delete the value for Growth rate to be able to change versions. ![A volume mesh block with its properties panel open. You can select the block version from the drop down menu in the information tab.](https://files.learn.ntop.com/help-articles/whats-new/4412676732947.png) * We changed the finite element beam formulation from Kirchhoff to Isoparametric Mindlin, so results are more consistent with other commercial FEA codes. As such, we have versioned the **Modal Analysis** block to 1.2.0 and depreciated version 1.1.0. * We added a drop-down for unit cell orientation to all of the beta unit cell blocks. This allows you to easily change the orientation during unit cell creation, without the need for a separate orient block. ![A graph unit cell block with the unit cell set to column.](https://files.learn.ntop.com/help-articles/whats-new/4412653644435.png) #### [Bug Fixes](#new-features-and-improvements) * Exporting anisotropic material properties to Ansys is not supported. The **Export FE Model** and **Export Material** blocks would complete successfully before this release, but they wouldn't write the anisotropic material properties to the \*.cdb file. Now a warning message will be issued from the **Export FE Model** block when exporting a model that contains an anisotropic material to Ansys. In contrast, an error is be issued from the **Export Material** block. Consequently, the **Export Material** block is now version 1.1.0, and version 1.0.0 is deprecated. * We fixed an issue that caused a hard crash when switching the Unit System. * We fixed an issue that caused nTopology to crash during a modal analysis after changing the Geometric order of the **FE Volume Mesh** from Linear to Quadratic. * An error in the **Pressure** boundary condition was corrected when providing a Field input. The **Pressure** block is now version 1.1.0, and version 1.0.0 is deprecated. * We fixed an issue in the **Custom Implicit Unit Cell** block that caused the unit cells to have discontinuous fields. This affected downstream operations such as booleans and offsets. Unit cell fields are now smooth and continuous. > [!NOTE] > > View of the field before the bug fix: ![Before nTop 3.16, there was an issue in the Custom Implicit Unit Cell block that caused the unit cells to have discontinuous fields.](https://files.learn.ntop.com/help-articles/whats-new/4412669141267.png) > [!NOTE] > > Field view after the bug fix: ![In nTop 3.16, the issue in the Custom Implicit Unit Cell block that caused the unit cells to have discontinuous fields has been fixed.](https://files.learn.ntop.com/help-articles/whats-new/4412653644179.png) ## Keywords: *new whats 3.16* # nTopology 3.17 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-17-what-s-new ## Version 3.17 > [!NOTE] > > nTopology 3.17 is here! We are introducing a new system for navigating and solving errors. If you have an error in your workflow, an error icon appears at the top right of the Notebook. Clicking on this opens up an Error Log that shows you all of the errors in your Notebook. Clicking on an error in the log navigates you to the block where the error is occurring. This release also features a built-in custom block, Mirror Body, to mirror implicit bodies. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Error Enhancements](#new-feature-1) * #### [Mirror Body](#new-feature-2) * #### [Usage Improvements](#usage-improvements) * #### [Block Updates](#block-updates) * #### [Bug Fixes](#bug-fixes) #### [Error Enhancements](#new-features-and-improvements) We made several enhancements to navigating and solving errors within your workflows. These new enhancements include: * An Error Log at the top right-hand corner of the Notebook * An error icon appears at the top of the Notebook whenever there is an error. Click on that icon to display the error log and then click on an error to navigate to the block. * Improved error messaging * A red overlay to make blocks that have errors stand out from blocks without errors * Updated icons and colors for warnings and errors * Floating icons: If there is an error in a collapsed block or section, click on the floating error icon to expand the block or section and go to the error. > [!NOTE] > > Error Log at the top of the Notebook and corresponding Error messages. ![An example error log in the nTop notebook showing all current errors in your notebook.](https://files.learn.ntop.com/help-articles/whats-new/4415793259795.png) #### [Mirror Body](#new-features-and-improvements) This new built-in custom block makes it easier to mirror your implicit body. * Name: Mirror Body * Location: Modeling > Operations * Description: Mirrors an Implicit Body about a plane. * Input # 1: Body * Type: Implicit Body * Description: Implicit Body to mirror. * Input # 2: Plane * Type: Plane * Description: Plane about which to mirror the Implicit Body. > [!NOTE] > > Original lattice (gray) and mirrored lattice (blue). ![A Periodic Lattice Body being mirrored over a plane using the Mirror Body block.](https://files.learn.ntop.com/help-articles/whats-new/4415793260435.png) #### [Usage Improvements](#new-features-and-improvements) * Overloaded blocks using dropdown inputs can switch overloads once a dropdown option is selected. * We improved how meshes are stored and saved within nTop files. When saving nTop files with meshes, the resulting nTop file is approximately 2-3x smaller, depending on the mesh. The time it takes to save the file has also been reduced, as well as the time to load the file. * To take advantage of this improvement for existing files, you can open the nTop file in 3.17, trigger a change such as adding a block, removing it, and then saving the file. #### [Block Updates](#new-features-and-improvements) * Import Part block now supports the **Autodesk Inventor Assembly file format (.IAM)** and **Creo Assembly file format (.ASM)** as an eligible input type. * There are two updates for the **CAD Body from Mesh** block: * We renamed the **CAD Body from Mesh** block to **CAD Body from Quad Mesh**. This change was made to reduce confusion around which type of mesh the block accepts. * We promoted the **CAD Body from Mesh Beta** block into production as version 1.1.0 of the existing **CAD Body from Mesh** block (now **CAD Body from Quad Mesh**). V1.1.0 is faster, supports periodic surfaces, does not require a refinement level input, produces fewer CAD faces, and can handle a variety of edge-cases that the previous version could not. > [!NOTE] > > The output from the *CAD Body from Quad Mesh* V1.0.0 block. The block Properties shows 7452 faces. ![The output from the CAD Body from Quad Mesh V1.0.0 block. The block Properties shows 7452 faces.](https://files.learn.ntop.com/help-articles/whats-new/4416119651987.png) > [!NOTE] > > Output from the *CAD Body from Quad Mesh* V1.1.0 block. Note that there are now two CAD faces. ![Output from the CAD Body from Quad Mesh V1.1.0 block. Note that there are now two CAD faces.](https://files.learn.ntop.com/help-articles/whats-new/4416126869267.png) #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue where converting a cell map input into an optional input was causing nTopology to unexpectedly exit. * We fixed a bug that was placing the bounding box of a slice stack in the wrong location when using the optional frame input in the **Slice Body** block. * We fixed a bug where an unknown error was displayed when an acceleration load was applied to a geometry with multiple components in a **Topology Optimization** block, causing the optimization not to run. * We fixed an issue where the **Topology Optimization** block would display a wrong error message and not run when the **Boundary by Body** block is used with multiple load cases. * The **Static Analysis** block has been updated in version 3.17 to properly display principal stresses, strain and reaction force results for solid element models. Prior to this release, principal stresses and strain results are calculated by averaging element values causing some inaccuracies. Now, stress and strain results are calculated using the average of nodal values to produce accurate results. In addition, solid element models with applied force on nodes would produce reaction force results that included the applied forces. The applied forces have now been removed from the reaction forces results. To implement these fixes and confirm you are getting accurate principal stresses, strain and reaction force results for solid element models in version 3.17 onwards, we recommend to re-run the static analysis block. * We fixed a memory leak in the **Slice Body** and **Slice Body to B\&W Image Stack** blocks. The leak causing nTopology to unexpectedly exit in some cases. ## Keywords: *new release notes whats 3.17* # nTopology 3.18 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-18-what-s-new ## Version 3.18 > [!NOTE] > > nTopology 3.18 is here! We are introducing GPU Acceleration as a full production feature (previously was in Beta). This feature enables a significant increase in computation speed for most implicit bodies. We made updates to the properties of Mesh data types for further clarity and released new versions for Simplify Mesh by Amount and Simplify Mesh by Threshold. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [General Access for GPU Acceleration](#gpu-out-of-beta) * #### [Usage Improvements](#usage-improvements) * #### [Block Updates](#block-updates) * #### [Bug Fixes](#bug-fixes) #### [General Access for GPU Acceleration](#gpu-out-of-beta) We have made GPU Acceleration generally available to all users. This feature enables a significant increase in computation speed for most implicit bodies. For those Implicit Bodies that enjoy GPU acceleration, interactive manipulation of many of their scalar inputs is possible (by dragging the arrow icon next to an input). We have made several optimizations and bug fixes in the beta phase to ensure a robust visualization and interactivity experience. To learn more about GPU Acceleration, go to the Documentation > Getting Started > System Requirements > GPU Acceleration. ![The nTop settings menu open to the General tab. There is a setting option to Enable GPU Acceleration.](https://files.learn.ntop.com/help-articles/whats-new/4417026411539.png) #### [Usage Improvements](#new-features-and-improvements) We added visual UVW characters to cell map's UVW guides. This will assist, for example, when making a cell map from a CAD surface and inputting the correct number of cells in each direction. The UVW guides can be turned off by unchecking the feature in the Heads Up Display. ![A cell map with the U,V,W characters displayed along each of the corresponding directions.](https://files.learn.ntop.com/help-articles/whats-new/4417019541011.png) #### [Block Updates](#new-features-and-improvements) * We made two updates to the properties of the **Mesh** data type: * The property that we formerly called **manifold** has been renamed to **edge manifold**. An edge is manifold if there are exactly two (or one, in case of a boundary edge) incident facets. In the image below, the third mesh from the left has a non-manifold edge, since it has 5 incident faces. A mesh is edge-manifold if all its edges are manifold. * We added a new property called **vertex manifold**. A mesh is vertex manifold if for every vertex the set of incident facets forms a single connected component. In the image below, the right-most mesh is not vertex-manifold since the set of incident facets form two connected components. ![An example of manifold mesh vertices on the left and nonmanifold vertices on the right.](https://files.learn.ntop.com/help-articles/whats-new/4417019540755.png) > [!NOTE] > > Crane, K. (2021, February 25). DISCRETE DIFFERENTIAL GEOMETRY: AN APPLIED INTRODUCTION. * We released new versions of the blocks **Simplify Mesh by Amount** and **Simplify Mesh by Threshold** to handle cases where the input mesh is not vertex manifold. Previously these blocks would throw an error and not run. Version 1.3.0 will run and produce a result, however, a warning message will display letting you know that the result would be better if you provide a vertex manifold mesh. * We improved the performance of the **CAD Body from Quad Mesh** block. The “computing control cages” phase of the algorithm is up to 20% faster, depending on your model. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue with the search block tooltip staying on screen even when navigating outside the nTopology window. * We fixed an issue when the tooltip cut off text on long property chips. * We fixed an issue that was causing a lattice created using certain custom implicit unit cells to be displayed inaccurately. * We fixed some inconsistencies in scrubber behavior for interactive variables. * We fixed an issue resulting from interacting with the variable input chip of an implicit body's bounding box properties that was causing the program to unexpectedly exit. * We fixed an issue when viewing the Von Mises stress scalar field in a static analysis containing shell attributes that was causing the program to unexpectedly exit. * The **Export Static Analysis** block and **Export Buckling Analysis** Block have been updated to properly export acceleration forces. Prior to this release, other commercial FEA packages that do not support acceleration forces would import the load incorrectly. To implement these fixes and confirm you are exporting accurate acceleration forces in version 3.18 onwards, we recommend to re-run these blocks. ## Keywords: *new release notes whats 3.18* # nTopology 3.19 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-19-what-s-new ## Version 3.19 > [!NOTE] > > nTopology 3.19 is here! This release features a new context search that allows you to quickly find and add compatible blocks right from beside the selected block. We are also introducing a new feature that saves time when setting up revalidation simulations; you can now create boundary conditions straight from a CAD Face instead of using a Mesh. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. ### [Context Search](#context-search) ### [Boundary Condition on CAD Face](#cad-face) ### [Web-App Redesign - Navigation](#web-app) ### [Usage Improvements](#usage-improvements) ### [Block Updates](#block-updates) ### [Bug Fixes](#bug-fixes) #### [Context Search](#new-features-and-improvements) We made enhancements to make our Notebook and block system more accessible for our users. This new feature is called Context Search. **What it does:** There is a new icon that appears when most blocks are selected (shown below). ![A sphere block selected with the magnifying glass icon next to it indicating Context Search.](https://files.learn.ntop.com/help-articles/whats-new/4431939606291.png) * When you select the icon, a search bar will appear to the right of the block. * From there, you can search through all the compatible blocks that can be used with the block (shown below). ![When you click the magnifying glass icon next to a block, it opens the context search drop down menu.](https://files.learn.ntop.com/help-articles/whats-new/4431939618451.png) **Common uses:** This feature is primarily designed for exploring workflows and block combinations. > [!TIP] > > **Tips:** * The pop-up search bar will show all options listed in alphabetical order that you can select. * Context Search isn't available for variables. * Use (S) as a keyboard shortcut to activate Context Search. * Any option selected will become the outer nested block of the initial block. * If there is an outer nested block already to the block running the Context Search, the list of potential blocks will allow only blocks that are compatible with *both* the input(s) of the outer nested block and the output of the inner nested block (shown below). ![A sphere block selected with the magnifying glass icon next to it indicating Context Search. The context search dropdown menu is open. ](https://files.learn.ntop.com/help-articles/whats-new/4431931936915.png) #### [Boundary Condition on CAD Face](#new-features-and-improvements) You can now define Boundary Conditions directly on a CAD Face, instead of a mesh. This new feature enables setting up simulations and topology optimization quickly and efficiently. The following boundary conditions will accept CAD Faces as Boundary input: * Force, Surface Force, Bearing Force * Pressure * Point Force, Point Moment * Surface Heat Flux, Convection Boundary Load, Radiation Boundary Load * Displacement Restraint, Point Restraint * Temperature Restraint * Tie Constraint, Structural Bounded Contact * Thermal Bounded Contact In prior releases, Boundary Conditions would need to be duplicated if a new mesh is used for a simulation revalidation. An example of this would be remeshing an optimized part to compare the structural performance of the before and after model. Using this new feature, you can re-use the Boundary Conditions from one mesh to another. This capability is enabled by a new block, **Associate FE Mesh**. * **Associate FE Mesh** * Beta > Simulation * **Block Description:** Associates an FE Mesh with a CAD Body. Boundary Conditions applied to the CAD Body will then be transferred to the associated FE Mesh. * **Input # 1:** Mesh * **Type:** FE Mesh * **Description:** The FE Mesh to be associated with a CAD Body. * **Input # 2:** Geometry * **Type:** CAD Body List * **Description:** A list of CAD Bodies. * **Input # 3:** Tolerance * **Type:** Scalar * **Description:** Maximum distance between selected mesh elements and the chosen topology. Here is how you use the **Associate FE Mesh** block to apply Boundary Conditions directly to CAD Faces. **Step 1.** Scope your Boundary Condition directly to a CAD Face using the appropriate overload on your Boundary Condition block. Note that boundary conditions icons are placed at the vertices of the CAD Face. At the time of the analysis, the boundary conditions will be applied to all the nodes on the CAD Face. ![An imported CAD part with a Fixed Face and Top Face placed in the notebook as variables. A Displacement Restraint is applied to the Fixed Face and a Force block is applied to the Top Face. The model shows the boundary glyphs applied to the faces.](https://files.learn.ntop.com/help-articles/whats-new/4431939587987.png) **Step 2.** Associate the FE Mesh with the parent CAD Body containing the CAD Faces used to define the Boundary Conditions. ![The Associate FE Mesh block with a Volume Mesh inserted into the Mesh input. There is a CAD Body List inserted into the Geometry input.](https://files.learn.ntop.com/help-articles/whats-new/4431931907603.png) **Step 3.** Use the Associated Mesh and Boundary Conditions in your simulation analysis. ![A Static Analysis run using the Associate FE Mesh block. The Model shows the simulation results with the boundary condition glyphs.](https://files.learn.ntop.com/help-articles/whats-new/4431947023635.png) **Step 4 (Optional)**. To perform a new simulation on a different mesh and re-use the Boundary Conditions objects you already created, just re-associated your new FE Mesh with the parent CAD Body. ![A Static Analysis run using the Associate FE Mesh block. The Model shows the simulation results with the boundary condition glyphs.](https://files.learn.ntop.com/help-articles/whats-new/4431931914643.png) With this feature, we have added a new property, “associated geometries”, to the FE Mesh object. This property will be valid for FE Meshes that have been associated with a CAD Body through the **Associate FE Mesh** block and provide quick access to that geometry. For multi-component analyses, you can use the **Associate FE Mesh** block to assign different FE Meshes to different CAD Bodies. A Boundary Condition that is scoped to a specific CAD Face will only be applied to the mesh associated with the CAD Face. This is useful to distinguish features that are in close proximity to each other, like neighboring Boundary Conditions or FE Connectors. For example, a Tie Constraint takes Independent and Dependent boundaries which typically overlap in 3D space. Those boundaries can be assigned to two CAD Faces that are in the same location, but from different CAD Bodies. In the following figure, Component 1 and Component 2 are connected at the interface with a **Tie Constraint** block. Each boundary of the interface has been assigned to a CAD Face from a different CAD Body, and the CAD Bodies have been associated with the corresponding FE Mesh of the two components. ![A Static Analysis set up using two FE Components. The FE Components were created using Associate FE Mesh blocks and are connected using a Tie Constraint.](https://files.learn.ntop.com/help-articles/whats-new/4431931927443.png) #### [Web-App Redesign - Navigation](#new-features-and-improvements) We're redesigning the interface of our web-app to provide you with a better user experience, and the first of a few incremental improvements includes a new top and side navigation. ![The home page of a user logged in to app.ntop.com.](https://files.learn.ntop.com/help-articles/whats-new/4431939651859.png) #### [Usage Improvements](#new-features-and-improvements) * Check out the new Concepts section in the Documentation to read more about Implicit Modeling. #### [Block Updates](#new-features-and-improvements) * We released a new version of the **Mesh from Implicit Body** block. The new version, 2.1.0, has the following improvements and bug fixes: * We improved the simplification algorithm of the block so that the output is always vertex manifold. Previously, if simplification was turned on and the mesh was not vertex manifold the block would throw an error and not return a result. * We fixed a bug causing the Sharpen option to produce a non-manifold Mesh in certain cases. We improved the performance of the **Mesh from Implicit Body** block when meshing an implicit body that has issues such as incorrect normals. This improvement applies to version 2.0.0 and 2.1.0 both. The block now runs up to 30% faster, and this improvement will be especially noticeable when meshing lattices. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue that was causing unit cells to be oriented differently when creating a lattice from a Quad Mesh using the **Cell Map from Quad Mesh** block. If the quads of the mesh are regular, with no extraordinary vertices, the lattice's unit cells will now be all oriented the same. You can use the orientation drop-down of the unit cell block to change the orientation as needed. * If the mesh does contain extraordinary vertices then unit cells will not be consistently oriented. Lattices with asymmetric unit cells will be discontinuous. In this case, you can try using the **Refine Mesh** block with Refinement Steps = 1. If still inadequate, try Refinement Steps = 2. However, note that after refinement, the unit cells will be smaller. ![The image on the left shows a lattice before nTop 3.19, there was a bug causing unit cells to not have the same orientation. In nTop 3.19, this bug is no longer present and the unit cells all have the same orientation.](https://files.learn.ntop.com/help-articles/whats-new/4431939635603.png) * We fixed an issue with the “Select Object” button on block inputs not allowing users to select another block in the notebook and use that block as an input. * We fixed an issue in which inputting an element to a large scalar field list was causing nTopology to exit. * We fixed an issue where nTopology would unexpectedly exit when exporting a **Topology Optimization History** with a Save increment value not equal to 1. * We fixed an issue in which using the **Boundary by Body** block to define a **Point Restraint** load case would cause a simulation not to run and give an error. * We fixed an issue where **FE Models** containing multiple components of the same kind (i.e., solid-solid) would produce incorrect stress values. To implement the fix and get accurate results in version 3.19 onwards, we recommend re-running the simulation blocks containing FE models with multiple components of the same kind. * We fixed an issue in which creating a Beam/Shell attribute with **Region by body** caused nTopology to unexpectedly exit. * We fixed an issue where an edge force applied to a volume mesh would produce an incorrect Force distribution. * We fixed an issue where exporting a simulation block with pressure loads will export the pressure loads equal to zero. Now, the exported pressure loads will equal the magnitude applied in a **Pressure** block. ## Keywords: *release notes 3.19* # nTopology 3.2 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-2-what-s-new ## Version 3.2 > [!NOTE] > > nTopology 3.2 is here! This release features a new Triangulate Mesh block that enables you to create triangular meshes from quad meshes. It also features the new Trim Voronoi Volume Lattice Body block, that not only trims a Voronoi lattice body, but also recalculates the porosity value per cell post trimming. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Triangulate Mesh (Beta)](#triangulate-mesh-beta)) * #### [Trim Voronoi Volume Lattice Body (Beta)](#trim-voronoi-volume-lattice-body-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Triangulate Mesh (Beta)](#new-features-and-improvements) * We've introduced a new block that enables you to create a triangular mesh from a quad or quad-dominant mesh. This will streamline workflows that convert voxel grids into tri-meshes for manufacturing applications. * Location: Beta > Utilities - Conversion * Name: Triangulate Mesh * Description: Triangulate a quad mesh by bisecting quads. * Input 01: Mesh * Type: Mesh * Description: Mesh to triangulate. * Output: Mesh #### [Trim Voronoi Volume Lattice Body (Beta)](#new-features-and-improvements) * In nTopology 3.1, we introduced the [Voronoi Volume Lattice Body (Beta)](https://support.ntopology.com/hc/en-us/articles/1500009296402-nTopology-3-1-What-s-New#Voronoi%20Volume%20Lattice%20Body%20and%20Cell%20Type) block , which gives you a porosity value per Voronoi cell and a list of every Voronoi cell via its properties. Now you can trim the Voronoi Volume Lattice Body by using an overload to the Trim Lattice Body (Beta) block. The porosity value will be recalculated post-trimming. * Location: Beta > Lattices - Utilities * Name: Trim Lattice Body * Description: Trims the voronoi lattice body with the given body. * Input 01: Voronoi lattice * Type: Voronoi Volume Lattice Body * Description: Lattice to be trimmed. * Input 02: Volume * Type: Implicit Body * Description: Trimming tool volume. * Input 03: Lattice to remain * Type: Inside or Outside Enum * Description: Option to keep the lattice that is inside or outside the boundary. * Input 04: Rounded edges * Type: Bool * Description: Option to round edges. * Input 05: Feature tolerance * Type: Scalar * Description: Minimum feature size of boundary to accurately capture. * Output: Voronoi Volume Lattice Body #### [Usage Improvements](#new-features-and-improvements) * The convention for the overhead angle in the Overhang Constraint block has changed. In previous versions, the angle was defined with respect to the print direction, which is commonly the z-axis. Now the angle is defined with respect to the print plate, which is consistent with industry best practice. See the figure below: ![The left image shows the old diagram for how the Overhang Constraint block functioned before nTop 3.2. The right image shows the updated diagram for how this block works in nTop 3.2.](https://files.learn.ntop.com/help-articles/whats-new/1500018311741.png) * The order of the homogenized material stiffness matrix has changed when outputted from the Homogenize Unit Cell block (i.e. right mouse click → Export). The old format was based on the Voigt notation (xx, yy, zz, yz, xz, xy). The new format is: ![The new format for the homogenized material stiffness matrix](https://files.learn.ntop.com/help-articles/whats-new/1500018015022.png) * The Design Response Constraint block now performs a unit compatibility check between the design response and the constraint value input. The block has been versioned, and the older version deprecated. Models with older versions will still open with a warning. * Mesh and analysis statistics, including the number of nodes, elements, and degrees of freedom, are now available as properties in the FE Model, FE Connector, Static Analysis, Modal Analysis, Buckling Analysis, Thermal Analysis, and Topology Optimization blocks. * For those with GPU acceleration enabled, you can now cancel GPU tasks via a progress bar that appears while renders are compiling. ![An example progress bar for visualizing an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/1500018311801.png) * We've introduced a new modal window that will warn you if your CPU is not configured to run nTopology due to AVX not being enabled. The modal window will link you to the following article on our support site:[nTopology System and Licensing Requirements Guide](https://support.ntopology.com/hc/en-us/articles/360061698333-nTopology-System-and-Licensing-Requirements-Guide) Below is the modal window as well as the error message that will be displayed in the log panel. ![a new modal window that will warn you if your CPU is not configured to run nTopology due to AVX not being enabled](https://files.learn.ntop.com/help-articles/whats-new/1500018311701.png) #### [Bug Fixes](#new-features-and-improvements) * We've made improvements to our cross highlighting logic, so when you select a variable, all notebook sections, blocks, and chips that are referencing the selected variable are now highlighted. * We've resolved an issue that prevented the export of a curve list where some or all curves were intersecting. * We've resolved an issue where quad-dominant mesh properties were inaccurately reported. * We've resolved an issue with cylinder gradients that will improve meshing and slicing output quality. * We've resolved an issue with the UI control for scrubbing values where the selected speed on the speed wheel was producing values in the associated input off by three orders of magnitude. ## Keywords: *new whats 3.2* # nTopology 3.20 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-20-what-s-new ## Version 3.20 > [!NOTE] > > nTopology 3.20 is here! This is a lighter release featuring some quality of life enhancements. We've improved the error messages for all Primitive and Curve blocks and fixed a few issues that users were running into. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to access helpful tutorials and support articles. ### [Usage Improvements](#usage-improvements) ### [Bug Fixes](#bug-fixes) #### [Usage Improvements](#new-features-and-improvements) * We updated all Primitive and Curve blocks with more descriptive errors to help you better understand and troubleshoot any issues. * We added error messages to help you troubleshoot issues caused by importing Custom Blocks saved in older versions of nTopology. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue with "Go to Variable Block" on a specific variable that does not scroll to target correctly. * We fixed an issue with the Field Viewer and Section Cut windows not closing when a user selects the “Esc” key, causing nTopology to exit after further interaction. * We fixed an issue with certain math blocks (Add, Subtract, etc.) not being able to overload to an Integer type if an integer was inputted. * We fixed an issue where creating a new file while a block is selected prevents selecting objects in view. * We fixed an issue where the nTopology landing page has three File menu items disabled - New, Open, and My Blocks Folder. ## Keywords: *new whats 3 20 3.20* # nTopology 3.21 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-21-what-s-new Version 3.21 > [!NOTE] > > nTopology 3.21 is here! This release features a newly designed Heads Up Display (HUD) for simulation and topology optimization, enabling more effective post-processing. Along with the new HUD, we implemented speed improvements for several blocks, including Mesh from Implicit Body. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Simulation and Topology Optimization Heads Up Display](#simulation) * ### [Usage Improvements](#usage-improvements) * ### [Bug Fixes](#bug-fixes) #### [Simulation and Topology Optimization Heads Up Display](#new-features-and-improvements) We've made some major improvements to the Simulation and Topology Optimization Heads Up Display (HUD) for more effective post-processing. * The legend and controls are now semi-transparent, providing a more immersive feel. * Using the HUD selector dropdown menu in the legend, you can easily toggle between different block results within the same notebook. * You can now easily toggle between different units using the Units selector dropdown menu. * Using the new Probe tool, you can query simulation result plots and point maps to view the numerical value of the plotted field at a specific location (not available for beam-based lattices or topology optimization results). ![The simulation heads up display that appears after running a simulation analysis.](https://files.learn.ntop.com/help-articles/whats-new/4819704413971.png) > [!NOTE] > > For scalar and vector point maps, the Probe tool will display the numerical value of the point or arrow closest to the mouse pointer. ![A vector point map shown with the heads up display. By dragging the mouse over the point map data, the mouse will probe the values and display the value that the mouse is closest to.](https://files.learn.ntop.com/help-articles/whats-new/4819728021651.png) > [!NOTE] > > For simulation results plots, the Probe Values tool will display the numerical value of the element vertex. ![A thermal analysis result with the simulation hud next to it. You can probe the element values by mousing over the results.](https://files.learn.ntop.com/help-articles/whats-new/4819690345363.png) > [!NOTE] > > The Probe Values tool enables probing section cuts for volume simulation results by checking the “Show volume mesh elements” in the Section Cut dialog box. Note that the numerical value displayed correlates with the vertex of the full element at the section cut, which may not be directly on the section cut plane. ![Using a section cut on the thermal analysis results, you can visualize the volume mesh elements. Make sure the Show volume mesh elements option is enabled in the section cut settings.](https://files.learn.ntop.com/help-articles/whats-new/4819693170067.png) > [!NOTE] > > There is now an option to choose between banded or continuous colors for contour plots. You can select the number of bands (max of 9) for the new banded option in the legend, allowing you to easily visualize stress and strain thresholds. ![In the heads up display of a static structural result, you can change the color palette being displayed on the results.](https://files.learn.ntop.com/help-articles/whats-new/4819704272915.png) #### [Usage Improvements](#new-features-and-improvements) * The **Mesh from Implicit Body** and **Slice Body** blocks have been improved to run approximately 30-50% faster. * The following blocks or property evaluation have been improved to run approximately 5 time faster: * **Implicit Body from CAD Body** * **Implicit Body from Mesh** * The Body property within the Mesh and Lattice, Thick Lattice, and Lattice Body types #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue where the **Thermal Bonded Contact** and **Structural Bonded Contact** blocks would give an error and not work if **Boundary by Body** was used to define the Independent or Dependent inputs. To remove the error in version 3.21 onwards, please rebuild the block. * We fixed an issue where a long-running, existing progress bar does not stop loading and prevents a new file from opening. * We fixed an issue that was causing the gradient vectors of Implicit Bodies to be not exactly normal to the body's surface when the Implicit Body is located far from the global origin. * We fixed a bug that was generating inaccurate gradient vectors for Implicit Bodies close to vertices and edges. ![The image on the right shows the bug before nTop 3.21 that was causing incorrect vector gradients to occur on implicit bodies near edges or vertices. The image on the left shows the corrected vector gradients in nTop 3.21.](https://files.learn.ntop.com/help-articles/whats-new/4819704181779.png) * We fixed a bug that cause gradient vectors to be flipped in constant-thickness lattices. ![The image on the right shows the bug before nTop 3.21 that was causing incorrect vector gradients to occur on constant-thickness lattices. The image on the left shows the corrected vector gradients in nTop 3.21.](https://files.learn.ntop.com/help-articles/whats-new/4819690270995.png) ## Keywords: *new whats 3.21* # nTopology 3.22 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-22-what-s-new ## Version 3.22 > [!NOTE] > > nTopology 3.22 is here! This release features a new option for four different Cell Map blocks to have either Linear or Curved edges. We deprecated the Closest Point block to upgrade and replace it with the new Closest Point to Body block. Along with these changes, we have addressed several bugs to offer a better experience using nTopology. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Linear or Curved Option released for four Cell Map Blocks](#linear) * ### [Block Updates](#block-updates) * ### [Bug Fixes](#bug-fixes) #### [Linear or Curved Option released for four Cell Map Blocks](#new-features-and-improvements) * You now have the ability to select curved or straight edges on Cell Maps. This option is available for the following Cell Map blocks: * Cylindrical Cell Map (Beta) * Spherical Cell Map (Beta) * Cell Map on CAD Face (Beta) * Cell Map between CAD Faces (Beta) This feature is especially useful when using the blocks **Cell Map on CAD Face** and **Cell Map between CAD Faces** when your CAD Face(s) have a high degree of curvature. Unchecking the Linear option creates a Cell Map with curved edges that will better conform with CAD Face(s). > [!NOTE] > > By default, the Cylindrical and Spherical Maps will output a curved Cell Map: ![A cylindrical cell map block with a cylinder in its volume input. The linear input is not enabled.](https://files.learn.ntop.com/help-articles/whats-new/5160834613907.png) > [!NOTE] > > View of a Cylindrical Cell Map with Linear selected: ![A cylindrical cell map block with a cylinder in its volume input. The linear input is enabled.](https://files.learn.ntop.com/help-articles/whats-new/5160834630547.png) > [!NOTE] > > Lattice results from the **Periodic Lattice Body** block and Simple cubic Unit Cell when Linear is unchecked (left) vs checked (right): ![Lattice results from the Periodic Lattice Body block and Simple cubic Unit Cell when Linear is unchecked (left) vs checked (right):](https://files.learn.ntop.com/help-articles/whats-new/5160834775955.png) > [!NOTE] > > A Lattice generated from using the Cell Map on CAD Face block with Linear unchecked: ![A Lattice generated from using the Cell Map on CAD Face block with Linear unchecked:](https://files.learn.ntop.com/help-articles/whats-new/5160834510739.png) #### [Block Updates](#new-features-and-improvements) * The **Closest Point** block has been depreciated and replaced with a new version, and the block has been renamed to **Closest Point to Body**. The new version has a more robust and performant algorithm, and an overload that utilizes parallel processing to improve the performance when the input is a Point List. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue in the **Cell Map on CAD Face** (Beta) block that was generating an incomplete Cell Map with missing cells. The issue was occurring when a low value was provided for the U and W cell counts. ![An image showing the bug that was occurring with the Cell Map on CAD Face block before nTop 3.22.](https://files.learn.ntop.com/help-articles/whats-new/5160824668819.png) * We fixed an issue with a block rebuilding when it is moved from a Section to a Model Input. * We fixed an issue with being able to import a Custom Block that's missing inputs instead of receiving an import error message. * We fixed an issue where you can't move blocks from the Model Input section to another Section if they contain nested levels of inputs. * We fixed an issue with blocks being run in Manual Run mode having two progress bar icons instead of one. * We fixed an issue where loads applied to hex meshes are not exported properly to an Abaqus(.inp) file. * We fixed an issue where an analysis study with an orthotropic material exported to an Abaqus (.inp) file failed to run in Abaqus. * We updated an error message for **Modal Analysis** to clearly describe Density as a required parameter to run the analysis. * We fixed an issue where using an Orthotropic Material in an analysis yields unexpected results because the Shear modulus and Poisson's ratio input parameters were switched. Please re-run any analysis that uses an Orthotropic Material to confirm correct results. ## Keywords: *release notes 3.22* # nTopology 3.23 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-23-what-s-new ## Version 3.23 > [!NOTE] > > nTopology 3.23 is here! This release features a new behavior for dependent inputs. These inputs now change their name, depending on the input block. These changes are helpful when using the Periodic Lattice Body block with any Unit Cell block. We updated our CAD libraries and now support imported parts from the latest version of CAD programs, such as Catia, Creo, and Autodesk. Continue reading below to see further updates and bug fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Dependent Input Improvements](#dependent-input-improvements) * ### [CAD Interoperability Library Update](#cad-interoperability-library-update) * ### [Block Updates](#block-updates) * ### [Bug Fixes](#bug-fixes) #### [Dependent Input Improvements](#new-features-and-improvements) We released an improvement for blocks with dependent inputs. A dependent input is any input whose value can mean different things based on one of the block's other inputs. For example, the unit cell parameter inputs in the **Periodic Lattice Body** block depend on which Unit Cell you provide for input 1. In 3.23, dependent input names will update dynamically. If you're using the **Periodic Lattice Body** block and pass in a **Graph Unit Cell**, the input label “Unit cell parameter 1” will dynamically change to “Thickness.” Note that you must first select your Unit Cell type from the drop-down menu for the label to change. ![A periodic lattice body block with a Walled TPMS Unit Cell block in the Unit cell input.](https://files.learn.ntop.com/help-articles/whats-new/5532706129171.png) > [!NOTE] > > The **Periodic Lattice Body** block in 3.23. Unit cell parameter 1 has changed to “Approx. thickness” after selecting a Gyroid in the **Walled TPMS Unit Cell** block. #### [CAD Interoperability Library Update](#new-features-and-improvements) We updated our CAD interoperability library to support the native file formats of your latest CAD software, including CATIA V5-6 R2022, Creo 8.0, Autodesk Inventor 2022, Siemens NX 2007, and Solidworks 2022. Our internal testing shows that the new interoperability libraries may lead to subtle differences during import. For example: * The **Import Part** block may result in a different order of Curves for STEP files. * The Heal CAD option on the **Import Part** block can exhibit slightly different behavior, particularly with respect to merging split faces. * Some faces which were previously merged are now split to match the original CAD design for ACIS, Inventor files. We advise you to inspect the output of your **Import Part** block to ensure the results are as you expected. #### [Block Updates](#new-features-and-improvements) * The **Rotational Velocity Load** block has been renamed to **Rotational Force** as it now includes angular acceleration as an input. This update enables adding rotational loads commonly used in rotational machines. Please note that nTopology evaluates acceleration loads on a per-node basis. Other CAE software (i.e., Abaqus) computes acceleration as a body force once per element. Both methods are correct; however, there may be negligible differences between nTopology and other CAE software. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue where you sometimes can't access the “Create” tab of the Ribbon. * We fixed an issue where switching to older, deprecated versions of a block would not display the deprecation warning in the information panel. * We fixed an issue where you cannot click outside the information panel to deselect a block after an overload is changed. * We fixed an issue where selecting multiple blocks can freeze your nTopology session for several seconds. * We fixed an issue that was causing nTopology to unexpectedly exit when using the **Rib Lattice from Beams** block with the rib Height set to 0. The crash only occurred if the output of the block was then used downstream, for example, in the **Thicken Body** block. Now, if you set the rib Height to 0, the block will not show a Lattice and will not cause a crash. * We fixed an issue where variably distributed pressure was not exported correctly to an Abaqus (.inp) file. Please note that nTopology evaluates pressure on a per-node basis. Other CAE software (i.e., Abaqus) evaluates pressure at face centroids. Both methods are correct; however, there may be negligible differences between nTopology and other CAE software. ## Keywords: *release 3.23 dependent* # nTopology 3.24 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-24-what-s-new ## Version 3.24 > [!NOTE] > > nTopology 3.24 is here! This release features our new **Mesh Quality (Beta)** block that gives the metrics for orthogonality, skewness, composite mesh quality and intersecting triangles for an FE mesh. This release has significant usage improvements to usability and performance that solves the errors the users were facing. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Mesh Quality (Beta)](#new-feature-1) * ### [Block Updates](#block-updates) * ### [Usage Improvements](#usage-improvements) * ### [Bug Fixes](#bug-fixes) #### [Mesh Quality (Beta)](#new-features-and-improvements) * A new beta block has been added to compute mesh quality metrics relevant for simulation analysis. * Location: Beta > Simulation * Description: Computes Mesh Quality metrics relevant for simulation. Available metrics include orthogonality, skewness, composite mesh quality, and intersecting triangles. * **Input # 1:** Mesh * **Type:** FE Mesh, Volume Mesh, or Mesh (three available overloads) * **Description:** The Mesh to be analyzed * **Input # 2:** Check intersections * **Type:** Bool * **Description:** Calculate intersecting triangles. Enabling this option will result in the block taking longer to evaluate. * Output: Mesh Quality ![The mesh quality block has 3 overloads. This allows the block to analyze a surface mesh, volume mesh, and FE Mesh.](https://files.learn.ntop.com/help-articles/whats-new/5809943734035.png) ![The left shows a volume mesh of a box with a hole in it. The right image shows the mesh run through the mesh quality block with the orthogonality visualized.](https://files.learn.ntop.com/help-articles/whats-new/5809958689683.png) * This block is useful if the given Volume Mesh or (surface) Mesh will be used to create a downstream FE Mesh. The block has overloads for FE Mesh, (surface) Mesh, or Volume Mesh. ![An example of using the Mesh Quality block on an FE Volume Mesh. The results show the orthogonality of the mesh elements. You can also analyze the elements for skewness, mesh quality, and intersecting elements.](https://files.learn.ntop.com/help-articles/whats-new/5809923933075.png) * Available metrics include orthogonality, skewness, composite mesh quality, and intersecting triangles. The HUD also features a mix and max slider to view elements within the selected range to easily identify specific elements that may cause issues solving the simulation analysis and getting accurate results. ![If the check intersections input is enabled, you will be able to analyze the results for intersecting elements.](https://files.learn.ntop.com/help-articles/whats-new/5809938319379.png) * Please note that the “Check intersections” option needs to be checked in the block to view intersecting elements. This is because the compute time may increase significantly for mesh models with a high number of elements. ![An example of analyzing a gyroid structure mesh using the mesh quality block.](https://files.learn.ntop.com/help-articles/whats-new/6017347897491.png) #### [Block Updates](#new-features-and-improvement) * The **Extract Volume Mesh Boundary** block has been deprecated because you can now retrieve the mesh boundary (i.e. surface mesh) directly from the **Volume Mesh** property panel. #### [Usage Improvements](#new-features-and-improvements) * Users now can specify multiple load cases for topology optimization where the displacement restraints vary across load cases. The displacement restraints had to be identical across all load cases in prior releases. Removing this restriction allows you to analyze a broader set of real life loading conditions on your part. Please note that displacement restraints are still required to be homogeneous (i.e., zero). * We improved the sorting algorithm of **Slice Body** block. We have seen the block running up to 3x faster in our test cases. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue where files containing the deprecated **Sharpen Mesh** (Beta) block would be prevented from opening in version 3.23.3. * We fixed an issue where text list inputs are not displayed in the notebook after the nTopology Command Line saves the file. * We fixed an issue where dragging in an Element Pro Rule file from the Windows File Explorer would cause nTopology to unexpectedly exit. * We fixed a minor issue where selecting the “FE Boundary by Flood Fill” command from right-clicking a face in the viewport would turn off the wireframe display for non-variable FE and regular meshes. * We fixed an issue where the “What's New” button would not redirect to the proper webpage when using a local license. * We fixed an issue with variables containing nested blocks having inconsistent visibility behavior. * We fixed an issue where Beta types were available for selection when the “Show beta blocks” setting was turned off. * We fixed an issue where Beta blocks were available for selection as block overloads when the “Show beta blocks” setting was turned off. * We fixed an issue in the CAD Body from Quad Mesh block that was mistakenly reporting that the input Mesh had disjointed components and not allowing you to run the block. You may have encountered this when trying to create a CAD Body from a complex quad mesh that had issues such as self-intersections and non-manifold vertices. Now the CAD Body from Quad Mesh correctly reports disjointed components. If you encountered this error you can try to re-run the block. The quad mesh you provide must be vertex and edge manifold. Self-intersections are allowed, however the resulting CAD Body might have issues such as self-intersecting or missing faces. * We fixed an issue when pressure is applied to any surface mesh. The Pressure block was not transferring the correct load to the mesh. The block has been corrected and versioned to 1.2.0. Update this block to the latest version to ensure correct pressure field evaluation on shell meshes. ## Keywords: *new release notes whats 3 24 3.24* # nTopology 3.25 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-25-what-s-new ## Version 3.25 > [!NOTE] > > nTopology 3.25 is here! This is a lighter release with some quality of life usage improvements and bug fixes users were running into. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#usage-improvements) * ### [Bug Fixes](#bug-fixes) #### [Usage Improvements](#new-features-and-improvements) * We now support Section Cut for FE Region. An FE Region is commonly used to define Optimization Constraints and Design Responses for topology optimization. * A Wireframe option has been added to the Display tab of the Topology Optimization block. Selecting this option will display the element edges in the 3D scene when visualizing iso-contours or threshold elements. By default, the Wireframe is off. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue in the Trim Cell Map block with the All touching option. In versions older than 3.25, if you selected this option, the Trim Cell Map block only used the corners of the Cell Map's cells to determine if the cell was inside or outside the Body. This meant that if the Implicit Body passed through an edge or face of a cell, but not the corner, that the cell would be removed during trimming unnecessarily. This resulted in the wrong Cell Map output for the All touching Fill type. Now the block correctly evaluates the edges and faces of cells when determining whether to trim or keep cells. * We fixed an issue where nTopology files were not able to run or search for the “Mass Properties from Mesh - version 1.0.0” block in versions 3.23.3 and 3.24.3. * We fixed an issue where nTopology files were not able to run or search for the “ORNL Slicer 2 API Client” Beta block in versions 3.23.3 and 3.24.3. * We fixed an issue where nTopology could not reopen a file if it contained either a Point Variable or a Point List Variable containing a Not A Number (NaN) or Infinity (Inf) value. * We fixed an issue where nTopology would unexpectedly exit when you have an Import Element Pro Rule block that references a file location not available on your computer. * We fixed an issue where the “Number of Colors” setting was not disabled by default in the Heads-Up Display (HUD). * We fixed an issue that causes CAD Face and CAD Body variables indefinitely needing to be rebuilt when Autorun is toggled off. * We fixed an issue with nonlinear thermal analysis with quadratic pyramids, wedges, and hexahedral elements that resulted in nTopology unexpectedly exiting. * We fixed an issue when computing iso-contours following the Topology Optimization block. In prior releases, the outward normals were reversed in unique cases where the entire surface of the part was subjected to either a load or passive region constraint. When visualizing the topology optimization results, this defect would result in the external surface of the iso-contour to render in black instead of gray. Moreover, if the topology optimization results were used with the Implicit Body from Topology Optimization block, the resulting Implicit Body would not reflect the design produced by the Topology Optimization output. If your model includes boundary conditions similar to those stated above, you should re-evaluate the Implicit Body from Topology Optimization block. * We fixed an issue in the CAD Body from Quad Mesh block that was causing nTopology to unexpectedly exit when every face of the input Mesh had a self-intersection. ## Keywords: *new whats 3.25* # nTopology 3.26 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-26-what-s-new ## Version 3.26 > [!NOTE] > > nTopology 3.26 is here! This release features four new features. The first is the new lattice technology coming out of beta with three new blocks. Searching is now easier than ever with the search in place feature. The go-to functionality now supports chip instances of a variable, variable property, and non-variable property. The fourth feature is the new lighting enhancements with ambient occlusion improving the visualization of complex geometry. All this, along with bug fixes and usage improvements, makes life a lot easier. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to access helpful tutorials and support articles. Table of Contents * [New Volume Latticing Blocks](#new-feature-1) * [Search in Place](#new-feature-2) * [Improved Go To Functionality](#new-feature-3) * [Lighting Enhancements](#new-feature-4) * [View Control Improvements - CAD Tools Key Mapping](#new-feature-5) * [Usage Improvements](#usage-improvements) * [Block Updates](#block-updates) * [Bug Fixes](#bug-fixes) #### [New Volume Latticing Blocks](#new-features-and-improvements) * As part of our [new latticing technology](https://support.ntopology.com/hc/en-us/articles/5657655826579), we released three new and easy-to-use volume latticing blocks: **Rectangular Volume Lattice**, **Cylindrical Volume Lattice**, and **Spherical Volume Lattice**. ![A rectangular volume lattice on the left, a cylindrical volume lattice in the middle, and a spherical volume lattice on the right.](https://files.learn.ntop.com/help-articles/whats-new/6499683901459.png) * Block Name: Rectangular Volume Lattice * Location: Lattices > Lattice * Default Overload: * Description: Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along rectangular coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 0 or 2 Parameter Unit Cells. By default, the Lattice is then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the rectangular coordinates. * Input 1: Volume - Implicit Body in which the Lattice will be generated. * Input 2: Unit cell - Two-parameter Unit Cell to tessellate within the Volume input. * Input 3: Unit cell size - Size of the Unit Cells in the Frame's X, Y, and Z directions. * Input 4: Frame - Optional Frame that defines the rectangular coordinates used to generate the Lattice. By default, the Frame's origin is the "min point" property of the Volume input's bounding box, and the Frame's X and Y are the "axis 1" and "axis 2" properties of the Volume input's bounding box. * Input 5: Trim - Option to trim the Lattice at the Volume input's surface. * Input 6: Unit cell parameter 1 - Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation. * Notes: * All Unit Cell types are accepted as the 2nd input. * This block internally uses the \*\*Periodic Lattice\*\*, \*\*Rectangular Cell Map\*\*, and either \*\*Trim Cell Map\*\* or \*\*Trim Lattice\*\* depending on what trimming selection you make. * You can use this block as a replacement for the following deprecated latticing blocks: * **Volume Lattice** (deprecated) * **TPMS** (deprecated) * **Walled TPMS** (deprecated) * Block Name: Cylindrical Volume Lattice * Location: Lattices > Lattice * Default Overload: * Description: Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along cylindrical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 0 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the cylindrical coordinates. * Input 1: Volume - Implicit Body in which the Lattice will be generated. * Input 2: Unit cell - One-parameter Unit Cell to tessellate within the Volume input. * Input 3: Cell radius - Unit Cell length in the Frame's radial direction. * Input 4: Cell height - Unit Cell length in the Frame's height direction. * Input 5: Arc count - Number of Unit Cells in the Frame's circumferential direction. * Input 6: Frame - Optional Frame that defines the cylindrical coordinates used to generate the Lattice. By default, the Frame is derived from the Volume's principal axes about its center of mass. * Input 7: Trim - Option to trim the Lattice at the Volume input's surface. * Input 8: Unit cell parameter 1 - Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation. * Notes: * All Unit Cell types are accepted as the 2nd input. * This block internally uses the **Periodic Lattice**, **Cylindrical Cell Map**, and either **Trim Cell Map** or **Trim Lattice** depending on what trimming selection you make. * You can use this block as a replacement for the following deprecated latticing blocks: * **TPMS Cylindrical** (deprecated) * **Walled TPMS Cylindrical** (deprecated) * Block Name: Spherical Volume Lattice * Location: Lattices > Lattice * Default Overload: Description: Generates a Lattice that completely fills a Volume by tessellating a Unit Cell along spherical coordinates. This block accepts a 1 Parameter Unit Cell, with additional overloads for 0 or 2 Parameter Unit Cells. By default, the Lattice's beams are then trimmed to the surface of the Volume input. Provide an optional Frame input to customize the origin and orientation of the spherical coordinates. * Input 1: Volume - Implicit Body in which the Lattice will be generated. * Input 2: Unit cell - One-parameter Unit Cell to tessellate within the Volume input. * Input 3: Cell radius - Unit Cell length in the Frame's radial direction. * Input 4: Latitude count - Number of Unit Cells in the Frame's latitudinal direction. * Input 5: Longitude count - Number of Unit Cells in the Frame's longitudinal direction. * Input 6: Frame - Optional frame that defines the spherical coordinates used to generate the Lattice. By default, the Frame's origin is the centroid of the volume input's bounding box. * Input 7: Trim - Option to trim the Lattice at the Volume input's surface. * Input 8: Unit cell parameter 1 - Value of the Unit Cell's first parameter. The input name will update based on the selected Unit Cell. Each Unit Cell's parameters can be found in the Unit Cell's documentation. * Notes: * All Unit Cell types are accepted as the 2nd input. * This block internally uses the **Periodic Lattice**, **Spherical Cell Map**, and either **Trim Cell Map** or **Trim Lattice** depending on what trimming selection you make. * You can use this block as a replacement for the following deprecated latticing blocks: * **TPMS Spherical** (deprecated) * **Walled TPMS Spherical** (deprecated) #### [Search in Place](#new-features-and-improvements) We made enhancements to our search capabilities to make them more user-friendly. This new feature is called Search in Place: ![A gif demonstration of the Search in Place feature of nTop. Right clicking in the notebook allows you to add a block from the search bar.](https://files.learn.ntop.com/help-articles/whats-new/6499712890771.png) * **What it does:** * Currently, when you are focused on a part of the notebook and want to add a block, you have to add a block from the top search bar. We've been told by our users that this is distracting and causes a loss of focus. We've improved this experience by enabling you to search for and add blocks, comments, and sections at your current location in the notebook. * **Common uses:** * Search in Place is activated by right-clicking the dividing line under a block, under a blank section, or between blocks. * Once Search in Place is activated via right-clicking, a context menu will give you the option to: * Add Block - When selected, will open up the search dialog to the right of the notebook at the line. * Add Section - When selected, will add a section below the line * Add Comment - When selected, will activate the comment for that block when a block already exists below the line. If a comment already exists, it will activate the existing comment and allow you to edit it. * Paste and Paste with References, as they exist today. * **Tips** * Double-clicking the dividing line will skip the initial Search in Place context menu and brings you directly to the Add Block search dialog. * We updated Context Search's icon to match Search in Place's “+” icon. When you select the “+” icon on a block, it will search for and add blocks that are compatible as outer nested blocks with your current selection. When you add a block via Search in Place, you can search for and add any block below the dividing line. * Clicking on the dividing line and selecting the “S” key on your keyboard (the same keyboard shortcut as Context Search) will skip the initial Search in Place context menu and bring you directly to the Add Block search dialog. #### [Improved Go To Functionality](#new-features-and-improvements) We made enhancements to our “Go To” Functionality allowing you to be able to more easily trace chip instances in your notebook. ![Right clicking on a block variable has the option to "Go to block". Clicking this will bring you to original block variable in the notebook. ](https://files.learn.ntop.com/help-articles/whats-new/6499683994643.png) * **What it does:** * Allows you to go to the source location of its instanced chip in the notebook by right-clicking directly on the chip and selecting “Go To Block”. * **Common uses:** * Can be activated from a chip instance of a variable, variable property, and non-variable property. * **Tips:** * If the source reference is within a collapsed section, it will uncollapse the section. Can be activated either on the chip, the input panel, or the input section of the block that contains the chip. #### [Lighting Enhancements](#new-features-and-improvements) * **What has changed:** * The visualization experience in nTopology has now been significantly improved to help get a better understanding of complex geometry. This has been achieved through changing the lighting which helps in geometry discernibility, and by introducing Ambient Occlusion (which is set to ON by default) to help visualize depth in porous objects and lattices easily. * **Sample before and after images:** >
    Before With New Lighting and AO
    ![Before nTop 3.26, a gyroid example. The lighting is poor.](https://files.learn.ntop.com/help-articles/whats-new/6499683952403.png) ![In nTop 3.26, the gyroid structure appears much cleaner with the new lighting and Ambient Occlusion visualization.](https://files.learn.ntop.com/help-articles/whats-new/6499712958483.png)
    ![Before nTop 3.26, a voronoi lattice example.](https://files.learn.ntop.com/help-articles/whats-new/6499684074131.png) ![In nTop 3.26, the voronoi structure appears much cleaner with the new lighting and Ambient Occlusion visualization.](https://files.learn.ntop.com/help-articles/whats-new/6499684078227.png)
    ![Before nTop 3.26, a latticed bracket. The lighting is poor.](https://files.learn.ntop.com/help-articles/whats-new/6499713096339.png) ![In nTop 3.26, the latticed bracket appears much cleaner with the new lighting and Ambient Occlusion visualization.](https://files.learn.ntop.com/help-articles/whats-new/6499713154451.png)
    * **Ambient Occlusion Settings** * A new checkbox has been added in Settings that allows toggling of the new Ambient Occlusion. By default, this is set to ON. ![In nTop 3.26, the image shows the nTop settings menu open to the display tab. There is an option to enable ambient occlusion.](https://files.learn.ntop.com/help-articles/whats-new/6499713159955.png) #### [View Control Improvements - CAD Tools Key Mapping](#new-features-and-improvements) * **What has changed:** * nTopology now allows the selection of different model navigation options (zoom, pan, rotate controls) from a dropdown menu in Settings. The options provided for different CAD environments map the basic zoom, pan, and rotate functionalities to corresponding keys on the selected CAD tool, which makes it more intuitive to use nTopology as you transition between your CAD platform of choice and nTopology as a part of your everyday work. * The CAD platforms currently supported are: * Solidworks NX * CATIA * Creo * nTopology (default) * Core navigation behavior across all key mapping options has also been updated. * Mouse scroll now allows zooming towards the mouse location. * Rotation (orbit) behavior has been updated to be more intuitive, allowing easier navigation around the model using a dynamic rotation point which is set when initiating an orbit operation with the mouse over the object. * The rotation point can now be seen on the model and provides an easy visual reference when the point is dynamically updated during routine model navigation. * **Implementation Details:** * The orbit operation now provides a visual indication of the rotation point to support dynamic rotation point adjustment. * If the user initiates an orbit with the mouse above any part of an object, the point on the object under the mouse will be locked as the rotation point. * If the user initiates an orbit with the mouse away from an object (in space), then the last used rotation point would be used. ![A gif showing how If the user initiates an orbit with the mouse away from an object (in space), then the last used rotation point would be used.](https://files.learn.ntop.com/help-articles/whats-new/6625734208147.png) Also, the zoom via scroll now zooms towards the mouse location. ![A gif showing how zoom scrolling moves towards the mouse location.](https://files.learn.ntop.com/help-articles/whats-new/6499713341715.png) **Accessing Settings for Key Maps:** **![The nTop settings menu open to the General tab. The gif shows the different options of the drop down menu for the Camera control mapping setting.](https://files.learn.ntop.com/help-articles/whats-new/6499684215699.png)** #### [Usage Improvements](#new-features-and-improvements) * We updated the error messages of list blocks to specify which list index (starting at 0) is causing the error. When multiple indices are causing errors, the error message will specify the lowest list index until all errors are fixed. * Right-clicking on a variable and selecting “Make Model Input” will insert the variable at the bottom of the Inputs list instead of at the top of the Inputs list. * We updated the behavior of CAD translation blocks such as **Rotate Object, Translate Object**, and **Scale Object** blocks to generate the output even if the input CAD geometry contains some faults. #### [Block Updates](#new-features-and-improvements) * Our [3rd generation latticing technology](https://support.ntopology.com/hc/en-us/articles/5657655826579) is now out of beta. The following blocks are renamed and moved from Beta > Lattices to the main Lattices ribbon tab: | **Block name before 3.26** | **Block name in 3.26** | | - | - | | Branched Lattice Body | Branched Lattice | | Cell Map on CAD Face | Cell Map from CAD Face | | Cell Map on Quad Mesh | Cell Map from Quad Mesh | | Collapse Lattice Body Vertices | Collapse Lattice Vertices | | Delaunay Lattice Body | Delaunay Lattice | | Extend Open Lattice Body Beams | Extend Open Beams | | Rib Lattice Body from Beams | Extrude Lattice | | Import Element Pro Rule | Import Unit Cell Rule | | Lattice Body from Beams | Lattice from Beams | | Lattice Body from Lattice | Lattice from Graph | | Lattice Body from Surface Mesh | Lattice from Surface Mesh | | Lattice Body from Volume Mesh | Lattice from Volume Mesh | | Merge Lattice Bodies | Merge Lattices | | Modify Lattice Body Thickness | Modify Lattice Thickness | | Orthofoam Lattice Body | Orthofoam Lattice | | Periodic Lattice Body | Periodic Lattice | | Trim Lattice Body | Trim Lattice | | Lattice Body from Surface Voronoi | Voronoi Surface Lattice | | Lattice Body from Volume Voronoi | Voronoi Volume Lattice | * The following blocks are moved from *Beta > Lattices* to the main *Lattices* ribbon tab, with no rename: * Cell Map between CAD Faces * Custom Implicit Unit Cell * Cylindrical Cell Map * FE Lattice Component * FE Lattice Mesh * Filter Beams * Filter Beams by Angle * Filter Beams by Connectivity * Filter Beams by Containment * Filter Beams by Length * Filter Beams by Thickness * Graph Unit Cell * Orient Unit Cell * Rectangular Cell Map * Spherical Cell Map * TPMS Unit Cell with Offset * Trim Cell Map * Walled TPMS Unit Cell * Walled TPMS Unit Cell with Offset * The following block is re-named, but is staying in beta: | **Block name before 3.26** | **Block name in 3.26** | | - | - | | Pore Diameters from Lattice Body | Lattice Pore Size | * The following blocks are deprecated. Visit the [Latticing Technology Transition Guide](https://support.ntopology.com/hc/en-us/articles/5688021920019) to learn how to transition your notebook from the old to new latticing technology. * Branched Lattice (deprecated) * Collapse Lattice Vertices (deprecated) * Conformal Lattice between CAD Faces (deprecated) * Conformal Lattice from CAD Face (deprecated) * Delaunay Lattice (deprecated) * Extend Open Beams (deprecated) * FE Lattice Component (deprecated) * FE Lattice Mesh (deprecated) * Lattice from Volume Mesh (deprecated) * Merge Lattices (deprecated) * Orthofoam Lattice (deprecated) * Remove Beams (deprecated) * Rib Lattice from Beams (deprecated) * Surface Lattice (deprecated) * Thicken Lattice (deprecated) * TPMS (deprecated) * TPMS Cylindrical (deprecated) * TPMS Spherical (deprecated) * Trim Lattice (deprecated) * Volume Lattice (deprecated) * Voronoi Boundary Lattice (deprecated) * Voronoi Volume Lattice (deprecated) * Walled TPMS (deprecated) * Walled TPMS Cylindrical (deprecated) * Walled TPMS Spherical (deprecated) * The lattice data type names are changed. Read [understanding the lattice data types](https://support.ntopology.com/hc/en-us/articles/6136373547411) for more information. | **Type name before 3.26** | **Type name in 3.26** | | - | - | | Voronoi Volume Lattice Body | Voronoi Volume Lattice | | Voronoi Surface Lattice Body | Voronoi Surface Lattice | | Lattice Body | Lattice | | Thick Lattice | Thick Graph | | Lattice | Graph | #### #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue causing the ribbon to be hidden the first time you opened nTopology. * We fixed an issue when the “Show Beta blocks” setting was turned off causing Context Search to not return results on a Beta block. * We fixed a memory access error in the Topology Optimization block which could lead to the block failing to assemble the solution matrices and thus producing an error. * We've resolved an issue with exporting multi-component models to Abaqus where the model contains both FE Volume and FE Surface meshes. Prior to release 3.26, the shell and solid sections were not exported properly. * We changed how stress, strain, and heat flux are computed at mid-side nodes in Point Maps. Prior to release 3.26, these mid-side values were averaged from the adjacent element values. To be consistent with other finite element software, they are now averaged from the corner nodes. This is also consistent with how the corresponding fields are computed in the analysis blocks. Moreover, when generating displacement, temperature, and reaction force fields, the solved value at the mid-side nodes is used instead of averaging the results at the element corners. * We fixed an issue exporting Ansys \*.cdb files containing beams with variable cross sections. Prior to release 3.26, the SECDATA command was missing cross section variables. In addition, we changed the SECTYPE from arbitrary (ASEC) to solid circular (CSOLID) to be consistent with the lattice graph cross section in nTop. * We fixed an issue when selecting nodes using the FE Boundary by Flood Fill block with meshes containing triangular and quad faces. If the Entity input was set to Nodes, a node that was shared between a quad and triangle face would not be included in the FE Boundary output unless the selected region had both elements. For existing models with Boundary Conditions applied to nodes on meshes containing mixed triangular and quad faces, we recommend rerunning the FE Boundary by Flood Fill block and validating the output. * We fixed an issue with the Heads Up Display where the minimum and maximum values in the color wheel did not match the minimum and maximum values in the slider. * We fixed an issue where the Add block returned an incorrect error when it attempted to add vector fields with mismatched units. * We fixed an issue causing the type icon for Mesh List Variable to have graphical inconsistencies when Light Mode was enabled. * We fixed an issue with nonlinear thermal analysis that produced a temperature field from the 3.25 release that exceeded the defined temperature range of the material properties. The material properties are clamped at the corresponding extreme values, and correct results are computed. ## Keywords: *release notes whats new 3 26* # nTopology 3.27 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-27-what-s-new ## Version 3.27 > [!NOTE] > > nTopology 3.27 is here! This release features some minor block updates, significant bug fixes, and an impactful upgrade to simulation analysis. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Moment of inertia matching in Simplified Body Representation (Beta)](#moi) * ### [Block Updates](#block-updates) * ### [Bug Fixes](#bug-fixes) #### [Moment of inertia matching in Simplified Body Representation (Beta)](#new-features-and-improvements) ![Using Mass Properties from Body on a latticed bracket. The properties panel of this block displays the center of gravity, mass, and principal moments of the bracket. The bracket is then converted to a Simplified Body using the Simplified Body Representation block.](https://files.learn.ntop.com/help-articles/whats-new/6948973396499.png) ![Importing the Simplified Body Representation into NX. The bracket visually doesn't show the lattice, but the bracket mass properties are equal to the latticed bracket in nTop.](https://files.learn.ntop.com/help-articles/whats-new/6949006049811.png) * Simplified Body Representation (Beta) can now match the principal moment of inertia in addition to matching the mass and center of mass when you check the “Match Inertia” block input. * The CAD envelope will be converted to surface bodies when you check the option. Multiple solid spheres are generated with calculated density values to mimic the final mass properties of the nTopology design. * The output of the Simplified Body Representation (Beta) block exports as a Parasolid file (\*.x\_t) through the Export Part block, and the Parasolid output is compatible with NX and Solidworks. #### [Block Updates](#new-features-and-improvements) * We released version 1.1.0 of the following Cell Map blocks and deprecated version 1.0.0 for a bug fix. If you checked the Linear Cell Map option, the bug created duplicate Lattice beams at the periodic domain boundary. * Cylindrical Cell Map * Spherical Cell Map * Cell Map from CAD Face * Cell Map between CAD Faces * Cylindrical Volume Lattice * Spherical Volume Lattice * We released version 1.1.0 of the Section Body block and deprecated version 1.0.0 due to a bug. The bug incorrectly returned an empty profile when using the block to section one or more Cylinders. * The post-processing phase for all simulation analysis blocks has been parallelized, resulting in significant performance improvements. The post-processing phase is when all the result fields (e.g., stress, strain, and heat flux) are automatically computed from the state vector. This part of the solution is approximately 80% faster, while the overall block run times have decreased by 40%. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue causing nTopology to exit when opening a file while the cursor was placed in a block input. * We fixed an issue causing nTopology to exit when trying to open a file by providing a path to a non-existent file. * An issue was resolved when non-zero rotations or displacements were specified in the Point Restraint block. In previous versions, these restraints were incorrectly enforced. If your notebook contains a Point Restraint block with non-zero values, the block will automatically rebuild. * We fixed an issue causing nTopology to exit when running the Simplify Slice Stack block if one or more of the polylines in the input Slice Stack had a missing vertex. * We fixed an issue with the Orient Object, Transform Object, and Translate Object blocks that were causing them to return the wrong data type. When a user inputs a Lattice into one of these transform blocks, the return was an Implicit Body type rather than the Lattice type. This caused issues downstream, such as preventing .3mf file exports of the Lattice. Now the correct type is returned. * We fixed an issue with the Lattice from Graph block that applied the wrong thickness value to the Lattice if the Graph input was imported as an .ltcx file with existing thickness data. This is important for a workflow where you're importing an .ltcx file generated by another tool or process and then using nTopology to use Field-Driven design to achieve your desired Lattice thickness. Existing thickness data automatically overrides now so that you can correctly set your own. If you need to preserve existing thickness information, use the Import Thick Lattice Graph block. * We fixed the following issues in the Warp Cell Map (Beta) block. The version of the block is not incremented as Beta blocks are not versioned. * Users were previously unable to use the Diamond or Fluorite Unit Cells in conjunction with the Warp Cell Map block when constructing a lattice. * Prior to 3.27, users warping a Cylindrical Cell Map in the radial direction from the center axis experienced incorrect ramping. Now the warping is correct with uniform displacement along the radial direction. Before 3.27 ![Incorrect ramping of a cylindrical cell map lattice before nTop 3.27.](https://files.learn.ntop.com/help-articles/whats-new/6948975831827.png) In 3.27 ![The ramp now correctly applies to a cylindrical cell map lattice in nTop 3.27.](https://files.learn.ntop.com/help-articles/whats-new/6949008570643.png) * We fixed an issue that when you selected the Centroid Inside trimming option, it produced an incorrect asymmetric Cell Map if the output from the Warp Cell Map block was used as input to the Trim Cell Map block. In 3.27, the Cell Map is correct and symmetric if the input Body or CAD Face that generated the Cell Map is symmetric. * We fixed an issue that was causing nTop notebooks using the Warp Cell Map block to have extremely long load times when attempting to open the file. * We fixed an issue that resulted in a Lattice with missing pieces when the value provided for the Discretization Vector input was lower than the Cell Map's cell size. Now the Discretization input is removed altogether, and users no longer need to provide this input. Before 3.27: ![Before nTop 3.27, there was an issue that resulted in a Periodic Lattice with missing pieces when the value provided for the Discretization Vector input of the Warp Cell Map block was lower than the Cell Map's cell size.](https://files.learn.ntop.com/help-articles/whats-new/6949009442451.png) In 3.27: ![In nTop 3.27, the Periodic Lattice no longer has disjointed pieces. The issue with the Warp Cell Map block was resolved.](https://files.learn.ntop.com/help-articles/whats-new/6949010373907.png) # nTopology 3.28 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-28-what-s-new > [!NOTE] > > nTopology 3.28 is here! This release features our brand new solution to exporting latticing structures to CAD! The long awaited *CAD Body from Implicit Body* block is finally here! This release also contains updates to our toolkit blocks and some standard bug fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [CAD Body from Implicit Body (Beta)](#h-01g6kd2t9ybcjdtxyr3fjqhfvy) * ### [Usage Improvements](#h-01g6kd33h7a004dr8gkcnjq3a4) * ### [Block Updates](#h-01g6kd3ew3kkscbpdrtn814dvx) * ### [Bug Fixes](#h-01g6kd3nmy36zfwj8qyq0rmsqg) #### [CAD Body from Implicit Body (Beta)](https://app.ntopology.com/release-notes#new-features-and-improvements) * We released a new block for generating a CAD Body from an Implicit Body. The *CAD Body from Implicit Body (Beta)* block is specifically designed for small to medium-complexity lattices. There are no hard limits, but the block is designed to handle: * Graph (beam or face-based): up to around 10,000 beams or faces * TPMS: up to around 1,000 unit cells * Prior to 3.28, you were limited to mesh formats when exporting complex models such as lattices or textured parts. The *CAD Body from Implicit Body (Beta)* block unlocks the following use cases: * Generate a smooth (G1-continuous) solid part directly from an Implicit Body, avoiding the *Mesh from Implicit Body* and *Quadrangulate Mesh* blocks. * Export your lattice as a .step or Parasolid file and import it into your CAD system to modify for manufacturing, create drawings and assemblies, or perform other operations. * Store a .step or Parasolid file in your PLM system. * Deliver a .step or Parasolid file to your customers. * If your model isn't a lattice and you have a lower-complexity model such as the results of a topology optimization, we recommend that you continue to use the [*Quadrangulate Mesh*](https://support.ntopology.com/hc/articles/360048784874) block workflow for exporting. * If you have a high-complexity model, we recommend using the [*Simplified Body Representation*](https://support.ntopology.com/hc/articles/7170769142291/) block Example: An isogrid lattice of 896 faces converted to a CAD Body. You can export the part and import it into your CAD software for additional modeling. ![An isogrid lattice of 896 faces converted to a CAD Body using the CAD Body from Implicit Body block. You can export the part and import it into your CAD software for additional modeling.](https://files.learn.ntop.com/help-articles/whats-new/Isogrid_lattice.png) Example: A gyroid implicit lattice with 288 unit cells converted to a CAD Body. ![A gyroid implicit lattice with 288 unit cells converted to a CAD Body using the CAD Body from Implicit Body block.](https://files.learn.ntop.com/help-articles/whats-new/gyroid_lattice.png) Example: A graph lattice with 1000 beams converted to a CAD Body ![A graph lattice with 1000 beams converted to a CAD Body using the CAD Body from Implicit Body block.](https://files.learn.ntop.com/help-articles/whats-new/graph_lattice.png) * Block Name: *CAD Body from Implicit Body* * Location: Beta > Utilities > Conversion * Description: Converts an Implicit Body to a CAD Body within a specified Tolerance. As the Tolerance increases, the CAD Body may contain fewer faces and generates faster. Works best for medium complexity Lattices and Implicit Bodies. For lower complexities, use *Mesh from Implicit Body*, *Quadrangulate Mesh*, then *CAD Body from Quad Mesh*. For higher complexities, use the *Simplified Body Representation* block. * Input 1: Body - Implicit Body to convert to a CAD Body. * Input 2: Tolerance - The maximum allowable distance deviation of the CAD Body from the Implicit Body. As this value increases, the CAD Body will have fewer faces and generate faster but deviate further from the lattice. We recommend starting with a value of approximately 1/2 of the body's thinnest feature. #### [Usage Improvements](https://app.ntopology.com/release-notes#new-features-and-improvements) * We added “Learn More” documentation links to list errors to better help you troubleshoot. #### [Block Updates](https://app.ntopology.com/release-notes#new-features-and-improvements) * All toolkit blocks are now updated to use the new latticing blocks from the release in 3.26. Toolkit blocks that contained one or more of the old latticing blocks are now deprecated, and a new version is now released. For detailed information on each block, visit the [Latticing Technology Transition Guide](https://support.ntopology.com/hc/en-us/articles/5688021920019), and for an overview of the new latticing technology, visit [Understanding our new latticing technology](https://support.ntopology.com/hc/articles/5657655826579) | **Toolkit Block Name and Version Prior to 3.28** | **Tooklit Block Name and Version in 3.28** | | - | - | | Conformal Branching Lattice 1.0.0 | Conformal Branching Lattice 2.0.0 | | Conformal Foam 1.0.0 | Conformal Foam Lattice 2.0.0 | | Honeycomb Ribbing 1.0.0 | Honeycomb Ribbing 2.0.0 | | Infill Delaunay Lattice 1.0.1 | Infill Delaunay Lattice 2.0.0 | | Infill Lattice between Faces 1.0.1 | Infill Lattice between Faces 2.0.0 | | Infill Orthofoam Lattice 2.0.0 | Infill Orthofoam Lattice 3.0.0 | | Infill Tet Lattice 1.0.1 | Infill Tet Lattice 2.0.0 | | Infill Volume Lattice 1.0.1 | Infill Volume Lattice 2.0.0 | | Infill Voronoi Lattice 1.0.1 | Infill Voronoi Lattice 2.0.0 | | Merge Shell and Infill 1.0.1 | Merge Shell and Infill 2.0.0 | | Perforate Body 1.0.1 | Perforate Body 2.0.0 | | Perforate from CAD Face 1.0.0 | Perforate from CAD Face 2.0.0 | | Remove Any Beams 1.0.1 | Remove Any Beams 2.0.0 | | Remove Floating Beams 1.0.1 | Remove Floating Beams 2.0.0 | | Remove Open Beams 1.0.1 | Remove Open Beams 2.0.0 | | Shell and Volume Lattice 1.0.0 | Shell and Volume Lattice 2.0.0 | | Shell and Voronoi Lattice 1.1.0 | Shell and Voronoi Lattice 2.0.0 | | Simple Conformal Lattice between Faces 1.0.0 | Simple Conformal Lattice between Faces 2.0.0 | | Simple Conformal Lattice from Face 1.0.0 | Simple Conformal Lattice from Face 2.0.0 | | Structural Ribbing 1.0.0 | Structural Ribbing 2.0.0 | | Subtractive Lattice Texture Blended 1.0.0 | Subtractive Lattice Texture Blended 2.0.0 | | Subtractive Lattice Texture 1.0.0 | Subtractive Lattice Texture 2.0.0 | | Surface Lattice from CAD Face 1.0.0 | Surface Lattice from CAD Face 2.0.0 | | Tet Lattice from CAD Body 1.0.0 | Tet Lattice from CAD Body 2.0.0 | * The following toolkit blocks are deprecated due to redundancy. | Clean Lattice 1.0.1 | Use the newer Filter Beams by Connectivity block with "Closed" selected | | - | - | | Trimmed Delaunay Lattice Graph 1.0.0 | Use the Infill Delaunay Lattice 2.0.0 block with the Rounded edges input unchecked | | Trimmed Voronoi Lattice Graph 1.0.0 | Use the Infill Voronoi Lattice 2.0.0 block with Rounded edges input unchecked. | * We deprecated version 1.0.0 of the *Implicit Body from CAD Body* block due to a bug that produced incorrect gradients for the Implicit Body when the CAD Body input had curvature. This bug was especially noticeable when modeling Voronoi rib lattices: To generate these ribs, you can create a *Voronoi Surface Lattice* on a CAD face and then extrude ribs using the *Extrude Lattice* block. For the Direction input, you can use *Implicit Body from CAD Body* to create a Scalar Field that will extrude the ribs normal to the CAD face. However, the gradient bug in version 1.0.0 produced a poor quality lattice with jagged surfaces: ![Using Version 1.0.0 of the Implicit Body from CAD Body block that creates incorrect gradients on the lattice surface.](https://files.learn.ntop.com/help-articles/whats-new/direction_input_2.png) In 3.28 using version 1.1.0 of the *Implicit Body from CAD Body* block as the Direction input to the *Extrude Lattice* block:![Using Version 1.1.0 of the Implicit Body from CAD Body block creates a much smoother lattice result.](https://files.learn.ntop.com/help-articles/whats-new/direction_input_1.png) #### [Bug Fixes](https://app.ntopology.com/release-notes#new-features-and-improvements) * We fixed an issue causing nTopology to unexpectedly exit when using the *Curve through Points* block as the Curve input to the *Sweep Profile* block. * We fixed an issue causing nTopology to unexpectedly exit when using an imported curve as the Curve input to the *Sweep Profile* block. * We fixed an issue causing the version dropdown to be hidden from all blocks when a block was embedded. * We fixed an issue that caused a variable created from the “Thickness” input of the *Periodic Lattice* block to be named “Unit cell parameter 1”. * We fixed an issue exporting an FE Model with beam elements to Ansys. Prior to this release, the element blocks referenced an undefined coordinate system. * We fixed an issue when exporting an FE Model containing Displacement Restraints or Point Restraints when a Frame input is provided. Prior to this release, the Frame was ignored. * We fixed an issue with the displacement results in *Homogenize Unit Cell* block when the unit cell is not centered at the global origin. * We fixed an issue accessing Field properties in the *Import CFD Analysis Result* block that may cause the software to unexpectedly exit. ## Keywords: *new release notes whats 3 28* # nTopology 3.29 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-29-what-s-new > [!NOTE] > > nTopology 3.29 is here! This release features an impressive performance improvement to the Mesh from Implicit Body block, along with some usability improvements and bug fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01g7qqssdamhs5wszf82838rcw) * ### [Block Updates](#h-01g7qqsxcb6kkbw2wv4qp3wnyb) * ### [Bug Fixes](#h-01g7qqt16xw08xazv01xnzje6g) #### [Usage Improvements](https://app.ntopology.com/release-notes#new-features-and-improvements) * After creating a new file, when you import a part using File->Import, the part will automatically show in the viewport. * The Display tab for the **Topology Optimization** block has been improved to better monitor convergence behavior. Select the objective function or constraint of interest from the drop-down menu. Units for each curve are in brackets and the type of response. The target value has a green dashed line for constraints. Convergence plots are available for the following responses: **Structural Compliance**, **Volume Fraction**, **Displacement**, and **Stress**. If the block has not been promoted to a variable, the plot will update in real-time; otherwise, the plot will be presented after the block completes. Convergence plot for a minimum compliance objective function ![In nTop 3.29, the display tab for Topology Optimization can be used to view plot data for optimization objectives.](https://files.learn.ntop.com/help-articles/whats-new/ConvergencePlot1.png) Convergence plot for a volume fraction constraint. Note the target volume fraction is illustrated by the green dashed line. ![Convergence plot for a volume fraction constraint. Note the target volume fraction is illustrated by the green dashed line.](https://files.learn.ntop.com/help-articles/whats-new/ConvergencePlot2.png) #### [Block Updates](https://app.ntopology.com/release-notes#new-features-and-improvements) * The **Mesh from Implicit Body** block is improved to run faster and consume less memory when the Sharpen option is unchecked. The block now consumes approximately 30% less memory. The run-time improvement depends on the implicit model that you're meshing. Our tests show a 12% speed-up for medium-complexity models, such as the Field Driven Lattice example file on the Home page. If your model is more complex, you may see a higher percentage increase when using 3.29. * Version 1.0.0 of the **Merge Lattices** block is deprecated due to a change in block behavior. In version 1.1.0, the block no longer collapses lattice nodes, and the Distance threshold input has been removed. The duplicates are removed in the final result of any duplicate vertices, beams, or faces. If your workflow relies on collapsing nodes within a threshold, you can use the **Collapse Lattice Vertices** block, or continue to use version 1.0.0. Two Lattices merged together in 3.29. You can make additional modifications if needed using utility blocks for filtering, collapsing, and more. ![Two Lattices merged together in 3.29 using Merge Lattices version 1.1.0.](https://files.learn.ntop.com/help-articles/whats-new/LatticeMerge1.png) The same Lattices in the image above merged using deprecated version 1.0.0 of **Merge Lattices**. To avoid this undesired result, users had to experiment with the threshold value, providing a smaller and smaller value to avoid collapsing nodes. ![Two Lattices merged together before nTop 3.29 using Merge Lattices version 1.0.0. The lattice has sever defects.](https://files.learn.ntop.com/help-articles/whats-new/LatticeMerge2.png) * Version 1.0.0 of the **Loft between Profiles** block is deprecated due to a bug fix that produced an incorrect result in cases where one or both of the input Profile(s)' internal frame wasn't positioned correctly at the center of the Profile. Version 1.1.0 is more robust and produces the correct loft regardless of a misplaced Profile frame. * File sizes for Notebooks containing built Topology Optimization blocks have been significantly reduced. In previous versions of the software, an extra copy of the mesh was being stored in the \*.ntop file. The time for opening files with Topology Optimization blocks has also been reduced. These benefits will be reduced with increasing iterations in your topology optimization analysis. * The speed of evaluating fields from simulation results has been improved with this version of the software by bypassing a number of extraneous calculations. #### [Bug Fixes](https://app.ntopology.com/release-notes#new-features-and-improvements) * We fixed an issue preventing nTopology Lattice Graph (LTCX) files from importing. * We fixed an issue causing the Lower Bound of the Heads Up Display to become unresponsive when using very small (1e-11) values. * We fixed an issue preventing block comments from displaying in the notebook when they are added from the Information Panel->Comments tab. * We fixed an issue causing nTopology to unexpectedly exit when trying to open a large file. * We fixed a bug that placed the Body property of implicits created from the **Circle** and **Polygon from Points** blocks in the wrong location if the circle's or polygon's center point wasn't on the xy plane and centered at the origin. * We fixed a bug that sometimes produced a bad output when orienting using the **Orient Object** block with two planes with the same normal. The resulting object had NaNs, which prevented users from doing any future modeling operations. * In previous versions of the software, nonlinear thermal analyses reported an error when a FE Heat Generation was used in conjunction with Quad-dominated surface meshes. This issue has been resolved. * We fixed another issue when Heat Generation applies to beam elements. In previous releases, the total heat load was not correctly distributed. ## Keywords: *new release notes whats 3 29* # nTopology 3.3 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-3-what-s-new ## Version 3.3 > [!NOTE] > > nTopology 3.3 is here! This release features the Sharpen Mesh block that preserves the sharp features of your target geometry for downstream FEA operations. It also features the Lattice Body from Surface Voronoi block which provides a list of mesh “patches” that represents each generated Voronoi Surface Cell. In addition to these new blocks, we've implemented interactivity capabilities to the Ramp, Linear Map, and Add/Min/Max List blocks to enhance the GPU acceleration experience. Lastly, we've made it easier to name a variable and to change its output type. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Sharpen Mesh (Beta)](#sharpen-mesh-beta)) * #### [Lattice Body from Surface Voronoi (Beta)](#lattice-body-from-surface-voronoi-beta)) * #### [Voronoi Overload: Extend Open Lattice Body Beams (Beta)](#voronoi-overload-extend-open-lattice-body-beams-beta)) * #### [Voronoi Overload: Modify Lattice Body Thickness (Beta)](#voronoi-overload-modify-lattice-body-thickness-beta)) * #### [Interactivity Improvements](#interactivity-improvements) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Sharpen Mesh (Beta)](#new-features-and-improvements) * In nTopology 3.3, we are releasing the Sharpen Mesh (Beta) block to augment the capabilities of the [Mesh from Implicit Body by Voxels (Beta)](https://support.ntopology.com/hc/en-us/articles/360050217014-Methods-for-creating-surface-meshes#h_01EYVAHBXJZN9TDGETZ27BK7ZH) block (MflBbV). * In nTopology 2.27, we introduced the [Mesh from Implicit Body by Voxels (Beta)](https://support.ntopology.com/hc/en-us/articles/360050217014-Methods-for-creating-surface-meshes#h_01EYVAHBXJZN9TDGETZ27BK7ZH) block (MfIBbV), which converts an implicit body to a mesh using voxels. Unlike the older Mesh from Implicit block, the output from MfIBbV is guaranteed to have no self-intersections. However, sharp features were not preserved, limiting its use in FEA and CFD simulations that require sharp features. This is why we are now introducing the new Sharpen Mesh block. * For best results, when running the MfIBbV block, set the tolerance low enough–approximately a quarter of the minimum wall thickness–such that each sharp feature is well-defined, and keep the Simplify option unchecked (you can always simplify after sharpening using the Simplify Mesh by Threshold block). * By default, the sharpening algorithm will run once, but you can change the Max iterations input. If you're not satisfied with the output, first try increasing the number of iterations and then lower the tolerance set in the MfIBbV block. * Location: Beta > Modeling - Utilities * Name: Sharpen Mesh * Description: Sharpen a mesh generated by the Mesh from Implicit by Voxels block. For best results, uncheck the Simplify option in the Mesh from Implicit by Voxels block and make sure the tolerance is low enough such that each sharp feature is well-defined. * Input 01: Mesh * Type: Mesh * Description: Mesh generated from the Mesh from Implicit by Voxels block. * Input 02: Body * Type: Implicit Body * Description: The implicit body used to generate the input Mesh. * Input 03: Max iterations * Type: Integer * Description: Maximum number of sharpening iterations. A higher number will produce a sharper result, but will increase the runtime. 1 to 10 is recommended. * Input 04: Remeshing * Type: Mesh Sharpening Enum * Description: Adaptive remeshing to improve capturing detail around sharp features. Selecting a remeshing option will increase the runtime. * Output: Mesh ![The left image shows a mesh without sharpening enabled. The right image shows the same mesh with sharpening enabled.](https://files.learn.ntop.com/help-articles/whats-new/MeshSharpening01.png) ![The left image shows a mesh without sharpening enabled. The right image shows the same mesh with sharpening enabled.](https://files.learn.ntop.com/help-articles/whats-new/1500020257301.png) #### [Lattice Body from Surface Voronoi (Beta)](#new-features-and-improvements) * We've introduced a new surface lattice type: the Voronoi Surface Lattice Body. * The current Voronoi Surface Lattice Body (Beta) block has been re-named to Lattice Body from Surface Voronoi (Beta), and it outputs the new object type Voronoi Surface Lattice Body. * The Voronoi Surface Lattice Body is the functional Lattice Body equivalent of Voronoi Boundary Lattice, but provides a new property called Voronoi Surface Patches. This is a list of mesh “patches” that represents each generated Voronoi Surface Cell. Each “patch” of meshes is a new mesh that is recalculated from the triangle distribution of the original input mesh for the Voronoi Surface Lattice Body. * As is typical of meshes, each “patch” comes with its own set of referenceable vertices and edges based on the triangle distribution. * Applying Implicit Body from Mesh and Thicken Body allows a thickened implicit representation of each patch that can be referenced for downstream use. * Location: Beta > Lattices - Generate * Name: Lattice Body from Surface Voronoi * Description: Create a Voronoi Surface Lattice Body from the Voronoi diagram of a list of Points restricted to the surface boundary of a body. * Input 01: Seed points * Type: Point list * Description: List of Points to generate the Voronoi Lattice Body from. * Input 02: Thickness * Type: Scalar Field * Description: Lattice thickness. * Input 03: Mesh * Type: Mesh * Description: Mesh to generate the Voronoi Lattice Body on. * Output: Voronoi Surface Lattice Body #### [Voronoi Overload: Extend Open Lattice Body Beams (Beta)](#new-features-and-improvements) * Name: Extend Open Lattice Body Beams * Location: Beta > Lattices - Utilities * Description: Extend open beams within a voronoi volume lattice body. * Input 01: Voronoi lattice * Type: Voronoi Volume Lattice Body * Description: Voronoi Volume Lattice Body containing open beams to extend. * Input 02: Distance * Type: Scalar Field * Description: Distance to extend the open beams. * Input 03: Body * Type: Implicit Body * Description: Implicit body defining the beam selection region. * Input 04: Region * Type: Selection Region * Description: Option to select beams inside, outside, or touching the surface of the implicit body. * Input 05: Tolerance * Type: Scalar * Description: Tolerance value to use for determining when beams are inside, outside, or on the boundary of an implicit body. * Output: Voronoi Volume Lattice Body #### [Voronoi Overload: Modify Lattice Body Thickness (Beta)](#new-features-and-improvements) * Name: Modify Lattice Body Thickness * Location: Beta > Lattices - Utilities * Description: Modify the thickness of a voronoi volume lattice body. * Input 01: Lattice * Type: Voronoi Volume Lattice Body * Description: Voronoi Volume Lattice body which the thickness modification will be applied to. * Input 02: Thickness * Type: Scalar Field * Description: New thickness field * Output: Voronoi Volume Lattice Body #### [Interactivity Improvements](#new-features-and-improvements) * The following blocks are now interactive and utilize GPU acceleration, which is currently in Beta: * Ramp * Linear Map * Add (List Types) * Min (List Types) * Max (List Types) * For all inputs that drive interactivity in the viewport, the scrubber icon will appear solid, while inputs that do not drive interactive previews will appear as an outline. * To enable GPU Acceleration, go to File > Settings > General and check “Enable GPU acceleration (beta). #### [Usage Improvements](#new-features-and-improvements) * We've updated the Notebook header section. New notebooks will be titled “Untitled Notebook” by default. The Autobuild and Imported Blocks window buttons were moved to the right of the Search. The Search Bar has been updated to include a magnifying glass icon and the language has been updated from “Add block” to “Search blocks”. ![New notebooks will automatically have the title untitled notebook.](https://files.learn.ntop.com/help-articles/whats-new/1500020257521.png) * We've updated the “Make Variable” functionality so that the variable name text is pre-selected so you no longer have to navigate to the block to modify and or commit to the text changes. * ![When you convert a block to a variable, the name text box is automatically highlighted.](https://files.learn.ntop.com/help-articles/whats-new/MakeVariable.png) * We've updated the variable naming, so that if you have a short variable name and you start to write a longer variable name, the name space will expand and continue to follow the text so that you can see what you are typing. * We've added an arrow to all variable type icons (when the type can be changed) so that it's more intuitive and easier to understand when and where you can change the output type. ![There is now an arrow on a variable block icon to indicate the type can be changed.](https://files.learn.ntop.com/help-articles/whats-new/1500020257401.png) #### [Bug Fixes](#new-features-and-improvements) * A new version of the Von Mises Stress Point Map has been released to correct an error in the von Mises stress values in versions 3.0, 3.1 and 3.2. Opening existing files with this block will force the updated calculation. The error impacts the output of the Von Mises Stress Point Map and the visualization of the Von Mises stresses in the HUD. Stress Constraint and Stress Response blocks are unaffected. * The “Match Units” operation is now accessible again from the block right click menu. * The “Make Variable” operation was missing and is now available again via a block's right click menu. * We've resolved an issue that was causing nTopology to unexpectedly exit when clicking on an empty input of the Rotate Object block. * We've resolved an issue that was causing nTopology to unexpectedly exit when importing custom blocks from the “My Custom Blocks” library via the Add block. * We've resolved an issue that was causing variable chips containing Japanese characters to be scrambled. * We've resolved an issue where you were unable to edit the Grid Size and Primary Spacing of the Display Grid. ## Keywords: *new whats 3.3* # nTopology 3.30 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-30-what-s-new > [!NOTE] > > nTopology 3.30 is here! This release features Import Part 2.0, which now has new properties for CAD Assemblies imported from your native CAD program, allowing you to identify which part chips you need since they have the same CAD names. The Custom Unit Cell (Beta) block creates a unit cell from a graph lattice that consists of beams, faces, or a combination of both. Lastly, you can quickly identify the location of minimum and maximum values in simulation results by selecting the “Min/Max” icon in the HUD and add persistent probes. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Import Part 2.0: CAD Assembly Support](#h-01g8va7xf1jm98qqt830zk44mf) * ### [Custom Unit Cell (Beta)](#h-01g8va82phepnzfntgvjs5evse) * ### [Graph from Line Segments](#h-01g8va8966qnjtwf7tmb5kfpf8) * ### [Min & Max HUD Tags & Persistent Probes](#h-01g8va8e61s06wn4390jtw32ty) * ### [Usage Improvements](#h-01g8va8jz8qc8se5rkas6gjr3g) * ### [Bug Fixes](#h-01g8va8qej6k7ggg1gkgfphf2q) ## [Import Part 2.0: CAD Assembly Support](https://app.ntopology.com/release-notes#New_Feature_1) ![The Import Part block with its properties panel open. The properties panel of the imported assembly shows each of the individual components with their associated CAD names.](https://files.learn.ntop.com/help-articles/whats-new/ImportPart2_1.png) * CAD assemblies are no longer flattened with our latest version of the Import Part block. * To preserve the assembly hierarchy on import, we added a new type called Component that you will find under any Part objects. >
    **CATProduct imported through Import Part 2.0 in nTopology 3.30** **CATProduct imported through Import Part 1.2 in nTopology 3.30**
    ![The properties panel of a CAD Assembly imported through Import Part 2.0 in nTopology 3.30](https://files.learn.ntop.com/help-articles/whats-new/ImportPart2_2.png) Assembly hierarchy is found as a list of components ![The properties panel of a CAD Assembly imported through Import Part 1.2 in nTopology 3.30](https://files.learn.ntop.com/help-articles/whats-new/ImportPart2_3.png) Assemblies will be flattened as a list of bodies
    * Component contains **instance**, **placement**, and **template**. * **Instance** is a **Part** type object representing the CAD component in the assembly structure. You will find all bodies and curves of each assembly component under this. * **Placement** is a **Transform** object required for transforming the **Template** into the **Instance**. * **Template** is a **Part** type object representing the original part level design. * You can apply the design workflow to the **Template** and transform with **Placement** to locate the nTopology design and the rest of the components in the assembly. * Bodies and curves are now sorted by bounding box Xmin \< Ymin \< Zmin \< Xmax \< Ymax \< Zmax. (i.e. the geometry with the least Xmin is first). Faces aren't sorted based on the geometry. * Updating old blocks to the new version via the Update button in the Deprecated Block warning will not correctly update references. References must be updated manually. ![A warning message stating that the Import Part v1.2.0 is deprecated and that you should update to the latest version.](https://files.learn.ntop.com/help-articles/whats-new/ImportPart2_4.png) ## [Custom Unit Cell (Beta)](https://app.ntopology.com/release-notes#New_Feature_2) * We renamed the Custom Implicit Unit Cell block to Custom Unit Cell. In addition to implicit Unit Cells, the block now has a second overload that you can use to create custom cells from a Graph. The output is a 1 Parameter Unit Cell, with thickness being the parameter. You can input this Unit Cell and your thickness value into the Periodic Lattice block. * The overload accepts a Graph as input and a Bounding Box to define the cell's domain. To construct the Graph that defines your custom cell, you can use the new utility block [Graph from Line Segments](#h-01g8va8966qnjtwf7tmb5kfpf8). * The input Graph can consist of beams, faces, or a combination of both. The geometry can be 2D or 3D. When creating 2D Unit Cells, remember that the input Domain must be a 3D Bounding Box. * If you have a CAD file containing line segments that you'd like to convert into a custom cell, use the Import Part block to import your file. Drag out the curves property chip, and use the Line Segment block to construct lines using each degree 1 curve's endpoints. Once you have a list of line segments, you can make a Graph using [Graph from Line Segments](#h-01g8va8966qnjtwf7tmb5kfpf8) and then input that into the Custom Unit Cell block. * Block Name: Custom Unit Cell * Location: Lattices > Unit Cells * 2nd Overload (Beta): * Description: Constructs a 1 Parameter Unit Cell from a Graph. Parameter 1: Thickness. * Input 1: Graph - Graph from which to construct the custom Unit Cell. * Input 2: Domain - Bounding Box to define the domain of the custom Unit Cell. * Output: 1 Parameter Unit Cell A custom 1 Parameter Unit Cell constructed using Graph from Line Segments used to make a lattice in the Periodic Lattice block: ![A custom 1 Parameter Unit Cell constructed using Graph from Line Segments](https://files.learn.ntop.com/help-articles/whats-new/CGUC_1.png) ![Using the Custom Unit Cell to create a periodic lattice.](https://files.learn.ntop.com/help-articles/whats-new/CGUC_2.png) ## [Graph from Line Segments](https://app.ntopology.com/release-notes#New_Feature_3) * We released a new lattice utility block **Graph from Line Segments**. You can use this block in a variety of different scenarios: * Custom Unit Cell creation: Graph from Line Segments can be used as the input to [Custom Unit Cell](#h-01g8va82phepnzfntgvjs5evse) to construct your own 2D or 3D unit cells. * Support generation: you can create a support structure by first creating touch points on your model and target points on your build plate. Use these as the start and end points in the Graph from Line Segments block. Simple support points on a volume: ![Using the Graph from Line Segments block to generate a graph below a floating implicit body. The graph is then converted to lattice beams, that will be used as support beams for manufacturing the implicit body.](https://files.learn.ntop.com/help-articles/whats-new/GFLS_1.png) Supports between two lattices' nodes: ![Lattice beams between two lattice structures.](https://files.learn.ntop.com/help-articles/whats-new/GFLS_2.png) ## [Min & Max HUD Tags & Persistent Probes](https://app.ntopology.com/release-notes#New_Feature_4) * When visibility is toggled on for any simulation analysis blocks, you can quickly identify the location of minimum and maximum values by selecting the “Min/Max” icon in the HUD. The location of the minimum value will be automatically identified with a blue tag, while the maximum value will be identified with a red tag. * Probing simulation results has also been extended in this release. Probing is enabled by selecting “Probe Mode” in the HUD. In Probe Mode, hovering over mesh vertices will reveal the simulation result at that location. You can create a persistent probe by clicking on a vertex and selecting “Add Probe” from the context menu. To remove a probe, click on the probe and select “Delete” from the context menu. Selecting “Delete All” from the context menu will remove all probes. Minimum and maximum results are identified by selecting the “Min/Max” icon above the HUD legend. ![An example of a Static Analysis conducted on a part. The simulation HUD now allows you to place Minimum and Maximum value probes on the simulation results.](https://files.learn.ntop.com/help-articles/whats-new/MM_1.png) Select the “Probe Mode” icon about the HUD legend to interactively probe results at mesh vertices. ![An example of a Static Analysis conducted on a part. The simulation HUD now allows you to probe the simulation mesh, and the values are automatically displayed as you hover sections with your mouse.](https://files.learn.ntop.com/help-articles/whats-new/MM_2.png) Right mouse click and select “Add Probe” to create a persistent probe at the desired location. ![An example of a Static Analysis conducted on a part. The simulation HUD now allows you to probe the simulation mesh, and the values are automatically displayed as you hover sections with your mouse. You can right click and select Add Probe to implement a persistent probe on the results.](https://files.learn.ntop.com/help-articles/whats-new/MM_3.png) Persistent probe with value. ![Static Analysis results with a persistent probe implemented on the mesh.](https://files.learn.ntop.com/help-articles/whats-new/MM_4.png) #### [Usage Improvements](https://app.ntopology.com/release-notes#Usage_Improvements) * We have added an option under Settings to reverse the scroll wheel zoom direction. ![The Settings menu of nTop. The General tab now has an option to reverse mouse scroll wheel zoom direction.](https://files.learn.ntop.com/help-articles/whats-new/UI_1.png) * Blocks with errors now display a red indicator on the left side of the input with the error to help you more quickly troubleshoot .![A cube block with an error. The error highlights the input that is causing the issue.](https://files.learn.ntop.com/help-articles/whats-new/UI_2.png) * Context Search now works for variable and non-variable blocks to help you discover and place compatible blocks more efficiently. ![An example of using Context Search on a Box variable.](https://files.learn.ntop.com/help-articles/whats-new/UI_3.png) #### [Bug Fixes](https://app.ntopology.com/release-notes#Bug_Fixes) * We fixed an issue with hover-activated tooltips not showing when there were active windows open (e.g. Imported Blocks menu) within nTopology. * We fixed an issue where embedding blocks with open information panel would not display correctly until the panel is closed and reopened. * We fixed an issue causing nTopology to sometimes unexpectedly exit when checking for Custom Blocks in the MyBlocks folder. * We fixed an issue where copying and pasting an “Equals” block would also paste the references of the “Equals” block. * We fixed an issue with not being able to read Topology Optimization results saved in 3.28 with the 3.29 release. 3.30 can now open files created with 3.28. * We fixed an issue causing the heatflux values to be computed incorrectly for shell elements in the Thermal Analysis block. Please rebuild your Thermal Analysis block if it contains shell elements. * We fixed an issue that created an inaccurate slice stack from an Implicit Body that was smoothened using the Smoothen Body block. * We fixed an issue causing nTop to unexpectedly exit when running the CAD Body from Implicit Body (Beta) block with models containing thin features or ribs. ## Keywords: *new whats 3.30* # nTopology 3.31 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-31-what-s-new > [!NOTE] > > nTopology 3.31 is here! This release features our new custom block viewing and editing with quality of life enhancements. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to access to helpful tutorials and support articles. Table of Contents * ### [Custom Block Viewing and Modifying](#h-01g9zajr68yt67ws9pzrwt663j) * ### [Precision Render for Section Cut](#h-01g9zajyvrzrdqf1f4kbf506zj) * ### [Block Updates](#h-01g9zan97jtrrrsy1411gj1j44) * ### [Bug Fixes](#h-01g9zandmww5k2yhzbr660bmt3) #### [Custom Block Viewing and Modifying](https://app.ntopology.com/release-notes#New%20Feature%201) ![A gif showing how to open and modify a custom block in an active nTop notebook.](https://files.learn.ntop.com/help-articles/whats-new/CB1.gif) We made enhancements to make Custom Blocks more accessible, allowing you to view and modify Custom Blocks directly in your nTopology instance. * **What it does:** * This new functionality lets you view a Custom Block directly in your main nTopology instance. You can select “Open” from the Imported Blocks menu (shown below) ![An image showing how to open the imported custom block in the active notebook using the imported blocks menu.](https://files.learn.ntop.com/help-articles/whats-new/CB2.png) or you can view it by right-clicking on the Custom Block directly in your notebook and selecting “Open Block” (shown below). ![An image showing how to open the imported custom block in the active notebook using the right click menu.](https://files.learn.ntop.com/help-articles/whats-new/CB3.png) * Once opened, the notebook of the Custom Block will be displayed, and you can inspect its contents. Select the “Back” icon at the top left of the notebook to return to the main notebook. ![An example custom block open in an active notebook. You can edit the custom block and then return to your ntebook.](https://files.learn.ntop.com/help-articles/whats-new/CB4.png) * If you want to modify the Custom Block, you can make your modifications in the opened Custom Block notebook. Once you select the “Back” icon, you will be presented with one of four pop-up windows based on your modifications. The scenarios are: 1. **Update** (no inputs/output change) - the most common scenario occurs when a change is made to a Custom Block that does not modify its inputs or output or is a name change.![A Modified Custom Block message. This message appears when you modify a custom block in your active notebook and then return to the notebook.](https://files.learn.ntop.com/help-articles/whats-new/CB5.png) 2. **Add to Notebook** (inputs/output change) - the scenario when a Custom Block's inputs or outputs are changed. You need to add it to the notebook.![A Modified Custom Block message. This message appears when you modify a custom block in your active notebook and then return to the notebook. However, the custom block is no longer valid due to changes made to the inputs or output.](https://files.learn.ntop.com/help-articles/whats-new/CB6.png) 3. **Manage** - the scenario when you modify a Custom Block that is not in your current notebook. Usually, this means the Custom Block is more than a single level deep in the Custom Block hierarchy tree, and you go directly back to the main notebook.![A Modified Custom Block message. This message appears when you modify a custom block in your active notebook and then return to the notebook. The custom block is not being used in the notebook currently, so it needs to be added or discarded.](https://files.learn.ntop.com/help-articles/whats-new/CB7.png) 4. **Invalid** - the scenario that occurs when a Custom Block has no inputs or output.![A Modified Custom Block message. This message appears when you modify a custom block in your active notebook and then return to the notebook. The custom block is invalid, you must go back to the custom block to fix it or discard the block.](https://files.learn.ntop.com/help-articles/whats-new/CB8.png) For more information on modifying Custom Blocks, please visit our FAQ page [here](https://support.ntopology.com/hc/articles/5473123308435). > [!TIP] > > **Tips:** * All Custom Blocks used within a nTopology file are internalized - changes will only be reflected in the currently open file. If you want the changes to be externalized, export the Custom Block to a directory and import it into other files. * When modifying Custom Blocks, pop-up windows will appear when you select “Back” to help guide you. Each pop-up window will have a Learn More link, redirecting you to a support page with more information. * "Remove Unused Blocks" will remove all unused Custom Blocks at all levels in your file. We recommend using this to clean up your file, making the Imported Blocks menu readable and speeding up your file's load time. * Hovering over the Custom Block line in the Imported Blocks window will show a tooltip that contains the name, description (if available), and last modified date (if the Custom Block was imported into or modified, starting in nTop version 3.31).![Two versions of a custom block in a notebook. The imported blocks menu is open showing the two different block versions.](https://files.learn.ntop.com/help-articles/whats-new/CB9.png) * For Custom Blocks that contain Custom Blocks inside them (nested Custom Blocks), you can directly open them by uncollapsing the chevrons in the Imported Blocks menu and selecting Open on the nested Custom Block.![A custom block imported through the imported blocks menu. When the custom block has an arrow next to it, it indicates a drop down menu. This drop down menu shows any custom blocks that are used inside of the parent custom block. You can right click internal custom blocks to open them.](https://files.learn.ntop.com/help-articles/whats-new/CB10.png) #### [Precision Render for Section Cut](https://app.ntopology.com/release-notes#New) * The Section Cut supports user workflows by providing access to the internals of a model for better insight. Examples are the structure of lattice structures, gyroid-based heat exchangers, or accurately comparing multiple bodies to validate critical boolean operations at various stages of design workflows. * Users are known to work in different model resolutions depending on system performance and run Precise Render operations when an accurate model representation is required or snapshots for presentation purposes. To date, it was impossible to generate precise renders using Ctrl + H on the selected body during a Section Cut operation. We now support accessing the Precise Render for the selected body while in a section cut view. * After accessing Precise Render and pressing Exit, the section cut operation resumes from the original state. \` >
    **Section Cut without Precise Render** **Section Cut with Precise Render**
    ![A close up section cut of a lattice without Precise Render enabled. There appears to be jagged edges on the geometry.](https://files.learn.ntop.com/help-articles/whats-new/PR_1.png) ![A close up section cut of a lattice with Precise Render enabled. Precise Render shows the true clean geometry.](https://files.learn.ntop.com/help-articles/whats-new/PR_2.png)
    #### [Block Updates](https://app.ntopology.com/release-notes#new-features-and-improvements) * We improved the Simplify Mesh by Threshold block algorithm, reducing the block run time by 15-50%. The increase in speed that you observe will vary depending on the model, and models containing large flat regions will benefit most from this improvement. * We made improvements to the CAD Body from Implicit Body (Beta) block to support converting multiple connected Implicit Bodies into one CAD Body. Previously this would produce two separate parts. * We released a new version of the Implicit Body from CAD Body block. Version 1.2.0 fixes a bug introduced in version 1.1.0, and 1.1.0 is now deprecated. The bug resulted in either no Implicit Body appearing or additional artifacts present in the body. #### [Bug Fixes](https://app.ntopology.com/release-notes#new-features-and-improvements) * We fixed a bug in the Extend Open Lattice Beams block that was adding extra thickness to the lattice's beams when none of the beams met the extension criteria. ## Keywords: *new whats 3 31 3.31* # nTopology 3.32 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-32-what-s-new > [!NOTE] > > nTopology 3.32 is here! This release features the Notebook Outline that lets you view the blocks in your notebook from a high level and quickly select and navigate them. Continue reading below to see further updates and bug fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to access helpful tutorials and support articles. Table of Contents * ### [Notebook Outline](#h-01gb3dr32egccay59zxnx4k5sj) * ### [Usage Improvements](#h-01gb3dr9jppqtgkng850fvhfm1) * ### [Block Updates](#h-01gb3dresjzhnn0ahrwq6sdhb2) * ### [Bug Fixes](#h-01gb3drkg0vcw5vgabnaszh3z9) #### [Notebook Outline](#h-01gb3dr32egccay59zxnx4k5sj) ![The Notebook Outline shows all blocks and variables used in a notebook. You can select blocks to have the notebook scroll to and highlight them.](https://files.learn.ntop.com/help-articles/whats-new/8883124622227.png) We've added a major enhancement to our application, the Notebook Outline. The Outline lets you view the blocks in your notebook from a high level and quickly select and navigate them (shown above). The Outline lives in a left-hand sidebar that can be expanded and collapsed by selecting the icon at the top-left of the Notebook (shown below). ![An image of the nTop user interface with the hide/show outline button highlighted.](https://files.learn.ntop.com/help-articles/whats-new/8883160205587.png) In addition to quickly navigating to blocks, the Outline provides a visual tracing for where variables are used in your Notebook. When you select a block in the Outline, a bright blue highlight will appear on that block. If that block is a variable instanced within another block, a duller blue highlight will appear on the block that references it. In the below video, “Y Bound Lengths” is a variable being used within “Remapped Gyroid,” as indicated by the dull blue highlight. #### [Usage Improvements](#h-01gb3dr9jppqtgkng850fvhfm1) * Adding a block via Context Search on variable now adds the new block below the original block instead of above. * The load time of files with FE Meshes is now significantly faster, with a 40-60% reduction with this release. * We improved the Autosave setting. It is now on by default and properly auto-saves your file. #### [Block Updates](#h-01gb3dresjzhnn0ahrwq6sdhb2) * We improved the CAD Body from Implicit Body (Beta) block to work on models containing thin ribbing on curved surfaces. Before 3.32, the resulting CAD Part was suboptimal–either self-intersections or dents/divots were present. We have fixed it in 3.32. However, the result contains roughly 5% more CAD Faces. A CAD Part from an implicit model of ribbing on a thin, curved surface. This view appears okay. However, the image below shows a dent. ![A CAD part generated from an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/8883130568723.png) The same model's back view shows the indentation in the CAD Part. ![The back of the generated CAD part. The image is highlighting a dent on the back face of the CAD Body.](https://files.learn.ntop.com/help-articles/whats-new/8883160001171.png) In 3.32, the beta block improvements: ![The new version of the CAD Body from Implicit Body block is more accurate and no longer generates the same dent on the surface, as shown in previous versions.](https://files.learn.ntop.com/help-articles/whats-new/8883160168467.png) #### [Bug Fixes](#h-01gb3drkg0vcw5vgabnaszh3z9) * We fixed an issue where trying to exit a modified nTopology file would not prompt you to save your changes. * We fixed an issue importing a VDB file that generated a Deprecated Import Voxel Grid block. * We fixed an issue where the tooltip for a variable block does not show on the Type icon dropdown when the variable is empty. * We fixed an issue where exiting and saving nTopology with an edited Custom Block did not automatically save the edited Custom Block upon reopening. * We fixed an issue where the Update With command within the Imported Block menu would not work for nested Custom Blocks. * We fixed an issue when specified optional Frames were on Boundary Conditions objects. In previous releases, the coordinate transformation defined by the Frame would be applied to every Boundary Condition with the same FE Boundary input, regardless of provided Frame input. * We fixed an issue causing the Surface Area from Body block to output 0.00m² when the input to the block was a Section Body from a Cylindrical TPMS lattice. ## Keywords: *new release notes whats 3 3.32 32* # nTopology 3.33 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-33-what-s-new > [!NOTE] > > nTopology 3.33 is here! This release features Notebook Search, making navigating through blocks easier. Warp Cell Map to Body (Beta) block lets you conform the cell map to the Body's surface, and the improved Slice Body 3.1 (Beta) block delivers 3-5x shorter slicing time. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Notebook Search](#h-01gcant4d02y996xnd9ns6dkte) * ### [Warp Cell Map to Body (Beta)](#h-01gcant9vjhfz6dp1hbz4nyar5) * ### [Slice Body 3.1 (Beta)](#h-01gcantfn2830f5gfxhjdpjzcy) * ### [Simulation Glyph Size Control](#h-01gcantstt4yk494cfh89erg87) * ### [Usage Improvements](#h-01gcantzcvnfgsses2mxchn4dt) * ### [Bug Fixes](#h-01gcanv42mfbr34vfns2q977s9) ## [Notebook Search](#h-01gcant4d02y996xnd9ns6dkte) ![The Notebook Search feature is used to locate specific blocks or variables being used in the notebook.](https://files.learn.ntop.com/help-articles/whats-new/Search.gif)We've added a navigation improvement for you that has been long requested - you can now search for blocks used within your notebook. Within the recently-released Notebook Outline sidebar, there is now a search feature that will display filtered results and allow you easy navigation to them. > [!TIP] > > **Tips:** * Ctrl+F will open the sidebar and activate the search window. * You can exit the search by selecting the close button or the Esc key. * Search will filter objects on three criteria: * Block name * If a block is a variable, the block names where it is instanced * Matching comments ## [Warp Cell Map to Body (Beta)](#h-01gcant9vjhfz6dp1hbz4nyar5) * We released a new Cell Map utility block called **Warp Cell Map to Body (Beta)**. The **Warp Cell Map to Body (Beta)** block accepts an Implicit Body and a Cell Map and warps the maps' outer layer of vertices to conform to the Body's inner surface. * Before 3.33, the only options available to create a conformal volume lattice were either using a stochastic lattice type such as Voronoi or creating a Periodic Lattice and trimming it to the volume. This was undesirable: stochastic lattices didn't always fulfill users' design requirements, and the trimming operation resulted in partial, incomplete unit cells with cut-off beams or faces. Using the **Warp Cell Map to Body (Beta)** block, you can now conform a Periodic Lattice to complex closed Implicit Bodies. * **Tips** * If your Cell Map contains many cells outside of the Implicit Body, first use the Trim Cell Map block to reduce the number of cells. A maximum of one layer of cells outside the body's volume is a good starting point. Experiment with the various Fill Type options in the Trim Cell Map to achieve the desired result. * This block is designed to conform an entire Cell Map to a Body. Conforming only a partial section of the Cell Map is not supported.![The Warp Cell Map to Body block warps the cell map to conform to the input body's shape.](https://files.learn.ntop.com/help-articles/whats-new/Warp.png) * Block Name: Warp Cell Map to Body (Beta) * Location: Beta > Lattices - Cell Map * Description: Warps a Cell Map to a body's surface to achieve a conformal structure. The resulting cells will be warped to achieve conformality. To avoid large distortions, provide a Cell Map trimmed to the body with Trim Cell Map. * Input 1: Body - Implicit Body target for the warped Cell Map. * Input 2: Cell Map - Cell Map to be warped. * Output: Cell Map ## [Slice Body 3.1 (Beta)](#h-01gcantfn2830f5gfxhjdpjzcy) ![The Slice Body block creating slices of a Rectangular Volume Lattice.](https://files.learn.ntop.com/help-articles/whats-new/Slice.png) * We significantly improved the Slice Body block performance by streamlining the polygon repair code. * The overall performance improvement delivers a 3-5x shorter slicing time, although we have seen as high as > 50x improvement in some test cases comparing Slice Body 3.1 (Beta) to Slice Body 3.0. * Our test cases showed no difference in the results between Slice Body 3.0 and Slice Body 3.1 (Beta). * We will be collecting the user feedback and promoting this block version as the production version soon.![The progress bar showing a slice stack loading.](https://files.learn.ntop.com/help-articles/whats-new/Slice_2.png) * We also improved the progress bar to reflect the number of slices completed while slicing. You will be able to find more detailed messages in the debug panel and nTopCL logs. ## [Simulation Glyph Size Control](#h-01gcantstt4yk494cfh89erg87) Wondering what glyphs are? These are the markers that indicate boundary conditions in your simulation model. Whether designing a part that is a few millimeters or meters, you can now adjust the glyph size to fit your model. >
    ![Before nTop 3.33, the glyph size of a boundary condition on a model was very small and hard to see.](https://files.learn.ntop.com/help-articles/whats-new/Sim.png) Fixed simulation glyphs size in previous releases. ![In nTop 3.33, the glyph size of a boundary condition on a model can be adjusted for better visibility.](https://files.learn.ntop.com/help-articles/whats-new/Sim_2.png) New adjustable simulation glyphs size.
    ![The settings menu in nTop open to the Display tab. There is now a setting for Glyph Size.](https://files.learn.ntop.com/help-articles/whats-new/Sim_3.png) * Set simulation glyphs size in Display settings. ## [Usage Improvements](#h-01gcanz52exxjceqtbpkhmy4zb) * We improved the “Bone Plate Generator” example file to have more standardized inputs for a nested Custom Block. * We improved the load times of files with FE Meshes by multiple optimizations of the serializing and deserializing models resulting in 30% faster load times. ## [Bug Fixes](#h-01gcanzaz023t6sddwntcdakc5) * We fixed an issue where Context Search wasn't working correctly when Boolean Union and Boolean Subtract were selected. * We fixed an issue in the **Smoothen Body** block that mistakenly cut off a section of the output Body when a Bounding Box was provided in the optional Domain input. * We fixed an issue causing nTop to unexpectedly exit when using the Field Viewer to view Vector Point Maps when the viewer was set to a size of 2 or more meters. * We fixed a bug in the vertices property of the Polygon data type that resulted in a non-deterministic vertex order. ## Keywords: *new release notes whats 3.33* # nTopology 3.34 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-34-what-s-new > [!NOTE] > > nTopology 3.34 is here! This release features our new capability to view the variable value when it is instanced by hovering over the variable chip and improvements to our lattice thickening along with bug fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [View Variable Value](#h-01gdbhcazzpa6atehf1h5rwx58) * ### [Block Updates](#h-01gdbhcese6xyb48ahdtvenjy3) * ### [Bug Fixes](#h-01gdbhcjr6hps236vk78x7y7as) ## View Variable Value * We've added the capability for you to quickly view the value of a variable when it is instanced as a chip downstream. To view the current value, hover over the variable chip, which will display in the tooltip below the name (shown below). * This feature is available for Scalar, Temperature, Integer, Vector, and Point variable types to start - we will be expanding it to other types soon. ![When hovering a variable that is inserted into a block input, there is now a hover window that appears with the variable's name and value.](https://files.learn.ntop.com/help-articles/whats-new/view_variable.gif) An example of the view variable value feature. ## Block Updates * We changed the logic used to thicken the beams or faces of a Lattice. Before 3.34, when you provided a Scalar Field as the Thickness parameter to a latticing block, the lattice beams or faces were thickened by the Scalar Field. In 3.34, the Scalar Field values are evaluated only at beam or face nodes, and the beam or face thickness is interpolated between nodes. * This change applies to the following latticing blocks: * **Periodic Lattice** * **Rectangular Volume Lattice** * **Cylindrical Volume Lattice** * **Spherical Volume Lattice** * **Trim Lattice** when the Rounded Edges input is unchecked. * **Lattice from Surface Mesh** * **Lattice from Volume Mesh** * **Voronoi Surface Lattice** * **Voronoi Volume Lattice** * **Branched Lattice** * **Delaunay Lattice** * **Orthofoam Lattice** ![A single lattice beam thickened with a Scalar Field in nTop 3.34 (left) compared to 3.33 (right)](https://files.learn.ntop.com/help-articles/whats-new/thicken.png) A single lattice beam thickened with a Scalar Field in nTop 3.34 (left) compared to 3.33 (right) * This thickening method improves Lattice generation and rendering times. Speed improvements will vary based on the model and thickness field. The brake pedal model displayed below now runs over 13 times faster in nTop 3.34 compared to 3.33. ![A brake pedal lightweighted using a Lattice. The Lattice Thickness input is a Scalar Field generated from simulation results. In version 3.33, the Lattice is generated and rendered in 12.5 seconds. In 3.34, the generation and render time completes within 0.9 seconds.](https://files.learn.ntop.com/help-articles/whats-new/thicken2.png) A brake pedal lightweighted using a Lattice. The Lattice Thickness input is a Scalar Field generated from simulation results. In version 3.33, the Lattice is generated and rendered in 12.5 seconds. In 3.34, the generation and render time completes within 0.9 seconds. ## Bug Fixes * We fixed an issue where the progress bar would not update when running Slicing blocks. * We fixed an issue with list values where the displayed number was incorrect. * We fixed an issue where the context menu would not appear when selecting a Part List variable in the viewport. * We fixed an issue causing nTop to unexpectedly exit if the output of the **Cell Map from CAD Face** block contained no cells. * We fixed an issue causing nTop to unexpectedly exit when the output of the **CAD Body from Quad Mesh** block contained one CAD Face. * We fixed an issue that was causing the **Random Points on Mesh** block to sometimes fail if one or more other instances of the **Random Points on Mesh** block were running. * We fixed an issue with the computation of the average edge length of an FE Mesh when performing topology optimization with overhang and extrusion constraints. The update will not have a major effect on the optimization results. * We fixed an issue with the **Export Part** block to be able to handle the Part List containing assemblies. * We fixed an issue with the **Export Part** block to be able to write .stp files when selected. ## Keywords: *new release notes whats 3 34* # nTopology 3.35 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-35-what-s-new > [!NOTE] > > nTopology 3.35 is here! This release features updates to the Voronoi Volume Lattice block that runs faster than the earlier version, “Halt Process” option to stop a running Topology Optimization and keep the results till the last completed iteration and an added 'Start angle' input to the Hatching blocks. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01gehqg94n3jqe7svg77we6n4f) * ### [Block Updates](#h-01gehqgfb1j3ywc7x69jhz4dpb) * ### [Bug Fixes](#h-01gehqgm78797dr8xayv52qbxt) #### Usage Improvements * Cut/Copy and Paste along with the Duplicate commands no longer suffix the “\_copy” in the Object Name and will increment the suffixed number. #### Block Updates * We released a new version of the **Voronoi Volume Lattice** block. The algorithm in version 1.1.0 was enhanced to run significantly faster when an optional Surface Mesh is provided. The increase in speed will depend on your model. The optional mesh input is now a Surface Mesh. If you previously used a Volume Mesh, you can safely update the block, and the Volume Mesh will auto-convert to a Surface Mesh for you. ![A Voronoi Volume Lattice version 1.1.0. This version provides faster lattice generation when a surface mesh boundary is provided.](https://files.learn.ntop.com/help-articles/whats-new/Voronoi.png) Figure 1. The lattice in the image above now generates in 4 seconds, compared to 90 seconds in block version 1.0.0 – a 22.5x increase. * We released a new version of the **Surface Area from Body** block. Version 1.1.0 is deprecated due to a bug that produced inaccurate results. Additionally, the inaccuracy increased as the model size increased. This is fixed in version 1.2.0. * We have added a new context menu option for Topology Optimization blocks. "Halt Process" (1) will stop a running Topology Optimization and keep the results of the last completed iteration. When exercising this option, the "Max iterations" input (2) will be overwritten with the last completed iteration, the block will be marked as successfully built, and you can access all the associated properties. If you want to restart the optimization, you have the option to use the density property from the halted block into the "Initial density" input field of the Topology Optimization block intended for the restart (3). This will utilize a shape from the halted iteration that is very close to the optimized result for the restart. ![A diagram showing how to use the Halt Process function to pause a Topology Optimization.](https://files.learn.ntop.com/help-articles/whats-new/Halt_Process.png) Figure 2. The image shows (1) “Halt Process” from the menu, which can be accessed by right-clicking the Topology Optimization blocks, (2) Maximum iterations: input is updated after the “Halt Process” is completed, and (3) shows hows to access the density input and use it to restart the optimization process. * We have added a new optional input, 'Start angle:' to **Hatch**, **Hatch with Islands**, and **Hatch with Stripes** blocks. The default 'Start angle:' will be 0 degrees, providing the same behavior as earlier. However, you can now start from the angle of your choice, and this could be useful when you slice high-complexity part designs by slicing different sections at a time. ![Examples of using the Hatch, Hatch with Islands, and Hatch with Stripes blocks. These blocks now have an input Start Angle, that changes the angle of the hatches.](https://files.learn.ntop.com/help-articles/whats-new/Hatch.png) Figure 3. The above image shows an Implicit cube hatched with different start angle inputs. #### Bug Fixes * We fixed an issue where sometimes entering values in a vector caused nTopology to exit unexpectedly. * We fixed an issue with geometry being selected in the viewport, not cross-highlighting the corresponding variable block in the notebook. * We fixed an issue with the context search of some variables not working correctly. * We fixed an issue where copy and pasting Custom Blocks with optional inputs between nTopology instances would not work. * We fixed an issue with graph lattices that were causing an error in the Implicit Body. The issues with the implicit field caused abnormal rendering artifacts and blocks evaluating the field, such as **Closest Point to Body** and **Mesh from Implicit Body**, to fail. This issue occurred if the lattice had degenerate elements, such as a beam with the same start and end point. In 3.35, lattices with these beams will still have a correct Implicit Body field. ## Keywords: *new what's new release notes what's 3 35* # nTopology 3.36 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-36-what-s-new > [!NOTE] > > nTopology 3.36 is here! This release comes with two new features Direct Custom Block Creation, allowing you to create Custom Blocks directly in your instance, and Split Text block to split a single text object into a list of text. Scroll down to read the Block Updates and Bug Fixes section for quality of life improvements. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Direct Custom Block Creation](#h-01ggqmkcj0ckc480defqcxn6v6) * ### [Split Text Block](#h-01ggqmkk39x81g3svg0mv1jkcg) * ### [Usage Improvements](#h-01ggqmks1gw2tg28y5qk86veas) * ### [Block Updates](#h-01ggqmkz1rk8dmyxaadqxq26w8) * ### [Bug Fixes](#h-01ggqmm4ryq7yc2gmaqzzm13w1) #### Direct Custom Block Creation * We made enhancements to make Custom Blocks more accessible, allowing you to create Custom Blocks directly in your nTopology instance. In addition, the Imported Blocks menu now resides in the Imports tab of the left-hand sidebar instead of in a pop-up window to the right of the notebook. **What it does:** * Once you select “Create New Custom Block” in the imports tab of the left-hand sidebar, it will bring you inside a new notebook where you can create your Custom Block. Once created, you can select the “Back” icon, and so long as your Custom Block is valid, it will be automatically added to the original notebook. > [!TIP] > > **Tips:** * All Custom Blocks created within a nTopology file are internalized - changes will only be reflected in the currently open file. If you want the Custom Block to be externalized, export the Custom Block to a directory and import it into other files. ![A gif showing how to create a custom block inside of an active nTop notebook.](https://files.learn.ntop.com/help-articles/whats-new/cb.gif) #### Split Text Block **What it does** * Splits a single text object into a list of text objects based on a delimiting string, character, or string of delimiters. **Common uses** * File path manipulation, general text string manipulation. **Inputs**\* \* Text (Text) : Text object to split \* Delimiter (Text): The character or string used to split the text object. \* Split by each (Bool): Option to split text around each character contained in Delimiter. **Output**: Text List. ![A gif example of using the Split Text block to separate elements of a file path.](https://files.learn.ntop.com/help-articles/whats-new/Split_Text.gif) #### Usage Improvements * Tooltip hints show when hovering over block input icons and when the block object text is cut off. ![Tooltip hints show when hovering over block input icons and when the block object text is cut off.](https://files.learn.ntop.com/help-articles/whats-new/Usage.gif) #### Block Updates * We released a new version of the **Mesh from Implicit Body** block and deprecated version 2.2.0. In version 2.3.0, we fixed an issue that wasn't correctly preserving sharp features when the Sharpen input was clicked and created jagged edges. This happened for large meshes with bounding boxes at or over 2.5 meters x 2.5 meters in size or for meshes of any size that were 2.5 meters or more away from the origin. We also fixed an issue causing the self-intersection warning to show even when the result did not have self-intersecting elements. * We moved the **Triangulate Mesh** block out of beta. Its new ribbon location is Modeling > Utilities > Triangulate Mesh. * We moved **Implicit Body from CAD Body** version 1.2.0 out of beta. Version 1.1.0 is deprecated due to a bug that produced inaccurate gradients. It can be found in the ribbon under Utilities > Conversion > Implicit Body from CAD Body. * We released a new version of the **Closest Point to Body** block into beta. The beta version 1.2.0 is more accurate and will work better for TPMS lattices and any Implicit Body or lattice that has gone through a trimming or boolean operation. #### Bug Fixes * We fixed an issue causing nTopology to unexpectedly exit when you try to open a new notebook while editing a processing Custom Block. * We fixed an issue causing changes made during Custom Block editing to be lost if you select "Undo" and then select "Back." * We fixed an issue with the "Change Block Overload" tooltip displaying in the incorrect location on a block. * We fixed an issue where dragging a block into a collapsed section does not indicate that the block is in the collapsed section. * We fixed an issue with Topology Optimization with multiple responses that share a common load case that failed to execute when the boundary conditions in the load case were applied directly on CAD's faces. * We fixed an issue that caused 2D Implicit Bodies to flicker and disappear at certain angles when panning around in the scene. * We fixed an issue causing nTop to unexpectedly exit if you input a (0,0,0) Point block into the **Array Body** block with the Spacing input set to (1mm, 0mm, 0mm). * We fixed an issue causing nTop to unexpectedly exit when converting an **Implicit Body to a CAD Body** using the **CAD from Implicit Body (Beta)** block if the body was very thin with large flat regions. * We fixed an issue that misordered the Principal axes in the **Mass Properties from Mesh** block. The results are now in descending order, matching common CAD systems such as Siemens NX. * We fixed an issue with CAD translation errors when running multiple **Import Part** blocks at the same time. ## Keywords: *new release notes whats 3 3.36 36* # nTopology 3.37 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-37-what-s-new > [!NOTE] > > nTopology 3.37 is here! This is a lighter release with usage improvements and bug fixes to improve your nTop experience. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#usageimprovements) * ### [Bug Fixes](#bugfixes) #### Usage Improvements * We added the ability to right click and remove pinned simulation probes. You can now right click on the label itself and select Delete or Delete All ![Example Simulation results on a cube with pinned probes on its surface. You can now right click to delete specific pinned probes or all of the probes.](https://files.learn.ntop.com/help-articles/whats-new/11247338147603.png) #### Bug Fixes * We fixed an issue where changing the inputs of a Custom Block directly within a file would not update. * We fixed an issue where canceling the import of a Custom Block would cause nTop to unexpectedly exit. * We fixed an issue where creating a list from a list via Context Search would cause nTop to unexpectedly exit. * We fixed an issue in the **Nonlinear Thermal Analysis (Beta)** block that was causing it to fail to solve if the component temperature fell outside the temperature range of the thermal properties. With the fix, the thermal properties are clamped at the bounds, so the analysis assumes the minimum value if the component temperature falls under the defined range or the maximum value if it exceeds the range. * We fixed an issue that caused an asymmetrical Cell Map result from the **Warp Cell Map to Body (Beta)** block when the input Cell Map was symmetrical. * We fixed an issue in the **Warp Cell Map to Body (Beta)** block that was causing the Cell Map edges to extend infinitely for certain cases where the original Cell Map was created from two CAD Faces. * We fixed an issue that caused some curves to have infinite lengths after import through the Import Part block. ## Keywords: *release notes release whats new whats 3.37* # nTopology 3.38 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-38-what-s-new > [!NOTE] > > nTopology 3.38 is here! We are back with an update after a two-week hiatus with new features and many improvements. We are releasing two new TPMS Unit Cells with Exact thickness input in Beta and Graph from Mesh Faces block to create your custom unit cell. This release comes with quality-of-life improvements. Be sure to read below about Block Updates and Bug Fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. Table of Contents * ### [Walled TPMS Unit Cells (Beta) with Exact Wall Thickness](#h-01gm5w7djkjwd6nvzt8gj4ecfe) * ### [Graph from Mesh Faces (Beta)](#h-01gm5w7s5q91qs4evk47r6esth) * ### [Usage Improvements](#h-01gm5w842ekf1qgccnbc8t1v8v) * ### [Block Updates](#h-01gm5w8dgx64sfsnwscwe6h6c0) * ### [Bug Fixes](#h-01gm5w8rjq436jyncwcx0tk03m) #### [Walled TPMS Unit Cells (Beta) with Exact Wall Thickness](https://app.ntopology.com/release-notes#new-features-and-improvements) * We released two new Unit Cell blocks into beta: Walled TPMS Unit Cell (Beta) and Walled TPMS Unit Cell with Offset (Beta). These blocks have an additional checkbox for the Exact thickness. When checked, the lattice wall thickness is refined to match the desired Thickness input value. If left unchecked, wall thickness is only approximate, and the deviation from the input value may vary from one location to another on the part. * Lattices will generate much faster when the Exact thickness is unchecked. Use this setting when fast iterations are needed or for scenarios where you do not require exact wall thickness. At later stages in the process, once you have finalized the design, check the Exact thickness. * When the Exact thickness is checked, all downstream operations, such as Booleans, meshing, slicing, etc., will take longer. To avoid this slow-down affecting multiple operations, you can mesh your Exact thickness TPMS using the **Mesh from Implicit Body** block and then convert it back into an Implicit Body using the **Implicit Body from Mesh** block. * Walled TPMS Unit Cell (Beta) * Location: Beta > Lattices - Unit Cells * Description: Single Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS are crystalline minimal surfaces, meaning they are periodic in 3 dimensions. Parameter 1: Thickness - Thickness of the TPMS walls. * Input 1: Unit Cell - The selected Unit Cell to populate the lattice. * Input 2: Orientation - Unit Cell Orientation (UVW). * Input 3: Exact thickness - Option to refine wall thickness to match the desired value. When selected, the generation of lattices that use this cell will be slower. Other downstream operations on this lattice, such as meshing and slicing, will also be slower. * Output: 1 Parameter Unit Cell * Walled TPMS Unit Cell with Offset (Beta) * Location: Beta > Lattices - Unit Cells * Description: 2 Parameter triply periodic minimal surface (TPMS) Unit Cell. Minimal surfaces are defined as surfaces that have the minimum possible surface area stretched across a particular contour. TPMS are crystalline minimal surfaces, meaning they are periodic in 3 dimensions. Parameter 1: Thickness - Thickness of the TPMS walls. Parameter 2: Mid-surface offset - Offset of the TPMS as a positive or negative approximate distance. This will shift the mid-surface wall inward or outward. * Input 1: Unit Cell - The selected Unit Cell to populate the lattice. * Input 2: Orientation - Unit Cell Orientation (UVW). * Input 3: Exact thickness - Option to refine wall thickness to match the desired value. When selected, the generation of lattices that use this cell will be slower. Other downstream operations on this lattice, such as meshing and slicing, will also be slower. * Output: 2 Parameter Unit Cell A comparison of two lattices with Exact thickness checked (blue) and unchecked (gray) ![A comparison of two lattices generated with the same inputs, except one has the Exact Thickness input enabled. The blue lattice has exact thickness enabled and the grey lattice does not.](https://files.learn.ntop.com/help-articles/whats-new/ETC.png) Measuring wall thickness when the Exact thickness is unchecked shows that the thickness is an approximation, although your lattice will generate faster. ![An example rectangular volume lattice that does not have the exact thickness option enabled.](https://files.learn.ntop.com/help-articles/whats-new/Approxthickness.png) Measuring wall thickness with the Exact thickness checked shows that it matches your input value. Areas that look thicker than 1 mm are not perpendicular to the top view. Section cutting these areas with the correct plane confirms the wall thickness is consistently 1mm. ![An example rectangular volume lattice that does have the exact thickness option enabled.](https://files.learn.ntop.com/help-articles/whats-new/exactthickness.png) #### [Graph from Mesh Faces (Beta)](https://app.ntopology.com/release-notes#new-features-and-improvements) * We released a new lattice utility block **Graph from Mesh Faces (Beta)**. You can use this block to create your own custom face-based 1 Parameter Unit Cell. * You can import a Mesh or create a Mesh in nTop using the Create Single Face Mesh, Mesh List, and Merge Meshes blocks for the input to this block. * Input the resulting Graph and a Bounding Box into the Custom Unit Cell (Beta) block to use as a Unit Cell in latticing workflows. * Block Name: Graph from Mesh Faces (Beta) * Location: Beta > Lattices - Utilities * Description: Construct a Graph from the faces of a Mesh. * Input 1: Faces - Mesh to construct the Graph. * Output: Graph ![An example of using the Graph from Mesh Faces block.](https://files.learn.ntop.com/help-articles/whats-new/GFMF1.png) ![The graph generated from the Graph from Mesh Faces block is then used to create a custom unit cell. The custom unit cell is then used to create a Periodic Lattice.](https://files.learn.ntop.com/help-articles/whats-new/GFMF2.png) #### [Usage Improvements](https://app.ntopology.com/release-notes#new-features-and-improvements) * When you create a new file (empty notebook) and import a part, nTop will now automatically Zoom To Selected (Z) to show your imported part in the viewport. * Recently Opened Files - you can now quickly view and open your last ten files directly from the File menu. ![The nTop menu now has an Open Recent section where you can access recently modified files.](https://files.learn.ntop.com/help-articles/whats-new/openrecent.png) * We improved the tooltip hover for custom blocks within the Imports tab of the left sidebar, showing the name, type, description, version, and last modified date. ![Imported Custom blocks now display their name, description, version, and last modified date when you hover over them in the imports tab.](https://files.learn.ntop.com/help-articles/whats-new/cbhover.png) * We added a tooltip hover to the notebook's output type. ![The block type is now displayed when you hover over the outlet of a workflow.](https://files.learn.ntop.com/help-articles/whats-new/outputhover.png) * We added a tooltip hover to blocks or custom blocks with elided titles. ![A block or custom block with an elided title will now have a popup with the block's full name if you hover over it.](https://files.learn.ntop.com/help-articles/whats-new/titlehover.png) #### [Block Updates](https://app.ntopology.com/release-notes#new-features-and-improvements) * We upgraded our CAD interop library for the **Import Part** block to import CAD designs from the latest CAD packages, including Creo 9.0, Inventor 2023, NX 2206, etc. * The **Split Text** block now has an optional delimiter input. The input string will be split into individual characters if there is no delimiter. ![A split text block with its properties panel open.](https://files.learn.ntop.com/help-articles/whats-new/splittext.png) * The **Equals** block now has a default overload of Scalar, Scalar. In addition, it now contains a new Text, Text overload, that will return a True Bool value if two text inputs match (case-sensitive). ![The Equals block now has 4 available overloads.](https://files.learn.ntop.com/help-articles/whats-new/equals.png) * **Static Analysis** has been updated to improve results' accuracy in models containing beam elements. * **Modal Analysis** has been updated to display the default units, Hz, for the Min frequency and Max frequency inputs. ![The Modal Analysis block with Hz units automatically applied to the Min and Max frequency inputs.](https://files.learn.ntop.com/help-articles/whats-new/modalanalysis.png) * The Orthotropic Linear Elastic Property type has been updated to have the nine c\_ij stiffness tensor components and the elastic properties. These components can be accessed from **Orthotropic Linear Elastic Property** and **Orthotropic Linear Elastic Property List.** * We are adding blocks to our overload system, so you can easily switch between blocks based on the input type. When these blocks are added to your notebook, they will no longer have a variant input (shown below in the left Surface Integral block in red) and will now be overloaded (shown below in the right Surface Integral block). ![The old Surface Integral block had a variant input for the Integrand input. It now by default has a Scalar Field input for the Integrand by default.](https://files.learn.ntop.com/help-articles/whats-new/overloadinput.png) When you have an existing block in a notebook (below left) and update to a new version of nTop, the block will now be overloaded and auto-switch to the proper type (below right). ![An example of how the input type automatically switches when updating nTop 3.38.](https://files.learn.ntop.com/help-articles/whats-new/autoswitch.png) We converted over the following blocks from our old variant inputs to now be incorporated into our overload system. * **Surface Integral** now has a Scalar Field and Vector Field overload. * **Surface Area from Body** (all versions) now has an Implicit Body and a Profile overload. * **Curvature** now has a Mesh and Implicit Body overload. * **Gaussian Curvature** now has a Mesh and Implicit Body overload. * **Curve Integral** now has a Line Segment and Curve overload. * **Displacement Point Map** now has a Static Structural Result and Time Dependent Structural Result overload. * **Von Mises Stress Point Map** now has a Static Structural Result and Time Dependent Structural Result overload. * **Deprecated Voronoi Volume Lattice** (all versions) now has only a Mesh input when added to a notebook. * **Deprecated Volume Lattice** (all versions) now only has an Implicit Body input when added to a notebook. Versioning Changes * We made changes to ensure that you can easily select the most up-to-date production versions of blocks. * Each overload signature is now allowed to have independent version numbers. * Overload signatures will filter the version dropdown so that only version numbers with identical signatures will be shown. * Deprecated overloads with unique signatures and no corresponding non-deprecated production version will not show in the overload dropdown UI. * Deprecated overloads with unique signatures and no corresponding non-deprecated production version will show as (Block Name)\[deprecated] in the search bar. * Deprecated overloads will no longer appear in Context Search. * Switching between overloads will automatically update users to the highest production version of a block. It will not switch users to the beta version even if beta blocks are enabled. * **Mesh from Implicit Body 1.0.0**, which is not deprecated, is now accessible through the overload dropdown instead of the version number. * **CAD body from Quad Mesh 1.0.0** will now only be accessible via the search bar as CAD body from Quad Mesh \[deprecated]. * This version will not be accessible through the version selection. * You can upgrade from deprecated 1.0.0 to production 1.2.0 by switching the overload. * **Volume Mesh 1.0.0** will now only be accessible via the search bar as Volume Mesh \[deprecated]. * This version will not be accessible through the version selection. * You can upgrade from deprecated 1.0.0 to production 1.1.0 by switching the overload. #### [Bug Fixes](https://app.ntopology.com/release-notes#new-features-and-improvements) * We fixed an issue where creating a variable from an empty optional list would cause nTopology to exit unexpectedly. * We fixed an issue where opening a file path would not always open the correct path location. * We fixed an issue where making a Scalar Field block input a variable created a Scalar variable instead of a Scalar Field variable. * We fixed an issue where the Block Details window would close when you drag a property chip into the notebook. * We fixed an issue where making a block a variable would automatically append “\_#” to a user-defined name. * We fixed an issue where a notebook would not properly show visibility when returning from directly editing a custom block. * We fixed an issue where saving an image capture with non-Latin characters caused nTopology to exit unexpectedly. * We fixed an issue where the hover tooltip for long names would be cut off. * We fixed an issue where a warning message would be appended to an error message for a single block. * We fixed an issue causing nTop to unexpectedly exit when an empty Point Map was passed into the **Field from Point Map** block. If you provide an empty Point Map, the Field will output a value of 1. * We fixed an issue with the **Warp Cell Map (Beta)** block that caused it to fail if the input Cell Map had only one cell layer on a UVW axis. * We fixed an issue causing nTop to unexpectedly exit if the **Rectangular Volume Lattice** block was given a Volume input with a 0 volume Bounding Box. The Unit Cell input provided was a TPMS cell. Now the block returns an empty Lattice with a warning message. * We fixed an issue that caused nTop to unexpectedly exit on re-running the **Implicit Body from CAD Body** block if the tolerance value was set to less than or equal to 1e-5 mm. * We fixed an issue in the **Natural Frequency Response** block related to a unit conversion issue. The fix should improve the results from this block when used as an objective or a constraint for Optimization. * We fixed an issue that caused the **Modal Analysis** block to report an error when the user input just the Min frequency value. * We fixed an issue where the **Import Part** block could not display CAD Body names. ## Keywords: *new release notes whats 3 38 3.38* # nTopology 3.39 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-39-what-s-new > [!NOTE] > > nTopology 3.39 is here! This release features our new Manufacturing Support Beams (Beta) block to help you design beam based support structures and bug fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit[support.ntopology.com](https://support.ntopology.com/hc/en-us)to gain access to helpful tutorials and support articles. Table of Contents * ### [Manufacturing Support Beams (Beta)](https://app.ntopology.com/release-notes#New%20Feature%201) * ### [Usage Improvements](https://app.ntopology.com/release-notes#Usage%20Improvements) * ### [Bug Fixes](https://app.ntopology.com/release-notes#Bug%20Fixes) #### [Manufacturing Support Beams (Beta)](https://app.ntopology.com/release-notes#new-features-and-improvements) * Manufacturing Support Beams (Beta) is a new block that can help you design beam based support structures using our lattice design workflow or single face mesh generation feature. * You will be able to utilize the Graph output of this block to generate support structures for the internal, external or both regions of the overhang area. * Block Name: Manufacturing Support Beams (Beta) * Location: Beta - Manufacturing Utilities * Description: Generate beams under the points needing support on a body for an additive manufacturing process based on overhang angle. * Input 1 : Body - The body to support. * Input 2 : Plane - The build plane. * Input 3 : Spacing - Distance between support points on the build plane. This input will affect the number of support points calculated and the speed of the algorithm. * Input 4 : Overhang angle - The overhang angle that will define where supports are required. Regions on the body that form a shallower angle than the overhang angle with respect to the build plane will define the support volume. * Input 5 : Min overhang angle - An option to define the support volume only to this minimum. * Input 6 : Support region - An option to define whether to build support for internal, external, or both regions of the body. * Output: Graph ![An example of using the Manufacturing Support Beams block to generate graph beams under unsupported areas of an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/13431530760851.png) ![An example of using the Manufacturing Support Beams block to generate graph beams under unsupported areas of an implicit body. The graph beams are then converted to lattice using the Branched Lattice block.](https://files.learn.ntop.com/help-articles/whats-new/Support_Beams_2.png) #### [Usage Improvements](https://app.ntopology.com/release-notes#new-features-and-improvements) * A block's context menu will no longer show “Make Model Input” when it cannot be made a model input due to containing references to other variables. * We upgraded our Parasolid kernel to v35 for enhanced CAD import capability. #### [Bug Fixes](https://app.ntopology.com/release-notes#new-features-and-improvements) * We fixed an issue where saving file names containing non-Unicode characters was causing nTopology to exit unexpectedly. * We fixed an issue where saving file names containing non-Unicode characters were not being added to the Recently Opened Files list. * We fixed an issue where Custom Blocks from your MyBlocks folder was not being registered as imported when added via a block's input dropdown. * We fixed an issue where blocks could be dragged into the main body of the notebook but could not be dragged into the Inputs section. * We fixed an issue where you could not make a block input a variable when the input value was a CAD Body property chip. * We fixed an issue where CTRL+F wouldn't switch to the Notebook Outline Search while the "Imports" tab in the left sidebar was open. * We fixed an issue in the Frequency Offset input of the Natural Frequency Response block that was used to produce incorrect results. We also updated the implementation of the block to address potential instabilities in high-frequency ranges. These fixes improve the results from this block when used as an objective or a constraint for Optimization. ## Keywords: *what's new what's release notes 3 3.39 nTopology* # nTopology 3.4 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-4-what-s-new ## Version 3.4 > [!NOTE] > > nTopology 3.4 is here! This release features Computational Fluid Dynamics (CFD) Boundary Zones, IGES part export, an extensive list of simulation results that are now properties, usage improvements, and bug fixes. With 3.4, you have the ability to identify CFD boundary zones on a mesh and export the mesh to a downstream CFD application where the zones will be available to specify as boundary condition details. In addition, this release gives you the ability to export parts in an IGES file format and the ability to access simulation results as properties, so that they can be used directly as fields to modify your designs. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [CFD Boundary Zones](#cfd-boundary-zones) * #### [Export Part now supports IGES file format](#export-part-now-supports-iges-file-format) * #### [Simulation Results as Properties](#simulation-results-as-properties) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [CFD Boundary Zones](#new-features-and-improvements) * With Release 3.4, you can identify CFD boundary zones on a mesh and export the mesh to a downstream CFD application where the zones will be available to specify boundary conditions details. Setting up CFD boundary zones allows you to modify the underlying geometry in nTopology without having to manually update the boundary conditions in the CFD application, thereby enabling automated design workflows. * The CFD boundary zones are defined in the new CFD Boundary on FE Mesh block by specifying a Boundary, a set of element faces representing the zone, and a Boundary type from a drop-down selection. ![The CFD Boundary on FE Mesh block.](https://files.learn.ntop.com/help-articles/whats-new/CFDBoundary01.png) * Below is an outline of the new block: * Name: CFD Boundary on FE Mesh (Beta) * Location: Beta > Simulation * Description: Identifies a CFD boundary on an FE mesh, which then can be exported to an external CFD file format. * Input 01: Boundary * Type: FE Boundary * Description: Element set on which the CFD boundary should be applied. * Input 02: Boundary Type * Type: CFD Boundary Enum * Description: CFD boundary type. Parameters of the boundary condition are specified in the external CFD application. * Output: CFD Boundary * To export the mesh to the CFD application, use the new Export FE Mesh to CFD block, which takes a mesh and a list of CFD Boundary on FE Mesh instances. The final mesh file will include the nodes and mesh connectivity, as well as the zones for the CFD boundary conditions. ![The Export FE Mesh to CFD block with a CFD Boundary List in its Boundaries input.](https://files.learn.ntop.com/help-articles/whats-new/CFDBoundary02.png) * Below is an outline of the new block : * Name: Export FE Mesh to CFD (Beta) * Location: Beta > Simulation * Description: Exports an FE mesh and optional CFD boundary zones to an external CFD file format. * Input 01: Path * Type: File Path * Description: System path of exported CFD mesh file. * Input 02: Mesh * Type: FE Mesh * Description: The mesh to export. * Input 03: Units * Type: Length Unit Enum * Description: The target units. * Input 04: Boundaries * Type: CFD Boundary List * Description: The CFD boundary conditions to export with the mesh. * Output: FE Mesh File Data #### [Export Part now supports IGES file format](#new-features-and-improvements) * With Release 3.4, you can export curves, curve lists, parts, and part lists as an .IGES file. * You can view the support file formats and select your desired file type in the Export Part block using the Select Export Path dialogue pop-up. #### [Simulation Results as Properties](#new-features-and-improvements) * Most simulation results are now available as properties and can be used directly as fields to modify designs. The fields are generated from the FE nodal data using Barycentric interpolation, and the values on the surface nodes are used for extrapolation. The resultant field is more accurate than the traditional point map approach and computationally more efficient. * The following table outlines the available properties in each simulation analysis block: ![A list of analysis result properties that are available for each type of analysis in nTop.](https://files.learn.ntop.com/help-articles/whats-new/SimulationProperties.png) #### [Usage Improvements](#new-features-and-improvements) * If your notebook is untitled and you save your file, the file name will also become the notebook name. This feature was released in 3.3. * We've improved how to insert blocks in point and vector variables. Double-click into any of the 3 available inputs and a drop down menu of compatible input types will appear. This feature was released in 3.3. The image below highlights this action: ![ Double-click into any of the 3 available inputs of a point or vector block and a drop down menu of compatible input types will appear.](https://files.learn.ntop.com/help-articles/whats-new/PointVariable.png) * We have better defined hover and selected states for the Named Views and Imported Blocks panels: * The Named Views panel clearly shows which view is selected by highlighting its name. * The Imported Blocks panel clearly shows which block the user is performing an action on by highlighting its name. * We've modified the speed panel to include the word “speed” to better communicate how this feature works. To access the speed panel, click on the double arrow icon. The speed panel lets you adjust the sensitivity of the change in values when dragging the cursor left and right. From this panel, you can scroll up or down to adjust the speed. Click or click hold and drag directly from the desired speed to confirm the value. The larger the value, the faster the change in values when scrubbing. * The Smoothen Body block has been updated to work with the GPU. In summary, all blocks that utilize the GPU acceleration and use the Smoothen Body block, will remain interactive and work with the GPU visualization. The Smoothen Body block itself is not interactive. * Two block types are now available for importing structural and thermal results. For importing time dependent results use **Import Time Dependent Structural Results** and **Import Time Dependent Thermal Results**, and the results for multiple time steps will be imported and available in nTopology. For time independent results, use **Import Static Structural Results** and **Import Static Thermal Results**, in which case only the last step in the file will be imported. * Polyhedral meshes are now supported when importing CFD meshes and results. See an example below: ![An example polyhedral mesh imported into nTop.](https://files.learn.ntop.com/help-articles/whats-new/PolyhedralMeshes.png) #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue in the Rib Lattice from Beams (Beta) block where degenerate faces were created if the lattice had beams that were normal to the Direction input. * We've resolved an issue where Custom Blocks from your “My Blocks Library” which upon import were appearing and behaving as native blocks, which as a result, prevented you from distinguishing them from other blocks (no double type color band on the left) and prevented you from exporting them as nTop files. * We've resolved an issue where the interactive variables were interactive from the variable itself, but not from the input referencing the interactive variable. * We've resolved an issue where Interactivity was broken when properties were used in an otherwise interactive pure implicit notebook. * We've resolved an issue with the Displacement Point Map block, where scalar outputs were becoming unitless. # nTopology 3.40 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-40-what-s-new > [!NOTE] > > nTopology 3.40 is here! This is a lighter release with updates to our Cell Map blocks and bug fixes. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. Table of Contents * ### [Block Updates](https://app.ntopology.com/release-notes#Block%20Updates) * ### [Bug Fixes](https://app.ntopology.com/release-notes#Bug%20Fixes) #### [Block Updates](https://app.ntopology.com/release-notes#new-features-and-improvements) * We improved the speed and released new versions of the periodic Cell Map blocks: * Rectangular Cell Map * Cylindrical Cell Map * Spherical Cell map In most cases, the Cell Map generated in the new block versions will be the same. In certain rare cases where one or more edges of a cell coincides or very nearly coincides with the input Volume you might see a different result. If the output contains an additional cell(s), you can use the Trim Cell Map block to remove them. If the output is missing cells at the border, you can use either the Thicken Body block or Boolean Union block to add material to your Implicit Body. The run-time speed improvement varies depending on your part. In the heat exchanger workflow below the Rectangular Cell Map generation took 239 milliseconds in nTop 3.40 versus 1,952 milliseconds in nTop 3.39, this is roughly an 8x improvement. ![An example of a rectangular cell map overlayed on an implicit body.](https://files.learn.ntop.com/help-articles/whats-new/cell_map.png) #### [Bug Fixes](https://app.ntopology.com/release-notes#new-features-and-improvements) * We fixed an issue where the Production overloads of the Walled TPMS Unit Cell and Walled TPMS Unit Cell with Offset blocks are added to the notebook instead of the Beta overloads when selecting them from Beta->Lattices - Unit Cells in the ribbon. * We fixed an issue where optional inputs with invalid values were erased when the block input was re-selected. * We fixed an issue where downward arrows show incorrectly above the type icons for the inputs of certain list blocks. * We fixed an issue where a white line lingers in the notebook when opening the search-in-place Add Block launcher and selecting somewhere else. * We fixed an issue where the information panel doesn't close upon viewport selection after dragging certain properties into the notebook. * We fixed an issue where certain Any type inputs weren't being carried over when using copy and paste. * We fixed an issue with the Displacement Restraint block. When this block had a combination of a non-zero or empty displacement input and a user-defined frame, it led to erroneous stress and strain results in a Static Analysis. ## Keywords: *ntopology new what's new release notes whats 3 3.40* # nTopology 3.41 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-41-what-s-new > [!NOTE] > > nTopology 3.41 is here! This is a lighter release with minor bug fixes and block updates. Scroll down to read more about it. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Usage Improvements](#h-01grm39p14mc00n831c9d5n3ag) * ### [Block Updates](#h-01grm39vte5f4amd04j51tj0e8) * ### [Bug Fixes](#h-01grm3a0gmp3j4hxsknyz0mrc1) #### [Usage Improvements](#h-01grm39p14mc00n831c9d5n3ag) * We've made navigating long notebooks a bit easier by adding a new tooltip for variables appearing in the Notebook Outline. This tooltip will include any block comments associated with the variable block. In addition, a quick view of the variable value for Scalar, Temperature, Integer, Vector, and Point variable types is included. #### [Block Updates](#h-01grm39vte5f4amd04j51tj0e8) * We've added Learn More links with additional documentation for a few blocks including the recently added **Walled TPMS Unit Cell** and **Walled TPMS Unit Cell with Offset**. #### [Bug Fixes](#h-01grm3a0gmp3j4hxsknyz0mrc1) * We fixed an issue where nTop unexpectedly exited when the Autosave feature was turned on and switched from an edited Notebook to another by pressing "Don't Save" to discard your edits on the first Notebook. * We fixed a bug in the normalized field property that was producing the wrong units. The normalized field property is available for all blocks that output a Scalar Field. If you were using this property chip downstream in your notebook, nTop's backward compatibility would ensure that your workflow will re-run and not break due to this bug fix. * We fixed an issue that caused nTop to exit unexpectedly if you opened the properties panel of the CAD Body from Quad Mesh block if your Mesh input was planar and non-closed. ## Keywords: *new release notes whats 3 41 3.41* # nTopology 3.42 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-42-what-s-new > [!NOTE] > > nTopology 3.42 is here! This release features two of our new blocks. The Cylindrical Restraint (Beta) block enables users to apply boundary conditions in cylindrical directions, and Remap Constraint (Beta) block enforces multiple constraints in Topology Optimization. We also have a new Optimization ribbon to access all of the Optimization blocks easily. Scroll down to read more about all the features in detail. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Cylindrical Restraint (Beta)](#h-01gtaeh9fhj8tm0e5vh4cmaqmg) * ### [Remap Constraint (Beta)](#h-01gtaehgsgf7061f6cekpyss23) * ### [Optimization Ribbon](#h-01gtaehq2wbv722vrmx6dn2mbn) * ### [Usage Improvements](#h-01gtaehyb4nsycw872j3t1rbf6) * ### [Bug Fixes](#h-01gtaej5p3e9kjf92s39nbrnny) ## Cylindrical Restraint (Beta) * The **Cylindrical Restraint (Beta)** block enables users to apply boundary conditions to their FE Models in the three cylindrical directions - axial, radial, and tangential. With this block, users can restrain using either an FE Boundary or a CAD face of the cylindrical surface. In both cases, the block automatically recognizes the surface's axis to provide users feedback about the cylindrical directions. Users can access the axis information in the block properties panel. Additionally, the user can give an axis as an axis input in the block, which acts as the reference for the cylindrical directions and will override the auto-axis recognition scheme. Users must toggle on the block visibility and select to visualize the axis. * This block offers users an appropriate way to simulate mechanical components that are restrained in the axial, tangential, or radial directions, like bolts and hinges. * Block Name: Cylindrical Restraint * Location: Beta > Simulation * Description: Restrains partial or complete cylindrical faces in the 3 cylindrical degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. * Boundary: The boundary entities containing the nodes to restrain. * Radial: Restraint in the radial direction from the axis. * Tangential: Restraint in the tangential direction about the axis. * Axial: Restraint along the direction of the axis. * Axis: This is an optional entry for an axis that defines the cylindrical directions for the restraint. * Output: FE Cylindrical Restraint ![An example of applying a Cylindrical Restraint block to a static analysis of a bike frame.](https://files.learn.ntop.com/help-articles/whats-new/cylindrical_restraint.gif) ## Remap Constraint (Beta) * Users can use the **Remap Constraint (Beta)** block to generate novel geometry with Topology Optimization in nTop. It enforces constraints on the design space by leveraging nTop's unique ability to manipulate scalar and vector fields. The block is named after the Remap Field block that follows a similar technique to perform geometric operations on implicit bodies like shape transformation, mirroring, sectioning, patterning, surface extrudes, and many more applications. * The **Remap Constraint (Beta)** block creates geometric projections that constrain the density field of the design volume in an optimization problem to enforce constraints similar to the symmetry constraint, extrusion constraint, and pattern repetition constraint. Users can simultaneously implement these constraints to an optimization problem, a new capability in nTop. * Block Name: Remap Constraint * Location: Beta > Topology Optimization * Description: Defines a geometric projection to be applied as a constraint to the optimization process. The projection will remap the design variable field to the X, Y, and Z scalar field components of the new evaluation location. * X: Field to evaluate for the X component of the new evaluation location. * Y: Field to evaluate for the Y component of the new evaluation location. * Z: Field to evaluate for the Z component of the new evaluation location. * Region: Region which the remap will be applied to. If unspecified, the constraint will be applied globally to all FE Components in the model. * Output: Optimization Constraint ![An example of using a Remap Constraint block to maintain symmetry in a topology optimization analysis.](https://files.learn.ntop.com/help-articles/whats-new/remap_constraint.gif) ## Optimization ribbon We have published a new Optimization ribbon in nTop to organize the blocks related to Topology Optimization. Here is a table summarizing the blocks that were updated in this process and their location on the new ribbon : | **Block Name** | **Version** | **Location** | **Update** | | - | - | - | - | | Single Body Topology Optimization | 1.0.0 | Optimization | The Filter Boundary input was updated with a default value of 0.5 | | Volume Fraction Constraint | 1.1.0 | Constraints | This block was updated to include units compatibility checking between the design response and the constraint value input | | Stress Constraint | 1.1.0 | Constraints | This block was updated to include units compatibility checking between the design response and the constraint value input | | Displacement Constraint | 1.1.0 | Constraints | This block was updated to include units compatibility checking between the design response and the constraint value input | | Construct Optimized Body | 1.1.0 | Post-Processing | This block has an embedded Smoothen Body block that was updated in the current version. | ![The Optimization ribbon in nTop.](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Ribbon.gif) ## Usage Improvements * A block's context menu will disable “Make Model Input” when it cannot be made a model input due to containing references to other variables. ## Bug Fixes * We fixed an issue causing the **Mesh from Implicit Body** block to arbitrarily mesh one region of an Implicit Body if the model had inner and outer non-connected regions and artifacts in the body's field from a previous Boolean operation. * We fixed an issue with the **Mesh Quality (Beta)** block to correct the skewness values of elements reported by the block. * We fixed an issue with the **Orient Object** block receiving an error when using a scalar field as an input. * We fixed an issue causing nTopology to unexpectedly exit when pressing the “s” hotkey after selecting the “+” for context search. ## Keywords: *new release notes whats 3.42* # nTopology 3.43 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-43-what-s-new > [!NOTE] > > nTopology 3.43 is here! This release features our new blocks **Import Table**, **Extract Column**, and **Scalar from Text** to import any tabular data set to use in your workflow. Scroll down to read the applications and tips for the new blocks. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Import Table](#h-01gtewxdng0zta900ff8m90hvj) * ### [Extract Column](#h-01gtewxnf7v0wcp4rp16s0cj2e) * ### [Scalar from Text](#h-01gtewxtz2x46xpz6ypc7m48rz) * ### [Block Updates](#h-01gtewyqne1cxfsbkvmddjvw6p) #### [Import Table](#h-01gtewxdng0zta900ff8m90hvj) * The **Import Table** block lets you import tabular data by a designated path. The file type must be a CSV using UTF-8 and UTF-16 encoding with a list separator of a comma. Tables consist of rows and column-oriented data stored and extracted as Text type. * This block imports any tabular data set with an arbitrary number of columns. Some examples include: * Users can use this block to store and extract design parameter sets * Users can use this block to store and extract non-linear material. * Block Name: Import Table * Location: Utilities->Exchange * Description: Imports a tabular data set as a Table. * Path: System path of Table file. * Include headers: Option to include the first row of the Table as column headers. * Tips * The imported CSV must be a rectangular MxN table. * You can use the Include headers: input to choose whether to include headers. The input then makes the first row of the Table as column headers. * You can access the header names in the properties of the Table as a Text list. * The block will ignore duplicate and invalid (or empty) headers. * You can extract Table columns into usable lists using the **Extract Column** block. > > > > > > > > >
    > ![An example table in google sheets.](https://files.learn.ntop.com/help-articles/whats-new/14588894815635.png) > > ![Importing the google sheets table into nTop using the Import Table block.](https://files.learn.ntop.com/help-articles/whats-new/14588895791251.png) >
    #### [Extract Column](#h-01gtewxnf7v0wcp4rp16s0cj2e) * The **Extract Column** block extracts a single column of data from a Table as a Text list. * This block can be used to: * Extract a column from a Table block as a text list based on the column header name input. * Extract a column from a Table block as a text list based on the column index integer input. * Block Name: Extract Column * Location: Utilities->General * Description: Extracts a single column of data from a Table as a Text list. * Table: Table to get data from. * \ Header: Header name of the column to extract. * \ Index: Index of the column to extract. * Tips * This block will extract the Table column as a Text list. A text list can be converted into a scalar list using the new **Scalar from Text** block. ![An example of using the Extract Column block to extract columns from the imported table.](https://files.learn.ntop.com/help-articles/whats-new/14588947433875.png) #### [Scalar from Text](#h-01gtewxtz2x46xpz6ypc7m48rz) * The **Scalar from Text** block converts a Text to a Scalar value. * This block converts the Text list output from the **Extract Column** block to a scalar list. * Block Name: Scalar from Text * Location: Utilities->Conversion * Description: Convert Text to a Scalar value. Values that cannot be converted will be shown as NaN. * Text: Text to be converted to a scalar. Note that units are not recognized, and punctuation other than periods or letters are allowed. If using exponential notation, ensure no spaces exist before or after the letter 'e'. Positive and negative exponents are allowed. * Tips * This block will process text lists into scalar lists. * Units will not be recognized and cause conversion issues. * No punctuation other than periods or letters is allowed. * If using exponential notation, ensure no spaces exist before or after the letter 'e'. * Positive and negative exponents are allowed. ![A table imported using the Import Table block. The columns of the table have been extracted using the Extract Column block. We then use the Scalar from Text block to convert the columns into scalar values.](https://files.learn.ntop.com/help-articles/whats-new/14588925331603.png) #### [Block Updates](#h-01gtewyqne1cxfsbkvmddjvw6p) * The Topology Optimization block has been updated to enable probing the density values of elements after the optimization is complete. The desired locations can be identified by moving the probe across the threshold plots and pinning them through a right-click selection menu. This feature can determine the best combination of the threshold parameter and iteration to output the final optimized part. ![An example of Topology Optimization results with thresholded elements displayed. The simulation HUD now allows for probing the results and the ability to callout probe values on the results.](https://files.learn.ntop.com/help-articles/whats-new/14588950214675.png) * We added an optional input called *Extrapolation* to the **Smoothen Body** block. This input only applies if you provide an optional Domain and gives you more control over the smoothing region. Select Inside to fully constrain smoothing to within the Domain, and select Outside to extend the smoothing outside of the Domain. * The **Smoothen Body** block in nTop 3.43 with *Extrapolation:* set to Outside. This is the default setting and will provide the same result as previous nTop versions. ![The Smoothen Body block with the Extrapolation set to inside. Only the area inside the bounding box domain is smooth.](https://files.learn.ntop.com/help-articles/whats-new/14589093055123.png) * *Extrapolation:* set to Inside. Smoothing is limited to inside the bounding box only. ![The Smoothen Body block with the Extrapolation set to outside. the area outside the bounding box domain is smooth.](https://files.learn.ntop.com/help-articles/whats-new/14589094471699.png) # nTopology 3.44 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-44-what-s-new > [!NOTE] > > nTopology 3.44 is here! This release features our new **Export Table** block that exports Table data to an external CSV file and updates our Meshing and Simulation blocks. You can learn more by clicking [here](https://support.ntopology.com/hc/articles/14287918953491). As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Export Table](#h-01gw09a1f64tm1gr62mqjg2fdq) * ### [Block Updates](#h-01gw09a7mgcwmxp0gzrdhc0jb0) * ### [Bug Fixes](#h-01gw09adgzrs3y9wepc25p0m4k) #### Export Table * The **Export Table** block exports Table data to an external CSV file. Tables can be imported into nTop from external CSV files using the **Import Table** block, released in 3.43. * Some examples workflows leveraging Tables are: * Design parameter sets * Nonlinear material data * Block Name: Export Table * Location: Utilities -> Exchange * Description: Exports Table data to an external file. * Path: System path of exported Table file. * Table: Table to export. ![An example of using the Export table block.](https://files.learn.ntop.com/help-articles/whats-new/table1.png) #### Block Updates We updated the 5 blocks related to meshing and simulation due to a meshing library update. The previous versions of these blocks have been deprecated and removed from the software. The blocks, their function, the updated version, and the performance difference from the previous version are outlined in the following table : | **Block Name** | **Function** | **Update Version** | **Change** | | - | - | - | - | | Remesh Surface | Re-mesh an existing surface mesh. | 1.1.0 | Minor differences in mesh output | | Remesh Surface with Cyclic Symmetry | Re-mesh a surface mesh to create conformal nodes between the independent and dependent planes. | Beta | Minor differences in mesh output | | Volume Mesh | To mesh a solid domain with tetrahedral elements that conform to the boundary of the specified domain. | 1.2.0 | Minor differences in mesh output | | Boundary Layer Mesh | To create a solid mesh along the boundary of a surface mesh using a defined number of layers. | 1.2.0 | Minor differences in mesh output | | Modal Analysis | To calculate the natural frequencies and mode shapes of an FE Model. | 1.3.0 | Minor differences in frequency values of rigid body modes | For more information on this update and recommended actions, please refer to the Meshing updates for Simulation & Optimization article on our support landing page. * We improved the **CAD Body from Implicit Body (Beta)** block better to convert thin or small features of an Implicit Body. * We deprecated version 1.0.0 of the **Boolean Subtract** block and released version 1.1.0. This new version corrects an issue that was producing incorrect gradients in some cases when the Subtraction bodies list input contained a single body. The impact of this bug could be seen downstream in the **Manufacturing Support Beam (Beta)** block, where support beams were missing. If you observed missing beams in a workflow that uses the **Boolean Subtract** block, updating the block version will give you the correct support structure. #### Bug Fixes * We fixed an issue with the **Trim Lattice** block that prevented proper block cancellation. CPU usage now reduces as expected after user-triggered cancellation. The **Trim Lattice** block is called internally by the following blocks, which will also now cancel as expected: * **Rectangular Volume Lattice** * **Cylindrical Volume Lattice** * **Spherical Volume Lattice** * We fixed an issue with files containing certain Custom Blocks taking a long time to load. * We fixed an issue where the notebook search wasn't displaying any results. ## Keywords: *new release notes whats 3.44* # nTopology 3.45 - What's New? Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-45-what-s-new > [!NOTE] > > nTopology 3.45 is here! This release features our new Mesh Face from Points block, which lets you construct a custom face-based Unit Cell, and the Orthotropic Stiffness Tensor block to create orthotropic materials. We also have three new design response blocks for your optimization, which are Mass Response (Beta), Center of Mass Response (Beta), and Moment of Inertia Response (Beta). Lastly, our Field Optimization beta blocks allow you to optimize different design parameters for numerous constraints/objectives. Please scroll down to read in detail about all of our new features. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * ### [Mesh Face from Points](#h-01gx467ya8aqbjvsh374ntsv0j) * ### [Orthotropic Stiffness Tensor](#h-01gx4689d07nb5gvtcxz393r0h) * ### [Mass Response (Beta)](#h-01gx467ya8aqbjvsh374ntsv0j) * ### [Center of Mass Response (Beta)](#h-01gx468rnem7qng41cd35ye5s9) * ### [Moment of Inertia Response (Beta)](#h-01gx4691c37h64fntfwzjf4emt) * ### [Field Optimization (Beta)](#h-01gx4697jcnrmccz4mn4hbkw3w) * ### [Parametric Voronoi Component (Beta)](#h-01gx469e8k8aw829ys7x7zr5zg) * ### [Parametric Lattice Component (Beta)](#h-01gx469mq1dfs851t4tn7v8n1p) * ### [Parametric Shell Component (Beta)](#h-01gx469ttarhy2jxbb8f4e2w21) * ### [Parametric Shell-Infill Component (Beta)](#h-01gx46a1ggpnw7gzyg0hdynssh) * ### [Parametric FE Model (Beta)](#h-01gx46a7cgz0vj06ya3p8prvqd) * ### [Parametric FE Component (Beta)](#h-01gx46acee2t557x6sg6ndgn8x) * ### [Usage Improvements](#h-01gx46ahz6qz742h71c1ngy64s) * ### [Block Updates](#h-01gx46apz1mn85aj0jhhpwfz07) * ### [Bug Fixes](#h-01gx46awm86m9ny8bnmd6fe88a) #### Mesh Face from Points * We have added a new block called **Mesh Face from Points**. This block replaces **Create Single Face Mesh** block, which is now deprecated. * You can use this block and **Merge Meshes** block as the input to the **Graph from Mesh Faces (Beta)** block to construct a custom face-based Unit Cell. * Block Name: Mesh Face from Points * Location: Modeling -> Utilities * Description: Creates a Mesh comprised of a single face from 3 or 4 vertex points. Input the face's vertices in counter-clockwise order. If out of order, the face will be self-intersecting. * Vertex 1: The first vertex of the mesh face. * Vertex 2: The second vertex of the mesh face, counter-clockwise from the first. If out of order, the face will self-intersect. * Vertex 3: The third vertex of the mesh face, counter-clockwise from the second. If out of order, the face will self-intersect. * Vertex 4: Optional fourth face vertex, counter-clockwise from the third. If out of order, the face will self-intersect. * Output: Mesh ![An example of the Mesh Face from Points block. The mesh faces are then used to create a custom unit cell after being converted to a graph.](https://files.learn.ntop.com/help-articles/whats-new/meshgraph.jpg) #### Orthotropic Stiffness Tensor * The **Orthotropic Stiffness Tensor** block lets users create an orthotropic linear elastic property directly from the non-zero stiffness tensor components. Besides numerical values, users can define spatially varying material properties using scalar fields for inputs. You can use this block to create orthotropic material properties for simulation and optimization workflows. * Block Name: Orthotropic Stiffness Tensor * Location: Simulation > Material Attributes * Description: Defines an Orthotropic Linear Elastic Property by specifying a positive definite, second order, symmetric stiffness tensor in Voigt notation for the constitutive relationship, i=Cij\*j (i,j=1,6), where =xx,yy,zz,yz,zx,xy and =xx,yy,zz, yz,zx,xy . Providing scalar fields as inputs will result in spatially varying material properties. * C11: Material stiffness component 1,1. * C12: Material stiffness component 1,2. * C13: Material stiffness component 1,3. * C22: Material stiffness component 2,2. * C23: Material stiffness component 2,3. * C33: Material stiffness component 3,3. * C44: Material stiffness component 4,4. * C55: Material stiffness component 5,5. * C66: Material stiffness component 6,6. * Output: Orthotropic Linear Elastic Property #### Mass Response (Beta) * The **Mass Response** block can be used as an optimization objective or a constraint in topology optimization or field optimization. The response is similar to a volume fraction response and requires an overall mass input instead of the volume ratio between the optimized geometry and the design space. * Block Name: Mass Response * Location: Beta > Topology Optimization * Description: Create a Design Response that measures the total mass in some region. The response is computed by integrating the density field over the region. * Region: Region that the Design Response will be integrated over. If a region is not provided, the response will be integrated over the entire design space. * Output: Design Response #### Center of Mass Response (Beta) * The **Center of Mass Response** block allows a user to optimize for the location of a center of mass in topology optimization or set a constraint to ensure the center of mass of an object is within a threshold to a point, axis, or plane. * Block Name: Center of Mass Response * Location: Beta > Topology Optimization * Description: Create a Design Response that measures a component of the Center of Mass vector in some region. For each vector component, the response is computed by integrating one of the following functions: vx=\*xM,vy=\*yM,vz=\*zM over the region, where x, y, z are the coordinates of the material point in the given reference frame, is the density field and M is the total mass in the region. * Direction: Component of the Center of Mass vector that will be used as a design response. * Region: Region that the Design Response will be integrated over. If a region is not provided, the response will be integrated over the entire design space. * Frame: Reference frame that the center of the mass vector is defined in. If a frame is not provided, the global frame will be used. * Output: Design Response #### Moment of Inertia Response (Beta) * The **Moment of Inertia Response** allows a user to maximize or minimize a component of the moments of inertia as a design objective. The design response can also be used as a constraint in an optimization problem with other objectives like compliance or volume fraction. * Block Name: Moment of Inertia Response * Location: Beta > Topology Optimization * Description: Create a Design Response that measures a component of the mass moment of inertia tensor in some region. For each tensor component, the response is computed by integrating one of the following functions: Ixx=*(y2+z2), Iyy=*(x2+z2), Izz=\*(x2+y2), Ixy=Iyx=-*x* y, Ixz=Izx=-*x* z, Iyz=Izy=-*y* z over the region, where x, y, z are the coordinates of the material point in the given reference frame, and rho is the density field. * Moment of inertia: Component of the Inertia tensor. * Region: Region that the Design Response will be integrated over. If a region is not provided, the response will be integrated over the entire design space. * Frame: Reference frame that the inertia tensor is defined in. If a frame is not specified, the global coordinate system will be used. * Output: Design Response #### Field Optimization (Beta) * We have added a set of 7 new blocks to enable an exciting new functionality called **Field Optimization**. Field Optimization extends nTopology's optimization toolset and allows users to optimize different design parameters for numerous constraints/objectives. The initial functionality released in 3.45 will enable optimizing the following structures: Voronoi lattices, Graph-based and TPMS lattices, variable shell, and variable shell+infill. To learn more about the new functionality, please visit our [How to run a field optimization](https://support.ntopology.com/hc/en-us/articles/15022831283475) and [field optimization FAQ](https://support.ntopology.com/hc/en-us/articles/15280003943571). You can also click on the Learn More buttons on the individual blocks to understand each algorithmic control. * Block Name: Field Optimization * Location: Beta > Field Optimization * Description: Perform a field optimization on a Parametric FE Model. * Model - The parametric finite element model that defines the design space. * Objective - The objective function for the optimization process. * Constraints - The constraints to satisfy during the optimization process. * Max iterations - The maximum number of iterations allowed during the optimization process. * Min objective change - The minimum relative change in the objective function between consecutive iterations to consider the optimization process converged. Constraints must be satisfied in addition to this criterion. * Min variable change - The minimum relative change in the variable fields between consecutive iterations to consider the optimization process converged. The process will terminate when the largest relative variable change is below this threshold, and all the constraints are satisfied. Save increment - Controls the amount of data that is accessible (within the same session) after the optimization is complete. 0 will save results for only the first and last iterations. 1 will save results at every iteration. For any value N greater than 1, results will be saved for every N iteration. **Note:** Only the last iteration is available when you open a \*.ntop file with a built Field Optimization block, regardless of this input value. * Move limit - A scalar value between 0 and 1, which sets the maximum update to the design variables per iteration as a percentage of the design variable range: Max variable update = Move limit \* (Max variable update - Min variable update). * Output: Field Optimization Result #### Parametric Voronoi Component (Beta) * Block Name: Parametric Voronoi Component * Location: Beta > Field Optimization * Description: Create a Parametric FE Component for a Voronoi Lattice with the following design parameters: cell size and beam thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. * Mesh - The finite element mesh that defines the design space. * Material - Material that the Voronoi lattice is composed of. * Min cell size - The minimum allowable cell size for the Voronoi lattice. * Max cell size - The maximum allowable cell size for the Voronoi lattice. * Initial cell size - The initial cell size for the Voronoi lattice. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. * Min thickness - The minimum allowable beam thickness for the Voronoi lattice. * Max thickness - The maximum allowable beam thickness for the Voronoi lattice. * Initial thickness - The initial beam thickness for the Voronoi lattice. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. * Filter size - A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. * Output: Parametric FE Component ![An example of the Parametric Voronoi Component block. The image shows a latticed part with varying thickness beams.](https://files.learn.ntop.com/help-articles/whats-new/fo1.png) #### Parametric Lattice Component (Beta) * Block Name: Parametric Lattice Component * Location: Beta > Field Optimization * Description: Create a Parametric FE Component for a periodic lattice with the following design parameters: lattice thickness. The material model is homogenization-based so the model accuracy will improve as the cell size is reduced. * Mesh - The finite element mesh that defines the design space. * Material - Material that the periodic lattice is composed of. * Unit cell - The unit cell used to create the periodic lattice. * Boundary behavior - Determines how the periodic lattice will fill the design space. The Conformal option will warp the outer cells to fill the design space. The Trimmed option will trim the lattice to the design space. * Cell size - The cell size for the periodic lattice. * Min thickness - The minimum allowable lattice thickness. * Max thickness - The maximum allowable lattice thickness. * Initial thickness - The initial lattice thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. * Density threshold - The threshold signifies a lower bound limit on lattice porosity (=relative density), under which the lattice will be eliminated from the design space. Maintaining a 0 threshold will fill the entire domain with a lattice in the optimization process. A threshold between zero and one will remove the design boundary in parallel to the lattice optimization, removing less important material. * Filter size - A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. * Output: Parametric FE Component ![An example of the Parametric Lattice Component block. The image shows a latticed part with varying thickness beams.](https://files.learn.ntop.com/help-articles/whats-new/fo2.png) #### Parametric Shell Component (Beta) * Block Name: Parametric Shell Component * Location: Beta > Field Optimization * Description: Creates a Parametric FE Component, which has been parameterized with the following design parameter for variable shell thickness. The block uses a FE Solid Mesh as an input Mesh. After field optimization, the optimal value for the shell thickness will apply to the design space. * Mesh - The finite element mesh that defines the design space. * Material - Material that the shell is composed of. * Min shell thickness - The minimum allowable thickness for the shell. * Max shell thickness - The maximum allowable thickness for the shell. * Initial shell thickness - The initial shell thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. * Filter size - A length measure that is used to control the smoothness of the design parameter field. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. * Output: Parametric FE Component ![An example of the Parametric Shell Component block. The image shows a part that has variable shell thickness applied. ](https://files.learn.ntop.com/help-articles/whats-new/fo3.png) #### Parametric Shell-Infill Component (Beta) * Block Name: Parametric Shell-Infill Component * Location: Beta > Field Optimization * Description: Create a Parametric FE Component for a variable shell structure with a periodic lattice infill with the following design parameters: shell thickness (inward direction), and lattice thickness. The infill material model is homogenization-based, so the model accuracy will improve as the cell size is reduced. * Mesh - The finite element model that defines the design space. * Material - Material that the shell and lattice infill is composed of. * Unit cell - The unit cell used to create the lattice infill. * Cell size - The cell size of the lattice infill. * Min infill thickness - The minimum allowable lattice infill thickness. * Max infill thickness - The maximum allowable lattice infill thickness. * Initial infill thickness - The initial lattice infill thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. * Min shell thickness - The minimum allowable thickness for the shell. * Max shell thickness - The maximum allowable thickness for the shell. * Initial shell thickness - The initial shell thickness. This defines the starting point of the optimization. Values exceeding the min/max bounds will be clamped. * Filter size - A length measure that is used to control the smoothness of the design parameter fields. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. * Output: Parametric FE Component ![An example of the Parametric Shell-Infill Component block. The image shows a part that has variable shelling applied, and the inside of the part is filled with variable thickness lattice.](https://files.learn.ntop.com/help-articles/whats-new/fo4.png) #### Parametric FE Model (Beta) * Block Name: Parametric FE model * Location: Beta > Field Optimization * Description: Combine a list of Parametric FE Components and corresponding FE Connectors into a Parametric FE Model. The block performs checks to determine whether all objects are restrained properly. * Components - The Parametric FE Components in the model. * Connectors - The connectors and interactions in the model. * Output: Parametric FE Model #### Parametric FE Component (Beta) * Block Name: Parametric FE Component * Location: Beta > Field Optimization * Description: Create a Parametric FE Component by assigning material, porosity, and geometry function objects to an FE Mesh. * Mesh - The finite element mesh that defines the design space. * Material function - A function object that describes the material model as a function of the design parameters. * Porosity function - A function object that describes the material porosity (also known as relative density) as a function of the design parameters. * Geometry function - A function object that describes the implicit geometry as a function of the design parameters. The function will only be used for visualization and will not impact the optimization process. * Parameter names - A list of names for the design parameters. These names will be used to identify the design parameters in the HUD. The order of parameters in the list must correspond to the order used in the material, porosity, and geometry functions. * Lower bounds - A list of minimum field values for the design parameters. The order of parameters in the list must correspond to the order used in the material, porosity, and geometry functions. * Upper bounds - A list of maximum field values for the design parameters. The order of parameters in the list must correspond to the order used in the material, porosity, and geometry functions. * Initial values - A list of initial field values for the design parameters. Values exceeding the design domain spanned by 'Lower bounds' and 'Upper bounds' will be clamped. The order of parameters in the list must correspond to the order used in the material, porosity, and geometry functions. Parameter constraints - An optional collection of geometric constraints applied to individual design parameters. The constraints are stored in a Dictionary with keys representing design parameter indices and values representing constraints. * Filter size - A constant or spatially-varying length measure that ensures mesh-independency. A lower bound of 0 will be enforced. If not specified, a default will be estimated based on the model size. * Frame - The reference frame of the material model. * Output: Parametric FE Component #### Usage Improvements * When manually switching from an overloaded block that has an input containing an auto-populated default value, nTopology will no longer prevent you from switching overloads and will discard the default value (shown below with Subdivisions input). **Note:** Deleting the default value and typing in any user-defined value will prevent the overload from switching until the value is cleared. ![An example of changing the overload of the FE lattice Component block.](https://files.learn.ntop.com/help-articles/whats-new/overloadswitch.gif) #### Block Updates * We released a new version of the **Boolean Union** block and deprecated version 1.0.0, which had a bug that produced the incorrect gradient on the surface of the output body when we set the Blend type to Rounded with a Blend radius of 0. Version 1.1.0 fixes this issue, and as a result, other operations downstream that were affected by this will be fixed. For example, if you saw the warning “Input Body contains 0-length gradients” in the Mesh from Implicit Body block, that warning should go away, and your mesh will generate faster. * We released a new version, 2.4.0, of the **Mesh from Implicit Body** block and have a deprecated version, 2.3.0, due to an improvement that prevents nTop from unexpectedly exiting, reduces self-intersections frequency in some instances, and improves block runtime. * We have updated the **CAD Body from Implicit Body (Beta)** block, adding an optional third input, Preserved CAD. You can input one or more CAD Bodies, and the block will iterate through the CAD Body's faces and attempt to stitch those faces into the final result. You can also input CAD faces directly, which will auto-cast to a CAD Body. If the sewing does not succeed, the block will ignore the face input. The image below shows planar ribbing applied to a panel imported as CAD and converted to an implicit body. ![planar ribbing applied to a panel imported as CAD and converted to an implicit body](https://files.learn.ntop.com/help-articles/whats-new/cad1.png) The image below shows the Implicit Body converted to a CAD Body in nTop 3.44 using the **CAD Body from Implicit Body** block. ![ Implicit Body converted to a CAD Body in nTop 3.44 using the CAD Body from Implicit Body block.](https://files.learn.ntop.com/help-articles/whats-new/cad2.png) The image below shows the Implicit Body converted to a CAD Body using the **CAD Body from Implicit Body** block in nTop 3.45. In the optional Preserved CAD input, we provided the base of the panel, imported initially into nTop. As a result, five planar faces are present in the CAD Body. ![ Implicit Body converted to a CAD Body using the CAD Body from Implicit Body block in nTop 3.45. In the optional Preserved CAD input, we provided the base of the panel, imported initially into nTop. As a result, five planar faces are present in the CAD Body.](https://files.learn.ntop.com/help-articles/whats-new/cad3.png) #### Bug Fixes * We fixed an issue in the **Refine Mesh** block, causing nTop unexpectedly exit under certain random and rare conditions. * We fixed an issue where canceling during the “Regenerating Objects” stage of opening a file would cause nTopology to exit unexpectedly. * We fixed an issue where we did not display the ribbon for new users. * We fixed an issue: when duplicating a block, the new block would reference any intermediate values from the old one. * We fixed an issue with the Outline Search not showing blocks that are variables. * We fixed an issue with property chips accessed from Custom Blocks, inheriting the Custom Block visual indicator and context menu option. * We fixed an issue with property chips accessed from overloaded blocks inheriting the overload dropdown UI button. * We fixed an issue where context search doesn't yield results for non-variable embedded blocks. * We fixed an issue where context search doesn't yield results for some deprecated blocks. * We fixed an issue where selecting and removing unused blocks from the Imports panel would not mark your file as unsaved. * We fixed an issue in the **Mirror FE Mesh** block that caused the **Topology Optimization** block to crash when users use the block on quadratic volume meshes. This fix will prevent this nTop from unexpectedly exiting in any analysis block using quadratic volume meshes generated by the **Mirror FE Mesh** block. ## Keywords: *new release notes whats 3.45* # nTopology 3.5 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-5-what-s-new ## Version 3.5 > [!NOTE] > > nTopology 3.5 is here! This release is stacked with new functionality, such as the Remove Mesh Faces by Body block that gives you the ability to remove faces from a mesh using an implicit body as the selection tool. We also introduced a new constraint for topology optimization which enforces geometric patterns in either rectangular, cylindrical, or spherical dimensions, the ability to trim Cell Maps, and notebook section enhancements such as the ability to freely rearrange them. In addition, there are several key usage improvements, such as more GPU accelerated blocks and more simulation results as properties. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Remove Mesh Faces by Body](#remove-mesh-faces-by-body) * #### [Notebook Section Enhancements](#notebook-section-enhancements) * #### [Trim Cell Map (Beta)](#trim-cell-map-beta)) * #### [Pattern Constraint for Topology Optimization](#pattern-constraint-for-topology-optimization) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Remove Mesh Faces by Body](#new-features-and-improvements) * In nTopology 3.5, we're releasing Remove Mesh Faces by Body. This block allows you to selectively remove or keep certain faces of a mesh using an Implicit Body selection tool. Faces with at least one vertex within the implicit will remain. If Reverse is checked, faces with at least one vertex outside of the implicit will remain. This is particularly useful when you need to construct a surface lattice on just one particular segment or surface of a mesh. * Location: Modeling - Utilities * Name: Remove Mesh Faces by Body * Description: Removes faces of a mesh using an Implicit Body. Faces with at least one vertex within the implicit will remain. If Reverse is checked, faces with at least one vertex outside of the implicit will remain. * Input 01: Mesh * Type: Mesh * Description: The surface mesh from which to remove faces. * Input 02: Body * Type: Implicit Body * Description: The implicit body selection tool. * Input 03: Reverse * Type: Bool * Description: Option to select faces outside the implicit body instead of inside. * Output: Mesh * An implicit body is used as a tool to select a portion of faces from the outer surface of the arm. These faces will then be used to construct a brace.![An implicit body overlapping a mesh.](https://files.learn.ntop.com/help-articles/whats-new/RemoveMeshFaces_01.png) * The resulting mesh and the Implicit Body selection tool are passed into the Lattice Body from Surface Voronoi (Beta) block, generating the brace. ![A lattice structure made from the implicit body region.](https://files.learn.ntop.com/help-articles/whats-new/4402937481107.png) #### [Notebook Section Enhancements](#new-features-and-improvements) * You can now freely rearrange sections in your notebook. To freely move a section, hover over the target section. An icon will appear displaying 3 vertical dots. Left mouse click on this icon to activate the move / rearrange functionality. While dragging the section either up or down, a blue horizontal line will appear between other sections indicating where the target section will be placed. See the gif below to observe the behavior:![A gif showing how notebook sections can be reordered by clicking and dragging them below a different section.](https://files.learn.ntop.com/help-articles/whats-new/4402937482515.png) * While dragging a block from one section to another, the target notebook section will expand, giving you more control over where the block will be placed within the section. * ![While dragging a block from one section to another, the target notebook section will expand, giving you more control over where the block will be placed within the section.](https://files.learn.ntop.com/help-articles/whats-new/4402945537939.png) * In addition, we've added a new feature to the bottom of the notebook called **+New Section**. Pressing this button will create a new section directly beneath the last section in your notebook.![There is now a notebook button for adding a new section.](https://files.learn.ntop.com/help-articles/whats-new/4402937481491.png) * Lastly, we've updated the behavior of the notebook section delete function to delete all blocks within the section as well. In the event you didn't mean to delete a section, you can always undo via Edit > Undo or pres the hotkeys Ctrl+z. #### [Trim Cell Map (Beta)](#new-features-and-improvements) * A new block Trim Cell Map (Beta) has been added to our new latticing capabilities. Trim Cell Map (Beta) allows you to trim a cell map using an Implicit Body, creating your desired shape before constructing a lattice. You have the option to keep cells that are entirely inside the implicit, cells whose centroid is inside, or cells that are touching. The option to reverse and keep cells that are outside the implicit is provided as well. * Location: Beta > Lattices - Cell Map * Name: Trim Cell Map * Description: Trim a cell map with an implicit body. * Input 01: Cell map * Type: Cell Map * Description: Cell map to trim. * Input 02: Body * Type: Implicit Body * Description: Implicit body trimming tool. * Input 03: Fill type * Type: Volume Lattice Fill Enum * Description: Rule for trimming the cell map. * Input 04: Cells to remain * Type: Inside or Outside Enum * Description: Option to keep the cells that are inside or outside of the trimming tool. * Output: Cell Map #### [Pattern Constraint for Topology Optimization](#new-features-and-improvements) * A new constraint is available for topology optimization which enforces geometric patterns in either rectangular, cylindrical, or spherical dimensions. The constraint is invoked with the Pattern Repetition Constraint block, which takes a Cell Map as an input variable. A Cylindrical Cell Map will create a cyclic symmetric pattern, a Spherical Cell Map will create a radially symmetric pattern, and a Rectangular Cell Map will create a rectangular pattern. ![The Pattern Repetition Constraint block](https://files.learn.ntop.com/help-articles/whats-new/4402937482259.png) * Name: Pattern Repetition Constraint * Location: Beta > Topology Optimization * Description: Constrain the topology optimization process to maintain a repeated pattern defined by a Cell Map. * Input 01: Cell map: * Type: Cell Map * Description: A cell map that defines the repeated pattern. * Output: Optimization Constraint * Illustrative example: Enforcing a 45° cyclic symmetry pattern:![The left image shows a Topology Optimization set up using the Pattern Repetition Constraint. The right image shows the results of running that optimization.](https://files.learn.ntop.com/help-articles/whats-new/4402945537683.png) #### [Usage Improvements](#new-features-and-improvements) * The Transfer Function block has been updated to leverage GPU Acceleration and is interactive. To enable GPU Acceleration, go to File > Settings > General and check **Enable GPU Acceleration (beta).** * We've updated the Vector block so that it automatically assigns units to all inputs once you have provided units to one of the three inputs. Prior to this release, you would have to add units to each input in order for the block to run. * The progress bar now displays the name of your variable instead of the name of the block. * We've updated the variable remove contents behavior so that this doesn't happen automatically when dragging a variable from the input section of a notebook to the body of the notebook. However, you can still perform this action by right clicking on the block and selecting “Remove Contents” from the available menu options. * More simulation results are now available as properties in the Static Analysis block and can be used directly as fields to modify designs. The fields are generated from the FE nodal data using Barycentric interpolation, and the values on the surface nodes are used for extrapolation. The resultant field is more accurate than the traditional point map approach and computationally more efficient. ![The available analysis result properties for Static Analysis.](https://files.learn.ntop.com/help-articles/whats-new/4402937500819.png) #### [Bug Fixes](#new-features-and-improvements) * We resolved the issue where you were getting automatically brought back up to the top of the notebook when double clicking on the object name of any block. * We resolved an issue where the Autobuild button was only appearing on a block you modified, rather than appearing on all blocks that were impacted by your change. * We resolved an issue that was causing the view of your geometry to regenerate when you clicked inside an interactive input. * We resolved an issue where the porosity data of a Voronoi Volume Lattice Body that was constructed using a mesh was incorrect if you trimmed the Voronoi Volume Lattice Body. ## Keywords: *new whats 3.5* # nTopology 3.6 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-6-what-s-new ## Version 3.6 > [!NOTE] > > nTopology 3.6 is here! This release features two new blocks that enhance nTopology's Topology Optimization capabilities: the new Natural Frequency Response (beta) block and the updated Overhang Constraint (beta) block. Also, many significant usage improvements are included in this release: GPU accelerated primitives/blocks, promotion of simulation import blocks to production, transformation support on FE Mesh, Volume Mesh Block update, etc. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Natural Frequency Response (Beta)](#natural-frequency-response-beta)) * #### [Updated Overhang Constraint (Beta)](#updated-overhang-constraint-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Natural Frequency Response (Beta)](#new-features-and-improvements) * A new design response for natural frequency has been added to our topology optimization capabilities. * The Natural Frequency Response (beta) enables a wide range of use cases, including maximization or lower bound constraints on the smallest natural frequency, as well as frequency gap constraints and gap maximization. * The natural frequency design response f is given as: f = min(|fi - f0|), where fi \[Hz] is the i'th closest natural frequency to reference frequency f0. The smallest eigenfrequency response can be retrieved with f0 = 0, whereas band-gap responses around a reference can be constructed with a non-zero f0. More specifically, a band gap constraint prohibiting frequencies in the range \[flower, fupper] can be formulated as f > δf with f0 = (fupper + flower)/2, δf = (fupper − flower)/2. * Location: Beta > Topology Optimization * Name: Natural Frequency Response (beta) * Description: For a given set of boundary conditions, construct a design response of the minimum natural frequency, f = min(|fi - f0|), where fi are the lowest natural frequencies (i = 1, .., Number of modes) and f0 is a given offset value. * Input 01: Load case * Type: Boundary Condition List * Description: Load case for the design response. * Input 02: Number of modes * Type: Integer * Description: Number of modes that will be searched for and included in the response computation. * Input 03: Frequency offset * Type: Scalar * Description: Frequency offset used in the design response computation. * Output: Design Response #### [Updated Overhang Constraint (Beta)](#new-features-and-improvements) * The Overhang Constraint (beta) block has been updated to include two more options enabling more design freedom. * The first option is to auto-detect boundary facets that will be used as support boundaries for a given build direction. At the same time, the existing “Support boundaries” has been changed to be optional since it is not needed when the “Auto-detect support” option is selected. * Furthermore, we are introducing an option to include passive regions in the overhang filter. That means that the topology optimization will work towards adding support for those regions as well. * Location: Beta > Topology Optimization * Name: Overhang Constraint (beta) * Description: Setup a maximum overhang constraint for a topology optimization process. * Input 01: Build direction * Type: Vector * Description: Build direction. * Input 02: Max angle * Type: Scalar * Description: Max overhang angle with respect to build plate. * Input 03: Support boundaries * Type: FE Boundary List * Description: Support boundaries which material can be placed onto. * Input 04: Auto-detect support * Type: Bool * Description: Option to automatically detect boundary facets of the design space that will require support for a given print direction and critical overhang angle. * Input 05: Include passive * Type: Bool * Description: Option to include passive regions in the overhang filter evaluation. * Output: Optimization Constraint * The following is an Illustrative example, which enforces an overhang constraint with both options enabled: “Auto-detect support” and “Include passive” ![The left image shows a Topology Optimization set up using the Overhang Constraint. The right image shows the results of running that Topology Optimization.](https://files.learn.ntop.com/help-articles/whats-new/4403654585107.png) #### [Usage Improvements](#new-features-and-improvements) * We have updated the layout and behavior of the settings window to simplify the user experience. Each subset of options now has titles to make them easier to navigate. Plus, we have reduced the number of buttons to confirm the settings. When a change is made, it will update immediately, providing instant feedback. Pressing the Ok button will confirm the change and close the window. * Primitive geometry types now leverage GPU Acceleration and are interactive. This improvement is applied to the following primitive blocks: Box, Cub, Box from Points, Skewed Box, Cylinder, Cylinder from Line Segments, Sphere, Cone, Torus, and Boundary Box. The following blocks have also been updated to leverage GPU Acceleration in rendering: Cell Map on CAD Face, Cell Map between CAD Face, Cell Map on Quad Mesh. To enable GPU Acceleration, go to File > Settings > General and Enable GPU Acceleration. * Below is a list of blocks that have been modified to leverage GPU Acceleration but are not interactive. Instead, their results in the form of fields (accessed via the properties tab) do not break downstream interactivity where they are utilized. * Buckling Analysis * Modal Analysis * Nonlinear Thermal Analysis * Static Analysis * Thermal Analysis * Transient Thermal Analysis * Import CFD Analysis Result * Import Static Structural Result * Import Static Thermal Result * Import Modal Result * Import Buckling Result * Import Time Dependent Structural Result * Import Time Dependent Thermal Result * We've added length as a property to the Curve type. You can access the length by clicking on the Block Information panel, selecting the Properties tab, and expanding the Properties drop-down. ![A curve through points block with its properties panel open. The properties panel now has a length property chip for curves](https://files.learn.ntop.com/help-articles/whats-new/4403654624147.png) * In nTopology 3.6 we're promoting the following simulation import blocks from beta to production. These blocks allow you to import simulation results from other software: * Import CFD Analysis Result * Import Static Structural Result * Import Static Thermal Result * Import Modal Result * Import Buckling Result * Import Time Dependent Structural Result * Import Time Dependent Thermal Result * Import Topology Optimization Result * FE Mesh can now convert to a Spatial3D type and transformations can be applied on it: Scale Object, Orient Object, Rotate Object, Transform Object, and Translate Object. * We are updating the Volume mesh block. You can find the up-to-date block in the simulation ribbon, or by searching for it in the block search bar. The old version 1.0.0 required specifying the element shape of the output mesh (Tetrahedra or Hybrid). The updated version will automatically use tetrahedra or quadrilateral pyramids based on the provided domain. Updating to the new version (1.1.0) will not affect the result. If the block, in version 1.0.0, had thrown an error asking to switch shape, switching to the version 1.1.0 will result in a valid output. Below is an outline of the updated version of the block: * Location: Simulation > Mesh * Name: Volume Mesh * Description: Mesh a solid domain with tetrahedral elements that conform to the boundary of the specified Domain. If the Domain contains quad faces, quadrilateral pyramids will be used. The Remesh Surface block can be used to remesh the boundary Domain if necessary. If the input domain contains defects that cause this block to fail, consider using the Robust Tetrahedral Mesh block. * Input 01: Domain * Type: Mesh * Description: The domain to mesh. * Input 02: Edge length * Type: Scalar Field * Description: The target edge length of the generated elements. * Input 03: Growth rate * Type: Scalar * Description: The rate at which the size of adjacent elements can grow. * Output: Volume Mesh * CFD results are now available as properties in the Import CFD Analysis Result block and can be used directly as fields to modify designs. The fields are generated from the FE nodal data using Barycentric interpolation, and the values on the surface nodes are used for extrapolation. The resultant field is more accurate than the traditional point map approach and computationally more efficient. The results contained in the imported CFD file are organized in Dictionary types with the key being a list of names of the results and the values being a list of scalar or vector fields. ![CFD results are now available as properties in the Import CFD Analysis Result block and can be used directly as fields to modify designs](https://files.learn.ntop.com/help-articles/whats-new/4403654588947.png) * Thermal reaction flux is now available in the HUDs of thermal analysis results (Static Thermal Result and Time Dependent Thermal Result) and as properties that can be used directly as a field to modify designs. The field is generated from the FE nodal data using Barycentric interpolation, and the values on the surface nodes are used for extrapolation. ![The new added analysis result properties for the Thermal Analysis, Import Static Thermal Result, Nonlinear Thermal Analysis, Transient Thermal, and Import Time Dependent Thermal Result blocks.](https://files.learn.ntop.com/help-articles/whats-new/4403654589587.png) * New properties have been added to the FE Boundary type in addition to the already existing fe mesh property. ![The new FE Boundary Property types for the FE Boundary by Body and FE Boundary by Flood Fill blocks.](https://files.learn.ntop.com/help-articles/whats-new/4403654663699.png) * New properties have been added to the FE Region type. ![The new FE Region Property for the FE Region by Body block.](https://files.learn.ntop.com/help-articles/whats-new/4403654589331.png) #### [Bug Fixes](#new-features-and-improvements) * We've resolved an issue with the Pattern Repetition Constraint (Beta) where non-symmetric meshes were leading to unexpected results. * We've resolved an issue where the base units were not correct while probing values in the field viewer for complex units of force (N/lbf), and pressure (Pa/psi). In nTopology 3.6, the values, in the field viewer, are followed by the correct complex units, instead of the base units. * We've resolved the issue where you were not able to change the color of face based lattices. * We've resolved an issue where selecting a cell map on the scene was not possible while in Navigate Map. * We've fixed an issue where we were interpreting 2D Implicit Bodies as extrusions. * We've resolved an issue in the Cell Map between CAD Faces block where changing the input parameter Second UV Origin causes the UV coordinates of the second face to flip rather than rotate. ## Keywords: *release whats new 3.6* # nTopology 3.7 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-7-what-s-new ## Version 3.7 > [!NOTE] > > nTopology 3.7 is here! This release features a new overload to the Cell Map between CAD Faces block in our new lattice pipeline, which automatically creates a lattice without self-intersections, so you don't have to think about the face parameterization or UV origins. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Overload: Cell Map between CAD Faces (Beta)](#overload-cell-map-between-cad-faces-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Overload: Cell Map between CAD Faces (Beta)](#new-features-and-improvements) * The Cell Map between CAD Faces (beta) block has been simplified. The advanced block inputs prior to the 3.7 release are now available as an overload. This simplified block allows you to quickly create a Cell Map between two CAD faces without thinking about the face parameterizations or UV origins. * When you add the Cell Map Between CAD Faces (beta) block to a notebook, you'll see the simplified block with only three inputs: the first CAD face, the second face, and a Vector for the UVW cell count. Internally, nTopology will reparameterize the second CAD face as needed to ensure that the resulting Cell Map is free of self-intersections. You can switch to the advanced overload by clicking the dropdown next to the block name. The advanced overload lets you manually manipulate the face parameterizations or UV origins if needed. Below is an outline of the new default, simplified block. * Name: Cell Map between CAD Faces (Beta) * Location: Beta > Lattices - Cell Map * Description: Constructs volumetric lattice cells between two CAD faces. * Input 01: First face * Type: CAD Face * Description: First CAD surface to apply the cell map. * Input 02: Second face * Type: CAD Face * Description: Second CAD surface to apply the cell map. * Input 03: UVW count * Type: Vector * Description: Number of cells in three directions. * Output: Cell Map #### [Usage Improvements](#new-features-and-improvements) * Error messages now include the name of the input that causes the error. In previous releases, error messages would display the input position number where an error was stemming from, as opposed to the name of the input. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue where CAD edges weren't correctly bound. When used for boundary selection, all elements along the edge's directions were selected, but now they can be used for selection as intended. * We fixed a tolerance issue in the Trim Cell Map (beta) block that was causing cells to remain that should have been trimmed. * We fixed an issue where the lattice result of running the Periodic Lattice Body (beta) block with a Cylindrical Cell Map and Body Centered Cubic Unit Cell wasn't correctly tessellated. * We resolved an issue that was preventing the use of the precise render option for custom implicit Unit Cells. * We resolved an issue where entering invalid inputs into either the Cylindrical Cell Map (beta) or the Cell Map on Quad Mesh (beta) block would cause nTop to unexpectedly exit. * We resolved an issue where blocks in the input section were not providing you with the ability to add a comment. * We resolved an issue where input variables were not triggering the block level build buttons to appear on their associated blocks when the autobuild button was turned off. * We resolved an issue where Japanese characters were getting clipped and becoming illegible in variable chips. * We resolved an issue where the Gimbal value box was remaining in the scene after closing the section cut or field viewer. * We resolved an issue with the extrude constraint. If the curve is significantly longer than the element size in a topology optimization, or the curve is unbound, the computational time may increase significantly. In these cases a warning will be issued and the user will be able to cancel the operation in progress bar. ## Keywords: *new whats 3.7* # nTopology 3.8 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-8-what-s-new ## Version 3.8 > [!NOTE] > > nTopology 3.8 is here! This release features a new block called Pore Diameters from Lattice Body. You can use this block to calculate pore diameters of any graph lattice. This block enables you to determine if the pores are large enough for powder removal in additive manufacturing and it can be useful for other applications, such as filtration. We also introduced several usage improvements. For example, the CFD Boundary on FE Mesh beta block now supports CFD boundary zones on either an FE Surface Mesh or an FE Volume Mesh. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Pore Diameters from Lattice Body (Beta)](#pore-diameters-from-lattice-body-beta)) * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Pore Diameters from Lattice Body (Beta)](#new-features-and-improvements) * In 3.8, we released the Pore Diameters from Lattice Body (Beta) block which calculates pore diameters of any graph lattice. This is useful for verifying pores are large enough for powder removal, as well as other applications such as filtration analysis. Pore diameter is defined as the diameter of the largest sphere that fits inside a pore without overlapping the structure. The output is a Point Map that contains each sphere's center point and diameter. Depending on the size and complexity of your lattice, the calculation may be CPU intensive. * You can visualize spheres from the result by dragging the Point Map's points properties into the Sphere block Center point input. For the radius input, first add the Divide block. Drag the Point Map's values property into Operand A, and input 2 for Operand B to calculate the spheres' radii. See the image below for an example. * Name: Pore Diameters from Lattice Body (Beta) * Location: Beta > Lattices-Utilities * Description: Calculates the pore diameters of any graph lattice. Pore diameter is defined as the diameter of the largest sphere that fits inside a pore without overlapping the structure. The output is a Point Map that contains each sphere's center point and diameter. Depending on the size and complexity of your lattice, the calculation may be CPU intensive. * Input 01: Lattice body * Type: Lattice Body * Description: The Lattice Body from which to calculate pore diameters. * Input 02: Smallest pore size * Type: Scalar * Description: The smallest anticipated pore size. Pores whose diameters are smaller than this value will be ignored and not included in the output. Must be greater than 0. As this value decreases the block will take longer to compute. * Input 03: Domain * Type: Implicit Body * Optional * Description: Optional boundary volume within which to calculate pores. * Input 04: Allow overlap * Type: Bool * Optional * Description: Option to allow overlapping pores. If true, spheres created from the resulting Point Map may intersect. * Output: Scalar Point Map ![An example of using the Pore Diameters from Lattice Body block. Spheres have been placed at each of the pore diameter centroids to help visualize the diameters.The model shows a beam based lattice with spheres located at the pore centroids.](https://files.learn.ntop.com/help-articles/whats-new/4405063788179.png) #### [Usage Improvements](#new-features-and-improvements) * Vertex valencies are now available as a property of the Lattice type. * Unit vectors are now available as a property of Vectors and Vector Fields. * The CFD Boundary on FE Mesh beta block now supports CFD boundary zones on either an FE Surface Mesh or an FE Volume Mesh. Setup your fluid regions and boundary zones in nTopology and then export a surface mesh to ANSYS® Fluent® to perform a fluid flow or conjugate heat transfer analysis. By defining the fluid regions and boundary zones in nTopology, geometry updates are easily handled without redoing the setup in Fluent. * nTopology now supports cyclic symmetry for both static and modal analysis, drastically reducing run time for models exhibiting cyclic symmetry. The symmetry condition is defined with the Cyclic Symmetry block. Below is an outline of the new block: ![The Cyclic Symmetry block](https://files.learn.ntop.com/help-articles/whats-new/4405071054739.png) * Name: Cyclic Symmetry (Beta) * Location: Beta > Simulation * Description: Creates a cyclic symmetry constraint between the upper and lower boundaries of the sector. * Input 01: Upper boundary * Type: FE Boundary * Description: The upper (dependent) FE boundary. * Input 02: Lower boundary * Type: FE Boundary * Description: The lower (independent) FE boundary. * Input 03: Rotational axis * Type: Axis * Description: Rotational axis. * Input 04: Sector angle * Type: Scalar * Description: The angle between the upper and lower boundaries. * Input 05: Tolerance * Type: Scalar * Description: Tolerance between the location of the slave and master nodes when they are mirrored on each other. * Input 06: Harmonic count * Type: Scalar * Description: Number of harmonics to evaluate for the structure. The maximum number of harmonics to be evaluated is half the total number of sectors in the full model. * Output: FE Connector * When leveraging cyclic symmetry to reduce the overall model size, you can still visualize the results on the full model. ![The left image shows a 15 degree cyclic symmetry FE Component. The right image shows the full Modal results of running the analysis using the Cyclic Symmetry block.](https://files.learn.ntop.com/help-articles/whats-new/4405071054483.png) * Although it is not necessary, you can create a conformal mesh between the upper and lower boundaries of the sector using the Remesh Surface with Cyclic Symmetry block. In some cases, this will yield more accurate results. ![The Remesh Surface with Cyclic Symmetry block.](https://files.learn.ntop.com/help-articles/whats-new/4405063787923.png) * Name: Remesh Surface wtih Cyclic Symmetry (Beta) * Description: Remesh a given surface mesh to create conformal nodes and elements on master and slave planes. The master plane is defined by a normal, and the slave plane is defined by rotating the normal about an axis of rotation in the master plane. * Input 01: Surface * Type: Mesh * Description: Surface mesh to remesh. * Input 02: Edge length * Type: Scalar Field * Description: The target edge length of the generated elements. * Input 03: Shape * Type: Surface Mesh Shape Enum * Description: The element shape of the output mesh. * Input 04: Span angle * Type: Scalar * Description: The maximum spanning angle for elements generated on curved surfaces. Decreasing the span angle will refine the mesh in areas of local curvature. * Input 05: Growth rate * Type: Scalar * Description: The rate at which the size of the adjacent elements can grow. This value must be greater than 1.001. * Input 06: Feature angle * Type: Scalar * Description: The maximum angle used to automatically compute preserved edges in the input geometry. * Input 07: Min edge length * Type: Scalar * Description: The minimum allowed edge length of the generated elements in the output mesh. * Input 08: Chord height * Type: Scalar * Description: The maximum distance from the midpoint of an element edge to the input surface. A value of zero turns off chord height sizing. * Input 09: Min feature size * Type: Scalar * Description: The minimum small feature size to control the deletion of small features. A recommended value is about five percent of the edge length. A value of zero turns off feature deletion. * Input 010: Rotational axis * Type: Axis * Description: The axis of rotation for the cyclic symmetric mesh. The master surface normal will be rotated about this axis to determine the plane to construct a conformal mesh. The rotational axis must lie in the plane defined by the master normal. * Input 011: Master surface normal * Type: Vector * Description: The normal defining the master planar surface. * Input 012: Sector angle * Type: Scalar * Description: The rotation of the master normal about the rotational axis to define the slave (and bounding) plane of the cyclic symmetric mesh. 360 (or 2 Pi) must be divided evenly by the sector angle. * Output: Mesh * We've modified the user dashboard so that the Example Files section is more apparent to encourage use and to make it more obvious when new example files have been added. ![The user dashboard on app.ntop.com](https://files.learn.ntop.com/help-articles/whats-new/4405071054227.png) #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue where getting the quad count too low in the Quadrangulate Mesh block would cause nTopology to unexpectedly exit. * We resolved an issue where property or variable chips from a previously opened file were appearing in the notebook of a new instance of nTopology. If you attempted to click on the variable chip, nTopology would unexpectedly exit. * The rotational degrees of freedom for both the Displacement Restraint and the Point Restraint blocks now only accept quantities with units of degree or radians. * The Export option on the context menu for FE Model (right mouse click on FE Model block) has been disabled. As an alternative, use the Export FE Model block to export to an external CAE format. * We resolved an issue where the Organization tab in Org. Admin dashboard was displaying users' names as “undefined undefined” after a page refresh. * We resolved an issue where Chrome was autofilling the Team and Password fields in the Edit User Details window of the Org. Admin dashboard. ## Keywords: *new whats 3.8* # nTopology 3.9 - What's New Source: https://docs.ntop.com/help-articles/whats-new/whats-new/ntopology-3-9-what-s-new ## Version 3.9 > [!NOTE] > > nTopology 3.9 is here! This release features significant enhancements to our GPU Acceleration technology, which ultimately makes more implicit interactions occur in real time. This was made possible by supporting more blocks, scalar lists, and block properties. In addition, you can now use the Cyclic Symmetry block with Topology Optimization blocks with compliance, displacement, stress, or volume fraction responses. As with every release, nTopology's dedicated support team is ready to answer your questions. Please visit [support.ntopology.com](https://support.ntopology.com/hc/en-us) to gain access to helpful tutorials and support articles. * #### [Usage Improvements](#usage-improvements) * #### [Bug Fixes](#bug-fixes) #### [Usage Improvements](#new-features-and-improvements) * GPU-enabled interactivity of implicit geometry has undergone some notable improvements, which include support for more blocks, scalar lists, and properties, making it easier to visualize in real time what effect value changes will have on your models. While still a BETA feature, this release moves nTopology closer to providing implicit interactivity as the default. * With release 3.9, you can now use the Cyclic Symmetry block with Topology Optimization blocks with compliance, displacement, stress, or volume fraction responses. This greatly reduces the computational time because the underlying static analyses are only performed on one sector of the overall model. Cyclic symmetry is currently not compatible with natural frequency responses. #### [Bug Fixes](#new-features-and-improvements) * We fixed an issue that was causing nTopology to unexpectedly exit if you canceled the Mesh from Implicit Body by Voxels (Beta) block when the block was running a particular phase. * We fixed an issue where the implicit fields of the Body centered cubic foam and Face centered cubic foam Unit Cells were inverted when used in a rectangular cell map. * We fixed an issue found in 2.22 that was causing nTopology to unexpectedly exit when using the precise render while a scalar or integer value was selected in the notebook. * We fixed an issue that was found in 3.7.1 where block comments were disappearing when a notebook section was closed and then reopened. * We fixed an issue where custom blocks whose default inputs were using other custom blocks were not properly loading and instead loading the inputs as invalid blocks. * We fixed an issue where several ribbon blocks were creating deprecated versions of their blocks when being added to the notebook. Below is an outline of the blocks relative to their ribbon location that were producing deprecated versions: * Additive Manufacturing → Build Preparation → **Orient Object** * Additive Manufacturing → Export → **Export Slices to SSL** * Architected Materials → Utilities → **Trim Lattice** * Design Analysis → Analysis → **Buckling Analysis** * Design Analysis → Mesh Generation → **Mirror FE Mesh** ## Keywords: *new whats 3.9* # A&D Follow Along: List Processing Source: https://docs.ntop.com/lessons/a-d-learning-path/a-d-follow-along-list-processing The following video is an example of how List Processing can be used in an nTop notebook. List Processing can be used to reduce total block count, create a more organized workflow, and save time generating designs. [https://www.youtube.com/embed/0nNEjBQL2Oo](https://www.youtube.com/embed/0nNEjBQL2Oo) **Downloadable Files:** [A\&D List Processing Example](https://files.learn.ntop.com/Courses/A%26D%20Learning%20Path/nTop%20Files/AD%20List%20Processing%20Example.ntop) *This file was last updated in nTop 5.* 45.2 # A&D Follow Along: Simple Wing Source: https://docs.ntop.com/lessons/a-d-learning-path/a-d-follow-along-simple-wing The following video is an example of how to set up, create, and import a custom block of a Single Panel Wing. [https://www.youtube.com/embed/DGgVi\_ew58k](https://www.youtube.com/embed/DGgVi_ew58k) **Downloadable Files:** [A\&D Simple Wing](https://files.learn.ntop.com/Courses/A%26D%20Learning%20Path/nTop%20Files/Single%20Panel%20Wing.ntop) *This file was last updated in nTop 5.* 45.2 # A&D Learning Path Index Source: https://docs.ntop.com/lessons/a-d-learning-path/a-d-learning-path-index ## Sections [Basic Implicit Operations](https://learn.ntop.com/courses/ad-learning-path/lessons/building-blocks-of-design/) [Boolean Operations](https://learn.ntop.com/courses/ad-learning-path/lessons/building-blocks-of-design/) [Boundary Representation Modeling (B-Rep)](https://learn.ntop.com/courses/ad-learning-path/lessons/b-rep-vs-implicit-assessment/) [Conic Fuselages](https://learn.ntop.com/courses/ad-learning-path/lessons/aircraft-shapes-in-practice/) [Curve Capabilities](https://learn.ntop.com/courses/ad-learning-path/lessons/curve-and-profile-modeling/) [Curvature Continuity](https://learn.ntop.com/courses/ad-learning-path/lessons/advanced-field-concepts/) [Design Iteration, MDO & the AI Connection](https://learn.ntop.com/courses/ad-learning-path/lessons/rules-of-thumb-process/) [Fields](https://learn.ntop.com/courses/ad-learning-path/lessons/how-does-ntop-work/) [Field-Driven Operations](https://learn.ntop.com/courses/ad-learning-path/lessons/building-blocks-of-design/) [Implicit Functions](https://learn.ntop.com/courses/ad-learning-path/lessons/core-implicit-concepts-sdfs/) [Implicit Modeling](https://learn.ntop.com/courses/ad-learning-path/lessons/b-rep-vs-implicit-assessment/) [Inlet Ducts](https://learn.ntop.com/courses/ad-learning-path/lessons/aircraft-shapes-in-practice/) [Keyboard Shortcuts](https://learn.ntop.com/courses/ad-learning-path/lessons/controls-and-keyboard-shortcuts/) [Navigating the Interface](https://learn.ntop.com/courses/ad-learning-path/lessons/navigating-the-interface/) [Notebook & Blocks](https://learn.ntop.com/courses/ad-learning-path/lessons/basics-of-ntop/) [Notebook Management](https://learn.ntop.com/courses/ad-learning-path/lessons/basics-of-ntop/) [nTop Mindset](https://learn.ntop.com/courses/ad-learning-path/lessons/what-can-you-do-with-ntop/) [Profile Capabilities](https://learn.ntop.com/courses/ad-learning-path/lessons/curve-and-profile-modeling/) [Ramps](https://learn.ntop.com/courses/ad-learning-path/lessons/advanced-field-concepts/) [Signed Distance Fields](https://learn.ntop.com/courses/ad-learning-path/lessons/how-does-ntop-work/) [Surface and Volume Operations](https://learn.ntop.com/courses/ad-learning-path/lessons/building-blocks-of-design/) [Variables](https://learn.ntop.com/courses/ad-learning-path/lessons/basics-of-ntop/) [Why do engineers use nTop?](https://learn.ntop.com/courses/ad-learning-path/lessons/why-do-engineers-use-ntop/) [Wings & Wing-Fuselage Fillets](https://learn.ntop.com/courses/ad-learning-path/lessons/aircraft-shapes-in-practice/) [Working with CAD](https://learn.ntop.com/courses/ad-learning-path/lessons/working-with-imported-geometry/) [9-Step Modeling Process](https://learn.ntop.com/courses/ad-learning-path/lessons/rules-of-thumb-process/) [11 Rules of Thumb](https://learn.ntop.com/courses/ad-learning-path/lessons/rules-of-thumb-process/) ## Follow Along: Sphere-Cube and Gear [Introduction](https://youtu.be/ECNsyzVPYMU?si=ytVBFdUrYAYtSJ4f) [Establishing Object Dependence](https://youtu.be/ECNsyzVPYMU?si=pkeajcMvDIi1dfdK\&t=50) [Merging Objects with Boolean Union](https://youtu.be/ECNsyzVPYMU?si=pcByFZ46f9AE13RP\&t=141) [Introduction to the the Gear Workflow](https://youtu.be/ECNsyzVPYMU?si=rZjCD7E5g8JVHGj7\&t=210) [Importing and Converting CAD](https://youtu.be/ECNsyzVPYMU?si=epbbNTIwNaqTHxGY\&t=220) [Shelling the Gear Part](https://youtu.be/ECNsyzVPYMU?si=zxwcWUbZDyZaeDc5\&t=248) [Creating and Polar Arraying Escape Holes](https://youtu.be/ECNsyzVPYMU?si=nn5p5DsO1dzZpNr1\&t=285) [Comparing Weight Savings](https://youtu.be/ECNsyzVPYMU?si=MY9aGnxM2LhTGXKZ\&t=455) ## Follow Along: Model a Cylinder Head [Intro & Custom Blocks](https://www.youtube.com/watch?v=LfWlq5cyQC8) [Raw Extrusion](https://youtu.be/LfWlq5cyQC8?si=blFXoRNt6RGqTf7f\&t=158) [Extruded Cut](https://youtu.be/LfWlq5cyQC8?si=efhF6V1d3msMfMXg\&t=348) [Revolved Cut](https://youtu.be/LfWlq5cyQC8?si=IkA4a3EmS4d-hArr\&t=1000) [Bolt Holes](https://youtu.be/LfWlq5cyQC8?si=h_UwnVbLPghkFlGF\&t=1359) [Polycurve Cut](https://youtu.be/LfWlq5cyQC8?si=mokWQ2qusvICOfzc\&t=1516) [Testing Parametric Model](https://youtu.be/LfWlq5cyQC8?si=II7HiUdZ5pC1J5rR\&t=1965) [References](https://youtu.be/LfWlq5cyQC8?si=IYlbq1epEzaR0NQ5\&t=2012) ## Follow Along: Model a Double Pipe HEX [Introduction to Double-Pipe Heat Exchanger](https://www.youtube.com/watch?v=MlDHMw0SUvc) [Setting Up Scalar and Integer Inputs](https://youtu.be/MlDHMw0SUvc?si=uVPNcCevK27u24r_\&t=85) [Creating Constant Variables](https://youtu.be/MlDHMw0SUvc?si=uj68qznTvkZxDeQj\&t=385) [Constructing Fluid 1 Centerlines](https://youtu.be/MlDHMw0SUvc?si=oIlux5_fcZm40DOy\&t=530) [Creating Left and Right Arcs](https://youtu.be/MlDHMw0SUvc?si=hEDlGKiGwF-eUcpd\&t=713) [Building Fluid 1 Pipe](https://youtu.be/MlDHMw0SUvc?si=G-EZnKGjfQIAdgy7\&t=1420) [Constructing Fluid 2 Centerline](https://youtu.be/MlDHMw0SUvc?si=e_-q8P_87SN0iGbV\&t=1804) [Creating Vertical Connections](https://youtu.be/MlDHMw0SUvc?si=e6oqRnPShp1h-SUK\&t=1905) [Assembling Fluid 2 Volumetric Region](https://youtu.be/MlDHMw0SUvc?si=luo3joEx188XZ1xh\&t=2224) [Building Flanges](https://youtu.be/MlDHMw0SUvc?si=FCz5-GNKoNOSBZ06\&t=2958) ## Intro to Custom Blocks [Intro](https://www.youtube.com/watch?v=DGgVi_ew58k) [Title and Description](https://youtu.be/DGgVi_ew58k?si=msRCZCWi_0xLpR0r\&t=3) [Inputs](https://youtu.be/DGgVi_ew58k?si=HB7Nxxg3nFznPaq7\&t=33) [Comments](https://youtu.be/DGgVi_ew58k?si=kZuMn7jcNR9uueLq\&t=85) [Output](https://youtu.be/DGgVi_ew58k?si=XrGcA1BHYuTZZJJx\&t=140) [Importing a Custom Block](https://youtu.be/DGgVi_ew58k?si=mtzcIcfUcWO-HLUX\&t=162) [Reviewing the Custom Block](https://youtu.be/DGgVi_ew58k?si=j6g9BAs3y2CsQMLR\&t=200) ## A\&D Learning Path: Follow Along: List Processing [Intro](https://youtu.be/0nNEjBQL2Oo?si=1KOyoUp1onkKbFD5) [What is List Processing](https://youtu.be/0nNEjBQL2Oo?si=baPtfLosxtsk7NfC\&t=3) [Start of Example and Input Parameters](https://youtu.be/0nNEjBQL2Oo?si=XmITjQpMQnj0zbT_\&t=56) [Generating the Wings](https://youtu.be/0nNEjBQL2Oo?si=zuKt2ZiSBz5tUUB4\&t=88) [List Processing with Translate](https://youtu.be/0nNEjBQL2Oo?si=D2Zkd6MQK9g05BRQ\&t=127) ## Intro to Aircraft Modeling [Modeling a Parametric Aircraft](https://www.youtube.com/watch?v=AowvZMqXmgA) [Why Use Custom Blocks?](https://youtu.be/AowvZMqXmgA?si=uak8OOnxRInLqgOv\&t=28) [General Modeling Blocks](https://youtu.be/AowvZMqXmgA?si=o66G1gUJMiBUSnPU\&t=60) [Course Focus](https://youtu.be/AowvZMqXmgA?si=iDRwa55Pc_LMfx7U\&t=88) [Overview of Aerospace Custom Blocks](https://youtu.be/AowvZMqXmgA?si=GvLf7pV8YVl5sXdB\&t=110) [nTop Design Philosophies](https://youtu.be/AowvZMqXmgA?si=-15hNNEB9TcoEr1D\&t=156) [Get Started](https://youtu.be/AowvZMqXmgA?si=QisZj7Ik3WwQtjzZ\&t=208) ## Parametric Aircraft Design: Intro to Modeling a Wing 1: Edges [Intro & Calculations](https://www.youtube.com/watch?v=wR5oqv3ZqJ8) [Quarter Chord](https://youtu.be/wR5oqv3ZqJ8?si=gJkD6VcIcCk7UeD3\&t=58) [Leading Edge](https://youtu.be/wR5oqv3ZqJ8?si=7Wf_cJThS5jWrFwq\&t=146) [Trailing Edge](https://youtu.be/wR5oqv3ZqJ8?si=3h5qABnMszQByaLU\&t=177) [Testing](https://youtu.be/wR5oqv3ZqJ8?si=py2REkYX1NTGZZHS\&t=208) ## Modeling a Wing 2: Airfoils [Intro](https://youtu.be/7gamYx3oq-c?si=sT8NVWtHf1-pZoF-) [Freehand Approach](https://youtu.be/7gamYx3oq-c?si=y-zinNVtXM3UcrKN\&t=45) [NACA Code Custom Block Approach](https://youtu.be/7gamYx3oq-c?si=fdxVhlz6Nj0prFdv\&t=343) ## Parametric Aircraft Design: Modeling a Wing 3: Parameterization [Intro to Remap](https://www.youtube.com/watch?v=NyTsxoD7Hkw) [Single Panel Wing Parameterization in X](https://youtu.be/NyTsxoD7Hkw?si=WXpj__kxzSCfvnTq\&t=74) [Two Body Field](https://youtu.be/NyTsxoD7Hkw?si=1j8sWmIIXwMDQ0yQ\&t=214) [Remap in Z](https://youtu.be/NyTsxoD7Hkw?si=8-m5lGi_ZtSZ6oJQ\&t=305) ## Parametric Aircraft Design: Modeling a Wing 4: Mirror Body Symmetrically [Mirror Body](https://www.youtube.com/watch?v=oInBCW7DeJw) [Mirror Body Symmetrically](https://youtu.be/oInBCW7DeJw?si=XIHCOG3VCdUJktRe\&t=80) [Testing the Custom Block](https://youtu.be/oInBCW7DeJw?si=PmAj-Bqd-olCWB28\&t=248) ## Modeling a Wing 5: Planar Wings [Intro to Bounding a Body](https://youtu.be/D0S4-_6j_Ao?si=u8D5BfP6NvtUfbuu) [Generate Planform Profile](https://youtu.be/D0S4-_6j_Ao?si=_-oNlT9WQWeiKnB1\&t=20) [Mirror Line](https://youtu.be/D0S4-_6j_Ao?si=7UejSAa58zJnW3t2\&t=45) [Generate Bounding Box](https://youtu.be/D0S4-_6j_Ao?si=7eDvhi3cm-XZEEHO\&t=79) [Intersect to Create Implicit Body](https://youtu.be/D0S4-_6j_Ao?si=FuoHMSoYx9_NRbed\&t=130) ## Modeling a Wing 6: Twisting Wings [Intro to Wing Twist](https://youtu.be/0cEsKXrdA6s?si=gyTGgZ0ISwNEsTvl) [Mid-Curve Custom Block](https://youtu.be/0cEsKXrdA6s?si=-xBSEF6O9DQF1iQH\&t=30) [Double Panel Mid-Curve Setup](https://youtu.be/0cEsKXrdA6s?si=hYNHu4a8P_Xbgton\&t=100) ## Fuselage 2: Distance from Central Axis [Review Guide Splines](https://youtu.be/43wP95Uy3XE?si=bzfu66PiB5vUDouw) [Distance from Central Axis](https://youtu.be/43wP95Uy3XE?si=oXmLPU3AJioWtX0l\&t=18) ## Fuselage 3: Conics [Intro](https://youtu.be/Frlh7bqfjaE?si=pSW3aZGzhQBVj-I9) [Vector Field from Components (Bottom Surface)](https://youtu.be/Frlh7bqfjaE?si=9bSk2Wi3XKGGiMjo\&t=15) [Visualizing the Field (Bottom Surface)](https://youtu.be/Frlh7bqfjaE?si=1e69DzUg4jX_HgFn\&t=95) [Top Surface Review](https://youtu.be/Frlh7bqfjaE?si=YzTsgo1iQ3VgquDx\&t=125) ## Parametric Aircraft Design: Fuselage 4: Bounds [Intro](https://www.youtube.com/watch?v=L7fALIFzqsM) [Generating a Quarter Bounding Box](https://youtu.be/L7fALIFzqsM?si=TyOLvi1vKXiNbkoK\&t=19) [Why do we use the If-Else block to generate a Full Bounding Box](https://youtu.be/L7fALIFzqsM?si=FjLOZ5Fw7_trR7FJ\&t=47) [Explanation of Booleans](https://youtu.be/L7fALIFzqsM?si=8itt6vUDrpc5swCV\&t=216) [Visualizing the Top and Bottom Fields](https://youtu.be/L7fALIFzqsM?si=vstF9AHOYVY4g_Fn\&t=266) [Generating the Fuselage](https://youtu.be/L7fALIFzqsM?si=O7CRvhxCHbvOMWay\&t=312) ## Parametric Aircraft Design: Ducting 1: Planar Profile [Intro](https://www.youtube.com/watch?v=vQcRbNBFHO4) [Establishing a Planar Path (XY Plane)](https://youtu.be/vQcRbNBFHO4?si=S5ZqxffzMLoge7sN\&t=34) [Viewing Spline Fields](https://youtu.be/vQcRbNBFHO4?si=1TXxuavB7KcGYphI\&t=120) ## Parametric Aircraft Design: Ducting 2: Ramped Parallelogram [Intro](https://youtu.be/tvV979E5aBg?si=jv8jDIoic3NH8iJP) [Parametric Extruded Parallelogram Custom Block Explanation](https://youtu.be/tvV979E5aBg?si=HMui8c9m58myEeui\&t=15) [Generating the Parallelogram](https://youtu.be/tvV979E5aBg?si=f9ZA_Tyt2LIn38GG\&t=212) ## Parametric Aircraft Design: Ducting 3: Planar Profile [Intro](https://youtu.be/tABJUOFFDiY?si=pVvHW00aUgEjT-VJ) [Remapping the Field](https://youtu.be/tABJUOFFDiY?si=PDYhXLV4U13GP0B5\&t=25) [Mirroring the Duct Fields](https://youtu.be/tABJUOFFDiY?si=etzFUoZyRivpncwK\&t=111) [Generating the Duct Implicits](https://youtu.be/tABJUOFFDiY?si=VGLRKwU1vdhGKhyx\&t=126) ## Parametric Aircraft Design: Ducting 4: 3D Duct [Intro](https://youtu.be/iwZg9JDPOqc?si=JcvtEzxCHTkQjJ9K) [Setting up the Ramp](https://youtu.be/iwZg9JDPOqc?si=m9IYvyMBaLbtRrP9\&t=23) [Duct with Applied Displacement](https://youtu.be/iwZg9JDPOqc?si=HtAyj2B4vvyetuDh\&t=92) [Applying the Duct Bounds](https://youtu.be/iwZg9JDPOqc?si=wkOEbcFAXjYV4K1k\&t=110) ## Parametric Aircraft Design: Empennage 1: Horizontal Stabilizers [Intro](https://youtu.be/V4JAXOUnj5k?si=bzApnPj81WbdCYn7) [Changing the Notebook Information from Wing to Horizontal Stabilizers](https://youtu.be/V4JAXOUnj5k?si=KcVyxl3cIlx_s-OP\&t=23) [Removing the Twist Variable](https://youtu.be/V4JAXOUnj5k?si=vbBdW-XIdYRvf500\&t=53) [Modifying Parametric Variable Values](https://youtu.be/V4JAXOUnj5k?si=UogeqOBjFSq8U0b1\&t=111) [Fixing the Geometry](https://youtu.be/V4JAXOUnj5k?si=PJoUpXlN7DD5JWf5\&t=145) [Saving the New Custom Block](https://youtu.be/V4JAXOUnj5k?si=9SHyuyaHiMfalKSG\&t=228) ## Parametric Flying Wing Modeling Demo [Setting up Parameter Inputs](https://youtu.be/h0-VtWs-B-c?si=oIHfhQIWvZIgiYDw) [Point Calculations](https://youtu.be/h0-VtWs-B-c?si=8hqHdcBrJQbHo5lC\&t=100) [Splines](https://youtu.be/h0-VtWs-B-c?si=6ZkOhoi7Sl_uO-D6\&t=525) [Airfoils](https://youtu.be/h0-VtWs-B-c?si=rZjYIUvdQyxTDmbd\&t=1193) [Lofted Aircraft](https://youtu.be/h0-VtWs-B-c?si=i0Z3Nw13Q6Z4c1T_\&t=1490) [Twist](https://youtu.be/h0-VtWs-B-c?si=-IbSN2ES51Tv8AYg\&t=1895) [Closing Remarks](https://youtu.be/h0-VtWs-B-c?si=BpjtgjbZveMtMQIn\&t=2080) # Advanced Field Concepts Source: https://docs.ntop.com/lessons/a-d-learning-path/advanced-field-concepts # Aircraft Shapes in Practice Source: https://docs.ntop.com/lessons/a-d-learning-path/aircraft-shapes-in-practice # B-rep vs. Implicit Assessment Source: https://docs.ntop.com/lessons/a-d-learning-path/b-rep-vs-implicit-assessment # Bending and Translating Bodies via Remap Field Source: https://docs.ntop.com/lessons/a-d-learning-path/bending-and-translating-bodies-via-remap-field This lesson explains how to take a “straight” geometric body and deform it to follow a specific path using a **Curved Coordinate System**. By the end of this tutorial, you will understand how to use the **Remap Field** block to map standard Cartesian space onto a custom vector field defined by a curve. ### 1. The Core Concept: Spatial Remapping In a standard 3D environment, every point is represented by (x, y, z). The **Remap Field** block allows us to “re-target” these coordinates. Instead of the body looking for its shape at (x, y, z), it looks for its shape at a new set of coordinates defined by a **Vector Field**. Below is an example of Translating the Body by adding an X value to the equation. Translation offset (*a*) Drag to see how coordinate logic affects position. 0 mm fnew(x) = fold(x) No translation applied. If we define a Vector Field where the “X” axis follows the length of a curve and the “Y” axis follows the distance away from that curve, the body will naturally “wrap” itself around that geometry. [Follow Along: Remap Field Example](https://files.learn.ntop.com/Courses/A%26D%20Learning%20Path/nTop%20Files/bend-remap-example.ntop) ### 2. Building the Curved Coordinate System To bend the body, we must first build a new coordinate system using the **Vector Field from Components** block. This block requires three inputs representing the new X, Y, and Z axes. #### **The X-Axis: Movement Along the Curve** The X-component defines where the body sits along the length of the curve. * **Radiate Field from Plane:** This generates a gradient representing distance. When combined with the curve's arc length, it creates a field that increases as you move along the path of the curve. Radiate Field from Plane.ntop * **The Subtract Block (Translation):** This is your “Slider” for positioning. By subtracting a value (Operand B) from the Radiate Field, you shift the body's starting point. * *Example:* If you subtract 10mm, the body moves 10mm further along the curve. ![](https://files.learn.ntop.com/lessons/a-amp-d-learning-path/image-1-1024x434.png) #### **The Y-Axis: Distance from the Curve** The Y-component defines the thickness and the body's perpendicular orientation relative to the curve. * **Profile from Curve:** This block generates a field where the value is 0 on the curve itself. It determines the “inside” and “outside” of the curve. This ensures your body is oriented correctly (e.g., standing upright on the curve rather than lying flat). ![](https://files.learn.ntop.com/lessons/a-amp-d-learning-path/image-4-1024x357.png) #### **The Z-Axis: Maintaining Height** * **z:** By simply inputting “z”, we ensure the body maintains its original height and does not compress or stretch vertically. ![](https://files.learn.ntop.com/lessons/a-amp-d-learning-path/image-3-1024x372.png) ### 3. Executing the Remap Once the Vector Field is constructed, we apply it using the **Remap Field** block: | **Input** | **Description** | | - | - | | **Field** | The original, straight body (Body 1 or Body 2). | | **Vector Field** | The “Curved Coordinate System” we built above. | Fnew(x,y,z)=Fold(Vx,Vy,Vz)F\_\{new}(x, y, z) = F\_\{old}(V\_x, V\_y, V\_z) Where V is the new coordinate logic derived from your curve. The result is a body that respects the curvature of the path while allowing for precise longitudinal translation via the subtraction operand. # Core Implicit Concepts: SDFs Source: https://docs.ntop.com/lessons/a-d-learning-path/core-implicit-concepts-sdfs # CSG: Building Complex Shapes Source: https://docs.ntop.com/lessons/a-d-learning-path/csg-building-complex-shapes # Introduction & History Source: https://docs.ntop.com/lessons/a-d-learning-path/introduction-history # Lesson Source: https://docs.ntop.com/lessons/a-d-learning-path/lesson # Lesson Source: https://docs.ntop.com/lessons/a-d-learning-path/lesson-2 # Lesson Source: https://docs.ntop.com/lessons/a-d-learning-path/lesson-3 # Parametric Modeling Fundamentals Source: https://docs.ntop.com/lessons/a-d-learning-path/parametric-modeling-fundamentals # Rotating and Twisting Fields via Z-Rotation Source: https://docs.ntop.com/lessons/a-d-learning-path/rotating-and-twisting-fields-via-z-rotation This lesson covers the logic behind the **Z Rotation** block and how to extend it to create a variable **Twist**. In field-driven design, rotation isn't about moving an object; it's about remapping the coordinate system so the object “calculates” its new orientation. ### 1. The Logic: 2D Rotation Mapping To rotate a field about the Z-axis, we only need to transform the x and y coordinates. The z-coordinate remains unchanged, ensuring the rotation occurs within horizontal planes. Rotation angle about Z Drag to twist the body in the XY plane. 0° Remap field inputs: new x = cos(0°) · x − sin(0°) · y =========== 1.00·x − 0.00·y new y = sin(0°) · x \+ cos(0°) · y =========== 0.00·x + 1.00·y z = z unchanged The **Z Rotation** block uses a standard rotation matrix. Because we are remapping a field, we apply the inverse rotation to the coordinates: [Z Rotation.ntop](https://files.learn.ntop.com/Courses/A%26D%20Learning%20Path/nTop%20Files/z-rotation.ntop) xnew=x⋅cos⁡(θ)+y⋅sin⁡(θ) ynew=−x⋅sin⁡(θ)+y⋅cos⁡(θ) The Custom Block is built upon: * **Sin & Cos:** These are calculated using the negative of the input angle to correctly handle field remapping. * **Remap Field:** This block takes your original **Scalar Field** and looks for its values at the calculated **new x** and **new y** positions. ![](https://learn.ntop.com/wp-content/uploads/2026/04/image-5.png) ### 2. Implementing the Remap The **Remap Field** block is the engine of this transformation. It requires three coordinate inputs to redefine the space: | **Input** | **Logic** | **Result** | | - | - | - | | **X** | new x | Rotates the horizontal x component. | | **Y** | new y | Rotates the horizontal y component. | | **Z** | z | Keeps the height constant. | [Follow Along: Twist Example](https://files.learn.ntop.com/Courses/A%26D%20Learning%20Path/nTop%20Files/twist-example.ntop) This example uses a **Ramp** to gradually change the Twist value from Start to End. ![](https://learn.ntop.com/wp-content/uploads/2026/04/image-6.png) ![](https://learn.ntop.com/wp-content/uploads/2026/04/image-8.png) # Rules of Thumb & Process Source: https://docs.ntop.com/lessons/a-d-learning-path/rules-of-thumb-process # Overview Source: https://docs.ntop.com/lessons/advanced-meshing-techniques/overview How to produce the best mesh for complex designs ![Surface meshing techniques](https://storage.googleapis.com/files-learn/lessons/homepage/surface-meshing-techniques.png) ## About this course This training takes you through advanced meshing techniques. We recommend this information as a guide on how to currently and successfully surface mesh in nTop for virtually any downstream operations. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview) **What is covered:** * Surface meshing large/complex geometry * Characterizing influential mesh input parameters * Exploring effects of mesh block order on solve time # Surface Meshing Techniques Source: https://docs.ntop.com/lessons/advanced-meshing-techniques/surface-meshing-techniques [https://www.youtube.com/embed/LRFcwMNDTAE](https://www.youtube.com/embed/LRFcwMNDTAE) > **Transcript** > > Hello, and welcome to a detailed guide to meshing in nTop. We'll jump straight into an example and then talk about some of the nuances within the inputs. So, we have a heat exchanger on screen. It's about 3 and 1/2 inches in diameter and about 10 inches high. It's a TPMS running the center, and the objective will be to get a high-quality mesh that accurately represents the implicit geometry while also trying to reduce the overall element count as well as the solve time of the blocks. > > With any large part, I always encourage people to start with a sample section first. So, in this case, I just have a cylinder running through the main heat exchanger, and I'm going to intersect that with the implicit I want to mesh. I'll test my input parameters on this sample section first so we don't have to wait for the entire object to mesh as we refine the inputs. In this case, we're using the **Mesh From Implicit Body** block, and because I don't have any edges to preserve the sharpness on, I've left the Block in its default state, or, in other words, I've not accessed the overload. I have a tolerance value of 0.35 mm, which in this case gives me a pretty dense mesh. There are some smaller features in the main hex that I want to capture. > > So, once you have the appropriate mesh from implicit body tolerance, we can move to the **Remesh Surface** block or subsequently the **Simplify Mesh by Threshold**. This case, I went straight to **Remesh Surface**, and you'll notice I follow the same logic as in the quick guide to meshing. The chord height and the mid-in length are a function of the tolerance at 2% and 33% respectively. Growth rate I dropped to 1.2. The rest of the inputs I've left as default, and overall this has given me a pretty good mesh that ultimately captures the geometric fidelity that we want while reducing the file size. So, we've gone from about 3 million elements in the **Mesh From Implicit Body** down to about 900,000. > > Taking these same input parameters now, we can move straight to the full-size heat exchanger and have a lot more confidence in the results we're going to get. Starting with the initial mesh, in this case, I am concerned with sharpening some of the edges primarily down at the bottom where I want to define my boundary conditions. So, in this case, I just have a thin cylinder intersecting those bottom feet. Same tolerance input and sharpen iteration set to one. It's going to give me a very dense mesh as we saw before. We can zoom in, and as we do so, now the elements begin to render, and we're at 52 million bases, so a lot denser than we ultimately need it to be. > > In this example, I went straight from the P body to the **Remesh Surface**. Those same input parameters from before, if we hit I to isolate the remeshed part, again, all we're doing is reducing the overall element count but keeping and preserving the fidelity, the curvature that we want to capture whether it's for analysis or manufacturing purposes. Alternatively, we could have also used the **Simplify Mesh by Threshold**. If I click S where my cursor bar is in the notebook, I can search for blocks. So, if I search for **Simplify Mesh by Threshold**, we'll put manual run mode on so it doesn't automatically start. We would use the same logic as with the chord height, and this could either be a mesh that we send to slicing or into the **Remesh Surface** block or any downstream CAD tool that remeshes. > > With this larger example out of the way, we'll get into the nuances of each of the inputs. The file and part we'll focus on is the heat suit example from the quick guide to machine final part. As an implicit, it's the green object on screen, and we want to preserve the edges that are intersected by the purple rectangles. > > I'm not going to go through every single meshing block that I have in this notebook; there are quite a few. But I am going to touch on each of the inputs and some of the most influential parameters. What I did was I went through and tried to characterize each of them against one another to try and reduce the total element count as well as the solve time. Looking at the plots, the blue in the bar charts are from January 2022, and all the red plots are from October 2023. So right away, you'll see that there is a meshing speed up that's only ever going to really get better. > > I'll pop between the file and this and the meshing data that we see here, to kind of talk through some of each of the nuances. But ultimately, this is what I'm using to help decide and characterize what inputs to focus on. This file will be included so you can walk through it yourself or follow along. > > The first place we're going to mesh is **Mesh from Plusab body**, and the default way that the block comes in is this first one that we see here. Run one with any block that has this down arrow indicates an overload, and that's how we can access the different inputs related to certain blocks. The default version of this block works pretty well as far as discretizing an implicit body. There are only two inputs that you need to satisfy: the object you want to mesh and a tolerance value. This tolerance value is going to be an allowable surface deviation that the implicit can take or that the mesh can take while meshing the implicit body. > > The first thing that this block does is voxelize, and then we stitch together a surface mesh from the voxelization. The other inputs, the **Min Feature Size**, **Sharpen**, and **Simplify**, are optional inputs. The **Min Feature Size**, if that is defined, it's going to ignore any implicit features that are below that value. The **Sharpen** option and the **Simplify** I never use, honestly. In this case, if I click sharpen, it's going to go through the entire implicit body and try and sharpen edges everywhere. In most cases, we don't need to do that. We only want edges to be sharp in specific regions, and in a lot of scenarios when we go to print these structures, we're not going to get sharp edges anyway, so there's no need to spend the time meshing or increasing the risk of self-intersections while doing so. > > You also notice a **Simplify** option. I again never use this. This will forcibly decimate the mesh by around 90%, regardless of preserving geometric fidelity. In most cases, when we're trying to mesh an object with a complex lattice structure, the maximum number of elements are going to be on the struts or the lattice itself. That's where we also want to preserve our fidelity so that we print a part that is indicative of how we designed it. I'll show you that when we select this option, we kind of lose that fidelity. > > So this first run has a **Mesh From P of Body** tolerance that is about 30% of my minimum feature size, and overall, it captures the curvature of the structure pretty well. But again, it gives us an overly dense mesh. I also have the **Sharpen** options selected, and in this case, it did a pretty good job of sharpening all of the edges without causing any self-intersections. The next run is the same block, except sharpen has not been selected. > > Hopping over to the charts and looking towards the bottom left, we can see a drastic time difference in the two blocks when we choose to sharpen all edges versus not sharpening. The next few blocks have the overload expanded, so in this case, what I'm wanting to do is specifically define the regions I want to preserve their sharpness and the number of iterations I want the block to take while trying to preserve those edges. Looking back over at the charts, these next three are those cases. So right away, we can also see that when we choose to locally sharpen compared to sharpen all edges, we have a pretty large decrease in the overall solve time. The only difference between these is the number of iterations that we're trying to take in solving the edges. In most cases, I only ever hover between about a value of one and three. For reference, the **Sharpen** option in run one only has one iteration. > > If you do want to try and sharpen all edges, I still encourage you to access the overload. You can leave the sharpen extents blank, in which case it'll work to sharpen all edges. But now, you can control the number of iterations that you want to work with. > > Real quick, let's look at what simplify does. So this says the overload access three iterations and we're discreetly sharpening our edges. Looking at the mesh, we have a significantly coarsened mesh, but it's pretty clear that we're not preserving the fidelity that we might want. We've lost the curvature of the TPMS itself. So, when we go to print this, or maybe we want to do some type of analysis and define contact between the current surface and let's say the fluid domain, we would have pretty significant interference between the two. > > So again, I never use the simplify option. I use some additional utility blocks, which we'll move on to next. There are two main utility blocks: we can use the **Simplify Mesh by Amount** and **Simplify Mesh by Threshold** blocks. The **Simplify by Amount** is going to do exactly what it says: it's going to reduce the element count by a specific percentage. In this case, I've defined 50%. In some cases, this block can do a pretty good job. But because again it forcibly does it based on a percentage value, I'd rather choose to use a block that does it based on accuracy of my geometry, which is the **Simplify Mesh by Threshold**. > > The threshold input is akin to cord height, or in other words, the allowable surface deviation that the mesh can take while trying to coarsen the object. What I've discovered and what I tend to do is I'll make the threshold input a function of my initial meshing tolerance. So, I'll insert a **Multiply** block, use that value, and I'll use about 2% of that input for an allowable surface deviation. That way, if I change my minimum feature size, all I really have to do is update my **Mesh from Implicit Body Tolerance** input, and that's going to propagate through the rest of my meshing inputs. This value seems to work pretty well. It maintains good geometric fidelity while coarsening the mesh enough for either sending it to a slicing tool or to external CAE software for remeshing and validation verification in those tools. > > In some instances, this is a pretty good place to stop. However, if we want to at the very least run some type of analysis in nTop, or maybe our external tools don't have the capability of meshing, let's say, an STL, the next step that we'll have to take is a **Remesh Surface**, where we put a fair quality mesh on our body. It says it in the name: we're remeshing the surface and, therefore, the total number of incoming elements is going to have a pretty large impact on the overall solve time of this block. > > If we move to the meshing data and focus here on this middle table and chart, the furthest left columns are the **Mesh from Implicit Body L**. The other columns are the solve time. The left axis is the solve time of the **Remesh Surface** block, and the green line is the total element count, which is on the right axis here. And so, right away we can see that the block takes significantly longer to run than the measurement was a body. But based on the inputs that we choose, the solve time is going to discreetly vary as well. > > Moving back to the file, we'll talk about the various inputs. Not going to go into heavy detail on the specific values just yet. We'll jump straight down to my initial approach and preferred methods. We'll focus first on the **Remesh Surface**. So, in this case, our input mesh is run three of the **Mesh from Implicit Body**, which has the overload option selected. So, we're defining certain regions that we want to preserve sharpness on, and we only have one iteration defined for the edges. > > Looking at the **Remesh Surface** and the inputs, let's just run down the list. You'll notice that I have an edge length of 10 mm. When we compare that to the ruler at the bottom, that's a pretty large input compared to the overall size of my part, my minimum feature size, cell size of my lattice, etc. And essentially, what I've started to do is let my edge length kind of be my global maximum for this block. My shape is defined as triangle. At the moment, we don't support any quad type elements in our analysis. So, I just want to encourage you to stay on the triangular tent-shaped meshes. Span angle, I leave at a default of 30. Growth rate comes in at a value of two. I drop it down to 1.2, which is industry standard. Feature angle, I also leave at 45 or the default value. > > The next two inputs is where I've spent a lot of time and focus in trying to reduce solve time and element count. Essentially, what I'm trying to do is go through the pain of figuring this stuff out so you don't have to. So, real quick, let's look at a difference in a couple of **Remesh Surface** blocks. Let's just take run 4-1 here. So, this **Remesh Surface** only has a growth rate defined and a pretty small edge length of 1 mm. The rest of the inputs I've left default. If we do a top-down view, we can see that the bolt hole in this case has lost its circular feature, and we're also not preserving the fidelity or curvature of the TPMS structure as well as we would. > > Now, looking at the span angle and feature angle inputs, we could decrease these to preserve both the circular nature of the bolt hole as well as the curvature of the TPMS. But in the studies I did referencing the chart which were being included, they had a pretty large impact on solve time and were pretty specific to the mesh criteria that they were working on. So, it was only focused on span angle or feature angle. For example, coming back down to the from run three **Remesh Surface**, you'll notice that the span angle and feature angle are at 45. If I isolate this mesh and we look at a top-down view, we've preserved the circular nature of the bolt hole much better as well as the curved surfaces of the TPMS structure. With the span angle and feature angle again being at their default inputs, we're able to do this by defining a cord height. I'm going to go ahead and make this block a variable for height. I'm just going to call it 2% of **Mesh from Implicit Body Tolerance**. The cord height, as I mentioned previously, is the allowable surface deviation that the mesh can take while remeshing. So, it's going to read in the mesh from run three, look at each of the elements, find its centroid essentially, and while it goes through and decimates and remeshes, it's going to measure where that centroid changes from its original location and either remesh or keep that element as it was. > > The next input that I want to focus on is the minimum edge length, and this one was pretty crucial as far as the solve time of this block. So, again, I'm going to go ahead and make this a variable. I'll call it minimum edge length, and for now, just 33% of **Mesh from Implicit Body**. > > Coming back up to this original **Remesh Surface** block, if we open it up, the default way that this block comes in is with a Min Edge length of zero. In other words, what we're doing is we're telling this block that the smallest element size that you can create while remeshing is zero, which doesn't really make a lot of sense because we've already discretized in this first step in the **Mesh From Implicit Body**. So there's no real reason to go significantly smaller than the first place we discretized. What I tend to do now is just start with a value that is about 33% of this **Mesh From Implicit Body** tolerance. Depending on the quality of mesh that I get, the number of elements will either increase or decrease this value. > > So most of the time, this is what my **Remesh Surface** block will look like. The edge length will vary based on the overall size of my part and what I want my Global mesh setting, what I want my Global Max mesh size to be, but otherwise, this is what my **Remesh Surface** block will usually look like. > > So real quick, let's talk about the cord height and this 2% input value. What I kind of discovered was 2% seems to be a sweet spot. So real quick, let's talk about that. Just going to take a snippet of the screen. What I ended up looking at was on this x-axis was cord height as a percentage of **Mesh From Implicit Body** tolerance. I went from 1% all the way up to 10%. On the right axis, I plotted element count, and on the left axis, I plotted time. > > For the most part, the element count was pretty consistent throughout each of the input parameters that I ran. What changed quite a bit, however, was the solve time. At 1% and at about 10%, the block took the most time to solve, and the overall time plot kind of looked like that, with a sweet spot being from about 2 to 4% of the **Mesh From Implicit Body** tolerance. So that's more or less the reason of why I start at 2%. It gives me the most amount of fidelity with kind of the least amount of time. > > So looking a little deeper, at least my initial approach and preferred methods, you'll see there are a couple additional blocks: a **Simplify Mesh By Threshold**, which we've talked about, and a **Remesh Surface**. As I mentioned, the **Remesh Surface** block, the time it takes to run is going to be directly correlated to the number of incoming elements. So if we look at the total elements coming in from this **Mesh As A Body**, we have 1.9 million elements. The **Simplify Mesh By Threshold** has reduced that down to about 350,000 elements, and that's what's being fed into this **Remesh Surface** block. > > With the same input parameters as above, we can go back to the charts, and scrolling over to the far right, we have kind of my initial approach and preferred methods plot, the bar chart. The column on the left is the **Mesh From Implicit Body**, the overload with extents define and one iteration. The next one is taking that same **Mesh From Implicit Body**, putting it straight into the **Remesh Surface**. And then the next two plots are of the **Simplify Mesh By Threshold** and that being pushed into the **Remesh Surface**. In this example, it's actually quicker to do a **Simplify Mesh By Threshold** and a **Remesh Surface** than going straight into this **Remesh Surface** block. So if I was to do multiple design iterations of this heat sink, I would choose to **Simplify Mesh By Threshold** first and then Remesh. In some cases, I've seen it be close enough or take a little bit longer than just going straight into the **Remesh Surface** block. So there at some point will be a trade-off between using a utility meshing step versus going straight to a Remesh. > > One last thing I want to point out quickly is this chart here at the bottom. The furthest right bar is looking at this bottom row where we have a **Simplify Mesh By Threshold** being fed into a **Remesh Surface**. We've defined a large Edge length, a minimum element length of 33% of **Mesh From Implicit Body** tolerance, and same with the cord height. Of all of the **Remesh Surface** blocks that I ran, this ultimately was the fastest while also preserving the fidelity of the model. > > So we'll jump back to our notebook, and I'll quickly talk about the last file that's going to be included in this meshing course. I've created a Mesh Input Suggestions. We'll strive to keep this as updated as possible with various revision dates. There are a handful of links here that you can use to explore different meshing techniques or will take you to various articles. But the gist of it is each of these sections is going to go into pretty good detail as to why I choose certain inputs and the nuances within. So it's basically in writing what we verbalized throughout this video here. There are a handful of additional sections which are going to go into some volume meshing techniques, export surface meshes for CFD, as well as some additional utility blocks such as **Merge Mesh**, **Split Refine**, and **Collapse Vertices**. So I encourage you to take a look at this, and if you have any questions, feel free to reach out. Otherwise, thank you for listening, and if you made it this far, happy meshing. #### Description This training takes you through advanced meshing techniques. We recommend this information as a guide on how to currently and successfully surface mesh in nTop for virtually any downstream operations. **Prerequisites:** [nTop Essentials](https://learn.ntopology.com/ntop-core), [Guide to Meshing](https://learn.ntopology.com/meshing-course) **What is covered:** * Surface meshing large/complex geometry * Characterizing influential mesh input parameters * Exploring effects of mesh block order on solve time **Downloadable Files:** [Surface\_Meshing\_Techniques.ntop](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Surface_Meshing_Techniques.ntop) [Mesh\_Input\_Suggestions\_-\_Oct2023.ntop](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Surface%20Meshing%20Techniques/Mesh_Input_Suggestions_-_Oct2023.ntop) # Advanced Features: Contoured Standoffs Fixture Source: https://docs.ntop.com/lessons/fixture-generator/advanced-features-contoured-standoffs-fixture Add contoured standoff fixtures for any part or mesh you import. To use the **'Contoured Standoffs Fixture'**, drag the imported **Part** or imported **Mesh** into the *Part* input of the **Contoured Standoffs Fixture** Block. ![](https://files.learn.ntop.com/lessons/advanced-features-contoured-standoffs-fixture/FG_5_contstandoffs.gif) ## Contoured Standoff Fixture Inputs ![](https://files.learn.ntop.com/lessons/advanced-features-contoured-standoffs-fixture/FG_5_contoured-1.jpg) The diameter of the cylinder used to generate the standoff geometry. ![](https://files.learn.ntop.com/lessons/advanced-features-contoured-standoffs-fixture/FG_5_diam.jpg) The enumerated list of points is used to generate standoffs. ![](https://files.learn.ntop.com/lessons/advanced-features-contoured-standoffs-fixture/FG_5_Standoff-Locations.jpg) The distance between the part and cavity. ![](https://files.learn.ntop.com/lessons/advanced-features-contoured-standoffs-fixture/FG_5_stand-dist.jpg) A user-input distance that operates like a CAD chamfer & distance value. ![](https://files.learn.ntop.com/lessons/advanced-features-contoured-standoffs-fixture/FG_5_standcham.jpg) # Advanced Features: Mounting Features Source: https://docs.ntop.com/lessons/fixture-generator/advanced-features-mounting-features To add mounting features to your fixture, drag either **'Default Fixture'** or **'Contoured Standoffs Fixture'** into the *Fixture* input of the **Add Mounting Features** Block. ![](https://files.learn.ntop.com/lessons/advanced-features-mounting-features/FG_6_mounting-1024x580.gif) ## Fixture with Mounting Features Inputs The corner offset is the distance from the mold the mounting features (center of hole) will be placed. ![](https://files.learn.ntop.com/lessons/advanced-features-mounting-features/FG_6_corner.jpg) The thickness of the flanges extending from the mold. ![](https://files.learn.ntop.com/lessons/advanced-features-mounting-features/FG_6_feature-height.jpg) The diameter input here is the width of the flange. This is also the outer diameter of the end of the flange. ![](https://files.learn.ntop.com/lessons/advanced-features-mounting-features/FG_6_feat-diam.jpg) The hole diameter is the hole's diameter for taping or bolting. ![](https://files.learn.ntop.com/lessons/advanced-features-mounting-features/FG_6_hole-diam.jpg) The Mounting Head Diameter input will ensure the wash/bolt head will rest flat against the flange regardless of any fillets. ![](https://files.learn.ntop.com/lessons/advanced-features-mounting-features/FG_6_mount-head-diam.jpg) The fillet size between the fixture and the mounting feature flanges. ![](https://files.learn.ntop.com/lessons/advanced-features-mounting-features/FG_6_fillet-size.jpg) # Download: Jigs & Fixtures Source: https://docs.ntop.com/lessons/fixture-generator/download-jigs-fixtures Now that you have completed the follow-along, feel free to download the completed file with descriptions on how to create your Jigs and Fixtures. **Example File:** [FG\_8\_Demo File – Jigs.ntop](https://files.learn.ntop.com/Courses/Fixture%20Generator/nTop%20Files/FG_8_Demo%20File%20-%20Jigs.ntop) *This file was last updated in nTop 5.27.2* # Download: Masking Source: https://docs.ntop.com/lessons/fixture-generator/download-masking Now that you have completed the follow-along, feel free to download the completed file with descriptions on how to generate and export masks. **Example File:** [FG\_16\_Demo — Masking Module.ntop](https://files.learn.ntop.com/Courses/Fixture%20Generator/nTop%20Files/FG_16_Demo%20--%20Masking%20Module.ntop) *This file was last updated in nTop 4.24.3* # Follow Along: Jigs & Fixtures Source: https://docs.ntop.com/lessons/fixture-generator/follow-along-jigs-fixtures [https://www.youtube.com/embed/nhdWlLev43I](https://www.youtube.com/embed/nhdWlLev43I) This follow-along video takes a user through generating, meshing, and exporting simple jigs and fixtures from nTop. Advanced features/capabilities are also discussed for more advanced users. # Follow Along: Masking for Remanufacturing Source: https://docs.ntop.com/lessons/fixture-generator/follow-along-masking-for-remanufacturing [https://www.youtube.com/embed/xeCNuIOwuyc](https://www.youtube.com/embed/xeCNuIOwuyc) > **Transcript** > > Hi all, and welcome to a quick demo walkthrough of our masking plug-in and enclosure module within nTop. The purpose of this module is to generate masks, plugs, or enclosures for remanufacturing, or jigging or fixturing. So to start off, we import a part, and we can use our **Import Part** block and simply locate the file in this pack path variable here. > > The initial workflow we're going to go through is to generate surface plugs. This workflow is meant for plugging specifically cylindrical holes. So in this case, the first input is the part. We can drag and drop the part variable into our input, and the next is a list of holes we would like to plug. So to select these, I'm going to make a list equal to the number of holes, hole plugs, I would like to make, and I'm just going to go ahead and select those off the CAD object. So I'll click the select object here and select these four cylindrical holes. > > Once I've selected those holes, the last CAD feature input is the flush surface to those holes. In this case, that would be this surface here. So I'm going to go ahead and click the select input and select this guy. Now you'll notice there are other parameters such as the depth, the thickness, radial offset, clearance, taper angle, and resolution. These input parameters and how you should adjust them, depending on what you would like to achieve, is available in the course, and I'll let you guys play around in the course to see what each of the inputs do. You'll see here, and let me just provide a section cut of the part, the plugs were generated and these ones have a 5-degree taper, I believe, for an interference fit, as well as some additional clearance at the edges just in case. Applying this cap grip as well, we'll split this thickness into two and have the ability to easily remove the caps from the part. > > Awesome. Now the second part of this module of three is to create surface masks. Surface masks are used to create flattish or contoured masks, or what we used to call them, stickers. Essentially, if you're using some flexible resin or printer and you want to cover a surface or apply adhesive to stick to the surface, you can do that using our surface mask. So similar to the first input of the first workflow, we are going to drag and drop the part we're looking to mask as an input here. And then in this case, we're going to specify which surfaces we would like to generate the mask for. These do have to be surfaces that are touching each other for this to work, and in this case, I'll create a surface mask for these surfaces here. > > And you'll notice a surface mask has been run and we now have this part. Now you can control the thickness. This looks awfully thick, so we could lower the thickness as well as do some other operations such as increase clearance, a resolution pertaining to mesh and feature size that you'd like to capture, and as well as an overhang for surfaces on the edge, and that would generate an overhang along this surface here. > > The next module we'll explore is creating surface enclosures. And surface enclosures are meant to fill more than just holes or plugs, essentially an entire entrance to a part. So in this case, you'll notice here this surface we could enclose to prevent any, say, paint during a painting job or similar, or to protect the surface completely during a sandblasting or other type of operation. So in order to create the surface enclosure, the first thing we're going to do, similar to the first two modules, is drag and drop our part into the mask and part input and then the surface we would like to enclose. So again, in this case, it would be this surface here. > > Awesome, and you can see the surface enclosure has run, and we'll do a section cut quickly here just to show you what it looks like on the inside. You'll notice, similar to the plugs, there is a taper as well, and in this case, we have a clearance that can be adjusted. Obviously, if you want an interference fit, you could even enter a negative clearance and that taper to really push it in there and have it fit nicely. There is a second, more commonly used option for this, and that is to use the same enclosure but generate a lip on the outside as well. So I'll demonstrate that now very quickly. To change that, we are going to change from the enclosure type from inside only to conformal, and for this purpose, I'll also remove the taper angle so you can see what that looks like. > > Awesome, the enclosure has been made, and you can see when I do a section cut here that the enclosure now includes the outside as well and is going to prevent anything from getting in there during remanufacturing methods. You'll notice there is still this clearance that I can reduce if I want an interference fit. > > Awesome, these modules all produce mesh files, so they are already meshed and exportable as either STL, OBJ, or 3MF. And the way we are going to do that is by dragging and dropping any of them into the **Mesh Export** block available at the bottom here, and then we just have to specify the part name and the path where we would like to save the file, and that will export automatically. There are additional beta features available at the bottom for turning these mesh parts into CAD parts and export as STEP files or parasolid files. More info of this is available in the course, so please check it out. Thanks very much for watching. Hopefully this helps. Feel free to reach out to nTopology if you have any questions about using the module. Thank you. This follow along takes you through generating surface plugs, masks and enclosures for remanufacturing purposes. The process for exporting these designs for 3D printing is also covered. # How to Create Enclosures Source: https://docs.ntop.com/lessons/fixture-generator/how-to-create-enclosures Follow the steps below to cover exterior faces and enclose openings. ## Step 1: Import CAD and Drag into Part Input of the Surface Enclosure block ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_Import-CAD.gif) ## Step 2: Select Flat Surface to Enclose ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_Surface-to-Enclose.gif) ## Adjustable Inputs ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_Surface-Enclosure.png) The enclosure's depth into the part as measured from the input surface. ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_enclosure-depth.jpg) The outside thickness of the surface enclosure is measured from the normal of the input surface. ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_thicknessimage.jpg) The smallest feature nTop will recognize. ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_enclosureres.png) Space between the final part and the enclosure surfaces. ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_enclosureclearance.png) The taper angle applies a taper to the enclosure's volume that enters the part to enclose. ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_enclosuretaperangle.png) Selecting internal will enclose all surface holes as well as mask the surface. Selecting external adds an additional boundary surface around the face. ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_enclosure-type.jpg) Creates an undercut on all interior sharp edges to ensure full plunge depth. ![](https://files.learn.ntop.com/lessons/how-to-create-enclosures/FG_13_edgeclearance.jpg) # How to create Simple Fixtures Source: https://docs.ntop.com/lessons/fixture-generator/how-to-create-simple-fixtures ## Step 1. Import Base CAD or Mesh You start with the geometry for which you want to create a fixture. You can start with either a CAD or a Mesh, which can be imported using the **Import Part** or **Import Mesh** block. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/image-39-1024x606.png) Check out this [support article](https://support.ntopology.com/hc/en-us/articles/360048249514) for information on what file types nTop can import. ## Step 2. We will now create a Fixture using the Simple Fixture custom block that you can download from here. Once you have downloaded it, you can add it to your notebook by importing it. Drag and drop the imported geometry; we will use the imported mesh file in this case. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/image-40-1024x535.png) ## Step 3. Adjust inputs Choose between a rectangular outline or part outline shape to create the fixture design. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/FG_3_fixture.jpg) The offset distance between the cavity and the outer perimeter of the jig. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/FG_3_margin.jpg) The total height of the fixture is measured from the maximum height and the minimum height of the object. Additional height is added to the fixture floor to maintain the same Fixture Depth. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/FG_3_height.jpg) How deep the part sits in the fixture design space to create the jig. A larger fixture depth increases the depth of the resulting jig. Fixture depth should not exceed the total height of the input design. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/FG_3_depth.jpg) The Part Clearance is the clearance distance between the input part and the fixture. The clearance value should not be greater than the cavity detail parameter. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/FG_3_clearance.jpg) If the bottom of your part has holes or something similar, this parameter accounts for this to avoid creating pillars. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/FG_3_pillar.jpg) The level of detail you want to preserve in the cavity of the jig. A lower value increases the level of detail captured but is more computationally expensive. This value should be the minimum feature size of your part. The Cavity Detail should not exceed the clearance value of the part. ![](https://files.learn.ntop.com/lessons/how-to-create-simple-fixtures/FG_3_resolution.jpg) # How to Create Surface Masks Source: https://docs.ntop.com/lessons/fixture-generator/how-to-create-surface-masks Follow the steps below to generate surface masks for covering exterior faces for remanufacturing. ## Step 1: Import CAD and Drag into Part Input of the Surface Mask block ![](https://files.learn.ntop.com/lessons/how-to-create-surface-masks/FG_12_Import-CAD.gif) ## Step 2: Select Surfaces you wish to mask ![](https://files.learn.ntop.com/lessons/how-to-create-surface-masks/FG_12_Surfaces-to-Mask.gif) ## Adjustable Inputs ![](https://files.learn.ntop.com/lessons/how-to-create-surface-masks/FG_12_Surface-Mask-1.png) The thickness of the mask is measured from the normal face. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-masks/FG_12_thickness.jpg) The Overhang is the extension of the mask beyond the surface boundary. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-masks/FG_12_overhang.jpg) The Resolution is the smallest feature nTop will recognize. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-masks/FG_12_resol.jpg) The Clearance is the space between the final part and the mask surfaces. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-masks/FG_12_clearance-green.jpg) # How to Create Surface Plugs Source: https://docs.ntop.com/lessons/fixture-generator/how-to-create-surface-plugs Follow the steps below to plug cylindrical holes. ## Step 1: Import CAD and Drag into Part Input of the Surface Plug block ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_Masking-import-CAD.gif) ## Step 2: Select the Cylindrical and Flushed Surfaces you would like to plug ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_Masking-Plug.gif) ## Adjustable Inputs ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_Surface-Plug-1.png) Depth of the plug into the hole, measured from the flush surface. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_plug-depth.jpg) The thickness of the plug's cap is measured from the hole's flush surface. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_thickness-cap.jpg) This is the radial offset of the cap, not including the radius of the grip. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_radialoffset.jpg) This is the space between the final part and the mask surfaces. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_clearance-large.jpg) The Taper Angle is measured from the vertical axis. It occurs on all walls inside or outside the part. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_taperangle.jpg) The Resolution is the smallest feature nTop will recognize. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_resolutionpic.jpg) This adds a 1.5mm radial offset to the cap that aids with cap removal. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_applycap.jpg) This creates an undercut on all interior sharp edges to ensure full plunge depth. ![](https://files.learn.ntop.com/lessons/how-to-create-surface-plugs/FG_11_edgeclear.jpg) # Fixture Generator Source: https://docs.ntop.com/lessons/fixture-generator/intro This course introduces the fixturing and masking workflows that allow nTop users to easily fixture, secure, or prepare parts for assembly, remanufacturing, or CMM measuring. This course will introduce the user to the custom blocks designed for these operations, how to manipulate the inputs to get desired results and how to properly mesh and export the fixtures to be printed. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview) **What will be covered:** * Jigs & Fixture Workflows * Masking for Remanufacturing ### Jigs & Fixtures > **[Overview](/lessons/fixture-generator/overview)** > > Course introduction and Jigs & Fixtures overview > **[How to Create Simple Fixtures](/lessons/fixture-generator/how-to-create-simple-fixtures)** > > Create simple fixtures with the Fixture Generator > **[Mesh and Export](/lessons/fixture-generator/mesh-and-export)** > > Mesh and export your fixtures > **[Advanced Features: Contoured Standoffs Fixture](/lessons/fixture-generator/advanced-features-contoured-standoffs-fixture)** > > Contoured standoffs for advanced fixture design > **[Advanced Features: Mounting Features](/lessons/fixture-generator/advanced-features-mounting-features)** > > Add mounting features to your fixtures > **[Follow Along: Jigs & Fixtures](/lessons/fixture-generator/follow-along-jigs-fixtures)** > > Hands-on walkthrough for jigs and fixtures > **[Download: Jigs & Fixtures](/lessons/fixture-generator/download-jigs-fixtures)** > > Download completed Jigs & Fixtures files ### Masking For Remanufacturing > **[Overview](/lessons/fixture-generator/overview-2)** > > Masking for remanufacturing introduction > **[What is this used for?](/lessons/fixture-generator/what-is-this-used-for)** > > Use cases for masking workflows > **[How to Create Surface Plugs](/lessons/fixture-generator/how-to-create-surface-plugs)** > > Create surface plugs for masking > **[How to Create Surface Masks](/lessons/fixture-generator/how-to-create-surface-masks)** > > Create surface masks > **[How to Create Enclosures](/lessons/fixture-generator/how-to-create-enclosures)** > > Create enclosures for masking > **[Mesh and Export](/lessons/fixture-generator/mesh-and-export-2)** > > Mesh and export masking geometry > **[Follow Along: Masking for Remanufacturing](/lessons/fixture-generator/follow-along-masking-for-remanufacturing)** > > Hands-on masking workflow > **[Download: Masking](/lessons/fixture-generator/download-masking)** > > Download completed masking files ### What's Next > **[Resources](/lessons/fixture-generator/resources)** > > Additional resources for Fixture Generator # Mesh and Export Source: https://docs.ntop.com/lessons/fixture-generator/mesh-and-export Follow these steps to mesh and export your fixtures. ## Step 1. Drag and drop the final part into the mesh block ![](https://files.learn.ntop.com/lessons/mesh-and-export/FG_4_meshfromfixture.gif) ## Step 2. Drag and drop mesh into the export mesh block ![](https://files.learn.ntop.com/lessons/mesh-and-export/FG_4_exportmesh.gif) Check out our [102: Guide to Meshing](/courses/102-guide-to-meshing/) course for more information on exporting meshes. # Mesh and Export Source: https://docs.ntop.com/lessons/fixture-generator/mesh-and-export-2 ## Step 1: Select Mesh Export Path ![](https://files.learn.ntop.com/lessons/mesh-and-export-2/FG_14_Mesh-file-path.gif) ## Step 2: Drag finished Surface Enclosure block into the Mesh input of the Mesh Export block ![](https://files.learn.ntop.com/lessons/mesh-and-export-2/FG_14_meshexport.gif) Check out our [102: Intro to Meshing](/courses/102-guide-to-meshing/) course for more information on exporting meshes. # Overview Source: https://docs.ntop.com/lessons/fixture-generator/overview [https://www.youtube.com/embed/hq\_XrLEs7Q8](https://www.youtube.com/embed/hq_XrLEs7Q8) > **Transcript** > > Hi, my name is David Busacker and I'm an engineering consultant with Stratasys, the leader in performance additive manufacturing. Stratasys and design workflow leader, nTop, are partnering to solve business problems with additive manufacturing. Today, we're introducing a collaboration called the FDM Fixture Generator. > > Fixturing is a critical step in any manufacturing process, and FDM 3D printing is a great cost and time efficient way to print fixtures. Because producing FDM jigs and fixtures is simple, designing them is often the bottleneck. Limited knowledge and elusive best practices keep many customers from the real benefits of additive manufacturing fixtures. > > The FDM Fixture Generator is a scalable workflow that automates the design of FDM jigs and fixtures. Simply drag in a part geometry, adjust some key settings that are clearly labeled, and export your finished fixture for printing on a Stratasys FDM printer. The FDM Fixture Generator is simple to use. Choose your fixture shape and optional mounting locations to stabilize your fixture on any flat surface. Add standoffs to select where the fixture contacts your part, and customize your part access strategy. > > Fixtures designed in the FDM Fixture Generator are designed using fractal infill, a unique design for additive manufacturing strategy which saves print time and material. Start your new fixture design experience using the intuitive **Assembly Fixture** module. Make custom kitting trays or automation line components that hold parts in precise positions, or make your manufacturing operations safe and repeatable by holding larger parts in appropriate positions. > > Put the FDM Fixture Generator to use today. Stratasys and nTop collaborations are available for access to the new partnership. Start saving time and money with the Stratasys and nTop FDM Fixture Generator. We created the Jigs and Fixturing module to help streamline the design/creation of fixtures for various applications such as anti-rotation fixtures, assembly fixtures, or shadow boxing. Designed initially with Stratasys, the generator was optimized for FDM printing. However, the fixtures can be printed using any technology. Many of the fixtures can also be subtractively manufactured using a CNC mill or other traditional manufacturing techniques. At the end of this module, a new user to nTop should be comfortable importing geometry, generating fixtures, modifying the fixtures, and exporting as a traditional mesh file. # Overview Source: https://docs.ntop.com/lessons/fixture-generator/overview-2 [https://www.youtube.com/embed/zdRtekBgcmE](https://www.youtube.com/embed/zdRtekBgcmE) > **Transcript** > > Hi, I'm David Busacker, a senior engineering consultant at Stratasys. I'm going to be showing you some awesome applications of the newest release of the FDM fixture generator. Designers spend days designing fixtures that only take hours to 3D print. The FDM fixture generator reduces the cost of designing simple jigs and fixtures. > > In 2020, in collaboration with engineering software company nTop, we introduced the first tool, the **Assembly Fixture Generator**. The **Assembly Fixture Generator** takes a part file orientation and a height, and automatically creates a simple fixture optimized for FDM printing. We have some other great tutorials showing you the **Assembly Fixture** applications, but today I'm going to be focusing on the newest module, the **Masking Fixture Module**. > > The **Masking Fixture Module** adds a lot more applications to the FDM fixture generator. With this newest release, you can now create plugs, masks, and enclosures. Our customers are using these fixtures to protect their parts and ensure quality during painting or coating applications using a variety of FDM materials. So what I'm actually going to do is show you how you can protect a part like the one shown here with this new software tool by Stratasys and nTop. We'll do a separate software walkthrough with these very same parts on a different video, so you have everything you need to get going today. > > Castings are often expensive to manufacture, and it's common to repair or remanufacture a casting rather than to replace it. It takes a lot of fixturing to remanufacture parts. For example, when a casting first arrives at a remanufacturing facility, it'll need to be stored before we can do anything else. The **Assembly Fixture Module** is great for this. We can easily create quick holding fixtures to make sure our castings can be staged for operation. So this way, it'll be protected from falls and it'll be even held in a useful way for later operations. You can even add bolt holes or standoffs to secure delicate parts. > > Our customers' new favorite material for sturdy flat fixtures like this is ABS CF10. ABS CF10 is a 10% carbon fiber filled ABS plastic. It's a great combo of rugged and fast, awesome for rapid fixturing. Now there may be more on this part that we want to protect. For example, the interior of this casting is important, and we want to make sure we don't get grease or other contaminants inside the housing. We can use the **Masking Fixture Module** to turn this into a surface enclosure in the software. A surface enclosure takes a surface and encloses any openings in that surface to protect the part interiors from grease, media, paint, etc. To avoid wear and tear on your parts, we recommend a material like Durant. > > Duran is a highly lubricious, high-temperature material that will withstand plenty of wear and tear. Another nice option of the **Surface Enclosure** is the ability to wrap the mask completely around a protected surface. For example, take a look at this kind of exposed feature up here. To make sure the inside and the outside of this feature are protected, we can make a **Surface Enclosure** that protects the surfaces next to the target surface as well. > > Remanufacturing castings usually involves media blasting to clean the casting exterior. That process can damage the interior of a casting, so we need to continue to seal the holes and slots with the **Masking Fixture** module. On the FDM fixture generator, it's a two-click operation to plug holes. Just select the interior face and the flush surface and bam, you get a **Surface Plug**. > > Now, plugging cylindrical holes isn't necessarily difficult in traditional CAD, but managing dozens of plugs at once is much easier in the FDM fixture generator. There are also some great built-in features that our customers requested we build straight into the tool. So for example, you can add a taper to your plug to get the perfect fit, customize the clearance for a slip fit, press fit, or a tapered interference fit. And by the way, if you do opt for a tight fit, you'll want to make sure you use the built-in grip feature that makes plug removal nice and simple. > > Sometimes you'll want to make a mask for a particular face for a painting or coating operation. Designing exterior masks for complex surfaces like this one can lead to overlapping surfaces and just all kinds of headaches in traditional CAD. With the nTop tool, making what we call surface masks is very simple. Simply grab the surfaces you want to protect, put in some thickness and an optional overhang, and presto, you have a **Surface Mask**. > > Duran or ASA are great materials for a mask like this with an obvious way to install and retain it, but sometimes installing masks can be tricky. So, like with a surface like this, this is where a strong flexible polymer like TPU 992a can come in handy. TPU 992a is an FDM material with great abrasion resistance and lots of flexibility, and it's awesome for getting into tight spaces like this. It's also great for enclosures too because it allows you to easily place them into your part like this and tear it out for removal. > > Protect your whole part throughout your whole manufacturing process with the powerful combination of Stratasys FDM and nTop. So, add protective bumpers to the edges of your parts to reduce scrap rates, create on-part job aids for shop floor communication and job tracking, or create custom dunnage stacking strategies with contoured standoffs. Honestly, the opportunities are pretty much endless with the latest addition to the Stratasys and nTop FDM fixture generator. We created the Masking for Remanufacturing module to help streamline the design/creation of plugs, masks, and enclosures. We can use these masks to help protect parts or surfaces during various activities such as sandblasting or transportation. This module was released as the second collaboration between Stratasys and nTop. However, the parts output by this module can be printed using a variety of printing techniques/materials. # Resources Source: https://docs.ntop.com/lessons/fixture-generator/resources ## Additional Resources on Jigs/Fixturing and Masking 1. Video Example: [Design Conformal Jigs, Fixtures & Soft Jaws for Machining Metal AM Parts](https://ntopology.com/videos/video/ntop-live-designing-conformal-jigs-fixtures-soft-jaws/) (\~10min) 2. Video Example: [Designing Custom Jigs & Fixtures for Benchtop Assembly](https://ntopology.com/videos/video/ntop-live-designing-custom-jigs-fixtures-for-benchtop-assembly/) (\~15min) 3. Video Example: [Creating 3D Printed Jigs & Fixtures for CMM Inspection](https://ntopology.com/videos/video/ntop-live-3d-printed-jigs-fixtures-for-cmm-inspection/) (\~12min) 4. Video Example: [Automated Design of Masks, Plugs, and Enclosures for Manufacturing Operations](https://ntopology.com/videos/video/ntop-live-automated-design-of-masks-plugs-and-enclosures-for-manufacturing-operations/) (\~ 9min) 5. More on [The FDM™ Fixture Generator](https://ntopology.com/fdm-fixture-generator/) # What is this used for? Source: https://docs.ntop.com/lessons/fixture-generator/what-is-this-used-for ## Use Case: Surface Enclosures Castings are often expensive to produce, so it is common to repair or “remanufacture” a casting rather than replace it. With the Masking Fixture Module, you select a surface, and the tool automatically generates an enclosure for any openings on that surface. 3D print the fixture and attach it to the part to protect its interiors from grease, media, or paint. ![](https://files.learn.ntop.com/lessons/what-is-this-used-for/FG_10_Surface-Enclosures.png) ## Use Case: Hole Plugs Designing plugs for holes or slots is not an arduous task in traditional CAD software. But managing dozens of plugs takes a lot of time, and it is much easier to do in the Fixture Generator. The Masking Fixture Module includes a great selection of built-in features that enable you to automate the whole design process. From the ability to add a taper on your plugs to customizing their clearance for slip fit, press-fit, or interference fit. ![](https://files.learn.ntop.com/lessons/what-is-this-used-for/FG_10_Hole-Plugs.png) # Before We Begin: HEX 1 Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/before-we-begin-hex-1 [https://www.youtube.com/embed/OY\_LWyQZc34](https://www.youtube.com/embed/OY_LWyQZc34) > **Transcript** > > This is the first of three courses in our heat exchanger learning path that take you through creating a heat exchanger from conceptual design to the final part. In this course, we will explore the key considerations when designing a heat exchanger for printing, understand how to prepare heat exchangers and traditional CAD tools before designing it into nTopology, and learn to create the heat exchanger core using TPMS structures. > > The heat exchanger we will build out together is the fuel cooled oil cooler as seen in many of our webinars. Looking at the cross-section, hot oil enters through the top, moves around the dome, enters the hex core, and exits out the bottom. Cold fuel enters the bottom left, moves up through the core, and exits out the bottom right. In this course, we will: * Explore the **key considerations** when designing a heat exchanger for printing * Understand how to **prepare your heat exchanger volumes** before designing in nTop * Learn how to **create the heat exchanger core** using TPMS structures # Defining Starting Geometry Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/defining-starting-geometry [https://www.youtube.com/embed/6HxxrKuLAAY](https://www.youtube.com/embed/6HxxrKuLAAY) > **Transcript** > > The next thing we'll do is import our CAD data. The easiest way to do this, I think, is simply just drag and drop. For this first section, just watch, and then we'll follow along in a bit. I'm going to drag and drop the assembly of this Creo part onto the screen. The part's going to get, the assembly is going to get imported, and I'll be able to manipulate the geometry from here. > > As with always, we can double click, right click, extract the CAD body, turn it into an implicit, access the different bodies under the properties panel, and pull out various entities and work from them. At the moment, I don't suggest bringing in assembly files and working with them. I'd encourage you to bring in individual part bodies. The reason being is I like to often reference CAD entities during my design process to make the workflow as parametric as possible. So for instance, if I want to capture this CAD edge and this CAD phase, I drag them into this CB. I'll get an axis created through here. Now, if I go through, if I go back to my CAD data, update a fillet, or add a hole, then this CB and this axes that I'm referencing for, let's say a downstream operation, may get updated. > > The reason being is currently we visit each part in an assembly, we'll collect the items, the faces, the edges, the vertices, etcetera, and generate one list. So if that part changes or a part changes, that list can get updated. During this quarter, our product team is working on capturing the assembly list, and in the following quarter, they're going to work on a persistent referencing initiative to aid in working with assembly files. > > I'm going to delete the blocks that I see on screen now. Instead of bringing in the assembly, I'm going to control select each of the parts on the screen and simply just drag and drop them. I'm going to go through each of them. I'm going to isolate each one and rename it to its appropriate section. You can find it in the file path, you can look at the name, or simply just follow along. > > Once I have each of these labeled, I'll minimize each of the imported parts, and I'm going to rename this section to imported CAD. Then I'm going to create two new sections below that. The first section I'm going to call CAD plus solid bodies, and then CAD plus fluid bodies. I'm going to come under each of the block details for these imported parts, open up the properties list, and drag each of these bodies into their respective sections. So this top dome is a solid body. I'll drag it into here and continue through this process, opening the list and taking out the individual solid body. Minimize the imported CAD data section and then rename each of these CAD body variables. So this will become top dome and so on and so forth. > > Next step will be turning each of these into an implicit. Moving from the top down, click on top dome, hit I to isolate, double click and convert **CAD Body To Implicit Body**, and as I go through this, I'm going to control C, control V the names and rename the implicits implicit variables that get generated. So now anytime we want to bring in an updated version of any of these imported parts, it's going to automatically update the top CAD and implicit bodies and so on and so forth. > > Next thing we're going to do is create a new section, and I'm going to call this CAD and implicit references. The first thing I'm going to do is turn on each of my plenum regions and capture the inlet and outlet faces. So we'll start with the oil inlet at the top. I'll right click, say create **CAD Face Variable**, and I'll drag this down into the CAD and implicit references section and rename this oil CAD phase. Do it for the oil outlet, the fuel inlet, and the fuel outlet. We won't use these right away, but we'll reference them later on as well as add to this section. Go ahead and close the sections here. We'll minimize these and create a new section, and we'll go ahead and call this one hex core and fluid generation. Now that all the necessary custom blocks are imported, we can import and define our geometry. By labeling and adding sections to your notebook, we can keep this complex workflow organized and easy to read. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [HEX1\_10\_HEX Geometry.zip](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/Data%20Files/HEX1_10_HEX%20Geometry.zip) # Design for Additive Manufacturing Considerations Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/design-for-additive-manufacturing-considerations Manufacturing should be considered from the earliest stages of the design process. This is especially true for advanced manufacturing technologies such as AM, where part cost is high, and the business case must be strong. These costs can be compounded by print failures arising from several factors such as material, printer, laser path/processes, etc. 1. Leveraging common engineering best practices help to alleviate typical failure modes during the print process, such as deformation, distortion, cracking, delamination, etc. Some consideration to consider is no sharp changes in cross-sectional area as well as maintaining symmetry as possible. 2. As a rule of thumb, using filleting, the current ratio of TPMS thickness to Baffle thickness we've found to yield successful builds and meet pressure requirements is 1.0: 1.5. # Download: Completed HEX Core and Fluid Generation Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/download-completed-hex-core-and-fluid-generation Now that you have gone through this course, feel free to download our completed file with descriptions as a reference. We will use this file to begin the next follow-along courses in the next course in the learning path, [HEX Design Part 2: Heat Exchanger Flow Distribution and Control](/courses/heat-exchanger-flow-distribution-and-control/). Note the file below uses the best modeling practices outlined in the previous lesson, *HEX Core and Fluid Generation Update (Clean Fields)*. **Example File:** [HEX1\_14\_Completed HEX Core and Fluid Generation.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_14_Completed%20HEX%20Core%20and%20Fluid%20Generation.ntop) *This file was last updated in nTop 5.16.2* # General Considerations Before Importing CAD Data Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/general-considerations-before-importing-cad-data nTop is not a CAD replacement tool; our mission is to enable further, unlock, trivialize and automate otherwise exceedingly complex part generation and enhancements by working with external CAE tools. While you could technically design an entire heat exchanger inside nTop, it's sometimes not the most practical way of going about it. Most nTop users start their project in their traditional CAD tool and import that geometry into nTop to perform all their complex operations like applying lattice structure to the heater core. Similar to how an analyst de-features various components before performing FEA or CFD, some extra prep work in your CAD software goes a long way. We like to call this concept “Pre-nTop Prep.” ## General considerations for Pre-nTop Prep 1. Generating design space/infill volume within the shell/housing geometry 2. Generating necessary initial inlet/outlet piping geometry/fluid domains (these fluid domains will connect to plenums) 3. Conceptualize and generate initial plenum geometries to bring in and evaluate 4. Potential defeaturing of unnecessary complexities that would impact meshing 5. Generate a sub-assembly of required parts ![](https://files.learn.ntop.com/lessons/general-considerations-before-importing-cad-data/HEX1_5_Diagram.jpg) # HEX Core and Fluid Generation Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/hex-core-and-fluid-generation [https://www.youtube.com/embed/gxk5a--utJY](https://www.youtube.com/embed/gxk5a--utJY) > **Transcript** > > If you don't have the beta blocks, we would come under File Settings, and under General, I click show beta blocks. Click okay. And since we've done a decent amount of work, we'll go ahead and say File Save, and we'll call this whatever you'd like. I'll call it LMS Hex Walkthrough. > > The first thing we'll do is come under Lattice Generate and click **Periodic Lattice Body**. The next thing we'll do is enable the overload option, and we're going to select a two-parameter unit cell. I'll talk about this later on. You'll see that the only difference is now we need two input parameters to complete this otherwise unbuilt block. There are a couple ways we can go about filling out this block. We can, under the lattice unit cell type, select the individual components. Let's say we want the Wall TPMS unit cell with bias. We can drag and drop that into here. Or my generally preferred method is to double click, and this will auto-filter what can be inserted into here. In this case, we'll select **Rectangular Cell Map**. Our first unit cell parameter in this case is going to be the thickness of our lattice body. So we'll right-click, and I'm going to call this TPMS thickness. Right-click the next variable, say make variable, and I'll call this bias. > > We can do the same thing, right-clicking on various inputs to make them variables and pull them out into the notebook. In this case, I'll just leave Gyroid as the common unit cell type. We can see that it's populated down here, and we can hit “I” to isolate just this unit cell. On the bottom right, you'll see the HUD display for this, and we can visualize the different thicknesses, how that impacts what the unit cell will look like. The other aspect, looking at the bias, it's going to either increase or decrease the passageways on either side, so we can now influence what the pressure drop is going to be discreetly. A bias of zero is going to have equal passage widths on each side. > > The volume is going to be our design space, so I'll right-click, make variable, and I'll call this design space, and I'm going to drag this to the top of this section. I want the cell size to be a variable, so I'll right-click, make variable, and leave the frame as is. The frame is just going to tell the cell map where to start its initial patterning. The default is going to be at the midpoint of our bounding box. So if we look at our properties bounding box, we have a max and midpoint associated with this bounding box. And so the starting point of the cell map, unless you change that frame, will be at that midpoint. > > So the only thing that we need to do to complete this block is define these variables. Our design space for now, we're just going to say, is our infill volume. And you'll see we have three different infills here. Each of these little symbols next to the infill volume indicates a different geometric representation. This first one is the import, the second is the CAD, and this third here is the implicit. We can look at the left-hand side of this design space and match the symbols together, so we know that we can fit this into here. For instance, if I was to click the CAD, we would get this red saying that the block is unable to be built. But if we click the implicit, it'll populate. So now we have our design space, which right now is just the cylinder. We'll say our thickness is going to be 0.5 mm, we'll leave our bias at 0 mm for now, and let's put our cell size at 10 mm and isolate our **Periodic Lattice Body**. > > So we'll see that we've created our **Rectangular Cell Map** within the design space. We're going to click on the **Periodic Lattice Body** block, right-click, make it a variable, and I'm going to call it raw lattice. The next step is going to be Boolean intersecting this with the design space. I'll come up to the search blocks and start to type “bu intersect” to filter out the other blocks and select **Boolean Intersect**. I'll drag the raw lattice variable into here along with the design space. Isolate the intersect, right-click, make it a variable, and call this hex core. > > We can also use the **Trim Cell Map** or **Trim Lattice Body** beta blocks to perform a similar operation to the **Boolean Intersect**. If we look at the **Trim Cell Map**, we would put our cell map into the first input, the body we want to intersect it with, and define if we want, let's say, all of the centroids inside, and maybe we want to keep only the outside cells. So this cell map is going to keep everything outside of this design space, and we can play with the fill type depending on what we may or may not want to capture. > > Similarly, with the **Trim Lattice Body**, we would put our lattice body into here to find the design space that we want, and whether we want to keep all of the bodies inside or outside, as well as the feature tolerance. So we're effectively doing the same thing that we did with this **Boolean Intersect**, but we've added another input to define outside or inside, as well as rounding the edges. And all that's going to do, it's hard to see with these periodic bodies, but it'll give us a, if we look at a high-res image, we'll select this and select Control H on the keyboard. We have sharp edges defined when we use our **Boolean Intersect**, or doing the same thing, Control H rounded edges defined with the **Trimmed Lattice Body**. It's personal preference. Since I know I'm going to go ahead and put a blend radius or a fillet between my hex core and the intersect, I opted for just using the **Boolean Intersect** block. > > Both the trim cell map, trim lattice body, and intersect all have their appropriate applications. Isolating on the **Boolean Intersect**, I can hit Z now and autofit to the page. The next thing we'll do is generate our fluid domains. We'll come back up to the top, select **Periodic Lattice Body**, and our unit cell type is going to be slightly different this time. We used the walled TPMS unit cell with bias; this time we're going to use the TPMS unit cell with bias. > > So I'll double click in here, select TPMS unit cell with bias, select a gyroid. Now since we haven't exposed the unit cell type in here as the variable, if I was to change one of these, the other wouldn't change. So now let's say I want to go back and do that, I would right-click, make variable. I can drag this unit cell type into here, and now they're both linked. > > The cell map is going to be the same, so I'll capture the cell map from the raw LCE variable. I'll hold the control key and drop it into this cell map. The control key is going to make a copy and keep this in both locations. The input value to the **Periodic Lattice Body** in this case is just going to be the bias. We don't have a thickness associated with this unit cell. So now we've created one of our fluid domains. So we'll right-click, make variable, and I'm going to call this raw fluid. Just for fun, we can give it a quick random color, and we'll turn on the raw lattice body and our raw fluid. > > All we've done is created one of the interior fluid volumes. The next step is to trim it to our design space and fit it within the hex core. So we'll go ahead and come under modeling, under the Boolean operations. You can either select them here or under the search blocks. I'm going to capture one **Boolean Subtract** for now, as well as a **Boolean Intersect**. I'll use the **Boolean Intersect** first, and I'm going to take the raw fluid, the design space, and that's going to give me one of my fluid domains that fit within that volume. > > Now if we look closely at the hex core and this fluid domain, there's going to be a slight intersect between the two geometries. So we're going to need to subtract out the walled TPMS structure from this interior fluid domain. So we'll use this **Boolean Subtract**. Our primary input is going to be this **Boolean Intersect**, and our subtraction body is going to be our hex core. Now we can drag or drop this hex core into here, or once our notebook starts to get large enough and develop, it's usually easier and quicker to just select in the input section and type for the variable you're looking for. So I'll just capture the hex core here. > > I'll click isolate, and all we've done is trim that down a little bit. So I'll right-click this, make variable, and we'll call this one hot fluid. I'll go ahead and give it this warm red color here. Close the nested blocks, and minimize this hot fluid. We'll use one more **Boolean Subtract**. So at the top, we'll select boolean subtract. Now we're going to go from our design space, we're going to pull out the hex core and the hot fluid domain. We'll click this plus symbol, add to this list, and we'll drag the hot fluid, the hex core. We'll right-click, make this a variable, and we'll call this cold fluid. And we can get this a cool blue color. So now we've created both our fluid domains with a gap that fits the walled TPMS or the hex core in between. Once we have our geometry defined, we can add a TPMS structure to the Core and create the starting fluid regions, as shown in this video. For a faster or slower speed for the video, click on the settings in the bottom right of the video. > [!NOTE] > > **Note**: This video was recorded with modeling techniques that do not reflect the most up-to-date practices as of April 2025. See the next lesson to understand how to better model your HEX Core and Fluid Domains. In the near future, you can expect to see this series updated to include all modeling best practices. > [!NOTE] > > **Note**: This video was recorded with version 3.24.3. In 3.26.3, we changed the **Periodic Lattice Body** block name to **Periodic Lattice** and removed it from the BETA Tab. # HEX Core and Fluid Generation Update (Clean Fields) Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/hex-core-and-fluid-generation-update-clean-fields [https://www.youtube.com/embed/KU7XnDJpEF0](https://www.youtube.com/embed/KU7XnDJpEF0) > **Transcript** > > As we work with implicit bodies and stack up Boolean operations, it's important to be aware of the cleanliness of our underlying fields. Using a few good practices will help to ensure that our downstream modeling and discretization operations are going to run as expected. Two really good practices to be aware of are minimizing Boolean operations early on in the modeling process and avoiding coincident surfaces in our Booleans whenever possible. > > In the near future, we plan to update this course to include all of those modeling best practices, as well as flow analysis. For now, I want to walk through the modeling practices that we use in the video and highlight a couple of ways that we can improve upon those to ensure proper modeling and meshing downstream. > > Let's start by walking through the modeling practices that we used in the part one heat exchanger video. Starting with our design space, represented by this cylinder, we created a lattice throughout our heat exchanger core. We generated this raw lattice across that cylinder and then we intersected it with our initial cylindrical design space. This is an example of one of those upstream Boolean operations that isn't necessary for our downstream modeling. > > Once we created our heat exchanger core, we moved on to create our hot fluid. We generated a raw fluid using a TPMS unit cell and then we intersected that with our initial design space. Again, this is an example of a Boolean operation that we didn't really need to use this far upstream. From there, we subtracted away our heat exchanger core to generate this initial hot fluid. > > Then, to create our cold fluid, we took our initial solid design space and then we removed both this pink hot fluid and our initial heat exchanger core. That generated this cold fluid domain, but not without breaking one of our best practices: to avoid coincident surfaces in our Boolean operations. Now, before walking through a more ideal way to have modeled this, I want to take a step back and look at what coincident surfaces actually are and how they affect our underlying fields. I'll collapse some of these blocks that we've opened so far, and we'll jump over into a simpler example. > > So, when we talk about coincident surfaces, we can take this example of a large cylinder and a small cylinder right inside of it. If we expand both of these blocks, we see that we've got two cylinders that are each 10 mm tall. And if we view maybe from the left side here, we see that the top and bottom faces of both our large cylinder and our small cylinder are going to be coincident. So, if we drop our large and small cylinders into a **Boolean Subtract** block, we're left with this tube shape, as we might expect. > > However, if I adjust my transparency and view the underlying field using the **Field Viewer**, I can probe over these values and see that outside of this tube shape, we see a signed distance field or an implicit body field as we might expect. But when we start to approach where those coincident surfaces existed, we see this 0 mm value throughout our implicit field. So, if this Boolean subtract were our final operation, that would be okay. > > But say we wanted to do some further modeling downstream. So, say I wanted to take that Boolean subtract result and I wanted to offset it, maybe I want to offset it by 1 millimeter. We remember that any of these modeling operations are actually happening on the underlying implicit field of whatever surface we're viewing. So again, if we view that implicit body field from the side like this, and we take that Boolean subtract and drop it into an **Offset Body** block, we'll adjust our transparency again. And we see that we've actually created this solid fill outside of this fake zero because we've just offset our implicit body field, so that moves our surface from this fake zero all the way up to the 1 mm mark. So, our offset is actually going to look something like this. > > Now, to avoid something like this, we can use this infinite cylinder approach where instead of subtracting our small cylinder from our large cylinder with a coincident surface, we can generate something like this small infinite cylinder. Now clearly, this isn't a cylinder of infinite length, but we see that the surface of this smaller cylinder extends beyond the surface of our initial large cylinder. It's about 5 millimeters below the bottom surface and 5 millimeters above the top surface of our large cylinder. So, if we take another **Boolean Subtract** block and subtract this infinite cylinder from our initial large cylinder, we get the same looking result as we got with our initial Boolean subtract operation. > > But if I adjust my transparency and view the field of this new cylinder or this new tube, we see our field looks pretty different. And now we have a more true signed distance field associated with this implicit body instead of that zero surface from those coincident surfaces between our cylinders. We've now alleviated that concern. So if I were to take this result and offset it by 1 mm, then we maintain that tube shape because we've avoided that fake zero surface within our implicit body field. > > Now, here's another example of one of these coincidence surfaces. Say we've got a solid box like this, a section cut, so we see the inside of this is solid. And we've got a shelled box as well that's a 2 mm inward shell. So if I were to use a Boolean operation, use a **Boolean Subtract** removing our shell from our solid box, we would get something like this, just a smaller box on the inside of here. But remember, if I use our **Field Viewer**, I still see that fake zero surface where our coincidence surfaces between our box and our initial shell were. So if I were to take that Boolean subtract and maybe um offset our body by, let's say, half a millimeter, maybe section cut that, our result is actually going to look like this. > > So, we see that those coincidence surfaces create these fake zeros within our implicit bodies that can lead to downstream modeling operations that may create geometries that we're not expecting. So, jumping back over into our heat exchanger example, I want to highlight a couple of adjustments that we can make in our modeling process to generate better fields and make sure that downstream we're avoiding modeling issues as well as meshing and export issues. So, what we can do here is still use our initial design space and generate our initial raw lattice. That's later going to become the walls of our heat exchanger core. > > But now we're going to generate our fluids differently. So, we created our raw fluid earlier and we'll take our initial solid design space and remove both our raw fluid and our raw lattice from that design space. So, we're left with something like this. So, by modeling this way, we've avoided using our initial Boolean intersect that we had previously used upstream and we just started with a nice clean design space and remove two lattices that in this case we're going to count as those, uh, kind of infinite geometries that we're removing. > > We know that the surface of our raw fluid is right at the mid-surface of our raw lattice and the bounds of both our raw fluid and our raw lattice fall well outside of the bounds of our initial design space. So here we're implementing both of those best practices that we discussed: we're minimizing our upstream Boolean operations and we're avoiding creating Booleans on coincidence surfaces. > > Now, we're going to take a similar approach when we create our new hot fluid down here. So again, we'll take our initial design space, which is just that solid cylinder, and we'll remove the negative implicit scalar field of our raw fluid, so the negative field of this lattice, as well as that same raw lattice that we were using for our heat exchanger core. So, this is going to generate our hot fluid. We've also got our new cold fluid, and will retain that heat exchanger core. So again, these are some good practices to watch out for as you start to model your own heat exchangers, as well as other geometry in nTop. In the near future, you can expect to see updates to this heat exchanger course to reflect both best practices for modeling, as well as flow analysis. See the video above to understand best practices the nTop team has uncovered for modeling heat exchangers. Generally, it's best to keep two things in mind to retain clean fields and avoid downstream modeling and discretization issues: * avoid using Boolean operations early in the design process if unnecessary * avoid coincident (or near-coincident) surfaces when using Boolean operations In the near future, you can expect to see the Heat Exchanger Multicourse to include all modeling best practices and the introduction of native nTop flow analysis. # Importing Custom Blocks Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/importing-custom-blocks [https://www.youtube.com/embed/d5APmjmpopc](https://www.youtube.com/embed/d5APmjmpopc) > **Transcript** > > Moving into nTopology, the first thing we'll do is import our custom blocks or the CBs I used in this workflow. There are a couple of ways to go about doing this. I would suggest simply just drag and dropping them into your My Blocks folder. Your My Blocks folder is generally going to be found under your User Drive, App Data, Roaming, nTopology, in My Blocks. I have my My Blocks folder sectioned out into various subcategories just to help navigate it a bit easier. > > Putting the CBs into this folder will allow future instances of nTop to always pull them in. If you do this method, you'll likely have to close your instance of nTop and reopen it to load those blocks in. Otherwise, we'll come under File, Import, navigate to the location and click Open. In this scenario, that block will get populated into the notebook, and you might also notice this counter increased by one. > > If we open up the **View Imported Blocks**, we'll see that we have this CB as an imported block into this instance of nTop. We can click **Import Block** and continue to open the rest. Feel free to pause the video here and finish importing. You might notice that there's a small icon to the right of each of these CBs. This indicates that this custom block is active within the notebook, meaning that I'm unable to delete it from the imported blocks section. > > To remove them from the imported block section, we would delete any active blocks within the notebook and then we can delete it. If you've drag and dropped the CBs into your My Blocks folder and opened up a new instance of nTop, you'll be able to find them via the search block section. I always label my CB starting with CB so I can easily filter through them in the search window. The first step to designing our heat exchanger is to import the necessary custom blocks that you can download below this video. To learn more about custom blocks, please visit our [Intro to Automation](/courses/230-intro-to-automation/) course. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example Files:** [HEX1\_9\_CB – Axis through CAD Cylinder or Hole – 1.0.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Axis%20through%20CAD%20Cylinder%20or%20Hole%20-%201.0.ntop) *This file was last updated in nTop 4.24.3* [HEX1\_9\_CB – Boolean Union (Clean).ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Boolean%20Union%20\(Clean\).ntop) *This file was last updated in nTop *4.24.3** [HEX1\_9\_CB – Cardinal Face Points.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Cardinal%20Face%20Points.ntop) *This file was last updated in nTop *4.24.3** [HEX1\_9\_CB – Center Point of CAD Cylinder – 1.0.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Center%20Point%20of%20CAD%20Cylinder%20-%201.0.ntop) *This file was last updated in nTop *4.24.3** [HEX1\_9\_CB – Double Curvature in XY Plane – 1.0.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Double%20Curvature%20in%20XY%20Plane%20-%201.0.ntop) *This file was last updated in nTop 4.24.3* [HEX1\_9\_CB – Cylinder (CP-Axis).ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Cylinder%20\(CP-Axis\).ntop) *This file was last updated in nTop *4.24.3** [HEX1\_9\_CB – Mesh Preservation Regions – 1.0.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Mesh%20Preservation%20Regions%20-%201.0.ntop) *This file was last updated in nTop *4.24.3** [HEX1\_9\_CB – Radius of CAD Cylinder or Hole 1.0.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_CB%20-%20Radius%20of%20CAD%20Cylinder%20or%20Hole%201.0.ntop) *This file was last updated in nTop *4.24.3** [HEX1\_9\_Ellipse from Remap.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Two-Channel%20Heat%20Exchangers%20in%20nTop/nTop%20Files/HEX1_9_Ellipse%20from%20Remap.ntop) *This file was last updated in nTop 4.24.3* # Overview Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/overview This course and its two subsequent courses teach you how to create a heat exchanger (HEX) through conceptual design to the final part. This course takes you through techniques used for the HEX core, initial fluid volumes in nTop, and the key information needed before designing your heat exchanger. After this course, you will have the starting knowledge to build your heat exchanger. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview), [210: Intro to Latticing](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What will be covered:** * Why a TPMS? * Application Down Selecting * Pre-nTop Prep * HEX Body Shaping * How to design the HEX Core and main fluid regions Once you have completed this course, we recommend visiting our [Heat Exchanger Flow Distribution and Control](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/overview) course to complete your HEX design. Then, to explore meshing and exporting techniques, we recommend our [Simulation and Mesh Export of Heat Exchangers](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/overview) course. > **[Before We Begin](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/before-we-begin-hex-1)** > **[Read Me ~~Seriously~~](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/read-me-seriously)** ### Triply Periodic Minimal Surfaces > **[Why a TPMS?](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/why-a-tpms)** ### Application Down Selecting > **[Understanding Applications Possible Today](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/understanding-applications-possible-today)** ### Pre-nTop Prep > **[General Considerations Before Importing CAD Data](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/general-considerations-before-importing-cad-data)** ### HEX Body Shaping > **[Taking Shape](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/taking-shape)** > **[Design for Additive Manufacturing Considerations](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/design-for-additive-manufacturing-considerations)** > **[Pre-nTop Prep](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/pre-ntop-prep)** ### Starting the Heat Exchanger > **[Importing Custom Blocks](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/importing-custom-blocks)** > **[Defining Starting Geometry](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/defining-starting-geometry)** ### HEX Core Design > **[What Type of Lattice Should I Use?](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/what-type-of-lattice-should-i-use)** > **[Standard Design Parameters in nTop](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/standard-design-parameters-in-ntop)** > **[HEX Core and Fluid Generation](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/hex-core-and-fluid-generation)** > **[HEX Core and Fluid Generation Update (Clean Fields)](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/hex-core-and-fluid-generation-update-clean-fields)** > **[Download: Completed HEX Core and Fluid Generation](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/download-completed-hex-core-and-fluid-generation)** ### What's Next > **[Resources](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/resources)** # Pre-nTop Prep Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/pre-ntop-prep [https://www.youtube.com/embed/\_5YuhOYOLoA](https://www.youtube.com/embed/_5YuhOYOLoA) > **Transcript** > > Right, the assumed print direction of our heat exchanger is going to be in the positive Z-axis or the axes that we see here on screen. Before we move to additive manufacturing, or AM designs, we should take DfAM into account, designed for additive manufacturing. So in this case, bringing our attention to the bottom, right away we know that we're going to have to support the bottom of this structure. We could move forward with it or we could work on making it self-supporting. > > Creo is my preferred design tool. You can see here that I've changed the bottom port and bottom section to be about 45-degree angles to make themselves supporting during the print process. Looking at a cross-section, we'll see the other parts and modifications that I did. The primary ones I want to point out are the infill volume seen here in red, and then the inlet and outlet plenums for both the oil here in yellow and the fuel in blue. > > Let's briefly talk about the plenums. In my studies, I found them to be a major component to successfully designing heat exchangers using TPMS, or Triple Periodic Minimal Surface, lattice structures. The main reason being is we want to evenly distribute the flow into the core to not only maximize the distribution and thereby increase the overall heat transfer, but also going to have a pretty significant impact on the pressure drop. For instance, imagine if we were to bring the infill volume seen here in red up to the top of this dome and down to the bottom of the hex core. When our fuel enters, it's going to hit a small cross-section of that lattice structure, which we'll look at later on, have to figure out how it's going to distribute itself, and then exit a small cross-section at the top. > > That initial entrance is going to severely impact the overall Delta P, and we're not going to have as uniform a distribution as if we were to introduce plenums into the design. At this point, you might be asking yourself that the bottom half or bottom section looks a little different than the one we've printed. The reason being is sometimes, in my mind at least, it makes more sense to design some of the plenum geometry and volumes in nTop and some of them elsewhere. So you'll see during the hex buildout that we do together, we're going to add to the cold Inlet plenum and the hot Outlet plenum seen here in blue and yellow respectively. > > Next aspect about the plenums is they generally follow the contour of our shell. So when we get to generating the shape of the shell volume seen here in gray, not only do we need to take into account DfAM, but how we might want our flow to be distributed into the hex core. The last aspect I'll touch on in our pre-op prep section is defeaturing. Similar to how we might defeature parts before we move into any type of FEA, we'll want to remove any unnecessary complexities that, let's say, may impact meshing and rapid design analysis downstream. We can add those back in later. In this lesson, we will discuss the starting design for our heat exchanger, the key considerations for printing and the different split regions required when importing into nTop. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Read Me ~Seriously~ Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/read-me-seriously This course will focus on Recuperative > Indirect Heat Exchangers (HEX) – such as Shell & Tube & Plate. The objective is to replace traditional internal geometry with a Triply Periodic Minimal Surface. We can apply the same logic in this course to different HEX applications. It is **HIGHLY** encouraged to read through the course before doing the follow-along video/workflow and before embarking on your own HEX design. This course will allow you to get an idea of where we are going, and the logic behind certain decisions and help set you up for greater success. While we will step you through a somewhat chronological order of the design process, you might often find yourself redesigning certain aspects to enhance or meet performance that otherwise could have been addressed at the onset. This core knowledge will be essential. ![](https://files.learn.ntop.com/lessons/read-me-seriously/HEX1_2_Read-Me.jpg) # Resources Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/resources Now that we covered the fundamentals of creating heat exchangers, the prep required before bringing a HEX design into nTop, and the core region, the next step is to design the baffles and plenums in nTop. You can find our next course [here](https://learn.ntop.com/courses/heat-exchanger-flow-distribution-and-control/). ### **Additional Resources on Heat Exchanger Basics** 1. Video Example: [Performance-Driven Heat Exchanger](https://ntopology.com/videos/video/ntop-live-performance-driven-heat-exchanger-design/) (\~25min) 2. Video Example: [Designing Heat Exchangers for Additive Manufacturing](https://ntopology.com/videos/video/metal-dfam-series-designing-heat-exchangers-for-additive-manufacturing/) (\~38min) 3. Article: [Designing the Optimal Heat Exchanger](https://ntopology.com/blog/heat-exchanger-design-high-performance/) 4. Article: [Copper Additive Manufacturing for Heat Exchanger Design](https://ntopology.com/blog/copper-additive-manufacturing-for-heat-exchanger-design/) # Standard Design Parameters in nTop Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/standard-design-parameters-in-ntop The ability to manipulate a given geometry virtually any way you can imagine is a very powerful tool when designing high-performance heat exchangers. nTop enables you to easily and quickly generate complex lattice structures and empowers you by exposing a suite of predefined and user-defined design parameters. In this section, it's important to remember that as you manipulate/distort TPMS structure, you keep manufacturability in mind. All the design parameters below will be influenced by performance requirements, the type of heat exchanger, and the fluid(s) used. For example, the operating temperatures and pressures of various fluids can significantly impact cell size. Again, it is important to keep DfAM Considerations in mind when manipulating your TPMS lattice structure. Probably the most fundamental parameter, but also one of the most important, regarding the surface area. Our technology allows you to explore various cell sizes and quickly scale down or up in the total unit count. Quantifies how quickly complex geometries can scale and how computational 'expensive' Implicit modeling is. ![](https://files.learn.ntop.com/lessons/standard-design-parameters-in-ntop/HEX1_12_Cell-Size.jpg) nTop allows you to discreetly fine-tune the length of your cell size in specific directions and or locations to control flow distribution & velocity, pressure drop, and other performance parameters. ![](https://files.learn.ntop.com/lessons/standard-design-parameters-in-ntop/HEX1_12_Aspect-Ratio.jpg) Generally starts at a value of zero (0). The bias ratio empowers you to discreetly tune the passage size/flow area on your hot and cold domains allowing you to fine-tune your pressure drop. ![](https://files.learn.ntop.com/lessons/standard-design-parameters-in-ntop/HEX1_12_Offset-Ratio.jpg) Inserting physical baffles into a flowing stream is a common technique to increase the path length/time a fluid takes through a heat exchanger core. However, two common downsides to physical internal baffles are increased pressure drop and fouling rate. Rather than inserting a physical baffle to redirect your flow, you could add a “virtual” baffle at the same location. For example, this “virtual” baffle can decrease the offset ratio locally to encourage the flow to take routes around that location. In this scenario, we are not entirely blocking off the flow area but simply reducing it so that flow can still move through. See Image 1 below. A designer can easily utilize any incoming or native data source (CAD Body/ Points/ Lines/Test data/Simulation Data/etc.) to alter various design parameters to help achieve greater performance and meet design requirements. Once turned into an Implicit Field, We can use this data set to distort the shape of a lattice structure or surrounding components based on predefined criteria the designer or engineer chooses. ![](https://files.learn.ntop.com/lessons/standard-design-parameters-in-ntop/HEX1_12_Field-Distortion.jpg) ![](https://files.learn.ntop.com/lessons/standard-design-parameters-in-ntop/HEX1_12_Discs-Field.jpg) **Image 1:** In the first image above, the grey bodies are used to create virtual baffles which in turn constrict the flow in those regions, encouraging the fluid to move around them. The middle image is a velocity plot of particles moving through the HEX Core while the bottom has particles plus a color map of the total velocity through the structure. In the particle image, you can see how the fluid wants to naturally move around the constricted regions but is still allowed to flow through (bottom image). # Taking Shape Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/taking-shape A heat exchanger's shape depends on the application and available packaging space. If you're starting with a clean sheet design, that's undoubtedly the best-case scenario regarding design freedom. However, most nTop clients are trying to take traditionally designed and manufactured heat exchangers and convert them into ones that meet or beat performance requirements using additive manufacturing technology. Let's say you are a fighter jet OEM. Over the past year of development, your customer has demanded higher computing capacity on the air vehicle due to software capability upgrades – this inherently introduces higher heat loads to the car that need to be managed. Often, a designer's available packaging space does not change, which poses additional design constraints & challenges. No matter the scenario, nTop can help you find the shape with the optimum performance. By leveraging the benefits of implicit modeling, we've learned a few best practices: ## Developing the Outer Shell ![](https://files.learn.ntop.com/lessons/taking-shape/HEX1_6_Outer-Shell.jpg) Have an idea of the print direction you want, so the outer shell can be designed to be self-supporting or have the minimum support required. * For instance, the Outer Shell in the Image on the left would need a support base if the structure was printed in this orientation. Standard HEX shapes such as pill/ovular volumes continue to prove highly effective when paired with nTop's advanced lattice capabilities. Once the design has been finalized, you can easily add variable thickness to the Outer Shell based on a stress field to further ensure compliance and remove unnecessary weight. ## Developing the Heater Core Volume ![](https://files.learn.ntop.com/lessons/taking-shape/HEX1_6_Heater-Core.jpg) Generally speaking, the HEX Core Volume infills the entire Outer Shell. Therefore the contours and shape of the shell will dictate what the exterior portion of the core volume looks like and will influence how the flow behaves. * See *Image 1* below. While a simple shape the entire HEX Core follows the contour of the Outer Shell. In some cases, it might also be prudent to design from the inside out. In other instances, the plenum region may also follow the contour of the Outer Shell, as seen in the top half of the image on the left or Section H1 in *Image 2* below; these plenum regions don't directly cut into the core but still may remove 'working infill volume.' Despite the removal of working volume, the plenum and transition regions into and out of the HEX Core is crucial to part success! Other plenum regions will cut directly into the core, as seen in Images 1 & 2 below in Section C1. In all instances, it's best if you can make the plenum cutouts within the HEX self-supporting to avoid entrapped support material ![](https://files.learn.ntop.com/lessons/taking-shape/HEX1_6_Triple-Core.jpg) ![](https://files.learn.ntop.com/lessons/taking-shape/HEX1_6_Triple-Bottom.jpg) ## Utilizing CFD Fields in nTop (Advanced) ![](https://files.learn.ntop.com/lessons/taking-shape/HEX1_6_CFD-Cross.jpg) Typically we use CFD for final validation and verification. However, CFD at the onset of your design can reduce design cycle time and significantly impact your overall performance. Two design considerations during Pre-nTop Prep are; generating the infill volume and the plenum/piping geometries into the HEX core. We can quickly generate these design considerations in nTop before any representational 3D geometry is built by bringing CFD results into the software. See GIF below. To learn more, you can click on the video link [Utilize CFD Fields for Flow Optimization](https://ntopology.com/videos/video/ntop-live-utilizing-cfd-fields-for-flow-optimization/) or search 'CFD data heat exchanger' in our [video library](https://ntopology.com/videos/). ![](https://files.learn.ntop.com/lessons/taking-shape/HEX1_6_CFD-HEX.gif) In the GIF above, an initial analysis is performed on the rectangular design space quickly seen as the start for both the hot and cold fluids. Both data sets are imported into nTop and a design space influenced by the flow dynamics is generated. # Understanding Applications Possible Today Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/understanding-applications-possible-today Every additive manufacturing application investigated should have a good business case behind it. In the context of heat exchangers, an AM design can address multiple aspects of the business case through weight savings, performance gains, reliability & maintainability, and more. Many different types of heat exchangers exist, so which one(s) should you focus on? Not all heat exchangers are created equal. All heat exchanger classifications and flow arrangement types have their place. ## Several factors go into choosing the “right” heat exchanger: * Fluid type/properties * Operating temperatures and pressures * Environment * Cost * External System (pumps, etc.) * Weight Requirements * Allowable design space * Manufacturing constraints The current limitations of AM constrict the minimum feature size (i.e., wall thickness) and the maximum build volume within printers. The minimum feature size limitation has been a primary driver in the applications nTop is working on with our clients today. We've discovered that currently, liquid-to-liquid type heat exchangers have the most promise due to the higher pressures typically seen in these systems. In contrast, gas-to-gas applications have shown to be less effective due to the exceptionally thin walls that traditional manufacturing techniques can produce. The minimum wall thickness we've successfully printed to and burst pressure tested is around .45mm, where the burst pressure requirement of the AM heat exchanger exceeded the operating margin by more than 12x. That being said, many companies have developed their own processes for qualifying minimum feature sizes below 0.2mm for certain types of metal powders. As AM technology continues to see improvements in lasers and optics technology, minimum feature sizes will improve, opening up better avenues for broader HEX applications. # What Type of Lattice Should I Use? Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/what-type-of-lattice-should-i-use Down selecting the appropriate lattice types to test in any heat exchanger configuration is an important consideration. The “right” lattice depends on the application. Ideally, we want to only select self-supporting lattices for any applications where the lattice volume will be entrapped / unreachable inside of a part, like heat exchangers. More importantly, removing internal support structures can often be difficult and costly. Generally speaking, we only want lattices that have a high surface area to volume ratio. TPMS lattice structures typically meet these requirements. ![](https://files.learn.ntop.com/lessons/what-type-of-lattice-should-i-use/HEX1_11_TPMS-Types.jpg) We have found that the Gyroid and Diamond lattice types have risen to the top on most occasions. For example, if you're designing a liquid-to-liquid heat exchanger, the TPMS lattice naturally separates two regions in space (i.e., your hot and cold fluid domains) on each side of the lattice wall. # Why a TPMS? Source: https://docs.ntop.com/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/why-a-tpms *“What do you mean a minimal surface?! I want to maximize my surface area!”* These periodic structures come from nature and are most commonly related to soap bubbles/films that take specific shapes based on the bounds constraining them. The shapes generated generally give you the maximum surface area for the least amount of material – hence minimal surface. ![](https://files.learn.ntop.com/lessons/why-a-tpms/HEX1_3_Field-View.png) ## Periodic Structures are great for heat exchangers because… * **They maximize surface area for the least amount of material** * A near symmetric thermal contact area allows designs with thinner walls * **Inherently isolates two regions in space (i.e., a “hot & cold side”), making them ideal for HEX application.** * The regions intermingle with one another thus, the heat transfer area of the hot & cold sides is virtually identical. * **Smooth topology for flow dynamics** * Minimizes pressure drop (depends on density, cell size, etc) * **Generally self-supporting during the printing process** * The angle of associativity \~38° (gyroid) * **Have a high strength-to-weight ratio** * Which makes them suitable for light-weighting ![](https://files.learn.ntop.com/lessons/why-a-tpms/HEX1_3_Packing.gif) # Baffle Generation Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/baffle-generation [https://www.youtube.com/embed/XCt4BqExhYg](https://www.youtube.com/embed/XCt4BqExhYg) > **Transcript** > > Going to minimize these blocks, open up our CAD plus solid bodies, turn on the shell, and we'll look at a quick cross-section. I'll hit X to enable the cross-section, and I'm going to change the plane normal from 0 0 1 to 0 1 Z. Now we can look inside. Go and turn on the top dome, the oil inlet, and the outlet pipes as well. So now we can imagine that if we our hot oil, we're coming in at this point, we would enter both the hot and cold domains of the hex core. > > So the next step is going to be to generate what we call baffles or barriers that we use to prevent the two fluids from mixing. Before we do this, we'll minimize the C solid bodies and hex core and fluid generation sections. We'll make a new one called baffle generation. Go ahead and close the cross section. > > In order to make our baffles, we'll use the **Shell** block. We're still under the modeling tab, so we can select it from here or search for it. And I'm going to change the direction type to outward. Then I'm going to make this a variable so I'll right click, make variable. I'm going to use this specific block a few more times, and I know I'm going to want the same baffle thickness for each of them. So I'll go ahead and make this a variable, and I'll call this baffle thickness. > > Generally, we're going to want our baffles to be at a minimum the thickness of our TPMS structure or slightly a little thicker. So I'm going to come in here, I'm going to say multiply. I'm going to start to type multiply out, I'll select this. And I'm going to open up the hex core and fluids real quick, and under our TPMS thickness, we'll select the **Block Details** under the properties. We'll find this constant value, so I'll drag the constant into operand A. And I'm going to make this, let's say, 25% larger than our TPMS thickness. So my baffle thickness will always be a little bit larger. And now if I change my TPMS thickness, this will change accordingly. > > We'll minimize the hex core, and then I'm going to duplicate or copy this **Shell** block three more times so we have a total of four. You can right click, say duplicate, or a quicker method is to Control+C and then hit Control+V three times. We'll rename each of these variables. We'll call this first one hot Inlet baffle volume. Going to Control+A, Control+C, Control+V into the next name. Rename this to outlet baffle volume. This one will be cold Inlet baffle volume, and the last is going to be cold Outlet baffle volume. > > All we're going to do now, and I'll come up to the CAD fluid bodies, I'll select sidewall plenum, and we'll isolate this. All we're going to do is take these objects and shell them outwards. So the sidewall plenum will come into here. And if we turn this visibility on and look at a quick cross-section, all we've done is quickly shell that object. Do the same thing for the next three. The hot Outlet baffle is going to be our hot Outlet fluid. The cold Inlet baffle volume will be the bottom plenum, and the top Dome fluid is going to be the cold Outlet baffle volume. We can turn each of these on, and again, all we've done is shell those. > > The next operation is going to be a Boolean intersect, and we're going to intersect them with the fluid domains to prevent the fluids from mixing. We'll minimize these shell bodies, and I'm going to select **Boolean Intersect**. Before I copy and paste it three times, I'm going to make it a variable so I only have to do that once. Control+C and Control+V and get four of these. This first one I'll call Hot Inlet baffle, and do the same thing for hot Outlet baffle. This will be cold Inlet baffle, and this bottom one cold Outlet baffle. > > Now we're going to intersect the baffle volumes with the opposite fluid domain. So this hot Inlet baffle we're going to intersect with a cold fluid domain so that they don't mix. And we'll do the same thing for the next ones as well. So hot Outlet baffle volume cold fluid, and just drag and drop each of these into their respective inputs. > > We'll isolate each of these baffles that we just created. And I like to give these baffles the opposite color of the fluid or the fluid that I'm preventing from mixing. So in this case, I'll give it a blue color for the hot baffles and a warmer red color for the cold baffles. We'll minimize these, close our cross-section. We can turn on our hex core and see all we're doing is fitting in a small section that is in this case 65 millimeters thick within the structure to prevent the fluids from mixing. This lesson walks through how to create baffles in nTop to prevent fluid from entering certain regions of the heat exchanger. This lesson builds on the completed nTop file from the [HEX Design Part 1: Intro to Two-Channel Heat Exchangers in nTop](/courses/intro-to-two-channel-heat-exchangers-in-ntop/) course. If you have not yet completed that course, we recommend you do so before continuing with this one. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Before We Begin: HEX 2 Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/before-we-begin-hex-2 [https://www.youtube.com/embed/BYdU3saP\_pc](https://www.youtube.com/embed/BYdU3saP_pc) > **Transcript** > > This is the second of three courses in our heat exchanger learning pack that take you through creating a heat exchanger from conceptual design to the final part. > > In this course, we will understand how to design baffles to prevent fluids from mixing and lengthen the fluid flow path to the core. Get familiar with the key considerations for designing plenums to evenly distribute flow, and learn basic meshing techniques to export a heat exchanger. In this course, we will: * Understand how to **design baffles** to prevent fluids from mixing and lengthen the fluid flow path to the core * Get familiar with the **key considerations** for designing plenums to evenly distribute the flow * Learn basic **meshing techniques** to export a heat exchanger # Core and Baffles Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/core-and-baffles [https://www.youtube.com/embed/ScglGmBQpJI](https://www.youtube.com/embed/ScglGmBQpJI) > **Transcript** > > Next step will be to put all of these bodies together. We'll minimize both these sections, create a new one, and we'll call this Core Plus Baffles. > > Do a file save and close this cross-section. We're going to use our **Boolean Clean Compound** blocks. So this **Boolean Union Clean** will capture this and we'll open up both of these list inputs. All this compound block or custom block does is one final intersect at the end to remove what we call bleed over. I won't go into that here, but we have other videos discussing that effect. We can look at the information of this compound block and at the bottom we can scroll down and see what the two different lists are going to require. So these input bodies are the main input bodies that we want to union together and then trim bodies are the ones that we're going to use to control the bleed over and ultimately intersect with. > > So I know I'm going to want the blend radius between the baffles and the hex core, so I'll make this a variable. And the first thing that happened was this got turned into a scalar value. Maybe we want to manipulate it via ramps or some other kind of field. So we can click this drop-down arrow and select scalar field instead. And that's going to turn this blend radius into a field and we'll call this Baffle 2 Core Radius. And we can presume maybe that I want this thickness to be, uh, have the same multiplier as the baffle thickness. So I can put multiply again. I'll grab my TPMS thickness. Now in this example, we're using a scalar field as the TPMS thickness, so we can turn this on. See by the color in the symbol that they're both scalar fields as opposed to with the baffle thickness was just a scalar value. So we'll grab the TPMS thickness and we can just put that same multiplier of 1.25. For now, we can make this operate a variable and tie it to the baffle thickness as well, if we want them to always be the same. > > We'll minimize both of these and we'll go ahead and put our input bodies in. So for this case, we're going to want the hex core, so we're going to filter out hex core. We're also going to want the hot inlet baffle, the hot outlet baffle, cold inlet baffle, and cold outlet baffle. So this list is complete. And we'll go into the trim bodies. And in this case, we're going to trim with just our design space. So if we turn on the design space really quick, we want to keep everything within the design space and any bleed over we're going to trim away. So we'll isolate this value and we have a blend radius between the baffles and the hex core. We'll make this a variable and I'll call this Hexa Core Plus Baffles. > > And real quick, just for fun, I'll show you that bleed over effect. So I'll select a **Boolean Union**. I'm going to delete this list. I'm going to put the list of bodies that I want to union together and I'll put a blend radius of two millimeters just to exaggerate a little bit. And we'll see that we get this bleed over effect that happens when we union implicits together. Uh, if we continue to decrease this to, let's say that value of 0.625, we'll still get a little bit of a bleed over. It will be less pronounced. But this **Boolean Union Clean** is just going to keep the fillets where we want them, primarily inside the structure and not outside. So if we turn this **Boolean Union** to zero where we have no fillets and turn this on, we're not going to have a blend radius between these two bodies. > > Moving on from here, we'll minimize the hex core and baffles. Going to hit Z to zoom back out. And the next step is going to be unioning together the shell and solid bodies. Uh, sometimes we need to take into account order of operations when we're unioning our parts together. For this operation, we won't need to do our **Boolean Clean** and we're going to put all of our solid bodies together. So we can drag our shell into the first input, our outlet pipe, and we can either click this plus sign or we can drag and drop and wait for this blue highlight to pop up just underneath the one or maybe in between the zero and the one. And we'll just drag these and add them to the list. And in this case, we'll just make this a blend radius of one millimeter. We'll make this a variable and we'll call this Shell Plus IO Ports Inlet Outlet Ports. > > Minimize this and now we'll put them all together into the final part. We'll use the **Boolean Clean** again to deal with the bleed over. We'll assume the same blend radius between the core and baffles to the core and shell. And in this case, our input bodies are just going to be the hex core baffles and the shell plus IO ports. Our trim bodies in this case is going to be a longer list. It's going to be our design space and each of the solid bodies that we used to make up our part. So that's going to be our top dome implicit, the implicit shell, the oil outlet pipe, and the oil inlet pipe. We'll isolate this, make this a variable, and call it Final Part. Look at a cross-section. Let it render for a second and see that we've filleted between the shell and the main body. Now presume we want to have this be its own blend radius. We can simply remove that variable, make a new one. We'll still want to, let's say, tie it to our TPMS thickness, but maybe we want this blend radius to be 50% larger. Close our cross-section, minimize our final part, and save our project. So in effect, we've created our two fluid domain heat exchanger. In this lesson, we will combine the baffles with the core design from the [previous course](/courses/intro-to-two-channel-heat-exchangers-in-ntop/) in this learning path. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Download: Core and Baffles Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/download-core-and-baffles Now that you have added baffles to your HEX design, feel free to download the completed file with descriptions below. **Example File:** [HEX2\_6\_Baffle Generation.ntop](https://files.learn.ntop.com/Courses/Heat%20Exchanger%20Flow%20Distribution%20and%20Control/nTop%20Files/HEX2_6_Baffle%20Generation.ntop) *This file was last updated in nTop 4.24.3* # Final Fluid Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/final-fluid [https://www.youtube.com/embed/pF1wttPeOOI](https://www.youtube.com/embed/pF1wttPeOOI) > **Transcript** > > Going to continue on with the walkthrough and get a little bit more into the weeds and details of evaluating the effectiveness of the heat exchanger from an analysis standpoint as well as tying it to different nTop considerations. The first step in doing any type of simulation will be to capture what I call the final hot and cold fluid domains. > > So I'm going to create a new section, and I'm going to call this final fluids. And the first thing we'll do is a Boolean Union. So I'm going to search for **Union** up top, just get our normal **Boolean Union**, and we're going to put in the hot fluid as well as the sidewall plenum, the implicit body, and the oil Outlet fluid. Grab the implicit of that and union those all together. Make this a variable, and I'll call this raw final hot fluid. > > And then I'll do the same thing for the cold. I'll do **Boolean Union**. It's going to be the cold fluid plus the bottom plenum and the top dome fluid. We'll make this a variable and call this raw final cold fluid. Uh, why raw? Uh, raw because we've added quite a few fillets as well as the baffles to the heat exchanger core. So if we turn on our final part and change this color here to maybe this green, there's going to be some interference, especially between the fillets and those baffles. > > So we're going to need to do one final Boolean subtract of these fluid domains. So we'll select this hot fluid, we'll do **Boolean Subtract**. We'll drag the hot fluid into the primary body and our final part will be the subtraction, and we'll do the same thing for the cold fluid. We'll isolate each of these bodies, make them variables, and I'll call this final hot fluid and I'll give it a red color. Make the other a variable, call it final cold fluid, and give it a blue color. > > Minimize each of these, and again all we've simply done is remove the added material that we've added from the baffles and the blender radii. And in this case, we can actually see that I've made a mistake. So we'll open up the raw final fluid. I should have the top dome fluid in here, but instead I've accidentally captured just the top dome. So I'll remove that, search for top dome, and get the top dome fluid instead, and all that will update pretty quick. So at this point we have both our final solid bodies and our final fluid domain. This lesson creates the final fluid and wall regions for the heat exchanger. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Oil Inlet Plenum Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/oil-inlet-plenum [https://www.youtube.com/embed/1507j4098Pk](https://www.youtube.com/embed/1507j4098Pk) > **Transcript** > > And we'll talk about the last main plenum that we want to add in, and that's going to be the oil or sorry, the fuel inlet. So I'll turn on the bottom plenum here, let me give it some color. > > As it stands right now, if we were to print this lattice structure, we would have a pretty significant overhang and maybe even need some extra supports at the bottom of this TPMS structure. We're going to go forward with the same plenum design that we used in previous examples. And what that ultimately is going to be is some form of torus or ellipse cutout that is revolved around the axes to make it self-supporting. > > And again, I'm going to want to tie the generation of this plenum to various aspects within the CAD, so that if one updates, the plenum updates, or if I want to change a parameter in the implicit workflow, everything updates accordingly. Come up to the CAD and fluid bodies, and isolate the CAD body of the infill. And under the CAD and implicit references, we're going to add to this. So I'm going to capture the bottom edge of this implicit, of this CAD edge. And in this case, it says **Create Section Variables**. This is because I've selected both edge and a face. So if I select this, it's going to give me two different entities in the notebook: the CAD edges that I selected and the face. So in this case, I don't need the face, I'm just going to delete it. > > In other words, if I had spent, you know, a little bit of time going through and selecting all these edges and I accidentally click a face, it's not a big deal if you accidentally select it and didn't mean to. We're going to rename this variable OD edge infill. Minimize that. And we're going to get the center of this. So I'm going to search for **Center Point**, and in this case of CAD cylinder or hole, the input it's just going to be a CAD edge list, which we've just captured, and I'm going to make this a variable. Now in this case, we also could have used the **Cardinal Face Points** block as well, but this is a nice one to have in your toolkit. We'll rename this infill B point. > > We're going to create a new section under sidewall plenum extension. Add section. And we're going to call this fuel inlet plenum. We'll call on the **Ellipse From Remap** block that will go into our fuel inlet plenum and we'll set the initial operand to one, so that our initial radius equates to a sphere here. We'll buff this up to 10. We can turn our infill back on and look at a cross-section. Now we're going to want the ellipsoid in this case to be driven from the center point that we created at the bottom. So we'll come into the center point of this **Ellipse From Remap** to define a new point. The Y and Z C are going to be constant at the center point value for the infill and we'll vary the X value so we have control over its distance from that point. We'll make this operand a variable, and I'll call it ellipse location, and I'll just set it at 12 millimeters for now. > > So looking at the ellipsoid, we can right away see that at the current radius that it's at, we are going to exceed the overhang constraint. So ultimately, we're going to need to squish it in the X axis. So we'll come to this X operand and start to play around with this value. We'll call the **Angle Field** block once more and I'll hold the control key and drag and drop the **Ellipse From Remap** in here. Hit F on the angle field and change the plane from normal, and then we'll turn off the infill. We'll set up our custom range once more from 0 to 45, adjust our intervals and change the color map to turbo. > > So in this case, when we probe our values and find our 245 degree planes, we can see that in this case we've actually hit on that value pretty closely, that 3 mm overhang. So what we're going to end up doing with this ellipse is do a revolved cut around the infill axis to make a plenum. We'll close the field viewer. And we're going to take this **Ellipse From Remap** and we're going to revolve it. So we'll select the **Revolve Profile**. We're going to want a section body and we'll go ahead and section this **Ellipse From Remap**. Now, as we are nesting this block in, we're going to want to access the different variables. So we can right click and pull these operand out. So we'll call this ellipse radius and then we can call this remap value for. > > Now we're going to want to section the plane that we want to cut at. So we'll select **Plane From Normal**. We can just type it in, and the origin of this plane is going to be the point that we created—this point three. And the cutting plane we're going to want to put in the XZ plane. So our plane, so our vector here, is going to go from 0 1 0. We can isolate this section body and just double-check that this is what we're going to revolve. > > The next input for the revolved profile is an axis. We'll come under our CAD implicit references, and I'm going to call on the **Compound Block Axis Through CAD Cylinder or Hole**. All it needs is a list of CAD edges and a CAD face. We'll delete the list input because we already have that up here. So this will be the OD bot edge of our infill. And we can open up the properties and look at the information and see that we need a CAD face that is normal to the hole or cylinder that we want to put an axis through. So we'll turn on the infill. Capture this face CAD face variable. We can call this infill bot face. Drag this into here. Move the CB below it. And all we've done is created an axis that moves through this cylinder. And I'll call this infill, I'll call this **Axis Through Infill**. So we'll use this now as our axis for revolution and do it at 360 degrees. Turn that revolved object on. We have that. I'll make this a variable and I'll call this inlet plenum segment one. > > The next step is going to be intersecting it with the infill volume because we only need the top half of this revolved profile. So I'll call the **Intersect** block. I have modeling open, so I'll just click the Boolean **Intersect**. Drag this segment one in and search for the infill implicit. We'll make this a variable and I'll call this inlet plenum main segment. Isolate that just to double-check that we have created what we want. > > The final step before we get to adjusting the parameters and making this whole lattice structure self-supporting is to Union this main segment to the bottom plenum. So we'll drag the inlet plenum into here and we'll just type and call the bottom plenum. Make this a variable, isolate it, and we can call this updated bottom plenum. Minimize these blocks and make the angle field of variables. Since we're here, we'll call it fuel plenum angle eval. > > Turn the infield volume back on. Look at a quick cross-section again. And we know that we're going to want to update our design space. We're going to want to remove this material. So we'll come under our Hex Core and Fluid Generation. Open our design space and click this plus sign. We'll drag the updated bottom plenum into here and everything will update and recalculate. We can turn this off. Look at our hex core. Maybe turn our shell on as well as one of our fluids. Let's turn our final hot fluid on. And real quick, we can see that we've skipped a step earlier on, and it was more or less on purpose just so we can add it in. And it's a pretty minor one, but the infill volume gets trimmed off by the outer shell. So we'll go ahead and add that on. We'll add an **Item To List**. We'll put the shell here. So we're just going to remove that little bit, the fillet there at the bottom. > > While that's calculating, I'll turn off the infill and see that we've updated not only the lattice structure but the fluid domain as well. Next couple steps are to update the baffles as well as this final cold fluid because right now we're not going to have this added plenum region in. So we'll come to the baffles first. This is going to be the cold inlet baffle volume. This is going to become the updated plenum. So we'll remove this. Search for updated plenum and then do the same thing in this raw final cold fluid. Remove the bottom plenum. Say update and go from there. So now we've updated the baffles, our final fluid volumes, the hex core, as well as the final part that we're ultimately going to print. Now that this is all tied together, we can close these sections and we'll look at updating the position of our cutout or this bottom plenum to be self-supporting during the print process. > > Turn the shell back on just so we have some form of visual reference as well as the oil outlet pipe. And I'll give these some random color to better visualize where we're at. So ultimately, the location that this plenum is at isn't going to work. Let's increase this ellipsoid location a little bit. Maybe we go to 18 mm. That puts it pretty close at the center. But again, we're going to have a pretty large overhang on either side of this section. So there are a couple ways that we could tackle this. We could increase the ellipsoid's radius. So let's bump this up to 15. Decrease the remap value. So we're going to unsquish it a little bit. And indeed, we're removing some of that overhang, but we're removing it at a cost of surface area. Right? We're increasing the amount of design space we're removing. So we want to try and find a balance between both the flow distribution into the hex core, self-supporting nature of the structure, and ease of design iterations. We can do a quick evaluation, let's say, of the surface area of our hex core. So we'll do a search for surface area from body. We'll drop our **Hex Core** into here and remember, the surface area that's going to be outputted is going to be both the hot and cold side. So if we're just wanting to focus on one, then we would do our context search divide by two and get half of that area approximately. So we could compare this to what our hand calculations might tell us we need. > > So we come back to our ellipsoid location. We have everything else set. Maybe we need to adjust these parameters to increase our wetted surface area. I'll bring the ellipsoid radius back down to 10 and we'll leave the remap value at two. > > Now, one thing I want to point out quickly, and this is the next aspect that we want to tackle regarding this ellipsoid, is let me turn the hot fluid on. So as it stands right now, all of the oil that would otherwise come down through this **Hex Core** is now going to get trapped between the shell and this plenum we're creating. There are a couple ways that we can go about resolving this. We could say that any of this region in the hot fluid domain, let's just turn to solid. So this will become solid material. That's not ideal. We're adding weight and we're adding a pretty big chunk of material in an otherwise thin structure. So we could that could lead to some extra thermal stresses as the part is being built. > > Another possible design option is to create a funnel. And we'll go ahead and do this in a bit that lets all of this fluid just filter down and around and exit out the bottom. But at that same time, we're now going to have, let's say, a bunch of trapped powder or wasted empty space and region in here. So ultimately what we might want to do is we'll shift the ellipsoid in this case over a bit. So let's bump this out to 24, let's say, right up near the edge. Maybe we can have a little bit of overhang. So let's look at our quick ruler, find where we have about 3 mm, and adjust this value. So we can go a little bit further, maybe to 22. So roughly now we're going to have about a 3 mm or less overhang between the shell and this plenum. > > And the reason that I wanted to make a note of that is we're now going to have a pretty large overhang here at the bottom. The way I envision resolving this is just adding a bit of extra support structure that's going to revolve around. And rather than this being a bit of solid material, we're going to now add to our design space. So we're going to add this triangular bit. It's going to be tied to the location of the edge of the ellipse here, and we can ensure that this angle is always going to be 45 degrees regardless, or whatever we want, regardless of where the ellipsoid moves, how tall it becomes, etcetera. > > So for this next section, for both this revolved support cut, as well as the funnel, we can call it that, will create above the ellipsoid here. I won't walk through all of the steps that I take to do it. I'll just fast forward the video and then talk to the major points once that's all completed. In this lesson, we will walk through the final redesign of the oil inlet plenum. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Oil Outlet Plenum Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/oil-outlet-plenum [https://www.youtube.com/embed/C6gDGjx8Q\_4](https://www.youtube.com/embed/C6gDGjx8Q_4) > **Transcript** > > We're going to take a couple steps back. We'll presume that we've run our initial analysis and we want to make some Divi design modifications to improve the flow distribution into the cold fluid domain, as well as how the hot fluid exits out the bottom plenum. > > So, the two plenum changes that I alluded to at the start of this training exercise, the first one we'll focus on will be the hot outlet plenum. I'm going to make a new section and I'm going to put it in between the hex core and fluid generation and the CAD and implicit references. So, I'll add a section underneath here. I'm going to call this “Additional Plenum Creation: See Sections Below.” The reason for this is I want to create multiple different plenums and have them in their own discrete sections. So, I'll create one more add section and I'll call this oil outlet plenum. > > At this point, I've already conceptualized the shape of the plenum that I want to create. And if we look closely at the cross-section of just this fluid domain here, and as we come into this exit, we'll see that we're only really, all the oil is really only exiting through these two passageways out of the hex core. So, we want to increase the amount of flow area and we want to make it self-supporting at the same time. The general shape that I am going to create is roughly going to be just a simple cone that allows the fluid to flow in and out through the exit pipe. > > At this point, we're going to get a little bit in the weeds as far as referencing different CAD entities, tying the implicit geometry to those entities to make the entire system a bit more parametric, so that if our oil inlet pipe diameter changes, the plenum that we're about to create will automatically change with that. I'm going to minimize the two sections here at the bottom. I'm going to go ahead and open up the CAD and implicit entities, CAD and implicit references. And I'm going to call on the **Cardinal Face Points** block. So, I'll search at Cardinal and I'll get the custom block that's **Cardinal Face Points**. I'm going to make this a variable and the input body in this case is going to be my outlet pipe, my oil outlet pipe. All this block does is it goes to the bounding box and captures the centroid at one of those faces of the bounding box. So, I always start with zero. And in this case, we can see that it put the point here at the bottom. But I'm looking for the point at the top of this oil outlet pipe, so I'll put one, and that point pops up to the top. I'm going to rename this to oil outlet pipe top point. > > The other piece of information that I want to reference relates to the radius or diameter of this outlet pipe. So, I'm going to isolate just the CAD body. I'll turn off the cross-section and I'm going to call the custom block **Radius of CAD Cylinder or Hole**. We'll drag this to the CAD and implicit region, and the input here is going to be a CAD edge list. So, I'll select the edges that I want to capture the radius of. Right click, create CAD edge list. And I'm going to call this oil outlet ID edge. We can't put a list in a list, so I'm going to remove the list from this custom block. I'll drag this into here. Rearrange these to a chronological order just for my own sake. And then I'm going to call this oil outlet radius. We'll put inner radius. So, come down to the oil outlet plenum section under the Create tab at the top. I'm going to select cone, or you can search for it in the search blocks window. > > I know I'm going to want Point 2 to be at the top of this oil outlet pipe, so I can drag and drop the point that we've created from this **Cardinal Face Points** block into here. So now it's tied to that geometry, and the cone has disappeared. The reason being is both these points are both at 0, 0, 0, so if I was to just randomly increase this value up to 10, we'll see that that cone gets inverted. > > I want 2, or this bottom radius, now to be tied to the radius of the outlet pipe. So we'll go ahead and define that and I'm going to make this radius a variable, and we'll just name it top radius for now. Next thing we want to do is, I want to make the Point 1 or the top of this cone, a handful of variables. We'll start this process by just typing “Point” into one of the inputs. Select point. Now we want, in this case, if we look at our axes, the X and Y we want to always be the same, which is going to reference this oil outlet pipe top point. So we can come under the property section of this point and capture the X and Y values of this point. Then we're going to do an addition. So we'll type “add” into the Z value. We'll get the Z of the center of this CAD body and we'll make this a variable. So I'm going to make this a variable and I'm going to call this plenum height, and more specifically we'll call this oil outlet plenum height, and we can call this oil outlet top radius as well. And we'll go and put a value of, I don't know, 1 in. Let's say we can type 1 and I in to get a value of 1 in. > > So we've created our initial funnel for this object. Next thing we'll do is we want to, let's say, round the top. The quickest way I find to do that is we'll use our sphere. The center point is now going to be the top point of this section, which is this Point Z that we've created here, and we want to tie the radius of the sphere to the top radius of our cone. So this will be the input radius for our sphere, so that way if one changes, they'll both change. > > The next couple things I want to touch on are manufacturability as well as the flow area exiting the hex core, for specifically the hot fluid. So I'm going to turn on the infill volume quickly and we'll look at a cross-section. So in this case, we could infinitely, let's say we want to have the plenum reach 5 inches. It's just going to continue to extend up, and we would change our design space or infill volume to mimic this. In reality though, the outlet plenum for this oil doesn't need to be this large. So what we can do to try and figure out how large it needs to be is evaluate its exit surface area. In order to do that, we're going to union together these two segments. So we'll make these variables first, and I'm going to call this one oil outlet plenum, O plenum segment one, and the second one I'll call oil outlet plenum segment two. I'm going to call on a **Boolean Union** block from the search tab. Pull these in together, make this a variable, and I'm going to call this raw hot outlet plenum. > > We'll isolate just this. So what we can do pretty quickly is we're just going to use a **Mesh from Implicit Body** block. Drag and drop the implicit into here. Choose a tolerance value and we'll define that we want sharp edges. Next thing I'm going to do is I'll right click on here and I'm going to say filter mesh by flood fill. And if we look at just this filtered mesh and to isolate that, we've in fact captured just the top half of the cone or the top section of the cone. Might capture a little bit more, so we would turn this to 40 to ensure that we're only capturing this section. Then what I can do is **Surface Area For Mesh**. Drag this into here and see that I have an exit area of 700 mm squared. > > We'll divide this by two. So there's a couple ways that we can call this block. We can do search for divide in here, we can go to the top of the ribbon and select math, or a newer feature is the context search. I can select in context search. It's going to autofill filter all the options that this block can get nested into. I'll search for divide. I'll pop that into here and I'm going to put an operand of two. I'm putting an operand of two because half of this area, at least, is going to be consumed by the baffles that we create to keep the fluids from mixing. So as long as this now exit surface area is greater than or equal to the flow area that's coming out of the outlet pipe, then I'm good. So we can quickly evaluate that. You might already know it from your calculations beforehand, and in this case, the value is about 126.5 mm squared. > > As long as I have this value, as long as I have this value larger than this, then I'm not going to choke my flow upon exiting. So what I can do now is, if I turn the infill volume back on and look at a cross-section, we're ultimately going to do a **Boolean Subtract** of this body from our infill volume. So we're removing surface area, working surface area, so we don't need it to be this large. We can start to decrease this height value, let's say, until we've hit our target value or gotten pretty close to it. In this case, I'll just stop at 75 in. > > Next aspect I want to quickly look at is manufacturability. We can call upon the **Angle Field** block. So I'll look for **Angle Field** block in the search blocks window, and I'll drag that below the raw hot outlet plenum. I'll drag this into here. I'll make this a variable and I'm going to call this coil outlet angle eval. So I'm going to isolate just the hot plenum and I'm going to click F to look at the field of this block, and I'm going to change the plane to normal, and I'm going to turn the color map onto turbo. Now, initially, this is pretty difficult to read. We can click the probe values and move around and kind of see what the overhang angles are going to be. > > What we can do to make this a bit more readable is we'll enable the **Custom Range** and we'll take our Min value from 0 to 45 degrees. I like to turn the **Contour Intervals** on to 15, so every line we see here is a 15-degree interval. So we can zoom in now and start to probe around. At this point, at this line, and over here we have our 45-degree or less angles. So we can do a quick evaluation. > > We might know that we can have an acceptable overhang, let's say, of less than 3 mm. So we can stick with the top radius that we have. Perhaps it was this was set to four, and we look at where we have our 45-degree angle now. Our overhang is from about 0 mm out to about 5.6. So we'd want to potentially start to decrease this radius until we've met this overhang constraint. While we've increased this radius, we've also increased the exit surface area. So I'll take this back to two. That's a quick and dirty way to both evaluate the printability of the plenum we're about to create, as well as evaluate the exit flow area for the oil. > > Going to close the **Field Viewer**. We can leave these blocks here if we'd like to, or we can go ahead and delete them. I'll leave the blocks here for now. The last step is going to be unioning the raw fluid plenum to our exit oil outlet fluid. So under **Modeling**, we'll select **Boolean Union**. Our raw outlet plenum will union to the oil outlet fluid. Make this a variable, and I'm going to call this **Hot Outlet Plenum**. If we want, we can also put a dash final so we don't get confused later on. > > Now all we have to do is incorporate this into the design. So our design space in this case is our infill volume without that new plenum volume. So we'll remove this infill volume. I'm going to type in “union” into here. Capture **Boolean**. Oops, not union, excuse me. **Subtract**. Find the **Boolean Subtract**. Our primary body is going to be the **Infill Implicit**, and we're going to subtract out this new **Hot Outlet Plenum**. Now the entire workflow that we just created is going to rerun. So if we come to our final outlet fluid and visualize this hot section and look at the cross-section of it, we've now removed that body, but we don't have that fluid attached. > > So what we would do is come to our **Final Hot Fluid**, and rather than this oil outlet fluid, we're going to capture the **Hot Outlet Plenum** that we used to subtract from that design space. We'll pull this into here. Now that gets updated. The next aspect is going to be the baffle generation. It's going to be the **Hot Outlet Baffle** we'll want to update. So rather than this oil outlet fluid, we'll remove that and put in our **Hot Outlet Plenum**. Updating those three components, we've now fully updated and automated this process. > > So now we can continue the iterative process of maybe sending it to **Realtime Sim** and evaluating the performance. The same would be true for evaluating cell size, or maybe we want to look at the diamond structure and see how that behaves. It's all now linked together, and everything is going to update accordingly and as needed. We'll hit Ctrl+Z. Once you have completed your initial heat exchanger design, we can use our analysis result to modify our design as shown in this example, focusing on the oil outlet plenum for better fluid flow. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Overview Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/overview Learn how to create baffles and plenums and prepare the mesh for HEX design. ![Heat exchanger cutaway with internal lattice and flow distribution](https://storage.googleapis.com/files-learn/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/heat-exchanger-flow-overview.png) This course will build upon and complete the heat exchanger started in the [Intro to Two-Channel Heat Exchangers](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/before-we-begin-hex-1) course. The course will take you through techniques used to create baffles and plenums. After completion, you will have learned how to create your own HEX. > **[Before We Begin](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/before-we-begin-hex-2)** > **[Plenums and Baffles](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/plenums-and-baffles)** > **[Baffle Generation](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/baffle-generation)** > **[Core and Baffles](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/core-and-baffles)** > **[Final Fluid](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/final-fluid)** > **[Download: Core and Baffles](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/download-core-and-baffles)** > **[Oil Outlet Plenum](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/oil-outlet-plenum)** > **[Sidewall Plenum Extension](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/sidewall-plenum-extension)** > **[Oil Inlet Plenum](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/oil-inlet-plenum)** > **[Plenum and Baffles Review](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/plenum-and-baffles-review)** > **[Resources](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/resources)** # Plenum and Baffles Review Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/plenum-and-baffles-review [https://www.youtube.com/embed/Lly8H7rlPFM](https://www.youtube.com/embed/Lly8H7rlPFM) > **Transcript** > > We'll briefly look at the changes and additions that were made. The first one was to the fuel Inlet plenum, and it was specifically adding this what I called main support segment so that the nTop structure would be self-supporting. > > The support segment was generated from a simple cone, and each of the parameters are driven by either the CAD or various implicit variables within the rest of the model. For instance, the points are controlled by the outlet plenum, or excuse me, the outlet pipe, and in specific the chamfer location of this outlet pipe. So, the center of this chamfer location plus some additional height for the cone. So those give us both points one and points two for our cone. > > If we look at just the cone here, and I'll turn the design space on as well, the outer radius of the cone is driven by the location of the ellipsoid, and in specific the ellipse location minus half the ellipse radius. So this will always put it right at this edge. And the ID of this cone is driven by, let me turn the actual cone on, the ID of the cone here in blue is driven by the support angle that we wish the object to take and is governed by then the other parameters that define its location. So its proximity to the ellipsoid, as well as the cone height. > > So let me turn on the hex core, and I'll turn on the main segment. And so for instance, I'll hit, uh, I'll pause the auto run here. Let's presume our ellipsoid location moves outwards to, I don't know, 24 mm. The radius stays the same, and maybe we want our support angle to drop to 40°. Uh, each of these parameters now drive this main support segment, and thereby will always be parametrically driven by the rest of the design. > > This main support segment, you might have noticed, was incorporated into the design space. So I'll hide the volume and turn on our design space. It was just Boolean unioned into the structure so that we're able to make our support structure part of the design itself, rather than having to worry about removing extra material or lattice structures. > > The last major change regarding this support structure was to the flow pipe, or the outlet flow pipe. All I did was a simple **Boolean Subtract** from the outlet pipe, so I removed this volume to change my support pipe. I'll turn the cross-section a little different here, so that the fuel when it's ultimately funneled down and through, comes straight into the pipe as opposed to getting trapped on the outside over here. > > The baffle volumes and associated geometries were all updated so that the proper pathways are either blocked or controlled. So here's the fuel or the oil Outlet baffle. So it now extends down through the rest of the design space. > > The next change was adding the what I called oil funnel. This was done by simply, I'll turn just the hex core on, by taking a cylinder. The height and location of the cylinder are derived from the centroid of the infill volume, as well as the top of the fuel Inlet plenum. So wherever this ellipsoid moves to, the cylinder will shift as needed. > > Then I use a compound block or custom block that's called **Double Curvature** in the XY plane. All this does is curves the object. So in this case, I'll turn that, uh, turn the curvature on, and we'll see there's a slight curve to here. If I copy and paste this, the smaller the value, the more pronounced the curvature will be. It's effectively a paraboloid, and the larger it is, the smaller the curvature. I just needed a little bit, so I just went with a pretty arbitrary value. This curved value then I do a **Boolean Subtract** with just a random large cylinder that moves through the center. > > I'll describe that here in a second further. And then just as a test, we **Boolean Intersect** that funnel with the hot fluid because we want the oil to be funneled down and around. And then we take this main oil segment and we **Boolean Union** it to the cold **Inlet Baffle**. This was the original baffle. I did a **Boolean Subtract** with that large cylinder that we saw, or **Boolean Intersect**, excuse me, to give us this structure here. And then we **Union** the funnel segment to the original baffle volume, and then this obviously gets intersected with the hot fluid. > > So now we have, if I turn on the hex core and we'll look at a cross-section, the hot oil flows down, hits this funnel, and continues to traverse down and exit out the center pipe. The main reason I created such a large what I call the funnel trimmer here was to always make sure my **Boolean Subtract** or **Intersect** would capture both the funnel and the original plenum. The reason being is if I turn on the original inlet baffle volume, we could have just **Unioned** our funnel to the original plenum, but this still would have created entrapped either powder between these two segments here, or we would have had to infill it with solid material, increasing the weight. I removed this by doing that **Boolean Intersect**. > > And so now the fuel can enter both the hot and cold channels up until it hits this point just to preserve the integrity of the part rather than adding large sections of material. And again, all of this is parametrically we could say driven by the incoming Tad geometry, as well as the rest of our plenum geometry. So we can come to the fuel in plenum, and again, we'll change, we'll go back to the original value we had, let's say, in the ellipse location of 21 and a support angle of 45. That oil funnel is going to shift accordingly as well as the main support segment. > > The next step is going to be evaluating these structures, specifically the fluid domains. We'll look at analyses both in Ansys Discovery as well as Ansys Fluent, and hopefully later on I'll be able to tack on some other CFD packages, but we'll primarily focus on just those two CFD solvers for both the hot and cold final fluid domains. This lesson reviews the plenum changes to the original design for better printability and better fluid flow. You can download this final design below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [HEX2\_10\_Final HEX Design.ntop](https://files.learn.ntop.com/Courses/Heat%20Exchanger%20Flow%20Distribution%20and%20Control/nTop%20Files/HEX2_10_Final%20HEX%20Design.ntop) *This file was last updated in nTop 4.24.3* # Plenums and Baffles Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/plenums-and-baffles We can use several methods to increase the effectiveness of TPMS heat exchangers. As you might expect, higher flow velocities, uniform flow distribution, inducing turbulence, and swirling are some methods you can use to make your heat exchanger more efficient. The TPMS Manipulation section in [HEX Design Part 1: Intro to Two-Channel Heat Exchangers](/courses/intro-to-two-channel-heat-exchangers-in-ntop/) mainly focused on how you can achieve this ***inside*** the lattice. In contrast, this one primarily focuses on geometries and shapes outside the immediate HEX core to help achieve the same goals. In this course, we will discuss Plenums & Baffling, which can prevent fluid types from mixing and encourage better flow distribution into the HEX core. ## Plenums We use plenums to gradually introduce a fluid into the heat exchanger core, which helps evenly distribute the flow while addressing immediate pressure drop into the heat exchanger unit as a whole. See *Image 2* below. **Considerations for plenums:** * Design for Manufacturability * Shell/Casing/OML shaping * See the Pre-nTop Prep section ![](https://files.learn.ntop.com/lessons/plenums-and-baffles/HEX2_2_Plenums.jpg) ## Baffling We use plenum baffles to prevent two or more fluids from mixing and are typically introduced at the entrance and exit of the core. We use physical and virtual baffles to lengthen the fluid flow path into the core. Both physical and virtual baffles have their use cases. ![](https://files.learn.ntop.com/lessons/plenums-and-baffles/HEX2_2_Baffling.jpg) ## Physical Baffles (The focus of this section) In a HEX example different from this course (*Image 1* below), there are six total baffles. Four at the inlet/outlets prevent the fluids from mixing, and two internal baffles are used to lengthen the flow path. ![](https://files.learn.ntop.com/lessons/plenums-and-baffles/HEX2_2_Baffles.jpg) **Image 1:** The left-most picture shows the overall HEX with the fluid domains visible. The right-most image shows the baffles with a partial HEX Core. The baffles that prevent the fluids from mixing are in Red/Green at the bottom, located at the inlets and outlets. The physical baffles running up through the core are used to length the flow path of the fluid. Baffle (1) routes the cold fluid while baffle (2) routes the hot fluid. ![](https://files.learn.ntop.com/lessons/plenums-and-baffles/HEX2_2_Baffles-Quad-View.jpg) **Image 2:** This image shows four different views of the inlet/outlet baffles. These pictures and the left-most picture in *Image 1* show how the plenums transition into the HEX Core. Notice in the bottom two images, IF we go straight from the inlet/outlet piping into the HEX Core, there is little cross-sectional flow area. This is one reason why plenums are so important. # Resources Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/resources Now that we covered designing heat exchangers, specifically designing the baffles and plenums, the next step is to export your design for either simulation or printing. You can find our next course on this topic [here](https://learn.ntop.com/courses/simulation-and-mesh-export-of-heat-exchangers/). ### **Additional Resources on Heat Exchanger Basics** 1. Video Example: [Performance-Driven Heat Exchanger](https://ntopology.com/videos/video/ntop-live-performance-driven-heat-exchanger-design/) (\~25min) 2. Video Example: [Designing Heat Exchangers for Additive Manufacturing](https://ntopology.com/videos/video/metal-dfam-series-designing-heat-exchangers-for-additive-manufacturing/) (\~38min) 3. Article: [Designing the Optimal Heat Exchanger](https://ntopology.com/blog/heat-exchanger-design-high-performance/) # Sidewall Plenum Extension Source: https://docs.ntop.com/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/sidewall-plenum-extension [https://www.youtube.com/embed/xWfeANPTvZs](https://www.youtube.com/embed/xWfeANPTvZs) > **Transcript** > > We'll look at the sidewall plenum. Specifically, I'm going to minimize some of these sections here just to clean up the design space for now. We'll specifically look at the hot inlet baffle. If we turn on the hot inlet baffle as well as the infill, excuse me, the shell and our hex core, and look at a cross-section of this, we'll notice that we haven't actually capped off all of the flow. > > So, it's important to go through the model and make sure that our baffles are actually extending to enclosing out regions. For me, the quickest way to go about fixing this was to simply just extrude or extend the sidewall plenum region down a little bit. I'm going to isolate this. I'm going to create a new section for a new plenum under the oil outlets. > > So, I'll click here, right click, and add section. I will call this sidewall plenum extension. Now, in this case, we are simply just going to extrude a small section of this plenum downwards. We're going to add to the C and Cad and implicit references section. We're going to call the **Cardinal Face Points** block again. So, **Cardinal Face Points** and our input is going to be this sidewall plenum. We'll input zero, see where the first point is, and in this case, it's here at the bottom. We'll right click, make variable, and I will call this sidewall plenum bot point. > > We have the **Extrude** block, and in order to define the inputs, we're going to need a profile, the distance we want to extrude, and the direction we want to extrude in. I'll double click in here and the section body is going to be defined by the body we want to section cut and the plane that defines that section. So, we'll select the sidewall, and I want the plane to be roughly at this point, but not exactly at it, because it's at the bottom of this region. So, I'll come under the Create tab, I'm going to select **Plane From**, I'm going to select **Plane From Normal**, and we'll drag this down into the sidewall plenum. > > Rather than putting the origin at the sidewall plenum point, which would put the plane exactly at the bottom here, we want to push it up in the Z-axis a little bit. So, in this origin, I'm going to type **Point**, select **Point**, and from this sidewall plenum, we'll come under the **Block Details** and under properties, the X and Y positions won't move, but we want to add ever so slightly to the Z. We just need to go up a little bit, so I'll go up by 1 mm, and we've now moved that plane or that center point up just a little bit. So, we'll drag this into our section body plane, and we can isolate just the section body and see this is what we're going to ultimately extrude down. > > I want to tie the extrusion distance to a variable that we've already defined, and in this case, I want to tie it to the cell size and specifically to the cell size in the Z-axis. So, if I was to come and change this value to 20, let's say, I want the extrusion to always be covered by the cell size change. So, this distance value is going to be under the properties tab of the cell. We're going to grab this Z constant value, and so now whenever we change this, our extrusion is going to change. > > And the extrusion direction in this case is going to be 0 0 -1 in the negative Z direction, and that extrusion comes straight down. So, if we change this value to 10, it's going to move with the cell size. This will always just ensure that we are covered. So, we'll make this a variable, and I'll call this sidewall extension. Then we'll do a **Boolean Union**. So, under modeling, **Union** sidewall extension, and we're going to union this to our sidewall plenum. So, I'll search for sidewall plenum, make this a variable, and I'll call this extended sidewall plenum. > > Minimize these, and then we'll go through and do the same thing as we did previously, updating the various components. In this case, we don't need to remove from our design space, but we do need to update the baffling. So, the sidewall is the inlet for the hot. We'll come under the hot inlet baffle volume. We'll do our extended sidewall plenum in here. Our baffle is going to get automatically generated. The final fluid we don't really need to update because there was just that small thin sliver there. And so all we really needed to do in this case was update this baffle generation. > > And if we look now at the hot inlet baffle, the hex core, and our shell, look at a cross-section, remember our whole goal was to just extend this baffle down beyond where the fluids would be forced to mix, closing the cross-section. Going to minimize the sections for now. This lesson shows how to extend the sidewall plenum to remove any gaps in the design. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Ansys Discovery Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/ansys-discovery [https://www.youtube.com/embed/8KNG4Xr3RDs](https://www.youtube.com/embed/8KNG4Xr3RDs) > **Transcript** > > Starting from the workbench under Component Systems, we'll call on the Discovery application. Launch that, and there are a couple ways we can import. The simplest I find is to drag and drop, so we'll just pull the hot msh file into drag to open the msh file. Loaded on the bottom right under **Advanced Selections**, we'll see that our name selections have come in. So the Hotol interface, Hot Default, Hot Outlet at the bottom, and Hot Inlet at the top. So go ahead and start to assign our boundary conditions. We'll do flow inlet. We'll say mass flow rate 0.25 kg/s. Do the same thing for the outlet. > > It's just a few button clicks. We have our model set up. We could come in and change the material if we want to. We can add temperature to the inlets, and in a couple releases to come, hopefully, we can do conjugate heat transfer analysis with faceted bodies. We'll extract the monitors that we want to look at and click play. > > So pretty quickly, we get our results. We can see our Max Velocity, Pressure Drop. We can change between different Contours, so we can look at the Iso Surface. We can look at the Contours, turn off the streamlines, add particles, and so on and so forth. Last thing I want to call out is the Fidelity Slider at the bottom right. Now I just said it's its default. I'm going to put it closer to its highest Fidelity or most accurate. And if you're unaware, the slider will always be available. What changes, however, is the voxal size that is available, and that voxal size is determined by the power of your graphics card. So if you run an instance of Discovery on a laptop with Graphics Card A and run an instance on a desktop that has a superior graphics card, you'll get a more accurate result with the better graphics card. That being said, the trend that you see regardless of your graphics card is going to be accurate, so you can still use it for rapid design iterations. The more high-powered your graphics card, the closer it's going to match Fluent and real-world testing as well. In some of the cases that we've done, it's been within about 5% of results from Fluent, so it took quite a bit longer to solve. But we can see that the Max Velocity and Pressure Differential did change. > > Looking at the flow distribution, we can see that we could improve the plenum and flow distribution into the core quite a bit more. We have a bit of recirculation in the top chamber, and in the top quarter or so of the TPMS structure, it looks like we have a little bit of a dead zone. So there are some strategies that we can use, and maybe I'll create another course on how to improve the performance by changing these types of characteristics. But for now, we'll continue on to Fluent. In this lesson, we walk through importing nTop files into Ansys Discovery, using the **Mesh Quality** block, and changing the nTop file to run multiple cases in Ansys Discovery with different cell sizes. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Ansys Fluent Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/ansys-fluent [https://www.youtube.com/embed/VUy8pv4\_Mkg](https://www.youtube.com/embed/VUy8pv4_Mkg) > **Transcript** > > And we're going to use under the component systems again the **Fluent With Fluent Meshing** block. Previously to this update that we'll talk about, we would have had to first open up nTop SpaceClaim, pull in the MSH files still with their named selections associated with them, save it as a SC Docker SpaceClaim document, and then pull those into the Fluent Mesher. > > So with this update, we've eliminated this step. We'll launch Fluent with Meshing, with the Fluent Mesher open. We'll under workflow select the fault tolerant machine under **Import CAD And Part Management**, we'll navigate to the MSH files. With the MSH files, we'll control-select all three. So they're called fluid hot fluid and solid core. Select “Okay.” Units we exported in meters and we'll select “Create Meshing Objects” at the bottom. > > Before we continue on with the rest of the fault tolerant workflow, we'll come under the outline view tab, open up **Geometry Objects**, and here we'll see a list of all the MSH objects we imported. This step is pretty crucial. We need to control-select each of the bodies that belong together and essentially merge them together. So we right-click, “Merge Objects,” and we'll just call this XX core. I'll go ahead and do the same thing for the two fluid domains. > > With those complete, there's one more step. We'll expand each of these. We'll come under the face zone labels, right-click, select to create labels, select all, and we'll create a label for each face zone. So we're basically just stitching together the name selections and then extracting them as labels. > > With that complete, we'll come back to the workflow tab and continue down the fault tolerance tree. Internal flow through an object. We don't need to create large caps or identified regions or closed leakages. So we'll describe geometry and flow. This point, we only have three regions. That's what we want to see, both fluids and the core itself. So we'll define the cold fluid as a fluid. It's going to be wrapped. We're also going to wrap the hexa-core and define the hot fluid as a fluid polyhedra elements for all three. Update regions, and we'll go and select “Choose Options for Meshing.” > > Now, the default curvature and proximity are applied to all three domains. So I generally, especially if I'm doing conjugate heat transfer analysis, come into revert and edit, and I'll remove the hex core. We'll call this one fluid curvature, and I usually decrease these a bit. Under local sizing, we'll select the hex core. We'll call this core curvature. It's significantly thinner, so we'll reduce it to maybe 45 and maximum size. We'll set to three. Add local sizing, and we'll do the same thing for proximity. So we'll call this core proximity. Go with the same values of 0.45, 3. I'm only going to do two cells per gap, so we should see when the mesh is graded only two polyhedral elements hex core. Add local sizing, select “Yes,” apply all four of those. > > Now, as you get comfortable with working in Fluent and these steps, generally what I'll do is rather than going to surface mesh, waiting, and coming and defining everything else, we can ahead of time prep the volume measure. So under cold inlet, we'll select **Mass Flow Inlet**. We'll go ahead and define the outlet and inlet for the other two as well. Now you'll notice I didn't define interface regions for the contacts. The reason being is when we get to the boundary layer stage, I find it easiest to have the boundary layers grow on only walls and then within Fluent itself, I'll set up the actual interfaces. So I'll click “Add Boundary Layers” here. I'll select “No” that way it doesn't start running the surface mesh. And with both the updated boundaries and boundary layer selected, I can come to “Generate Volume Mesh” here at the bottom. I'll select “Generate the Volume Mesh.” And in this case, it would in sequence go through each of the steps. > > Now just so we can see how long the surface mesh takes and the elements that created, we'll just generate the surface mesh as its own right now. So I'll pause the video and restart it when the mesh finishes. Okay, the surface mesh is finished. Go ahead and render it on the flu. See what that looks like. At the same time, we can see that we have about 4.7 million elements and it took about 63 minutes, so just over an hour to mesh all three bodies. So not too bad. See how the resolution looks for first pass. Not too bad. I might actually decrease it for future iterations, but overall and let's look at a cross-section. Overall, not too bad. And we can do the same thing for the solid. And with the color coding, we can still see that we've preserved our name selections. > > So with that, we'll just select on “Generate Volume Mesh” here at the bottom. It's going to move through the update boundary condition, add boundary layers, and start the volume mesh. So we'll check back in when that finishes up here shortly. The volume mesh is finished. Just over 8 million elements. We can see the distribution between the three. Overall quality, pretty good. Took about an hour and 30 minutes to complete. Pretty dense, but for a first pass, not too bad. See what the solid looks like. Looks good. We have two or so elements in that thickness. We'll switch to solution mode at the top left. Going and start to set up the model. Keep most of the values at default. I will change a handful of them. Turn the energy equation on. Going to change the turbulence model, K Epsilon. I'll leave the both fluid domains as air and the solid as aluminum. But to change those, you would come under create and edit and you can navigate the fluent and other databases. > > Set mass flow to 0.45, 300. Fine. Apply hot inlet 0.3. We'll bump this up to 375. Come to the walls. And a good best practice, at least initially, is to right-click and display each of our interfaces just to make sure that we are capturing the intended interface. So that first one didn't look good actually. But here on the left, you can there's a handful of solid to colds. We can display this and see that we just have a random few elements that were separated from this overall body. So we'll make this one an interface. We look at the solid to hot. Looks good. And then let's also look at the hot to solid. Also looks good. So we'll control select these and cold to solid. Fortunately, I captured all of this. I'm not entirely sure why that happened, but we at least don't have the inlet and outlet sections. That's okay. We should be able to proceed with this. > > So we'll right-click, “Label Interface,” come under “Miss Interfaces,” gold to solid, solid to cold. Select “Create.” Do the same thing for the hot. Click “Close.” Defaults of those should be all right. We'll go ahead and start to set up the method. Start off with a handful of iterations and then see if the results look like and add some more. Just quickly view a couple results and finish off the iterations. With that start to wrap up this tutorial. Pretty uniform distribution temperature distribution across the heat exchanger as you're moving in the primary direction of flow. Soon to come will be the integration with Star CCM. We'll start with single fluid domains. Branch out from there. In this lesson, we walk through how to run through an analysis of a nTop file in Ansys Fluent for various analyses. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Automate Mesh Export Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/automate-mesh-export [https://www.youtube.com/embed/z195ZiBG7BU](https://www.youtube.com/embed/z195ZiBG7BU) > **Transcript** > > And with that, we'll come back to the meshing section and continue from here. We'll still be using the **Mesh from Implicit Body** block as well as the preservation regions that we created earlier. The preservation regions again come from our oil and fuel Inlet and Outlet faces, and they're just implicit bodies that we use to control areas where we want to preserve that sharpness. > > We'll leave the sharpen iterations at one for now. We might increase this to two or three depending on how well those edges are preserved, and we'll likely end up decreasing the tolerance value to preserve more geometric fidelity than, let's say, this tolerance of 1 mm is giving us. The other aspect I mentioned previously regarding manual run mode and applying that to our **Export Mesh** so that our files don't get overwritten, that's still definitely the case. However, if you know you're going to want to run multiple design iterations and look at various different variables and how they impact the design, we can automate the file path as well as the name of the file that's been outputted based on the variables that you're changing. > > So I'll quickly show you how we can go about doing this. I'll first copy the file path location that I have here, and then I'm going to search for **Concatenate Text**. The first text value here, I'm going to make this a variable, and I'll call this file path, and I'll paste what I just copied minus the file name and extension. I'll leave the dash and I'll search for another **Concatenate Text**. The text two in this operand is going to be our file extension, which is going to be STL, and the delimiter we'll use is going to be a period. Now anything we sandwich in between this fop path and this extension will be a variable that we change, and the file that gets written out will be generated based on that change. So for instance, I'll add one more **Concatenate Text**, and we would just continue to nest these within each other as we expand upon the variables that we want to explore. But for now, we'll just say I want to look at cell size, and maybe in specific, we'll do the cell size in the Z direction. > > The next block that I'll call is going to be **Text from Scalar**. All this does is take a scalar value and turn it to a text, as it says. I'll search for cell size in this value capture, let's say the ZV value again, because we want to maybe play with the aspect ratio and how that impacts the pressure drop in the direct primary direction of flow. The reference is primarily always going to be a value of one with the units that we want to output, and we don't need that many significant digits so we'll decrease that. Now all we'll do is update the mesh, and then I'll also click play on the **Export Mesh** here once this finishes, and we'll see in a moment when this file path, when this file gets created, we'll look at the file path location and see what gets generated. > > I still have the file path, so we have cell size z-10. So maybe we want to update this a little bit. We'll put a delimiter to do dash millimeters. We'll update this, check what that file looks like. So cell size Z millimeters 10. Again, you would just continue to nest these **Concatenate Text** blocks within each other to add on different variables. So we might make this a variable and call this cell size Z. We would remove this cell size from this **Concatenate Text**. We would add another one, so we would put cell size in here and add a new one, which could be our unit cell type, etc. And each time a file or a variable gets changed, the mesh is performed, the file will ultimately get updated. Control Z, and I'll leave it like this for now. This lesson explores ways to automate your workflow for meshing. This file builds on the previously completed file found in the [HEX Design Part 2: Heat Exchanger Flow Distribution and Control](/courses/heat-exchanger-flow-distribution-and-control/). Although the notebook setup looks different than the two previous courses the direction on how to Automate Mesh Exports has not changed. We recommend that you complete that course and [HEX Design Part 1: Intro to Two-Channel Heat Exchangers in nTop](/courses/intro-to-two-channel-heat-exchangers-in-ntop/) before starting this lesson. We also recommend reviewing [102: Guide to Meshing](/courses/102-guide-to-meshing/) course for more information on meshing. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Before We Begin: HEX 3 Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/before-we-begin-hex-3 [https://www.youtube.com/embed/uhqVMGwqPTI](https://www.youtube.com/embed/uhqVMGwqPTI) > **Transcript** > > This is the last of three courses in our heat exchanger learning path that take you through creating a heat exchanger from conceptual design to the final part. > > In this course, we will explore advanced meshing techniques for simulation and export, understand the options for running CFD in Ansys Discovery and Ansys Fluent, and review final considerations for exporting a heat exchanger. In this course, we will: * Explore **advanced meshing techniques** for simulation and export * Understand the options for **running CFD** in Ansys Discovery and Ansys Fluent * Review final **considerations for exporting** a heat exchanger # Download: HEX Mesh Export Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/download-hex-mesh-export Now that you have completed exporting your heat exchanger, feel free to download the completed file with descriptions below. **Example File:** [HEX3\_4\_Initial Mesh.ntop](https://files.learn.ntop.com/Courses/Simulation%20and%20Mesh%20Export%20of%20Heat%20Exchangers/nTop%20Files/HEX3_4_Initial%20Mesh.ntop) *This file was last updated in nTop 4.24.3* # Final Considerations Before Printing Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/final-considerations-before-printing Before printing, it is important to examine the wall thickness throughout the core for consistency & correction, ensuring there are no entrapped supports. Other recommended inspection tools: * **GOM Inspect:** used to validate that you uniform/desire wall thicknesses in your part * **Synopsys or Ansys Additive:** used to check for build errors, discretion, etc. ## Post-Processing Considerations * **Surface finishing processes** of the internal core can remove a substantial amount of material — understand how much your post-processing removes so that you can add stock material to the digital model * **Powder-removal considerations:** Two primary considerations regarding powder are * Time/Ease of removal * Permanently entrapped regions * **Wire EDMwon't** interfere with the powder. This will help preserve the wire's longevity and cleaning process. * Planning with these and other powder considerations in mind during the design process can go a long way. Often if we are designing for fluid flow, the powder may 'naturally' drain out. We can also add turrets/drain holes at the structure's base or the Inlet/Outlet ports. See *Image 1* below. ![](https://files.learn.ntop.com/lessons/final-considerations-before-printing/HEX3_10_Final-Considerations.jpg) **Image 1:** A designed and printed heat exchanger with 'drain turrets' at the base. These drain ports allowed for the majority of the powder to 'naturally' drain before the wire EDM removed the part from the build plate. * **Internal support removal** * A common technique would be to utilize the AFM, solvent, or slurry we use for surface finishing. This technique often removes 'x' amount of material from the walls. If you make the contact point between the support and the structure less than 'x,' the support will dislodge. * Be mindful that the support structures have a route out of the heat exchanger. Know the weight of the support structure as designed and weigh what is extracted to ensure it is removed. * **External support removal** * While external support removal is often less technically challenging than internal, consider the process and adjust geometry as needed. # General Interoperability Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/general-interoperability As an engineering software company, nTop believes it is essential to work with industry partners to help enable a seamless digital thread for our shared customers. We continue to strengthen the integration between nTop's industry-leading CAE tools, such as ANSYS, to give engineers the tools they need to design and validate cutting-edge lightweight structures. nTop offers numerous [file types for exports](https://support.ntopology.com/hc/en-us/articles/360048249514-What-file-types-can-nTopology-import-and-export-) to help ensure your workflow is uninterrupted; if there are additional export types you need or issues with exports, please let us know. We may already be working on a solution or may be able to reach out to our industry partner. Computational Fluid Dynamics (CFD) and Conjugate Heat Transfer (CHT) are significant aspects of any design process in the use case of heat exchangers. Below you will learn how to utilize world-class simulation tools to evaluate your design at any stage of your design process. As engineers, we typically use CFD to validate and verify our designs. However, utilizing CFD at the onset of your design and throughout the design process can significantly impact your overall performance. Lastly, you will learn how you can easily incorporate CFD at the beginning of your design process, enabling you to decrease your design cycle time and achieve better performance. # Initial Meshing for CFD Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/initial-meshing-for-cfd [https://www.youtube.com/embed/0TGP9-UKoIU](https://www.youtube.com/embed/0TGP9-UKoIU) > **Transcript** > > Hey everyone, Maiki Vlahinos here. Going to talk about some pretty major updates to how we export our mesh files for analysis, primarily focusing on Fluent, Ansys Fluent, and Ansys Discovery. But we'll also now start to get into Star CCM. > > Before we hop into all of that, the original heat exchange course was created in June of last year, and that used nTop version I think 3.24. We have since launched 4.0, and this recording is using nTop 4.9. So real quick, we'll just add some comments here for those two sections. We'll leave them and add on to that. You'll also notice we have a couple deprecated blocks since then as well. We'll leave most of them needing updated and just go and update the final fluid domains here. > > Then I'll click manual run mode on this and cancel the meshing. As we build out the meshes together, and I show you how to do them, I'll also call out new and improved shortcuts or usability enhancements, that type of thing as well. The first hotkey that you might not be familiar with is wherever your cursor bar is, or this blue insert. If you select “S” on the keyboard, that will toggle this window. I have three options in this case: I can add a block; it's similar to the search function up top; we can add a section or add a comment. So I'm going to come below this block here. I'll click “S.” I only have two options because there's no block to add a comment to. I'll add a section and I'll call this “Meshing September 2023 4.9.” > > If you've followed a lot of my meshing best practicing videos, this initial part might be a little redundant, but there also might be some new information for you as well. I'll click “S” again, and the first block we're going to call is the **Mesh from Implicit Body** block. As it comes in, this is its default setting. You'll notice that there are only three main input options. If I Control-C, Control-V the block, it'll copy and paste a new one, and I'm going to relabel this comment to “Overload.” I can click the down arrow and access the overload option. > > All this is going to do is expose a handful of new inputs. Virtually anytime I use this block, especially if I want to select edges to preserve their sharpness on, I'll access the overload. The main reason being, and I'll show you a time comparison between the two, is in most cases, at least let's talk about the CFD, we really only care about preserving the edges in this case at the inlet and outlet boundaries. We don't have to preserve the sharp edges within the TPMS structure itself. First, it's inherently curved, so it's going to be difficult for the algorithm to preserve those edges without causing self-intersections or some other mesh quality issues, but it also takes more time. > > So the first thing we'll do is set up both of these mesh blocks and go ahead and click compute. So we'll drag the final cold fluid into both of them. I'll hold the Control key to drag and drop. That's going to keep that there. All I'll right-click, make the tolerance a variable, and I'll call it “Fluid Tolerance.” Sharpen extents or iterations, I'll put on one. So if you are unaware, if I click sharpen here, it's going to kind of, like I said, sharpen everywhere, and the default number of iterations in this block is going to be one. So we'll click off sharpen, leave the iterations at one, and we'll use the same set of preservation regions that we previously built out. And all this is, is a custom block that will take in the CAD faces that we previously extracted in the hex course. It thickens them into implicit bodies. And so what we're going to do now is tell the mesh block, wherever this purple disc intersects with the object we want to mesh, that's where I want you to focus in on preserving the edges. Everywhere else, you can round as needed. > > So we'll drag the preservation regions down into the sharpen extents input. Zoom back out, and you'll notice that we have four preservation regions, one for each inlet and outlet of the fluid domains. So now go ahead and input a tolerance value here. We'll start just with one millimeter. I'll open up the log window at the bottom. So in this case, the first block, the overloaded option, took 10,000 milliseconds, and the other one took 12,000. So percentage-wise, quite a large difference. We can look at the quality of the mesh, and we'll likely see that we need to refine the tolerance. We have not captured the geometric fidelity that we want. We can turn on the cold fluid and see we have quite a few negative and positive interference zones between the two. So I'll reduce this element count, let's say to 0.55. And all this tolerance is, is an allowable surface deviation between the incoming implicit and the output mesh file. I'm also going to turn my resolution on to highest as well. > > So we can see that with a tolerance of 0.5 millimeters, we capture the geometric fidelity quite a bit more, and the overloaded block, because we have sharpening defined, took 88 milliseconds, and when we're not sharpening anything, we're at 63. If I click sharpen now, and let's recompute. When we choose to sharpen everything in this case, it took 1,000 milliseconds to run versus the 88,000 if we choose just to sharpen the regions where we in this case want to apply our boundary conditions. Now there are some fringe cases where we might want to preserve edges of these curved surfaces, such as if we need to define symmetry planes and other types of boundary conditions that require that sharp edge or feature. But for the most part, defining extents or regions where we want to actually preserve these edges has a pretty large impact on your overall workflow. > > With that, we'll close the log window and get into the next step, which is going to be reducing the element count. So we'll delete the default version of the block and turn on just the mesh. One thing you might notice, the rendering of the mesh looks a lot different than it did previously. For instance, if I pull open the course from about a year and a half ago, you'll notice that the mesh on screen with a tolerance of one, so twice as coarse as we're looking at now, looks pretty black, and we're not able to see much of the features. Our development team put a lot of effort into trying to improve the mesh visualization so as we zoom in, we'll see the elements show up, and as we zoom out, they're still there, but the rendering is handled a bit differently. > > So we can click the properties and see that we have 5.6 million faces. Ultimately, that's not something we can manageably deal with in most downstream applications, so we need to figure out ways to reduce that element count. We'll call this initial cold mesh, and just so I don't get confused, I'm going to call this one bold and same with this hot mesh. In previous videos, we've gone through, and in my surface meshing best practices, we've gone through different techniques over the handful of months and years with regards to how to approach meshing. So for instance, you'll see that I've gone through several iterations with this. The last major update was earlier this year in January. > > I'm not going to go into detail in this mesh input suggestions document, but we'll talk about some of the major aspects in this hex course. So what we're going to do is we're going to take this mesh from **Implicit Body** block. We can click this plus sign and we're going to go straight to the **Remesh Surface**. We're going to skip the **Simplify Mesh by Threshold** for now. > > We'll actually notice that I just recently updated to nTop 4.9. There is a new settings tab under units that allows me to update my unit preferences. So we'll go ahead and do this real quick. I'll say degrees here, watts per meter squared, watts per meter Kelvin, joules per kilogram mass and kilograms. Say okay, and we'll see that we're updated to degrees here from radians. > > Using the **Remesh Surface** block, the two main inputs I want to call out are the mid-edge length and the cord height. In both of these cases, we're going to use a fraction of this fluid tolerance input. That's why I created it as a variable to determine what values these are going to be. The cord height, we're going to add in a **Multiply** block here. We'll drag the fluid tolerance in and I generally sit around 2%. I can go into detail in that measure's best practices as to why that is. > > The mint edge length, you'll notice, is zero. So if we were to compute this block, the **Remesh Surface** is going to, based on the inputs, say, “Okay, I can go. My element size can go as small as zero,” but that doesn't really make sense, right? Because we've already discretized our part. So we're going to change this value from a default of zero. We'll call a **Multiply** block again, and what I found to work is as a good first pass is about 33% of that initial tolerance value. In an earlier study, I did, the impact of the mint edge length with the overall computation time of this block is significant. With the mint edge length at zero in the first case study I looked at, it took about 75 minutes for the block to run, and when I defined a mint edge length, it was down to less than five minutes. So a substantial decrease in solve time. > > We'll set growth rate to industry standard about 1.2 triangular elements. And with these inputs, the block is now going to, we can let the block work for us, so I don't need to have a tight or small edge length defined here in order to get a good quality mesh. So I'm just going to mesh, so I'm going to set this up to 15, and we'll let this compute. And while it does, I'll go ahead and set up the same process for the hot fluid domain as well. Remesh. > > So the cold took 400,000 milliseconds, and we actually got an error on the hot, which will be good because we can go ahead and debug that together. But overall, we've maintained the fidelity of the part and have a pretty high quality mesh to move forward with. So let's look at the hot side for now. > > So in the process of setting this up, I remembered that there were two parts to the hot fluid: the main domain and the extra bit at the bottom. So we use the **Mesh Implicit Body**, put that into **Split Mesh**, and we'll isolate the two domains. And in this case, we're going to mesh just the main hot fluid. So the **Mesh from Implicit Body** went through. I'm just going to more or less do a quick visual on the outside, see if anything stands out to me as being an issue, and then we'll do a cross-sectional view. I'm mostly just looking for small bits that might cause mesh failures in the **Remesh Surface**. Shouldn't be any issues in the actual core itself. So we'll speed through this. > > Okay, so a handful of segments that are likely causing these issues. This little bit here, and probably for sure, these sections. So what we can do with this then is we'll incorporate a **Mint Feature Size**. And all this is going to do is tell the mesh block to ignore any implicit parts that are below this value. So I'll just put in 0.25, see what happens. I'm going to click manual run mode on the **Split Mesh** so we don't start the other processes. Okay, and so we removed that little connector piece. Now these are still somewhat unwanted, but they won't or shouldn't really disrupt the mesh. And we might have even had some bits that were connecting on this backside. So we can go to the hot fluid. We'll turn this on real quick. > > While this is rendering, you might also notice the section cut window has been modified. So rather than manually inserting zeros, ones, or other values to get a cross-sectional plane, we now have the plane buttons. And you can, I'll show you here in a second, you can double click one to flip the direction that you're viewing. So if I click this XY again, it would flip to the opposite side. But yeah, indeed here, if we do a high-res render, so click the object, Control H, we'll see that we also have some pretty thin sections that we're likely getting meshed and causing issues here as well. So by putting in this **Min Feature Size**, we're basically telling the block ignore anything below 0.25 millimeters of, in this case, thickness. We'll click play again on the **Split Mesh** here. Remove the manual run mode. And while this is getting set up and running, I will set up the mesh for the solid domain and then talk to you through that once it's completed. > > So the solid **Mesh from Implicit Body** finished. I have a pretty tight tolerance, 0.025 millimeters. And again, for the most part, we just want to make sure we're capturing the fidelity of the geometry. So we can turn this on. And you'll also notice that I'm only meshing the hex core rather than the shell and everything associated with it. There's no real reason, at least in these initial stages when we're going to do the conjugate heat transfer analysis, to have to mesh the entire solid domain. That's just wasted elements and wasted computation time where we really just care about what's happening between the two fluid domains. There might be a few thin sections that we have to resolve in the mesh to help clean that up. So again, we can do a Control H. And it's also important to remember that in the final design, all of these edges here are going to be, there's going to be a blend radius between the lattice and the shell core. So what we're seeing here and having to potentially deal with won't be an issue in the final design. So we can look at that mesh. We do indeed actually have some potential issues. So we'll do the same thing. We'll introduce them in **Feature Size**, and I'll just say 0.01 millimeters. Let that run. We still have some of those satellites, but otherwise, I think we can move forward. We'll see what happens in the remesh. Click play. And once both of these finish, we'll see how they end up looking. But you'll notice that I followed the same exact protocols for the solid as I did for the fluid. I have the **Multiply** blocks in the mid-edge length and cord height associated with the solid tolerance in the **Mesh from Implicit Body**, and again, with 33% and 2% of those of that value. > > Remesh of the hot finished successful that time, so it was those small connectors or overlaps that caused the mesh to fail. > > Then once this finishes, the last thing we'll quickly look at is the simplify mesh by threshold and how that impacts the solve time. So I'm going to enable manual run mode onto this, do the initial cold mesh, and this threshold input is akin to or the same as cord height in the **Remesh Surface** block. So in other words, the allowable surface deviation the mesh can take while it's trying to remesh. So I'm going to use the same 2% tolerance, but I'll wait for the remesh of the solid here to finish. In the meantime, I'm going to go through and make these variables. > > Well, if the solid continues to mesh, we'll start to touch on the mesh export and generating the msh files. I'll click S to add a new section, call this Mesh Exports, and it'll be the same thing. I'm just going to copy up here. First block is going to be **FE Surface Mesh**. We're going to turn each of these final remeshed blocks into an FE mesh. So we'll do the cold fluid first, because we're moving to CFD and we're going to remesh there. There's no reason to do a quadratic element order or mid-side nodes as it's called in some instances. Make this a variable and call this final cold mesh. > > In previous videos and tutorials that you might have seen up until this point to get to Ansys Discovery, we exported generally an STL mesh and then in Discovery we would use the faceted selection tool to snap to let's say the edge that we define here to create our inlet and outlet boundary conditions. With some updates on Ansys' end, as well as ours, we can now export an msh file and those boundary condition locations are going to come along with that block. So we'll start kind of from the top and work our way back. So we're going to export an **FE Mesh** to CFD. And you'll notice that there are a handful of inputs: file path, the location we want to store the mesh, and then boundaries, and a new one is the wall name. I'll get back to the wall name and we're going to start with the boundary. So I'll double click. We're going to create a CFD boundary list and I'll click the plus sign a few times to add to that. First one we're going to do is going to be **CFD Boundary on FE Mesh**. So we'll double click again and we'll select this. The other options there that you saw, the cold inlet, the cold outlet, and the cold solid interface are from the old exports option, so we'll ignore those inputs. > > So for the CFD boundary on FE mesh, in this case with the FE mesh isolated, we can use the **Mesh by Flood Fill** option. So I'll right click here at this location **FE Boundary by Flood Fill**. And depending on how well this edge is captured, if there are small deviations in elements, especially the angle like you saw, you might capture more of the geometry than you want. So generally, I'll come back to this angle value and drop it down to about 30, and that just forces that block to only capture these elements. We'll drag the FE boundary into this block, we'll select mass flow inlet, and this is a pretty new and big feature especially when it comes to automation, is we can now choose the named selection. Previously, when we would import the msh file, it would get brought in as a default naming convention. So in this case, it would have been called face set one, but in this case, I'm going to call it cold\_Inlet. > > I'm going to do the same thing for the cold outlet. So I'm going to isolate the msh file again, come back to here. We'll right click **FE Boundary by Flood Fill**. You can see that time with 45 it captured it, but because I intend to do some form of nTop and continue to come back to this, I'm actually going to drop that value down to 30. We'll add in a new **FE CFD Boundary on FE Mesh**. This one's going to be pressure outlet and I'm going to call this cold\_Outlet. If you start to type out these names and you put in special characters, you'll get a warning that tells you special characters aren't allowed. And the other warning you'll get is if you have a space and you try to output the name selections, it's going to automatically put in an underscore for you. So I go ahead and just do it anyway. > > Then the last bit we'll want to capture is the interface between the solid and the cold fluid here. For this instance, we can't really use the **FE Mesh by Flood Fill**. So if I show you what that looks like, what's going to happen is we're going to capture, as you would expect, basically this entire structure, where we really only care about the interface region between the two. So within this **CFD Boundary on FE Mesh** block, we'll double click and I'm going to select **FE Boundary by Body**. The mesh I want to select elements from is going to be my final cold mesh. I want faces and the body I'm going to use to select is going to be my hexacore. > > So you'll notice that we've captured very few of the actual elements that we want to transfer heat from. The reason being is this default tolerance comes in very small at 0.01 mm. So sometimes it's going to be a little bit of a guess and check, but because we did this previously on this example, oops, if we scroll down, we can see, okay, we used 0.065. So I'll copy that, put that value into here, and we should see that we've captured more of the elements that we want to transfer heat across from. While that's going, we'll label this as interface, and this is going to be cold\_to\_solid for the name. All of the remaining elements that don't have a named selection, so in other words, the cold inlet, the cold outlet, and our interface region here, all have something associated with them. It'll get labeled as default. If you don't define a wall name, however, if we get into importing multiple bodies into Fluent, it's extremely beneficial to at least have the word cold in here. So generally, I'll just come in and say cold default. So that way you'll see in Fluent when we get there, we're going to have four different boundaries: the cold inlet, the cold outlet, the cold to solid, and cold default name selections. > > With that set up, we'll get into defining the file path. The location we're going to store them in is this final data mesh files. And we're going to automate this process a little bit. So I'm going to double click on here. I'm going to add in **Concatenate Text**. This first text variable is going to be my file path. I'm going to add another **Concatenate Text**, and this second text option is going to be my extension. I'm going to put, I'll use this Deliminator option here. We're going to export an msh file and the file path is this. And I'm just going to call this test file. So hopefully here in a second, we should see a test file with an msh file extension getting outputted. Oh, actually, what we need to do is we need to come and add a forward slash here. > > We can open up the msh file, and at the bottom, you'll notice that we have our zone call outs: the cold default, the cold solid, the cold outlet, and the cold inlet. Now calling it just test file doesn't really tell us a lot. So we'll delete this and enable manual run mode and start to build this out. > > I'm going to add one extra, at least here, **Concatenate Text** block, and I'm going to call this cold fluid. And we'll actually do one more **Concatenate Text**, and we're going to call this Z cell size. And what we're going to do now is we can call in a text from a **Scalar** block cell size in the Z because maybe we want to look at aspect ratio. Let's see why that didn't work. Ah, okay, so we're going to actually grab this value. It's in millimeters, and we only need a couple significant digits. So C cell size, it's going to capture that value. And so the output file looks like that. > > Let's add some delimiters just to kind of split this apart a little bit. We'll add a hyphen here and a hyphen there. Click play. So cold fluid Z cell size 10 mm. We'll delete that one. So now anytime we come into this file, and let's say again, we want to look at aspect ratio. If we change this cell size, it's going to update that output for us. There are multiple ways you can assign these types of parameters to help your naming scheme for files. So I'm going to go through real quick and set this up for the hot fluid and touch back on some other aspects once that's completed. > > Let's talk a little bit about the automation side of things. So you'll notice that, or you might have noticed, when we used the **Filter Mesh by Flood Fill** option, so if we right-click here at the inlet for the hot fluid, there's an origin point. That origin point is originally defined from where your mouse is, and then it's going to snap to that closest element, and then from there select all of the values or all the elements that it needs to, based on the angle criteria. That's a very robust way in setting up the automation. So what we can do instead is use our incoming CAD data as this point of origin. So we'll use this **Filter Mesh by Flood Fill** block, and rather than having this origin be random, let's call on the oil inlet face. So this is that CAD face we originally extracted. We'll go to the bounding box, grab the centroid of it, and so now this **Flood Fill** option is tied to that face. We'll drop this down to 30°. I'm going to Ctrl-C, Ctrl-V, and we'll do the same thing with the oil outlet face bounding box centroid. > > Ah, okay. So now the reason this one didn't work is the direction that it was snapping to. So there are a couple of ways we can go about fixing this. If it's a repeated error, we can, I have a custom block that defines a vector through a CAD cylinder or a hole, and you can always define that direction. Or in this case, what we should be able to do is just reverse that value because we're in the Z-axis. And so you just need to change the normal direction that the **Filter by Flood Fill** is going to look at. So just to keep it as robust as possible, and so you have access to this custom block, I'll set it up as is. And another nice new feature is you can now right-click on custom blocks and say open block. See how it's built and, or at the same time, update blocks if they need updating. > > Okay, so all I did is I went back into the CAD bodies, and under my CAD and implicit references section, I extracted some more CAD variables and added these four custom blocks. Going back down to our **Export CFD** section, this is our hot fluid. So this is going to be oil inlet vector. And we got an error. It's likely because it snapped to the wrong direction. So it's just facing the wrong way. So I can come to this input. If I push the period button or dot on my keyboard, it opens up the properties. I can come to the negative, so we'll flip the orientation of that, and we've captured the oil inlet. We'll do the same thing for the oil out vector. We'll do this, oops, scroll back down. We'll do the same thing, negative. We've captured that. Go ahead and insert these into the **Export** block. And then we'll set up the same thing for the cold. So we'll come to here, and we'll say, I think it was fuel inlet face bounding box centroid, and we'll go fuel outlet face bounding box centroid. And then do the same thing, inlet vector, do negative. And then this will be out V fuel outlet vector. Just going to assume negative. And so there we go. > > Whoa, let's see why this one didn't work. Let's drop this to 15. Final cold mesh fuel inlet face centroid fuel inlet face fuel outlet up to 30. See if I'm seeding from the wrong place. Okay, that point looks fine. Fuel inlet vector. Strange. Last thing I want to check, make sure we got the right edges. Fuel inlet, fuel inlet face. The outlet works fine. How weird. Fuel inlet face. A vector through those custom blocks and change. It's almost like the seed point is off. Going to spend a little bit of time trying to debug this, then hopefully get back to the course here in a second. > > Okay, so what I ended up finding out was indeed it is the origin point. So if I take, so this is the mesh, the boundary by flood fill as we had it set up. What I did was do another **Filter Mesh by Flood Fill**. I took that original origin point that came from it. So that's this block here. And if I insert that into this block, we capture the inlet phase. If we look at where that fuel inlet face point is, it sits just barely within the domain. It looks like so that could be a bug. I'm going to approach it as is, but for now, what I ended up doing was translating the position of that point. So I called on a **Translate Object** block. We want to translate this point, and I translated it along the fuel inlet vector that we're using to define that snap range. And I just added a very small number to that. So our new point sits outside of that body. So we'll drag that into here. Now we capture that face. A little bit convoluted, but at least we figured it out. So I'm going to clean up the notebook a little bit. Minimize that. And then let's check the cold or the **Export Hot Fluid** block. So in this case, we want to look at the file path. This is going to get changed to hot fluid instead. Z cell size is fine. And then I want to make sure and double check hot inlet, hot out hit, hot solid, and hot hot default. So now click play. > > Let's see. CF boundaries must be applied to the F mesh. > > Ah, so the last thing is we're accidentally exporting the cold mesh here, so we'll replace that with the hot. Should be good to go. The mesh. So two MSH files, both with the named selections that we want. I'm going to set up the same exact process for the solid remesh. While I'm doing that, I'm also going to click play on the **Simplify Mesh by Threshold** for the initial cold. We'll see how long it takes and the mesh quality of that block as well. > > Okay, so the **Simplify Mesh by Threshold** finished. It did produce self-intersections in this case. You'll see that for the most part, we turn on the cold fluid. We've lost some geometric fidelity compared to the remesh surface and the mesh implicit body, but the overall element count has come down substantially. So the initial cold mesh was 5.6 million, the remesh of that was 1.7, and the **Simplify Mesh by Threshold** was 1.2. Compared to the remesh surface block that was 86,000 milliseconds versus, I think it was, 400,000 or so milliseconds for the remesh surface. So pretty large time difference. If you're able to get clean quality meshes out of them, or if your downstream tools are okay with some self-intersections, then depending on what you're trying to accomplish, this mesh could be satisfactory. If we're simply going to slicing, it might be okay. I have experienced some issues trying to remesh these types of meshes primarily just because the elements have poor orthogonality and skewness, and it also kind of then impacts the seed elements and sizes and faces during remesh stages. For the most part, I tend to stay in the remesh surface realm, but do know this is still a good option. > > So while this **Boundary by Body** block is building out, I want to talk about a couple potential issues that I've had in running CHT. So I'm going to turn on the hot and cold fluids as well as the hexacore. As it stands right now, when we mesh these and as built, it's essentially line to line or coincident faces. What that means is when I come to generate my interface regions, there's going to be some overlap between the two objects, between the two meshes. When we pull these into Ansys, it sometimes gets a little bit confused on what boundary zone is associated with what object. The main way that I get around that is by using the **Clearance** block. So under modeling, we have a handful of blocking operations. **Clearance** is one of them, and I'll show you what this does. We're actually going to end up using this block. > > So I'm going to take my final cold fluid as my primary body and my hex core is going to be my subtraction body, and I'm going to do the same thing for the final hot fluid. I'm going to add a new variable that's clearance distance, and I'm going to put in a pretty small value. Let's just say 0.05 oops, mm. So all this is going to do is based on the proximity from the hex core to the cold fluid, it's going to do a Boolean subtract operation. The final cold fluid isn't a good visualization for this just because you can see how much the fillets and the walls have removed from here. So a better representation would be this hot fluid actually, but we can see a difference between these two. Turn on the XX core. So this gray object is our new **Clearance** block. And so there's a 0.05 mm gap between the wall there. And if we turn on the final cold fluid so we can high res control H, you effectively have line to line with those two. Because our faceted representation of the body is just that, it's faceted, there will be instances where triangles from our hot side or from our fluid side, and this is a bit of an exaggeration, overlap with triangles from the solid. So if we can put this buffer into our analysis or into the machine, it tends to be a bit more robust. Since that finished recalculating, we can look at that interference. So I'm going to color this guy green and this is the cold fluid, so we can turn the cold to solid on and I'm going to color this red. So we can see there is a bit of overlap between the two segments, and if we put this buffer, that overlap tends to behave a bit better in our CAE tools. So **Clearance** block for the hot and **Clearance** block for the cold. > > Let this run. I'm going to pause the video and then come back when it's finished. Okay, both meshes finished. We'll see what the interface regions look like. So this is the cold to solid. Change the color so it's blue instead. And I'll increase this value a little bit and I'll do the same probably with this one, so we can see we have far less interference between the two. > > Now, one thing I'm not a huge fan of on this interface are the floating bits. Let's see if we can resolve why that's happening. Final cold fluid is our **Selection Body**, and that's probably the culprit. So, we'll turn on the mesh, look at the final cold fluid, and we'll actually see that we're capturing beyond that as well. So, our selection criteria is pretty large. Let's try doing the cold fluid instead. Let's see what this looks like. > > So, there's likely what's happening if we turn on the final cold fluid and look at the **Field Viewer**, there are some residual artifacts of, let's shrink the field down to 100. There are some residual artifacts that are causing that. So, if we look at just this, we still have them. I'm going to take this offline to debug and come back. > > I found the main issue and a resolution for it. So, real quick again, what was happening is we were using the final cold fluid, this blue implicit, to try and select the facets on the hex core mesh to define an interface. And we noticed that we were also selecting the surface on the hot side as well as the, we'll call it, perimeter region of the heat exchanger core. If we look at just the **Field View** of this final cold fluid and change the range from -0.1 to 0.1, and then decrease the size of the field plane again, we'll notice that we have these artifacts showing up. They stem from the original creation of the cold fluids. > > I'm going to switch to a different window. This is where I have the resolution. So, this is the old cold fluid. Turn these off and we'll look at the field. And the reason we changed the size here is there's a certain number of pixels that are going to be displayed on the **Field Viewer**, and so the smaller it is, the more resolution we'll have. And then a good way to debug if you have to look for any type of field issues like we saw here is to set the Min and Max values pretty small so that way the color band is very narrow and pronounced. > > So, looking at the field of the again, the original, we'll call this cold fluid, we see that those artifacts happen. The reason they're happening is how we ultimately created this implicit body. So, we're taking our design space, which is just a cylinder, and we're subtracting out the hot fluid as well as the hex core. What causes these artifacts is what's known as geometric singularities or coincident faces. They occur in other softwares where if you have line-to-line contact or planar contact, sometimes it's unable to resolve the difference between the two. So that's what is ultimately causing these artifacts and singularities. If we turn on just the hot fluid, we'll see we have the shape of those artifacts as well as the perimeter from the design space itself. > > I noticed, however, that if I looked at the field of the hot fluid and we set the same range 100, that those artifacts don't persist. So, in other words, the fluid domain that stems from this periodic lattice gives us a clean field. A workaround until we're hopefully able to implement this as a product solution is to take simply the negative value of the periodic lattice body. So, we can click on the **Properties** panel under properties, conversions for the implicit body, and under scalar field, we can get the negative. All the negative it is, is the opposite side or values of the original field. So, if I pull this into here and we look at the field of the periodic lattice, we have positive values where we are defining negative values where we're defining our implicit, and the of that is essentially just going to multiply this entire field by -1 and give us the exact opposite. So, we can now use this one block to stem both of our fluid domains. > > So, we did it. We all do it the same way. We create a **Boolean Intersect** of the negative with our design space. So this now we'll call **Raw Cold Fluid**, and then we'll do a **Boolean Subtract** of this **Raw Cold Fluid** with the hex core to give us our updated geometry. And if we look at this field, we'll see that those artifacts disappear. So, right now, this is fundamentally more or less changing how we're going to design these structures. I think the reason this hasn't really cropped up as much in the past is now that we're at the stage of automation with Discovery and fluent, it hasn't really been an issue because we were able to tailor the meshes a bit more. > > Now, these artifacts will persist throughout the model depending on how you do different operations. So, what we can do now is if we look at this final cold fluid, we'll see that we have some of those artifacts still show up from the **Boolean Subtract** of the final part. So, what we'll ultimately use to select our boundary condition faces is this cold fluid domain. So, we'll get to that here. I'm going to isolate just the solid mesh, minimize that, and turn this guy on. So, the green now is the interface between the solid object and the cold, and then the purple is the interface between the hot, or between the solid and the hot. > > You'll notice, however, I have one extra block in here, and that's the clearance block. If we, and I'll go ahead and do this now, we're going to hit S and add a new **Boundary by Body** block. We'll select faces. 0.1 hot fluid. So, while this calculates, we'll talk about the clearance block. With this clearance block, I took the hot and cold fluids, these original ones that we created up top. I took a shell of my design space going outward. So, when this finishes rendering, we'll see what that looks like. So, I just shelled out my design space outward, and I'm going to do one large clearance, or **Boolean Subtract** essentially, from this face inward by 0.1 mm. And I'll show you why we do that here in a second, but we're effectively just going to shrink that volume, the hot and cold fluid domains. > > So, by shrinking this domain, ultimately what we're doing, we're just preventing the elements on this outer boundary or on the perimeter to get selected. So, if we look at it with just the hot fluid, we'll turn this on. We can see that we're capturing the outer elements, which can cause problems in downstream processes because we're not actually exchanging heat between those contact points. And if we happen to share elements with the opposite interface region, Ansys can sometimes get confused with that as well, and we actually won't even let you export an FE model like that. So, a little bit of a nuanced step right here, but pretty simple and straightforward once you understand it and implement it a couple times. > > So, we'll go ahead and remove these F **Boundary by Bodies**, put in our new one. So, solid to cold, solid to hot, file path, that's all set up to go. We'll make this a variable and click play on exporting the cold and hot fluid domains as well. All three mesh files are created. So, go ahead and start with Discovery, run an analysis or two, and then bring these into Ansys Fluent. This lesson shows how to prepare your heat exchanger for CFD outside of nTop. For more information on meshing, we recommend reviewing the [Guide to Meshing](/courses/102-guide-to-meshing/) course. For a faster or slower speed for the video, click on the settings in the bottom right of the video. # Overview Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/overview ![Heat exchanger with internal lattice structure for thermal performance](https://storage.googleapis.com/files-learn/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/heat-exchanger-overview.png) The objective of this course is to prepare your part for simulation and printing. After completion, you will have learned to run an analysis of your HEX design in Ansys Fluent and Ansys Discovery, as well as how to iterate through designs based on these results. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/before-we-begin-meshing), [210: Intro to Latticing](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [HEX Design Part 1: Intro to Two-Channel Heat Exchangers in nTop](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/before-we-begin-hex-1), [HEX Design Part 2: Heat Exchanger Flow Distribution and Control](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/overview) **What will be covered:** * Meshing techniques (for analysis and manufacturing) * Interoperability * Ansys Discovery * Ansys Fluent > **[Before We Begin](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/before-we-begin-hex-3)** > **[Automate Mesh Export](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/automate-mesh-export)** > **[Initial Meshing for CFD](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/initial-meshing-for-cfd)** > **[Download: HEX Mesh Export](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/download-hex-mesh-export)** > **[Surface Meshing Best Practices](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/surface-meshing-best-practices)** > **[General Interoperability](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/general-interoperability)** > **[Ansys Discovery](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/ansys-discovery)** > **[Ansys Fluent](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/ansys-fluent)** > **[Utilizing CFD Fields for Flow Domain Optimization](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/utilizing-cfd-fields-for-flow-domain-optimization)** > **[Final Considerations Before Printing](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/final-considerations-before-printing)** > **[Resources](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/resources)** # Resources Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/resources ### **Additional Resources on Heat Exchangers** 1. Video: [nTop Live: Blending of TPMS Structures for Heat Exchanger Inlets](https://ntopology.com/videos/video/ntop-live-blending-of-tpms-structures-for-heat-exchanger-inlets/) (\~5min) 2. Video: [Simulation Series – How to export your design to Ansys Fluent | nTop](https://ntopology.com/videos/video/simulation-series-how-to-export-your-design-to-ansys-fluent/) (\~19min) 3. Video: [Compact Two-Domain Heat Exchanger with Gyroid and Diamond TPMS Lattices](https://ntopology.com/videos/video/ntop-live-compact-heat-exchanger-gyroid-diamond-lattices/) (\~35min) 4. Video: [Generative Design Workflows from CFD fields | nTop](https://ntopology.com/videos/video/ntop-live-utilizing-cfd-fields-for-flow-optimization/) (\~17min) 5. Article: [How to export your design to ANSYS Workbench](https://support.ntopology.com/hc/en-us/articles/4401872874771-How-to-export-your-design-to-ANSYS-Workbench) 6. Article: [How to export variables in CSV format from Ansys CFD Post](https://support.ntopology.com/hc/en-us/articles/4406857481235-How-to-export-variables-in-CSV-format-from-Ansys-CFD-Post) # Surface Meshing Best Practices Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/surface-meshing-best-practices Meshing techniques are ever-evolving as certain blocks get updated. In general, the main blocks for surface meshing, in order, are: 1. **Mesh from Implicit Body** (MFIB) 2. **Simplify Mesh by Threshold** (or **Simplify Mesh by Amount**) 3. **Remesh Surface** (for analysis, especially in nTop) > [!NOTE] > > **Note**: More information on each of these blocks can be found in our [102: Guide to Meshing](/courses/102-guide-to-meshing/) course. ## Step 1: Mesh from Implicit Body This block will almost always create a mesh too dense or large to do anything practical. Still, it is the first step in discretizing your Implicit and capturing the geometric fidelity required for printing and analysis. For our TPMS HEX, we should consider two main questions. Are you meshing for analyses, or are you meshing for printing? In general, this will mean, are we meshing the fluid domains or meshing the solid part? ![](https://files.learn.ntop.com/lessons/surface-meshing-best-practices/HEX3_5_Mesh-From-Implicit-Body.png) For analysis, we generally want to ensure that the faces where we apply our inlet and outlet boundary conditions have preserved sharp edges, allowing for the whole area to be utilized. Therefore, we want to access the Overload in the MfIB and define the *Sharpen Extents* (the regions we want sharpness persevered). This option makes the block solve quicker and potentially causes fewer issues downstream. We also recommend setting the *Sharpen Iterations* to 3 in most cases; however, early in the design process, one iteration may be sufficient and improve solve time. For manufacturing, especially out of metals, it's highly unlikely that sharp edges will be present after the build is complete. These are usually machined in after printing as required. Therefore, we can use the default MfIB block. (Note, the default block allows for *Sharpen*, but this will evaluate at the entire body and defaults to an iteration value of 1). The *Min feature size* input can be a great tool for removing very thin sections, small burrs, etc., that happened to get generated in the model. Any implicit feature smaller than this value will be omitted from the mesh. ## Step 2: Simplifying by Threshold (or Amount) ![](https://files.learn.ntop.com/lessons/surface-meshing-best-practices/HEX3_5_Simplify.jpg) Since the *Tolerance* value in MfIB is generally a % value of a part's minimum feature size, many of the initial mesh elements are significantly smaller than needed to preserve the required fidelity. A simplification step will increase/decimate the element size in larger areas. In the case of a TPMS or any lattice, most of our elements will be on the lattice. Therefore, **Simplify by Threshold** is the preferred method as the governing input that drives the mesh decimation is a 'surface deviation' / Threshold value (akin to *Chord Height*). This will tell the block that it can decimate as much as possible while allowing the **Remesh Surface** to deviate no further than +/- the *Threshold* value. The **Simplify by Amount** forces a certain % decimation, meaning if the majority of my implicit body is a lattice (i.e., where most of my elements are), it won't care about geometric fidelity, just achieve the % decimation. > [!NOTE] > > **Note**: A good rule of thumb for **Simplify Mesh by Threshold** is to start with a value between 1%-10% of the incoming **Mesh from Implicit Body***Tolerance* value. If you are going to print, this could be and is likely a great place to stop. Right-click on the block and Export or use the **Export Mesh** block. Depending on your downstream analysis systems, meshing capabilities, this could also be a good place to stop and export for meshing in your CAE tool. ## Step 3: Remesh Surface ![](https://files.learn.ntop.com/lessons/surface-meshing-best-practices/HEX3_5_Remesh.png) This block will generally be used for analysis only and, in some cases, manufacturing. It is important to note that this block is a third-party meshing block and is currently single-threaded. The speed of the block is highly dependent on the number of incoming elements, which is why we recommend simplifying the mesh before remeshing. ## Key Inputs for the Remesh Surface If we use the other parameters (especially Chord Height) to control the element size and preserve fidelity, this value can be set to quite a large number, helping the block solve faster. Depending on how the mesh looks and how long it takes to run, you can increase or decrease it. It is highly encouraged that the growth rate be set between 1.2 – 1.5 This value defaults to zero and is generally left there. However, the element sizes that tend to get created, especially on fillets, will often be smaller than is required. This value can be tuned to achieve a quality mesh for analysis, and not defaulting to zero can significantly impact the solve time. Akin to the Threshold value in Simplify Mesh by Threshold, this will be the allowable surface deviation and will be the primary factor in determining the mesh quality. # Utilizing CFD Fields for Flow Domain Optimization Source: https://docs.ntop.com/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/utilizing-cfd-fields-for-flow-domain-optimization While out of scope for this course, the last section of CFD Interoperability is Utilizing CFD Field for Flow Domain Optimization. We won't go into extra details here but the basic understanding and concepts can be found and seen in [this video](https://ntopology.com/videos/video/ntop-live-utilizing-cfd-fields-for-flow-optimization/). Furthermore, additional support, explanations, and the most recent CBs utilized can be found in the support article, [How to use nTop to help design plumbing domains](https://support.ntopology.com/hc/en-us/articles/4406640971923-How-to-use-nTopology-to-help-design-plumbing-domains), and in the files below. **Example File:** [HEX3\_9\_Updated CB – Field from Fluid Domains (v4.0, v5.0 & v5.1).zip](https://files.learn.ntop.com/Courses/Simulation%20and%20Mesh%20Export%20of%20Heat%20Exchangers/Data%20Files/HEX3_9_Updated%20CB%20-%20Field%20from%20Fluid%20Domains%20\(v4.0%2C%20v5.0%20%26%20v5.1\).zip) # Courses Source: https://docs.ntop.com/lessons/index > **[nTop Foundations](/lessons/ntop-foundations/overview)** > > Get started with nTop! Gain the foundational knowledge and skills you need to start designing with nTop > **[Intro to Modeling](/lessons/intro-to-modeling/overview)** > > Learn about basic modeling capabilities and discover new features through regularly updated hands-on tutorials > **[Parametric Aircraft Design](/lessons/parametric-aircraft-design/parametric-aircraft-modeling-intro)** > > Build from scratch and discover techniques for modeling and parameterizing a conceptual aircraft design > **[Parametric Turbomachinery Design](/lessons/parametric-turbomachinery-design/overview)** > > Master modular workflows to parametrically design turbomachinery with implicit geometry from scratch > **[Intro to Flow Analysis](/lessons/intro-to-flow-analysis/overview)** > > Learn the fundamental concepts, and how to setup, simulate, and analyze fluid flow within your models > **[Intro to nTop Automate](/lessons/intro-to-ntop-automate/overview)** > > Learn the basics of nTop's command line interface to automatically run workflows without the graphical user interface > **[Intro to Custom Blocks](/lessons/intro-to-custom-blocks/overview)** > > Learn how to use custom blocks and list processing to automate your design workflow > **[Intro to Meshing](/lessons/intro-to-meshing/overview)** > > Meshing techniques for simulation, surface latticing and exporting > **[Intro to Structural Analysis](/lessons/intro-to-structural-analysis/overview)** > > Learn how to generate an FE model and boundary conditions to run FEA in nTop > **[Intro to Thermal Analysis](/lessons/intro-to-thermal-analysis/overview)** > > Learn how to setup and run thermal analyses in nTop > **[Intro to Field-Driven Design](/lessons/intro-to-field-driven-design/overview)** > > Learn the basics of fields in nTop and how to use them to drive designs > **[Intro to Data-Driven Design](/lessons/intro-to-data-driven-design/overview)** > > Explore driving geometry with data in nTop > **[Intro to Field Optimization](/lessons/intro-to-field-optimization/overview)** > > Learn how to set up and run field optimization in nTop > **[Intro to Topology Optimization](/lessons/intro-to-topology-optimization/overview)** > > Learn how to set up and run a topology optimization in nTop > **[Intro to Lattices](/lessons/intro-to-lattices/overview)** > > Learn how to add lattices to lightweight and add texture to a part > **[Advanced Meshing Techniques](/lessons/advanced-meshing-techniques/overview)** > > Learn how to optimize your complex meshes using advanced meshing techniques > **[Intermediate Field-Driven Design](/lessons/intermediate-field-driven-design/overview)** > > Learn more about fields in nTop and how to use them in geometry creation and remapping > **[Slicing and Print Layout](/lessons/slicing-and-print-layout/overview)** > > Save time by slicing your implicit models and prepare for printing within nTop > **[Ribbing and Texturing](/lessons/ribbing-and-texturing/overview)** > > Learn various techniques for ribbing and texturing parts > **[Lattice Structural Analysis](/lessons/lattice-structural-analysis/overview)** > > Learn how to run simulation on your lattice structures in nTop > **[Heat Exchanger Design 1: Intro to Two-Channel Heat Exchangers](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/overview)** > > Learn how to infill your design space with TPMS lattices to generate fluid domains for HEX design > **[Heat Exchanger Design 2: Heat Exchanger Flow Distribution and Control](/lessons/heat-exchanger-design-2-heat-exchanger-flow-distribution-and-control/overview)** > > Learn how to create baffles and plenums and prepare the mesh for HEX design > **[Heat Exchanger Design 3: Simulation and Mesh Export of Heat Exchangers](/lessons/heat-exchanger-design-3-simulation-and-mesh-export-of-heat-exchangers/overview)** > > Learn how to create a mesh, run a simulation, and analyze the results for HEX design > **[nTop Workshop Preparation](/lessons/ntop-workshop-preparation/overview)** > > Establish the essential knowledge and skills you need to prepare for a successful nTop workshop. Learn what nTop is, build your first workflows, and understand implicit modeling. > **[nTop Essentials](/lessons/ntop-essentials/overview)** > > Get started on the basics of nTop and test your knowledge > **[Fixture Generator](/lessons/fixture-generator/intro)** > > Learn how to design 3D printed jigs, fixtures, and masks for assembly, re-manufacturing or CMM measuring > **[Training Guide Q\&A: Ask the Basics](/lessons/training-guide-qa-ask-the-basics/overview)** > > Get answers to some of the most frequently asked questions on geometry conversion, basic operations, and troubleshooting in nTop > **[Training Guide: Serialization](/lessons/training-guide-serialization/serialization)** > > Learn how you can generate and place serial numbers on your part > **[Training Guide: Quick Guide to Surface Meshing](/lessons/training-guide-quick-guide-to-surface-meshing/quick-guide-to-surface-meshing)** > > Explore techniques to successfully create surface mesh for virtually any downstream operations > **[Training Guide: Perforations](/lessons/training-guide-perforations/perforations)** > > Explore the different methods for creating perforations and how to implement them in a workflow > **[Training Guide: Heat Exchanger Design – Cold Plates](/lessons/training-guide-heat-exchanger-design-cold-plates/heat-exchanger-design-cold-plates)** > > Explore the methods for creating cold plates and how to implement them in a workflow. > **[Training Guide: Advanced Topology Optimization – Multiple Loads, Multiple Conditions](/lessons/training-guide-advanced-topology-optimization-multiple-loads-multiple-conditions/advanced-topology-optimization)** > > Learn how to build a topology optimization with multiple load cases and multiple constraints from scratch > **[Training Guide: Intermediate Field-Driven Design](/lessons/intermediate-field-driven-design/overview)** > > Learn how to use equations and fields to warp a design and apply this concept for creating a woven pattern > **[Training Guide: Advanced Field-Driven Design](/lessons/training-guide-intermediate-field-driven-design/overview)** > > Learn about the two body fields and two applications of this advanced field driven design concept > **[Training Guide: Texturing and Bitmapping](/lessons/training-guide-texturing-and-bitmapping/overview)** > > Learn the basics of adding textures to a part using images and fields > **[Training Guide: DfAM and Export](/lessons/training-guide-dfam-and-export/overview)** > > Learn how to design for additive manufacturing, build orientation optimization, and pack support structures in nTop > **[Training Guide: Prosthetics](/lessons/training-guide-prosthetics/overview)** > > Learn about creating, lightweighting, and texturing a custom-fit prosthetic limb for patient comfort and mobility. > **[Training Guide: Heat Sinks](/lessons/training-guide-heat-sinks/overview)** > > Explore the process of creating two types of heat sinks in nTop > **[Training Guide: Design Parameters & DoE Automation with nTop and Ansys Discovery](/lessons/training-guide-design-parameters-doe-automation-ntop-ansys-discovery/overview)** > > Explore the steps of setting up an automated Design of Experiments (DoE) workflow between nTop and Ansys Discovery for lattice characterization > **[Training Guide: Dental Splints and Surgical Stents](/lessons/training-guide-dental-splints-and-surgical-stents/overview)** > > Build custom blocks to automatically generate dental splints and stents based on imported scan data > **[Training Guide: AM Support Structures](/lessons/training-guide-am-support-structures/overview)** > > Generate support structures in nTop and learn how to modify premade custom blocks to tailor these structures to your specific needs > **[Training Guide: Medical Implant Latticing](/lessons/training-guide-medical-implant-latticing/overview)** > > Use lattice structures to design medical implants in nTop > **[Training Guide: Shaping Implicit Bodies with Simulation Results](/lessons/training-guide-shaping-implicit-bodies-with-simulation-results/overview)** > > Use imported simulation data to generate and reshape implicit geometry > **[Training Guide: Extending nTop with Run Command and Python](/lessons/training-guide-extending-ntop-with-run-command-and-python/overview)** > > Use Run Command block with Python to extend nTop capabilities > **[Training Guide: Moldability Analysis](/lessons/training-guide-moldability-analysis/overview)** > > Explore nTop's tools to evaluate your designs for moldability > **[Training Guide: Managing Distortion via Geometry Compensation](/lessons/training-guide-managing-distortion-via-geometry-compensation/overview)** > > Learn how to create compensated geometry to counteract distortion > **[Training Guide: Cylindrical and Spherical Remap](/lessons/training-guide-cylindrical-and-spherical-remap/overview)** > > Explore the steps of a cylindrical and spherical remap and how to adjust parameters for different results > **[Training Guide: Advanced Two Channel Heat Exchanger through Field Manipulation](/lessons/training-guide-advanced-two-channel-heat-exchanger-through-field-manipulation/overview)** > > This training walks you through how to create a two-channel heat exchanger with fields. > **[nTopのコア機能と操作](/lessons/ntop-core-features-ja/overview)** > > nTopの基本を学び、インプリシットモデリングの概念と主要な操作・ベストプラクティスを理解します。 > **[ラティス入門](/lessons/intro-to-lattices-ja/overview)** > > nTop内のラティス生成オプションを学び、ワークフローにラティスを実装する方法を理解します。 # Answer to Intermediate Field Driven Design Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/answer-to-intermediate-field-driven-design [https://www.youtube.com/embed/AVl\_k\_XBmW4](https://www.youtube.com/embed/AVl_k_XBmW4) > **Transcript** > > In this lesson, we will review an answer to the optional test problem in our intermediate field-driven design course, which asks you to create this woven pattern that is planar, cylindrical, and spherical. I say that this is an answer because you could have something that maybe has a slightly different process that comes to the same results, and that is fine as well. But we start with that starter file that gave the inputs: the radius for our columns and rows, how many we want, spacing, and the magnitude, as well as equations that we'll use for remapping to get that woven, interlocking pattern. > > Something else that I use often in this is using our variables before to make this automated. So eventually, when we get to the end, you'll see that I can change the number of columns and rows, and it'll quickly adjust for that. So you maybe didn't include this aspect; I definitely recommend it if you're doing something where you want to maybe change those inputs. You could make this into something like a **Custom PL**. So again, if it's a little bit different, that's okay. And if you are interested in taking your workflow and automating it, being able to have those variables change with that design changing instantly, then you can also go to our nTop audit animation course to get started on learning a little bit more about that. > > But the first thing that we do is just start by creating our beginning column and row. And already, I'm starting to use variables that I have. So with both of these, I have my **Column One** and my **Row One**, and I'll show those both. I have them as different colors to make it a bit easier to follow along. And so our starting point, I have our point defined here, which is really just a scalar volume. But this is going to the spacing times two, and the reason for this is I'm just giving space for that row to start. And our final point, we're going to make this as long as the spacing times the number of rows, so we make sure that if we're changing that spacing, we're changing those rows, this will be a long enough size. You didn't have to have all this automation involved as well in your design, but just showing this example in this way. And if you also want to follow something that starts from scratch, you can also watch our training video that goes through each of these steps from scratch, linked below this video. > > So we have **Row One**, which now, instead of having our x-value be that point, we're just going to have that as our z. And again, we're just going to make this as large as that spacing times the number of columns this time and use the radius to create that. So we have **Column One**, we have **Row One**, and you could make the same thing for **Column Two** and **Row Two**. But to show how we can use that **Translate Object** in that **Remap Field**, I use remapping to create our **Column Two** and **Row Two**. So since I'm just moving this over, I'm moving it by that spacing, and since we're moving this in the positive direction, we're going to do a subtract. So we look at our **Column Two** and our **Row Two**, and really the only difference is that I'm moving one along the x, one along the z. And the reason I have this is because we'll have a sine wave going kind of in one direction and then in the other direction, so that we have that interlocking pattern. So we're going to have to start with four cylinders. > > So we have these four. And the next thing I want to do is create an array. So that's where we'll use the remap again for the mod. But of course, this is just showing that intermediate fields how remapping works. You could always just use an **Array Body** as well too, a little bit easier as well. So I'll talk about the bounding box in a little bit. But let's just look at what I'm doing for something like R R1. So x and y will stay the same; we just want to see that change over the z. We want to have it repeat. So if I type f, let's change our plane from normal to be 0 1 0. And let's actually look at that mod. So I'm taking z-axis and 8 mm, which in this example is that spacing \* 2. And that's going to give me, if I put an interval of let's do four, and from my values, we can see that it's going from 0 to 4 to 8, and it's just going to continue to repeat that because I have this as my coordinate system. Anywhere we have that location that we have our first column will just be repeated. And if I type f on our **Remap Field**, we can see that that is exactly the case. So anywhere we see that dark blue to pink, that's where our columns are being placed. Now these are going infinitely up and down that z-axis. So that's why we have our bounding box. And that's just going to make sure we only take the amount of columns that we want in this area. So I eventually want eight columns. So I have four in this first bit, and then I'll take my rows two mod that and use the **Remap Field** to have an additional three with that starting row. And our bounding box, I'll show that as well to you. So our 01, I'm going to have this origin for the x and the z and then just bring that down -2 mm for that radius. Do negative, so we just have some space, and I just multiplied that by two, so we have some space on that side too. > > Then for our **Max Point**, I'm taking the number of columns times the spacing in the x, number of columns times the spacing in the z, and then just two times the radius, so we have a little bit of space in between those. So you could also change this as well if you wanted a bit more spacing at the top and bottom or you want this to be maybe the radius plus the spacing or half the spacing. You can play around with that. This is a pretty open-ended problem, so a lot of ways you can go about it. So I have my bounding box, and I'm going to do the same technique for my rows two. Again, I'm just now taking **Row Two** instead of **Row One**, but same mod used values to get my rows. And for the columns, similar thing this time, though, we're just going to have that **Mod Block** in our x-input because we'll have those columns go along that x. So that's **Columns One** and **Columns Two**. So now I have the rows and columns that I need. > > You technically didn't need to use remapping for any of this quite yet, but just to show those techniques, I wanted to show that. You could always have done a **Translate Object** block, you could have done that **Array Body** block, a lot of different options. But now, I have four major groups that I'm going to use for remapping. So I have Rows One, Rows Two, Columns One, and Columns Two. And I do need those four sections because we'll add and implement different remap Fields using the equations provided in our starter file to create our woven pattern. We also have them defined, of which equations you'll use for Row One, Row Two, Column One, and Column Two. > > So I'll open up this remapping with the sign equation. So, a little bit different than what we discussed so far. Sorry, this is a bit of a challenge problem. And what we're just going to do is take the Y and we're going to multiply the magnitude and the sign equation that you have and just add those together. So we look, we have that magnitude and I say used in the sine wave remapping. If you don't change the magnitude, then if you don't have it, that's okay. But it's nice to have that if you did want to change the magnitude. And if we see that it's going to create our wave, and let me show what this looks like if I type F, turn this around, is we're getting this kind of wavy pattern. And the reason for this is if you look at this magnitude times that sign equation and probe our values, we're getting something that, you know, is going from negative one to positive one. And as we're going along that and adding this to the Y, we're changing those values that we have and just creating this wavy shape. So we just get something like this. And this is how we are creating that column or that row in this example. So they all are changing this way, and that's also why we need to have two separate rows because we just have two separate sign equations for that. So in this one, this is X minus the spacing. And then this one is just X. And this allows us to just have that sign going in the opposite direction, so we just shifted it over. > > Similar process with the Columns One and Two. Really the only difference between kind of these is which equation you are putting in which, why we have those different ones. So this is that X minus spacing, that one was X. This one is Z minus the spacing and the other one is C. So that just allows us to instead of having that wavy structure along that YZ, to then have it along the Y and X, so just changing that. So I have those four, and then I'm pretty much done with the remapping. In order to create this planar weave, we can see it looks pretty good. And something I'll just show with this as well, and the reason I wanted to have those variables all connected, shows a cool option of that automation is I can change this radius. And what it has done is now also changed my part pretty quickly. > > So something to note is I do have some of that excess. A key part of this is just because of kind of that spacing that I had as well too, and just creating that bounding box. So this is just an example if you want to. Maybe yours looks better than this and has, even if you change that radius, change any of these areas, you won't have that kind of excess. So I could always go back and change that bounding box to fix anything like that. But this is our radius, you can see I can also change the columns. And same here, so I'm going to actually make this. You can see what that looks like now. Having 9.67 of a column doesn't always make sense. So I would say for these, definitely make them round. But you can see that this is pretty quick to change. Make that three, and our bounding box changes with that as well. And for our magnitude, if you wanted to see why we even included that, I can change it and you can see how that magnitude changes as well too. So if I didn't want it to be, maybe I want it to be connected fully, I didn't want any space in between them, or I wanted a lot of space, I could always change that magnitude. But I'll go back to the eight and eight that we had before. And if you're going through this, maybe you don't see this change in real time. You can always go to your file settings and enable GPU acceleration. So this just allows me to see that change happen in real time, and it's definitely neat to explore and play around with when you're working with Fields, especially. > > So in order to finish this, let me open up my final for our planar weave. All I do is a **Union** of the rows, **Union** of the columns, and then **Union** of everything all together. So that's one way you could go about it. Another way you could choose to do is use a **Concatenate List** block. So instead of having to do this Boolean Union three separate times, I could just bring in those different lists. I have concatenate them and Boolean Union those within that. So if you are unfamiliar with **Concatenate List** blocks, you can always go to our documentation on this as well. And in our nTop automation, of course, we show some examples on that.So that's our planer weave, and we'll use this as our basis for creating that cylindrical kind of basket pattern and that spherical one as well. So open that up, and I'll also go to my view and go to my **Display Grid** because we'll need this when thinking about how we create that cylindrical remap. > > So first, what I'm doing is orienting this object differently so that I have this ready to go for our **Remap Cylindrical Field**. So I start with my object, which is that planer weave, and you can see I just have this at our centroid of that bounding box. And then for our destination, I'll show this. I've just placed it here, and the reason for this, and we can see I have this as the spacing times half the rows divided Pi for X. And then I just have it at the CID for the Y and Z. > > And I need to place this so that when I am wrapping this around, it'll take this entire woven structure and wrap it around. So having that spacing times half the row divided Pi is going to allow us to then place this into our **Remap Cylindrical Field** and be able to get the result that we want. So if I put in this for my field, the Y mapping length as the spacing times the number of rows, so that's just how long it is, and show that. But I can't click on this toggle of visibility because if I do, it's actually infinite. > > So I'll show first this **Boolean Intersect** so we can see what that looks like, and we can see it's starting at that same location, and it's just wrapping it around. So that's our radius of the wrap, I guess, and it's just going to place that nicely. We get this final result like so. I can also change this box from corners, so that was a little bit too big, and this one I didn't end up automating. You could also automate this as well too. Just wanted to show some different examples, so you probably have different box and corner values. > > Also, the reason I have to do that **Boolean Intersect** is if I look at our field and type F and I'll change our plane from normal to B 0 1 0 is we can see we have these dots coming all the way through, so that's just our designs that we're working with going around like so, and that is just wrapping this part. So with the cylindrical weave, we took our oriented object, we've wrapped it around, but now we've have it all up and down that kind of Z-axis. We're going to have it wrapping and continuing to do so. So with something like this, that's why we have to have that B intersect. > > And if I look at my designs here, I can see I don't have the same amount of columns, and I'll just have to play around with my bounding box to just include more or less. And eventually, we can see our column stops, and we only have those rows because we have that defined height while our rows will just continue on. So if you have that bottom corners, maybe you have that so it defines it exactly as that height of the columns and the amount of rows that you have. But just showing this example, let's create something like this. > > And then the last thing we'll do is that spherical remap. And so this is our spherical remap where we have our oriented final body again as our part. We can use that same one we had for the cylindrical remap. Now we have just the spacing times the number of columns and spacing times number of rows. And note here that while we have eight rows, we really only have four of these. So if we look at that oriented final body again, we're just going to take a portion of that and wrap it around. So we'll just have that four going kind of up and down that part, and then eight of those columns. > > So you could change this, so maybe I want this to be 12, 12, get something like this. But something to note is if you make this uneven, so say number of columns eight for doing our cylindrical remap or our final planer weave, that's fine. But you can notice that we're starting to not have this connect once we start adding more and more to that. So you're going to want to either make it even, or if you do want kind of a basket with opening and do a **Boolean Intersect** of kind of that box that you want left, that little basket, you can do that as well too. > > You can change that spacing. I can show it the opposite way, looks like so, 12 for the columns, eight for the rows, and we can see it also will kind of stop halfway through there. So maybe that's the kind of design that you want. Definitely play around, that's how you can create that cylindrical woven pattern, spherical and planer woven pattern. So this definitely was a more advanced example. So if you want to see a step by step on this in more detail, definitely check out our training videos, just showing how we can take those concepts we learned in the previous lessons and apply this to a real design. This video reviews the answer to the optional test problem to apply remapping fields and Boolean operations to create a planar, cylindrical, and spherical woven pattern. If you would like to instead follow along with a video that walks through this process from scratch, you can watch our [Intermediate Field Driven Design Training Video](https://learn.ntopology.com/recorded-training-intermediate-field-driven-design/974357) starting \~50minutes in. To learn more on how to automate your workflow, please visit our [Intro to Automation Course](https://learn.ntopology.com/intro-to-automation). You can download the completed file with descriptions below. For a faster or slower video speed, click on the settings in the bottom right of the video. **Example File:** [321\_21\_1.ntop](https://files.learn.ntop.com/Courses/321%20Intermediate%20Field%20Driven%20Design/nTop%20Files/321_21_1.ntop) *This file was last updated in nTop 3.23.3* # Array Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/array Use the **Mod** block to create an array of the part. ![](https://files.learn.ntop.com/lessons/array/321_6_Array.gif) > [!NOTE] > > **Note**: If you prefer to learn more about this topic through a video, our [Follow Along: Intro to Remapping](https://learn.ntop.com/lessons/follow-along-intro-to-remapping/) lesson covers all the Intro to Remapping topics in video form (Mirror, Translate, Scale, Array, Cylindrical, and Spherical Remap). # Basics Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/basics ## What is Remap Field? In general, **Remap Field** allows you to warp geometry by supplying functions or fields to specify a replacement position for every point in the model and gives you a way to rescale existing fields to create new ones. Some common uses of the **Remap Field** are for mirroring, translating, scaling, arraying and the cylindrical and spherical remap which we will discuss in further detail in the future lessons. ![](https://files.learn.ntop.com/lessons/basics/321_2_1-1024x543.jpg) *** ## Examples Let's start with a simple 2D analogy: We have a number line \[0, 1, 2, 3]. If you multiply these numbers by 10, you get \[0, 10, 20, 30]. Basically, you are stretching out these values. This is what happens when we use **Remap Field**, but we do it in 3D space across XYZ. ## Example 1 Let's use the **Remap Field** block to magnify a sphere. * Add a **Sphere** block * Add a **Remap Field** block * Input the Sphere into the Field input * X: X\*10 (can also use a **Multiply** block) * Y: Y * Z: Z ![](https://files.learn.ntop.com/lessons/basics/321_2_2.gif) We stretch all the X values, but keep the same Y and Z values of the sphere. > [!NOTE] > > **Note**: Multiplication and division scale the model, while addition and subtraction translate the model. When you add and multiply field values in nTop, you're not directly modifying a shape; you're modifying the coordinate system used to represent that shape. One main difference between explicit and implicit modeling is that explicit geometry transforms actively (you move it where you want it), while implicits transform passively (you move the coordinate system, not the object). To apply a transformation to a shape, you have to apply the inverse transformation to its coordinate system. If your object is at the origin, and you move the origin to (-1, 0, 0), your object ends up at (1, 0, 0) relative to the updated coordinate system. *** ## Understanding Remapping through Equations If you want to plot a function in the form z = f(x, y), you can implicitize it by moving all the terms to one side. e.g. 0 = z – f(x, y) You want the expression opposite the zero to be negative where the part is solid. ## Example 2 The unit circle centered at the origin has the equation sqrt(x2 + y2) – r = 0 . We want to shift this circle by +1mm along the x-axis, so the new equation is sqrt((x-1)2 + y2) – 1mm = 0mm . ![](https://files.learn.ntop.com/lessons/basics/321_2_3.jpg) To move the circle +1mm in the x-direction, we replaced the x value by x-1, not by x+1. ![](https://files.learn.ntop.com/lessons/basics/321_2_4.jpg) The blue circle is the translated object. Example as shown using a primitive **Sphere** block. * Input a **Subtract** block into the X input * Operand A: x * Operand B: 1 ![](https://files.learn.ntop.com/lessons/basics/321_2_5.jpg) *** ## Example 3 We want to scale our unit circle by a factor of 3. The scaled-up circle has the equation sqrt((x/3)2 + (y/3)2) – 1mm = 0mm . ![](https://files.learn.ntop.com/lessons/basics/321_2_6.jpg) To scale the shape by a factor of 3, we scale its coordinates by a factor of 1/3. Example as shown using a primitive **Sphere** block. * Input a **Divide** block into the X input * Operand A: X * Operand B: 3 * Input a **Divide** block into the Y input * Operand A: Y * Operand B: 3 * Input a **Divide** block into the Z input * Operand A: Z * Operand B: 3 ![](https://files.learn.ntop.com/lessons/basics/321_2_7.jpg) # Before We Begin: Intermediate Field-Driven Design Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/before-we-begin-intermediate-field-driven-design [https://www.youtube.com/embed/pBdtsxgr2zY](https://www.youtube.com/embed/pBdtsxgr2zY) In this course, we will learn about … * Mirroring, Translating, Scaling, Array with Remapping * Using Equations and Fields to warp a design * Cylindrical and Spherical Remap * Boolean operations and how they work with fields # Cylindrical and Spherical Remap Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/cylindrical-and-spherical-remap This is a special case of a Remap. We can take a shape and redefine it so that we have it in a cylindrical or spherical system instead of rectangular coordinates. ![](https://files.learn.ntop.com/lessons/cylindrical-and-spherical-remap/321_7_1-1024x525.jpg) Let's start off with a cube. We will add a simple feature to it—in this example, a hole. ![](https://files.learn.ntop.com/lessons/cylindrical-and-spherical-remap/321_7_2-1.gif) *** ## Cylindrical Remap The **Cylindrical Remap** takes that bit of the geometry and it revolves it -180 to 180 degrees. You can see there is some empty space and some solid space that is revolved. The only values mapped are values along the: * positive x-axis * y-axis between -length/2 and +length/2. What that means is that in and x and z, it will infinitely capture everything. ![](https://files.learn.ntop.com/lessons/cylindrical-and-spherical-remap/321_7_3.gif) *** ## Spherical Remap The **Spherical Remap** operates in a similar way. However here, the only values that are mapped are values along the: * positive x-axis * y-axis between -length/2 and +length/2 * positive x-axis ![](https://files.learn.ntop.com/lessons/cylindrical-and-spherical-remap/321_7_4.gif) > [!NOTE] > > **Note**: If you prefer to learn more about this topic through a video, our [Follow Along: Intro to Remapping](https://learn.ntop.com/lessons/follow-along-intro-to-remapping/) lesson covers all the Intro to Remapping topics in video form (Mirror, Translate, Scale, Array, Cylindrical, and Spherical Remap). # Download: Intro to Remapping Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/download-intro-to-remapping Now that you have completed the follow-along, feel free to download the completed file with descriptions as a resource. **Example File:** [321\_9\_1.ntop](https://files.learn.ntop.com/Courses/321%20Intermediate%20Field%20Driven%20Design/nTop%20Files/321_9_1.ntop) *This file was last updated in nTop 4.6.2* Next, if you would like to test your knowledge on Remapping in nTop, feel free to try our optional Knowledge Check. # Download: Manipulating Fields Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/download-manipulating-fields Now that you have completed the follow along, feel free to download below the completed file with descriptions on manipulating fields using remapping. **Example File:** [321\_18\_1.ntop](https://files.learn.ntop.com/Courses/321%20Intermediate%20Field%20Driven%20Design/nTop%20Files/321_18_1.ntop) *This file was last updated in nTop 4.6.2* # Follow Along: Intro to Remapping Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/follow-along-intro-to-remapping [https://www.youtube.com/embed/vHMjbtOw8-Y](https://www.youtube.com/embed/vHMjbtOw8-Y) > **Transcript** > > In this lesson, we will start with our starter file that you can download below and implement some of the concepts discussed in our previous lessons on remapping. In our starter file, we have a box that we'll use to create a gyroid, and we have that here as well. We have a plane that we'll use as a reference, and then I also have when we're doing our cylindrical and spherical remap, we also have this box with a square hole in it. > > So, let's first start with that wall TPMS gyroid variable. We're beginning by just creating a mirror image of it. So I'll add a new section and label this mirror. And we're going to use our **Remap Field**. So I can search for that in the search bar or go to fields, and we'll use that **Remap Field**. So the object I want to mirror is that gyroid, so I'll drag and drop that variable. And I want to have that mirror along the Y, so the X and the Z will stay the same, and our Y will be what's different. So for our X, we'll keep that the same. Z, I'll keep the same. > > And to show the comparison between our two different fields, I'll also make our scalar field variable, which will just be our Y axis. So I'll add a **Scalar Field** variable into that input and I'll label this as Y, and I can just type in Y, and that will indicate the Y axis. So if I select this block and type F, let's add that contour interval. Let's do five millimeters and probe our values. These are all going to be positive going up the Y axis, negative going down. And to do the mirror, all we have to do is take that negative. So I'll do Y. negative Y and then I can take that negative. So by just clicking on that, I'm now going into those block details, and then I'll click out of it. And now we can see we have this mirror that just appeared, that **Remap Field**. And the reason for this is because instead of having all this positive, it's now negative, and the positive where we are placing our geometry, it's now below. So if I wanted to make this a variable, we'll drag and drop that just so we can see the difference. We can see it's just flipped. So that's how we can create that mirror using that Y axis. > > So that's how I created our mirror of our gyroid. The next thing that I'll do is translate. So I'll hide that section, add a new section, and I'll label this translate. And we'll go back to viewing that gyroid by typing I to isolate our view. I'll put my cursor under that translate section, and again, we're going to grab that **Remap Field**. Our geometry that will again change is that gyroid variable, and the Y and the Z will stay the same this time, but now we're going to just shift that over along the X. So remember that subtracting moves the body in the positive direction. So if I wanted to move this to the right by five, I would subtract. If I wanted to move to the left by five, I would add. So if I subtract the X by five, now what we can see is it's just been shifted over five. > > And actually, to see this better too, I can also go to my view and add my display grid. And we can see that this has just been shifted over to the right by five. And again, the reason that it's shifted, if we type F, we can see that on the X axis, is that our origin along that X axis has just been shifted over to the right by five. So we just subtract everything by five. That's how we get something like this. So this is another way that you can translate something. If I want to scale, let's add that next section, label that scale, and hide that translate, and again, still using that **Remap Field**. So I'll just add that, and we'll continue to use that gyroid. This time, I'm going to show two different types of warps. So we'll do a constant warp and a varying warp. We'll start with a constant. So we'll keep the X and the Y scale the same, and then for the Z, we're going to just multiply the Z axis by 0.5. So I'll add a **Multiply Block** and multiply this by 0.5. > > So now if we see this, this is twice the size. Similar to how when we were translating, we need to remember that subtracting by five actually moves us to the right five. If we're multiplying by 0.5, that's going to give us a part that's twice the size. And again, the reason for that is if we type F, let me change that plane from normal and let's do a contra interval of five again. So notice that we have our box along Z is going to be 30 mm. So when we're looking at that Z axis with that multiply by 0.5, we're multiplying all those values by 0.5, so it's going to really be 15 at that original max point. And for this one, we now have it twice the size, is where it's going to be 30 mm within our field. So that's how we're going to be able to create that constant warp. It's just scaled that by five. And if you look at the X and Y, without looking at that, see, it looks exactly the same. And really the only thing that's changing is that size of that. > > If I want to see some type of varied warp, especially in the cell size of this gyroid, what I can do is add a **Ramp** block with this. So I'll multiply my X, and this time I can have it change from 0.5 to 1 that I'm multiplying it by. So I'll add a **Ramp**. I'll use that original plane that we have, so that's our plane. I'll turn off that SP grid. We just see that, see our gyroid. And using this plane as our scalar field, that reference for where change is going to occur, I'm going to start seeing that change right at that plane. And I'm going to have this go to 100 mm, so all there that part. And we're going to begin with that larger value, or that larger scaling. So it's going to be twice the size starting off that cell size, and then it's going to go back to how it was originally, the geometric warp. So now we can see how that looks, and if I type F, I can make this 0.1. We can see that ramp is only going to affect. It starts 0.5 and then goes down to one, it goes back to one, to create our original cell size. And we have that twice the size, and we can see what that looks like on the different angles. So when we're not looking at that X of view, we're going to have that constant size change. We can see what that looks like along the Z to the X. So now we have twice the size of that box, but now we're just going to have that cell size change the gyroid. And you can see that also through here when we have the same height, the box, and we're just changing that cell size. So that's one way that we can scale using that constant warp, that constant scaling and the varied scaling using the **Ramp** block. And the last example I'll show with just using the **Remap Fields** is our array. > > Block, so let's add another section. Label this array. And again, we'll have **Remap Field** with our dry. So if I wanted to have multiple of these displayed for instance, what I can do is use our **Mod** block in addition to this. So the X axis I won't have any change. I'll have that, I'll have that array along the Y axis, and C will stay the same. And so I'll add a **Mod** block for our Y axis, and we're going to just have this repetition every 50 mm. So I'll do Y and then mod oper and B, it would be 50. So when we look at this, you can go back to that mirror where we have that Y and type F. Let's do contra interval of 10 and then compare this to our mod. So if I type F now, we can see I have no more of those negative values, and I'm only going to be going from 0 to 50, 0 to 50, and it's going to keep on repeating. So when I'm placing my geometry, I'm going to be placing it in each one of these, and this is just, you know, that one section of the field on this plane, on this size of 200, but it's going to be continuously changing. So if I try to visualize this, you can see I get this kind of interesting shape that's because it's continuous. We don't have any kind of finite stopping point. So I'm actually going to turn off that visibility, but what I can do is view this as a field. So if I type F now, we can see, let me move this over a little bit. We can see where our part is actually being placed in those negative fields. So anything that's that pink to dark blue. So each time it's going to be placed from that location that 0 to 30 mm, similar to how we originally had that in our original gyroid. So in order to visualize this and be able to use a nTop designs, we're going to set the **Field Bounding Box**. So I'll add that block by just searching for it. So we can set the **Body Bounding Box**, but we'll just set the **Field Bounding Box**. Add that to the right section. And what this will do is, I can say, okay, you know, this is infinite, but I'm just going to only view anything within this bounding box that we had. So I'll place this into the **Remap Field** for the bounding box. I'll type in bounding box. I can put that in. So you see that's pretty small, that's right there, and it does show whatever in that space. But I want to show a decent amount of these. So I'll start at the origin, so 0 0 for 0.1. And then for my 0.2, because this is going to be 100 mm along the X, I'll make this 100. I'll make the Y, let's do since we have this by 50, let's do a little bit under 50 so we don't have that additional one. So I'll do 199, and then the height or the along the Z, it's going to be 30 mm. > > So now we can see that I have selected four of those to visualize. Look at that bounding box. I could always change that. So if I wanted to make this only 150, you can see you just want to make sure that you don't have that at the edge. You're going to have a little bit of that shown. So you want to make sure you have some space in between if you're using this. But you can continue to, you know, play around with the height, how much you want to include, for instance. So that's how we would be able to array. > > And the last thing that I'll show is our cylindrical remap field and our. And the last thing I'll show is our **Remap Cylindrical Field** and our **Remap Spherical Field**. So I'll close that array, add our last section, and this will just be our cylindrical and spherical field. And instead of using our gyroid, I'll use this body for remap. So I'll type “I” to just view that and then “Z” to zoom in. > > And let's add that cylindrical and spherical remap into this section. So note that both of these are also our tool. Those custom blocks and we can see that has those double lines. So if you wanted to, you can always right click and **Export This Block** if you want to see how this works. Or for instance, with this cylindrical field, it happens along one axis. So if you wanted to change that axis, you could go into that custom block, change that. Same thing with that spherical field. But for our **Remap Cylindrical Field**, I'll keep these both as is for this example. And the field we want to use is this body for remap. And then we have this Y mapping length. So you can also click learn more and you can go to our documentation to see some more of this as well and review those lessons that we have. But this is going to be where we are actually going to remap. So you're going to determine that size, that length that we want along that Y axis to wrap around. And for this example, I'll use .25 mm. And I'll right click and make this a variable since we'll use the same values for our spherical field remap. > > So if we look at this, I get this new change. And to better visualize what's really going on, I'm just going to make a region to show where that Y mapping length is really occurring. So if I add a box to this section, the length and tenna is fine. And for the width, that's going to be our Y mapping length. So if we have this base in the origin, it's going to take, you know, that region that we had that .25 in between that and use that for remapping. And if we want to see what that region looks like on our original body for remap, I'm just going to do a Boolean intersect of this box and that body for remap. And I'll change the color. Let's make that red, for instance. > > So what we can see is we have this, and it's just going to take this. I'll put back that view of our display grid so we can see where that origin is. And using that cylindrical field, it's just going to start that origin using this mapping length and it's going to rotate this around. So we can see that there around that Z axis. So that's why while we have that box with square holes, we're going to have this shape where we have that hole going all the way around in that cylindrical wrap. So if you're using something like our gyroid field, you want to have that cylindrical design. If you're thinking about some of our lattices, that **Cylindrical Cell Map**, **Spherical Cell Map**, or our **TPMS Cylindrical** or **Spherical**, it uses a lot of these concepts. So being able to kind of take that origin and then just rotate this around, that's why we have only that one section that we're working with. So I'll right click, make this a variable, label this our revolved. > > And I'm using the **Remap Cylindrical Field**. You could also use, if you look up remap, you can also use a **Remap Cylindrical Body**. So if I hold control and just move both of these inputs over, we're going to get the same exact result. So one just has that input of a field, output of a field. So one just has that output of a field, the other one is a body. > > And then we can also get that field out or that body out by going into those properties. So if we had that **Remap Cylindrical Body**, it would have that field in the inputs. The body is one of those inputs for our scaler. And for our spherical field, let's see what that looks like. Our **Remap Spherical Field**. > > And if we wanted to do the **Remap Spherical Field**, let's see what that looks like. So I'll put in our body for remap, and we'll use the same Y mapping length for the Y, and that C option, turn off that cylindrical field. And what we look and see is just something that looks like a sphere. But if we do a section cut by typing X, we can see that it has that same kind of cut that we had in our **Remap Cylindrical Field**. So we're just going to have that spherical remap. We're taking in that region and just going to rotate that around to get something like this. So this is just an example of that implicit body in doing this remap. So a lot of times, we'll see this use case, and we'll talk about this later in some of our other applications. But especially if you're doing something like that **TPMS Spherical**, this uses that same type of concept. This video walks through the examples from the previous text lessons in the *Intro to Remapping* section on how to use Remapping to mirror, translate, scale and array an implicit body. Please download the nTop file below to follow along with the tutorial. For a faster or slower video speed, click on the settings in the bottom right of the video. **Example File:** [321\_8\_1.ntop](https://files.learn.ntop.com/Courses/321%20Intermediate%20Field%20Driven%20Design/nTop%20Files/321_8_1.ntop) *This file was last updated in nTop 4.6.2* # Follow Along: Manipulating Fields Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/follow-along-manipulating-fields [https://www.youtube.com/embed/seAwcrNnvYs](https://www.youtube.com/embed/seAwcrNnvYs) > **Transcript** > > In this lesson, we will begin with that starter file, manipulating fields that you can download below, which will have our different sections empty except for our geometry section. And we'll use these blocks to show the different ways we can manipulate our fields and our geometry, and this is the same concepts that we discussed in the lessons as well. > > I'll begin with talking about that **Remap Field** versus **Remap Body**, so you can add your cursor there and we'll add both of those blocks in. So I have a **Remap Scale Body** that I'll compare with our **Remap Scale Fields**. And similar to in our last follow along, we discussed our **Remap Cylindrical Fields**. We also have that **Cylindrical Body**, the **Spheric Body**, and **Remap Spherical Field**. So with all of these, there are pretty similar results that we can see visually. > > So I'll use this **Glider Implicit Body** as that example. So I'll place that into both of these. For our X scale, I'll do three, I'll do two for our Y scale, and five for our Z scale. And I'll do the same for both of these. So know that these are both custom blocks or toolkits already built into that software. So when we were using our scaling before in that example, we had to multiply X, Y, or Z, or divide by that certain value we wanted to scale. And if we were doing X multiplied by 0.5, then that would give us something twice the size. > > With these custom blocks, we just put in the, we just put in a scalar value, no units, and this is going to scale in the way that we expect. So this will be three times the size on the X, two in the Y, and five in the Z. And let me change this color, although you can't really see it anyway, but we'll use that for other options. We can see that this is a scaled version. So just note, if you're using these custom blocks, these toolkits, that that will act as kind of expect to be three times that size. > > Now, if we look at our **Remap Scale Body** and then I'll go into my block details and change the color of my **Remap Scale Field** and turn that on, we can see that they give us that same visual result. So this is going to give us very similar, like I said before, one is a scaler, one is an implicit, but the key difference with this is the scalar field that we see inside of it. So if I type F and I will turn off my visibility for those and add a contra interval of let's do um 10, let's do 50, so we can see that I see everything inside is those negative values, everything outside is those positive values. We have 50, 100, and so forth. > > If I type F to then see that **Remap Scale Field** other option, we can see that the values have changed slightly. So while the inside and the outside are negative inside, outside positive, just that rate of change within that field is going to be a little bit different if you use that **Remap Scale Field**. So the reason for this is just because if you go inside this **Remap Scale Body** and what you can do is right click **Export** that block and I have an example of that that I just saved. > > What you can see is as long as, as well as doing that multiply divide, as we had talked about in the last video, we also have the scale factor. So if you're opening up that **Remap Cylindrical Body** or that **Remap Spherical Body**, you'll see a different way of getting that scale factor. But either way, we'll have that scale factor and that's just going to bring it back to the scale of that field that we need. So the reason you might want to do this is, you know, if you're using this as your reference for ramp or something along those lines, you're going to want to have it smoother transition. So while your implicit body shape will be the same, just that scalar field under the hood in that field viewer will be slightly different rate of change. And with either one of these, we can always go into that property, take out that body as well or take that **Impulsive Body** and take out that **Scale Fields**. > > The next thing we'll talk about is orienting and reorienting our bodies. In this example, I'll use our cone. I'll type I to isolate that and then type Z to zoom in. > > What I'm going to do is use our **Orient Object** as well as our remap field. So, I'll put my cursor right in there, and I'm going to use our **Orient Object** block first. While I'm looking at this and it looks kind of straight on the origin, if we actually go to our view and look at our display grid, we can see that this is actually at that angle here. What I'm going to do is make a mirror of this on the other side, as well as keep this original side. So we'll have kind of a cone going out, just like we have in that lesson, if you want to take a look at that GIF as well. > > For our **Object Object** that we want to orient, I'll use our cone. If you're unfamiliar with our **Orient Object**, you can learn more about this in our Ribbing and Texturing course, or in our Slicing and Print Layout course. So our object of the cone, and then we have our source plane, what we're originally starting with, and our destination plane. So I'll make both of these variables. > > I'll put in a **Plane from Normal** for this. If we open up our cone, we can see what that looks like. And just to have it kind of flush on that bottom face, I'm just going to do that normal of 011. And for our origin, there's a couple of things we can decide. So you could decide to go into the cone block details, take that centroid from the bounding box like so. But if we use this as our orientation and I'll start with this, we're going to see that we will not eventually have anything below this plane. So let's start with that where I have a **Plane from Normal** for my destination, and my destination will be right at that origin. > > Now the reason that I'm changing this is because whether we're mirroring or something along those lines in this remap, it's going to use the X, Y, and Z axis. So we could change that kind of plane doing some other manipulation of what that starting field is. But this is another way that we can go about it is just place that cone in the origin so that it can be quick and easy to manipulate. So I'll right-click, make this a variable, and label this **Cone at Origin**. > > Then I'm going to remap this. So I'll do **Remap Field** where this is the object I'm going to remap, and I'm going to create that mirror and keep that opposite side as well. So I can go, I'll keep the X the same, the Y the same. Instead of taking the negative of the Z, I'm actually going to take the absolute value of the Z so we can see something a little bit different. > > So if we're looking at the absolute value, I'll put in the **Plane from Normal** when typing F to the field to be 010 and contour interval of 50 or 105. Now everything that we see is positive, so anywhere that was below that **Plane from Normal** below origin, we're going to not have. So if you look at this **Remap Field**, it's going to create a double basically. So one as it is with that bottom part removed, and then one at that underneath that and mirroring of that. > > So if you didn't want this, you could just take that negative C and you would just have this flipped. If we want to have this right so that we have the entire cone included instead of using that centroid, I'm going to take this 0.1 that was used to create that cone, which is just that, let me close that field viewer, just that point here. I'm going to replace that origin of our source plane with 0.1 so now it's going to be that same size, not going to lose any of that. So this is my cone remap. Make this a variable, that cone remap. > > And then the last thing that I'll do is **Orient Object** and bring this back to its original spot. So before with our **Orient Object**, we did our source as our source, destination as a destination. But now to bring it back to where we were, we'll just do the opposite. So for source, we'll put that as the destination, and our destination will be source. So that might be a little bit confusing with those names, so feel free to also change them. In our completed file, I have this as our start plane, and this is our plane at origin. And now if we look at it and I'll turn on that cone, we can see that we have that bottom and that top as well. So that's another way that we can manipulate and change, have that mirror or have the absolute value of both. > > The other thing to note is you could also, instead of using that scalar field option, you could go in and take the body and replace that, and it gives us that same result. So not a difference when it comes to that. > > Next, we'll talk about sectioning and extruding, and I'll use that glider again as an example, and I'll turn off my display grid. So this is again, another way that we can use that **Remap Field**. I'll type in **Remap Field**, make sure that's in our section, next **Extrude** section. And what I'm going to do is manipulate this plane and just get kind of a profile of it and extrude that. So for my glider, that would be my scalar field. I want to change, I want to take that profile in the Z, so X and Y will remain the same. And I'm also just going to take a **Plane from Normal** for this, so we can visualize what we are taking that section cut of an extrusion. So we can see that's right at that center of our part, and I will just go into the properties of our **Plane from Normal** in the origin and select that C. > > So by putting in a scalar value, this is going to give us this constant field. So I get kind of a, not the exact result that I'm looking for. I'll turn that off because we haven't bounded, we haven't confined that field. So if I type F, I'll change, I'll turn off this glider and I'll change that size to 2,000. And what we can see if I move this up, is we now just have that same profile throughout our part. So what I can do with this is now do a Boolean intersect, or I could do that **Set Bounding Box** is what you had done in the last follow along, where I'm going to put that **Remap Field**, and I'm just going to set the bounds to be the bounds of our glider. So I can go back into that block details for the glider and choose the bounding box, and or sorry, inside that bounding box, I'll choose that implicit box version. > > So now we can see I have that section and extrusion of that center of my part throughout my entire rounding box, and we can change what this profile looks like by just changing that location of the **Plane from Normal**. So now we have this cutting through this specific part of the glider, and we can see that is what we are extruding. So another way that we can use that **Remap Field**. I'll also talk about facially varying the shifting and stretching. So going a little bit more advanced from our last video, if you wanted to not only, if you didn't want to just scale a constant, you wanted to scale multiple ways, we can use a ramp for that. So I'm going to put in a **Remap Field** in this example. I'll use that glider again, or we can use a, maybe we'll use this **Box From Hole**, and in this example, I use that **Box From Hole** and to create that variable stretch, I'll use this as my scalar field. And if I wanted to have that scaling in the X and the Y and remain constant in the Z, then I'll have a divide for my X scale, divide my Y, and Z will remain the same. So we're going to divide X by something, Y by something, and what we'll divide is a ramp. So we'll add a **Ramp** block in here, and I'll just use a **Plane From Normal** to show this. > > And I'm going to look at the field viewer, change the **Plane From Normal** to be 0 1 0, so I can see what that looks like as you go up my part with a contour interval of 10. So maybe what I want to have is a change in that size from throughout the entire part. So from 0 millimeters right at that plane to 30 millimeters at the end of that part, and I'm going to scale it from five to one with geometric continuity. I'll make this a variable and label this stretch ramp, and I'll use this for the X and the Y. So now if I view this, you can see that was a lot, but what I can do is change that a little bit. Let's try two, so we have something a bit better to view, and we're going to get that scaling. So, in the example in our lesson, we use a diamond TPMS. This example, I'm just using that **Box Hole**, and something to note is that we are getting that feeling, but we're only going to have that as we can see, kind of going out of our part. So this is a good thing to note as well. So if I look at it from that 0 1 0 again, that contour interval of five, what we can note is that because we have that in that negative, and our part was only that positive, we're not going to have that change. It's still going to stay exactly the same right at that center. So we can see some more of a change if we change that location for our box. > > So if I'm changing this like so, we can see what that would look like. We'll also do a shifting, so we can variably shift this as well, also using ramps. So for instance, I'll add another **Remap Field**, and I'll make this original **Remap Field** a variable. So I'll right-click, make that a variable, and I'll just label this variably stretched, and this one will be variably shifted. So this time, instead of multiplying or dividing, I can scale this. So I'll do that **Box of Holes** again, and now I'm going to choose, I'll subtract this time with the X and the Y. So I'll do X, Y, and I'll keep that Z the same again, and I'll add another ramp. So this ramp, we'll use another, the same **Plane From Normal** we could do from before. So I'll drag and drop that one, holding control, so that I have that repeat, or I could make that **Plane From Normal** a variable as well. Again, we'll have that 0 millimeters to 30, so that change of location will be going. I'll turn off that stretch ramp now and bring this back to .1 to 0. So let's turn out that variable stretch ramp, so we just look at that **Box of Holes** and our outman, we're going to just shift this over two, and this time I'm going to have this as 0 millimeters to 2 millimeters. So with our last ramp, we had this as unitless because we're just scaling that by two, scaling it by one. But this time we're shifting by two, so that's why we're going to have that change. > > Take this geometry and I'll turn off that ability. Actually, to see a bigger change, let's make this 15. So now I'll have that X subtracted by that **Shift Ramp** and same with that Y. So now what we can see is that our starting face looks exactly the same, but now it's just going to be shifted over like so. So another way that we can use those ramps, use those **Remapping Fields** options. > > So I'll close that, and we can also warp by **Shape Fields** as well too. To show this example, I will close that geometry section. We'll use new geometry, and if I go to my create tab, I'll just grab a box, a cube, and a sphere to show this. And I'll make these all variables by doing that right-click, **Make Variable**, and I'll just label this **Sphere**, **Cube**, **Box**. And our box is going to be the geometry that we'll remap, and we'll remap that box using that **Cube** and that **Sphere** as a reference. > > So for the length, I'll just make this one. Width is one, and I'll type I so I only see that box and type Z so that I have zoomed in. So again, we'll use that **Remap Field**, place that in here, and our box will change. And I'll keep the Y and the Z the same, but this time instead of adding by a scalar value, I'll add by that shape. So I'm going to add. I'll do X, and I'll add whatever shape I choose. So in this example, I'll use the **Sphere**, and I don't see anything appearing right away. So I turn off that visibility, and instead type F, I'll change this plane from normal to be 0 1 0. We can see something like this. > > So what's happening is that when we had this X Y and Z as our reference for creating this box by adding by the X that's here, if we type F and have that contrast interval of one, for instance, this is the zero, and that's where that X was placed like that, right in that center of that box. That's where that X-axis is. So we're going to see that it's rotated like so when we have that occur, and the locations that it'll start and end will be different as well. > > So in order to visualize this, I'll do that **Set Field Bounding Box**, and I could also use that **B Intersect** as well. And I bounds, I'll just put in our bounding box, and we can change that as well too, so that we'll see exactly that. So now if I look at this and I look at my **Sphere**, we can see how it is changed and is kind of going through that to see how that changes. We can put that in too, and we're going to add the **Cube** to here. So if I type F, we can see one, and we can see it's not going to be right at that exact location. And the reason for that is just because, you know, we're adding this to that X. So we're going to now get something like this that is shaped by adding to that **Cube**. > > And the last thing I'll talk about is just creating bodies from fields. So I'll put my cursor there. I can type I, so I don't see anything. And this is where we would use something like the fields. We can see that geometric, we can see the periodic field options such as that **Gyroid Field**, **Diamond Field**. And we can use these fields that are infinite based on those equations that create that **Gyroid Field**, for instance, and create something like TPMS structures. So I'll start with that **Gyroid Field**, and I'll put in a cell size of 15 and make this a variable labeled **Gyroid Field**. > > So I'll type F to visualize this, and this is just infinite. So this is our **Gyroid Field**, but it's going to be going on forever. We have that negative and that positive, and something else to note is if I probe my values, this is also unit, and is going from 1 to positive 1. So in order to create a geometry out of this, we can do a **Boolean Intersect** of the area that we want, but we're going to have to add millimeters to this. So I'm going to multiply and put in my **Gyroid Field**. > > So before we had talked about that difference between our **Remap Cylindrical Body** and **Remap Scale Body** with the field versions, and just that scale factor is what changes it. So with this one also, we're going to add that scale factor. So in this one, we'll just make this 1 mm for now, just so we can see that if I type F, now I'm going to have something that is in millimeters, so I can use this to create a geometry on this. So I'll right-click, make this a variable as well, and I'll just say **Gyroid Field With Units**. > > So to view this as you would our TPMS structure, I can do a **Boolean Intersect** of our **Gyroid Field With Units** as well as our, we can do our **Box With Hole** again. So now wherever we had that negative field within our geometry, we're going to have that in the space that is our for the body. And another thing that we can do is we wanted to get that opposite region, for instance, if you're doing something like heat exchanges, this type of concept of using those fields can be really helpful to get the one fluid region in the other. If we go to that **Gyroid Field With Units** and we just do instead dot negative and cancel out of that, we're going to have that opposite region. So if I type F, we can now see anywhere that we have had that positive field, we're going to now have that geometry. And so just by switching that negative and the positive, we can get something like that. So here are some examples for manipulating fields. This video walks through the examples in the previous text lessons in our Manipulating Fields section on how to use remapping to manipulate implicit bodies and fields. Please download the nTop File below to follow along with the tutorial. For a faster or slower video speed, click on the settings in the bottom right of the video. **Example File:** [321\_17\_1.ntop](https://files.learn.ntop.com/Courses/321%20Intermediate%20Field%20Driven%20Design/nTop%20Files/321_17_1.ntop) *This file was last updated in nTop 4.6.2* # Knowledge Check: Intro to Remapping Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/knowledge-check-intro-to-remapping # Knowledge Check: Manipulating Fields Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/knowledge-check-manipulating-fields # Mirror Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/mirror Take the negative field to mirror the body across the y-axis. ![](https://files.learn.ntop.com/lessons/mirror/sFOfxdoKHZACRI1l_myMML17la18LFVMF.gif) > [!NOTE] > > **Note**: If you prefer to learn more about this topic through a video, our [Follow Along: Intro to Remapping](https://learn.ntop.com/lessons/follow-along-intro-to-remapping/) lesson covers all the Intro to Remapping topics in video form (Mirror, Translate, Scale, Array, Cylindrical, and Spherical Remap). # Optional Advanced Test Problem: Woven Patterns Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/optional-advanced-test-problem-woven-patterns Now that you have learned how about remapping in nTop, feel free to try this optional problem with a review of the answer in the following lesson. **Problem Statement:** Apply remapping fields and Boolean operations to create a planar, cylindrical, and spherical woven pattern using the starting inputs in the Weaving with Fields Starter file below. To help with this creation, the starter file includes the equations needed for creating the wavy patterns of the columns with some descriptions. > [!NOTE] > > **Note**: In order to create the woven pattern, you will need two sets of columns and rows. ![](https://files.learn.ntop.com/lessons/optional-advanced-test-problem-woven-patterns/321_20_1-1024x325.jpg) **Not sure where to start?** If you would like to instead follow along with a video that walks through this process from scratch, you can watch our [Intermediate Field Driven Design Training Video](https://learn.ntopology.com/recorded-training-intermediate-field-driven-design/974357) starting \~50minutes in. We recommend this process to get you started on the problem: ![](https://files.learn.ntop.com/lessons/optional-advanced-test-problem-woven-patterns/321_20_2-1024x517.jpg) **Estimated Time to Complete:** 50 minutes **Example File:** [321\_20\_1.ntop](https://files.learn.ntop.com/Courses/321%20Intermediate%20Field%20Driven%20Design/nTop%20Files/321_20_1.ntop) *This file was last updated in nTop 3.37.3* # Orienting and Reorienting Bodies Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/orienting-and-reorienting-bodies Let's say we have some shape out in space, such as this cone: ![](https://files.learn.ntop.com/lessons/orienting-and-reorienting-bodies/321_12_1.jpg) We will generate a *Start Plane* using **Plane from Normal**, which is defined from the centroid of this cone. We will also define the normal vector to capture the normal direction of the cone, in this case \[0, 1, 1], and set an origin at the global origin to generate *Plane at Origin*. You can orient the cone to the origin using an **Orient Object** block like so: ![](https://files.learn.ntop.com/lessons/orienting-and-reorienting-bodies/321_12_2.gif) Now that the cone is oriented to the global origin, we can perform whatever remapping operations we would like. In this example, we will mirror. We will make the z axis the absolute value of z. This means the cone will flip across the *Plane at Origin*. The **Remap Field** block takes the value of the SDF in the positive z domain and remaps, so that the same positive value is true in the negative domain of *Plane at Origin*. Now, after remapping, the cone geometry exists in both the positive and negative domain of the *Plane at Origin*. ![](https://files.learn.ntop.com/lessons/orienting-and-reorienting-bodies/321_12_3.gif) Now, we can move the mirrored cone back into its original position, once again using the **Orient Object** block and defining the source as *Plane at Origin* and our destination as *Start Plane*. ![](https://files.learn.ntop.com/lessons/orienting-and-reorienting-bodies/321_12_4.gif) Note we could have also performed this **Orient Object** operation on the implicit body of the remapped cone rather than just its scalar field. ![](https://files.learn.ntop.com/lessons/orienting-and-reorienting-bodies/321_12_5.gif) # Overview Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/overview This course will walk you through some intermediate concepts of field-driven design in nTop. You will learn how to remap and create bodies from fields. After completing this course, you will have developed an understanding of how to use equations and fields to warp a design and applied this concept for creating a woven pattern. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview) [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What Will Be Covered:** * Mirroring, Translating, Scaling, Array with Remapping * Using Equations and Fields to warp a part * Cylindrical and Spherical Remap * Boolean operations and how they work with fields * Applications > **[Before We Begin](/lessons/intermediate-field-driven-design/before-we-begin-intermediate-field-driven-design)** ### Intro to Remapping > **[Basics](/lessons/intermediate-field-driven-design/basics)** > **[Mirror](/lessons/intermediate-field-driven-design/mirror)** > **[Translate](/lessons/intermediate-field-driven-design/translate)** > **[Scale](/lessons/intermediate-field-driven-design/scale)** > **[Array](/lessons/intermediate-field-driven-design/array)** > **[Cylindrical and Spherical Remap](/lessons/intermediate-field-driven-design/cylindrical-and-spherical-remap)** > **[Follow Along: Intro to Remapping](/lessons/intermediate-field-driven-design/follow-along-intro-to-remapping)** > **[Download: Intro to Remapping](/lessons/intermediate-field-driven-design/download-intro-to-remapping)** > **[Knowledge Check: Intro to Remapping](/lessons/intermediate-field-driven-design/knowledge-check-intro-to-remapping)** ### Manipulating Fields Using Remapping > **[Remap Fields vs. Remap Body](/lessons/intermediate-field-driven-design/remap-fields-vs-remap-body)** > **[Orienting and Reorienting Bodies](/lessons/intermediate-field-driven-design/orienting-and-reorienting-bodies)** > **[Section and Extrude](/lessons/intermediate-field-driven-design/section-and-extrude)** > **[Spatially-Varying Stretching and Shifting with Ramps](/lessons/intermediate-field-driven-design/spatially-varying-stretching-and-shifting-with-ramps)** > **[Warping by Shape Fields](/lessons/intermediate-field-driven-design/warping-by-shape-fields)** ### Creating Bodies From Fields > **[TPMS Structures](/lessons/intermediate-field-driven-design/tpms-structures)** ### Optional Advanced Test Problem > **[Optional Advanced Test Problem: Woven Patterns](/lessons/intermediate-field-driven-design/optional-advanced-test-problem-woven-patterns)** > **[Answer to Intermediate Field Driven Design](/lessons/intermediate-field-driven-design/answer-to-intermediate-field-driven-design)** ### What's Next > **[Resources](/lessons/intermediate-field-driven-design/resources)** # Remap Fields vs. Remap Body Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/remap-fields-vs-remap-body To understand the difference between remapping a field and remapping a body, let's look at a gyroid-latticed cube and look at how the **Remap Scale Body** block differs from the **Remap Scale Field** block. ![](https://files.learn.ntop.com/lessons/remap-fields-vs-remap-body/321_11_1.gif) Now that you are familiar with scaling, you can see how the gyroid cube is 3 times longer in x, 2 times longer in y, and the same scale in z. ![](https://files.learn.ntop.com/lessons/remap-fields-vs-remap-body/321_11_2.gif) Note how the **Remap Scale Body** and the **Remap Scale Field** outputs look identical. To go under the hood and better understand the difference, let's hit 'F' to open the Field Viewer for each block. Set the 'Contour interval' to 1. Notice how the gyroid walls are defined clearly in the **Remap Scale Body** output. Signed Distance Fields (SDFs), which are used in implicit bodies (like the Remap Scale Body block in green) and reference geometries (like points) capture how far away you are from the surface. Hit 'Probe values' and hover over the part. At the surface, the SDF returns 0; inside the body, the SDF is negative; and outside the body, the SDF is positive. ![](https://files.learn.ntop.com/lessons/remap-fields-vs-remap-body/321_11_3-1024x240.jpg) However, when you use a **Remap Scale Field**, you are not necessarily sure if the distance field is preserved (i.e. where the zero represents the walls), and the output implicit body looks defeatured in comparison. This highlights how SDF is not preserved here. ![](https://files.learn.ntop.com/lessons/remap-fields-vs-remap-body/321_11_4-1024x240.jpg) This difference occurs because the toolkit blocks for the **Remap Scale Body**, **Remap Cylindrical Body**, and **Remap Spherical Body**, all include a scaling step to return the rate of change to the original values. The scaling process looks different for each of these blocks, but each contains that scale factor that will rescale the field to show the correct SDF, as shown below. ![](https://files.learn.ntop.com/lessons/remap-fields-vs-remap-body/321_11_5.jpg) > [!NOTE] > > **Note**: To view this toolkit block, right-click and Open or Export the block as described in our [230: Intro to Automation](/courses/230-intro-to-automation/) course. # Resources Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/resources ### **Additional Resources on Intermediate Fields:** 1. **Training Example:** [Intermediate Field Driven Design](https://learn.ntop.com/courses/recorded-training-intermediate-field-driven-design/) (\~1hr 30min) 2. **Article:**[Field-Driven Design White Paper](https://drive.google.com/file/d/14myrSnvow8SPE46xw0s_5AzkTq0pdft0/view) 3. **Article:**[Warping a Lattice with Sine Wave Spacing](https://support.ntopology.com/hc/en-us/articles/1500002409602-How-to-warp-a-lattice-with-sine-wave-spacing) 4. **Video Tutorial:** [Remapping to Design Lattice Structures Pt. 1](https://ntopology.com/videos/video/how-to-design-and-spatially-control-lattice-structures-gyroids-pt-1/) (\~11min) 5. **Video Tutorial:** [Remapping to Design Lattice Structures Pt. 2](https://ntopology.com/videos/video/how-to-design-control-lattice-structures-gyroids-pt-2/) (\~9min) # Scale Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/scale Multiply or divide a value from the x field/axis to scale the object along the axis. Create a varying warp by using the **Ramp** function. ![](https://files.learn.ntop.com/lessons/scale/321_5_Scale.gif) > [!NOTE] > > **Note**: If you prefer to learn more about this topic through a video, our [Follow Along: Intro to Remapping](https://learn.ntop.com/lessons/follow-along-intro-to-remapping/) lesson covers all the Intro to Remapping topics in video form (Mirror, Translate, Scale, Array, Cylindrical, and Spherical Remap). # Section and Extrude Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/section-and-extrude Let's say we have a CAD object, and we want to section it and extrude it. This is a typical CAD operation, but can be a little outside the box when it comes to nTop. However, all we have to do is to use the **Remap Field** block and set the extrusion direction to 0. In this case, we set z to 0. We can visualize the resulting field by pressing 'F'. Now, if we perform a **Boolean Intersect** between this field and the implicit box of the bounding box of our original implicit part, we generate at an extrusion of a section cut of this part. ![](https://files.learn.ntop.com/lessons/section-and-extrude/321_13_1.gif) Next, let's say we want to extrude this at a particular location. Here, we can use the **Plane from Normal** block to define the origin and the normal vector of a plane where we want to section cut the part. From here, we extract the property '*Section Plane.frame.origin.z'* and use it in the **Remap Field** block as the input for z. Now, we can move the plane around and see how the section field location, and hence the extrusion location, changes. ![](https://files.learn.ntop.com/lessons/section-and-extrude/321_13_2.gif) # Spatially-Varying Stretching and Shifting with Ramps Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/spatially-varying-stretching-and-shifting-with-ramps Now, let's return to stretching and shifting by multiplying the axes by factors. However, we will now perform these operations in a spatially varying manner. Let's look at a diamond TPMS geometry: ![](https://files.learn.ntop.com/lessons/spatially-varying-stretching-and-shifting-using-ramps/321_14_1.jpg) ## Variably Stretching Using a **Plane from Normal**, let's ramp from 0mm to 10mm and create a field that goes from 2 to 1. View the resulting field by pressing 'F'. ![](https://files.learn.ntop.com/lessons/spatially-varying-stretching-and-shifting-using-ramps/321_14_2.gif) Now, let's multiply the x-axis by this resulting field. ![](https://files.learn.ntop.com/lessons/spatially-varying-stretching-and-shifting-using-ramps/321_14_3.jpg) This remap is going to stretch/pull out/extend this geometry in the x-axis. ![](https://files.learn.ntop.com/lessons/spatially-varying-stretching-and-shifting-using-ramps/321_14_4.gif) You can also play around with the spreading factors to see how they affect the output. We can do a similar stretch field in the y-axis, and it will result in a 3D pyramid structure like this: ![](https://files.learn.ntop.com/lessons/spatially-varying-stretching-and-shifting-using-ramps/321_14_5.gif) *** ## Variably Shifting Similar to *stretching* using the **Divide** block, you can *shift* using the **Add** or **Subtract** blocks in a spatially varying way. Here, we shift on both the x-axis and y-axis at once. ![](https://files.learn.ntop.com/lessons/spatially-varying-stretching-and-shifting-using-ramps/321_14_6.gif) # TPMS Structures Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/tpms-structures In this example, we will talk specifically about TMPS fields and how we can create structures from them. This could be helpful in heat exchanger applications. All of our TPMS structures are generated by functions of sine and cosine equations. Below is an example of a gyroid. ![](https://files.learn.ntop.com/lessons/tpms-structures/321_16_1-1024x486.jpg) sin(x) cos(y) + sin(y) cos(z) + sin(z) cos(x) TPMS Fields in nTop (like the **Gyroid Field**) are unitless, so to create parts from them, we must **Multiply** by units. Furthermore, these fields extend infinitely in 3D space. We can use **Set Field Bounding Box** or **Boolean Intersect** to create a defined implicit body. For this example, let's look at this box and cylinder and create a *Box with Hole.* ![](https://files.learn.ntop.com/lessons/tpms-structures/321_16_2.gif) Now, let's create a **Gyroid Field** and look at how we can take this field and convert it into an implicit body with this TPMS structure. ![](https://files.learn.ntop.com/lessons/tpms-structures/321_16_3.jpg) If we want to implement this into our part, we have to first give it units by multiplying by 1mm. Then, we can use a **Boolean Intersect** to ensure the implicit body is bounded. ![](https://files.learn.ntop.com/lessons/tpms-structures/321_16_4.gif) Wherever the fields are negative, we will retain material, and wherever positive, we will have open space. ![](https://files.learn.ntop.com/lessons/tpms-structures/321_16_5.gif) If, instead, we want to create an implicit body with the region of the TPMS that is positive, we would use a **Boolean Subtract** block. ![](https://files.learn.ntop.com/lessons/tpms-structures/321_16_6.gif) # Translate Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/translate Add or subtract a value from the x field/axis to shift the object along the x-axis. ![](https://files.learn.ntop.com/lessons/translate/aloikR99Di46U4kC_0ZXDks9i2f8LzMVW.gif) > [!NOTE] > > **Note**: If you prefer to learn more about this topic through a video, our [Follow Along: Intro to Remapping](https://learn.ntop.com/lessons/follow-along-intro-to-remapping/) lesson covers all the Intro to Remapping topics in video form (Mirror, Translate, Scale, Array, Cylindrical, and Spherical Remap). # Warping by Shape Fields Source: https://docs.ntop.com/lessons/intermediate-field-driven-design/warping-by-shape-fields If we take a long, skinny box and take the **Remap Field** box and do an **Add**, which is a shifting operation, we are going to add a shape to this on the x-axis. ![](https://files.learn.ntop.com/lessons/warping-by-shape-fields/321_15_1-1.png) It's best to think about this as taking your initial x-axis and taking your distance field i.e. your field from the “Shape”, in this case the Sphere, and think about adding the x-axis with these numbers. You might run into unbounded infinite shapes, and that's why we use **Set Field Bounding Box**, to set a finite shape. ![](https://files.learn.ntop.com/lessons/warping-by-shape-fields/321_15_2.gif) Now we can try different shapes such as a Cone or Cube and see how the results differ in this **Remap Field** operation: ![](https://files.learn.ntop.com/lessons/warping-by-shape-fields/321_15_3.gif) # Answer to Advanced Automation Problem Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/answer-to-advanced-automation-problem [https://www.youtube.com/embed/H38OtuL3CG4](https://www.youtube.com/embed/H38OtuL3CG4) > **Transcript** > > In this lesson, we will walk through the optional automation challenge problem, which was to create a custom block that keeps or removes implicits that are within a region or partially within that region. The first thing I'll show is just it working. We were asked to use that custom block line of spheres in the previous optional test problem and use that as our list of what to keep and remove. > > So for my custom block, I've imported both of these into my notebook and I have my implicits as that list. I have that custom block of spheres. I chose a **Box From Corners** where I can just drag and move this into different sections. Anything that is at least partially inside the body will be selected. And if I uncheck that and select this, we'll see the items that are not at all within that body are selected. So this is just an example of a similar process that some of our other filtering options might use. > > This is the custom block that **Keep Remove Implicits in Region**, and I've added some inputs already just to help us see what's going on in the actual file. But we have the three inputs: the implicits, the region, and inside body. And if this was my custom block that I'm inputting, I would just remove that sphere list or that **Box From Corners**. But to show how this works, I have two spheres in here and then I have my region to keep. So if I'm only going to keep anything that is in the box or partially in the box, it is going to be this one sphere. So I can visually see what I'm going to want to do. And I have this checked as inside the body, so anything that's partially with inside the body is going to be selected. > > And there are many ways to do the same thing or similar process in nTop, so this is one way that you could have gone about this problem. So I'll show that in our first step is that list manipulation section, and you can download this in the files below. So first I used this custom block **List Process Boolean**, and you can see I have two custom blocks that I used in this notebook that you could have downloaded and also used, which is our **Ifs** block and our **List Process**. So this will just allow me to run through my Boolean operations to each of these spheres. So I'll take my primary body, which is the region, and do a Boolean intersect of the first sphere and then the second sphere. > > And if I go into the properties, I see I have two intersecting bodies now: one using the first sphere, one using the second. And I have those dragged out just so we can look at them. So the first one is just that part of the sphere that's intersecting the region, and I see nothing for the second because those two are not intersecting at all. So the way that this custom block works is we have, even if there is nothing visible, I still have that bounding box property, and that's just going to be at that origin in this example. But if we look at this implicit body, the one that does have a region here, and we type F, let me turn off that visibility, we are always going to have that negative values when we are within that geometry. So for something that is intersecting, I'm going to have a negative value at that centroid. If I type F, we don't see any negative values because there's nothing where it is intersecting. So we can use that to our advantage to define where we're going to keep and remove. > > So the next thing I do is use this **Evaluate Field** in order to decide if the field is negative or positive at that centroid of our intersecting body. We can use this **Evaluate Field** block, and this is a really useful block that is used often in some of our more complex notebooks and complex custom blocks, where you bring in a field and at a certain point it'll tell you what that value is. So if you're creating a point map, if you're doing simulation and you want to find the stress at a very specific point and you have the stress field, this is a good use for that block. It's also useful in this case. I'm going to use two points. I have the centroid of both of my intersecting bodies, and that produces two values of the Boolean. And we can see the first one is negative, that's where we do get a result of that implicit body because they are intersecting, and then we have one that's positive because there's no visualization, they are not intersecting. > > So having this values of the Boolean, and I'll remove these again, we can use the filter and filter out the objects that are either positive or negative for that centroid. So for this filter, we have two different options. I just chose the list interface in the bull list for the filter, and we're going to filter out our implicits. And this is where I used that custom block if. So if true, if false, what are we going to do? And this is where I bring in that conditional for that inside the body. So if we want to keep what's inside the body, then I'm going to want to only keep the values of that variable I have above if they are less than zero. So I'm only going to keep anything where the centroid is negative. But if I want to keep whatever is outside of that region, then I'm going to only keep those implicits where their value of the Boolean was positive. And so that's how we get just the one which is intersecting this region, and if I flip it, I get the opposite. So a bit complex as we're using custom blocks within this custom block, and that's why this is a challenge problem. But hopefully you can see the usefulness of this custom block, especially if you have one type of option versus another that you want to have in your own custom block. It's really useful to just have that Boolean option, and also using this **List Process** custom block can be really useful, and the **Evaluate Field** block. This video reviews the answer to the challenge automation test problem which asks you to create a custom block that will either keep or remove items in an implicit list that are partially or fully within a region. **Example File:** [230\_22\_1 Complete — Automation Challenge Problem.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_22_1%20Complete%20--%20Automation%20Challenge%20Problem.ntop) *This file was last updated in nTop 3.38.4* **Example File:** [230\_22\_2 CB – Keep or Remove Implicits in Region.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_22_2%20CB%20-%20Keep%20or%20Remove%20Implicits%20in%20Region.ntop) *This file was last updated in nTop 3.38.4* # Answer to Optional Automation Test Problem Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/answer-to-optional-automation-test-problem [https://www.youtube.com/embed/B4DkoCFIssI](https://www.youtube.com/embed/B4DkoCFIssI) > **Transcript** > > In this lesson, we will walk through the optional test problem for the automation course, which asks you to create a custom block that creates a line of spheres along the z-axis based on the given inputs we defined. So that is the start location for the spheres, the count (how many spheres we'll have), the increment, and the radius. > > In order to create this, you might have a different way of creating this. There are many ways to create the same thing in nTop, or a similar workflow in nTop. But the way that I'll walk through is: we have our **Sphere** block, and the radius is just the radius we defined in the input. And our Center Point is where we use a **Sequence** to create how many spheres we want in this line of spheres. > > So our X and our Y location is just that start location dot X. So it'll always be at that X location with that Y. And then Z is where we put in our sequence to create 10 of those spheres. In the **Sequence** block, our starting location is that start location dot Z. That's where that first sphere is located. And then we have that increment of 5 mm. So our Center Points are 5 mm apart. And our count, so how many spheres we're creating, is 10. So this is our custom block. We have our inputs and our output is just those final spheres. > > So that was step one, saving that as a custom block. And then the next step was to implement this in a workflow and see what this looked like. So in this notebook, we have imported that custom block, **CB Line of Spheres**. And you can do that by going into your imported blocks and import that. And I have that one imported block in here, and you can see it's in my notebook. I have that starting location, but if I move that, we can see that my line of spheres have moved. > > And the assignment asks for three different list manipulations. So the first one is to take the third through eighth item in the list. And to do that, we have this **Sublist**. So I have my list as my spheres. Index goes from two with a range of six. And the reason for that is because if we go into our block details for our spheres under properties, we can see that the first sphere in our list is zero. So if we want to take the third sphere, we're actually going to start with index two, and then we'll go to eight. So if we look at our original, let's turn on that display color so we can see the difference. We can see I have it go from our third sphere to our eighth sphere. > > Another task was to remove our fourth and fifth sphere of our list. So if we look at our original spheres again, have that as our list, begin with index three, so that's our fourth item. And our range is of two. So let me change that color again, and we can see it's removed that Fourth and Fifth Sphere in our list. > > The last item to do was to select only the last item in this list. And to do that, we have our **List Element** block where we put in that spheres list. And to always ensure that we're taking that last item in that list, you could have just done nine as we had done with these. But if the size of the list was larger than 10, what we can do is go into the block details under properties and choose the size. So by taking this size, no matter what size our list is, it'll always be that last item. And because we start our list at zero, we're just going to subtract that by one. And that's how we'll be able to, if I change that color, we can see I've selected just that last item in the list. That's the answer to our optional test problem for automation. This video reviews the answer to the automation test problem that creates a line of spheres along the z-axis, as well as select the 3rd to the 8th items of the list, remove the 4th and 5th item in the list, and select the last element in the list. **Example File:** [230\_20\_1 Complete — Intro to Automation Test Problem.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_20_1%20Complete%20--%20Intro%20to%20Automation%20Test%20Problem.ntop) *This file was last updated in nTop 3.38.4* **Example File:** [230\_20\_2 CB – Line of Spheres.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_20_2%20CB%20-%20Line%20of%20Spheres.ntop) *This file was last updated in nTop 3.38.4* # Automation and Custom Blocks Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/automation-and-custom-blocks Utilizing nTop's automation capabilities can significantly lower the time to create your designs. If you are working with a design you plan to implement across multiple parts, it is very easy to automate and package that workflow across those designs. The key concepts to consider when automating your process are utilizing custom blocks, list processing, and [nTop Automate](https://www.ntop.com/software/ntop-automate/). In this course, we will focus on creating custom blocks (CBs) and list processing to repeat workflows across multiple nTop files and to run through iterations. The process for using a custom block is as follows: ![](https://files.learn.ntop.com/lessons/automation-and-custom-blocks/230_2_1-Using-Custom-Block-Process.png) A custom block is a whole notebook packaged into a single block for reuse in other notebooks. You can use it both for creating small, frequently used utilities and encapsulating entire workflows in a single block. This is one of the most powerful features of nTop because it enables you to package the work of a whole notebook to replay the entire step-by-step process recorded in that notebook quickly. You can then save the new custom block and reuse it in other files or share it with other nTop users. Custom blocks are easy to make since they are defined similarly to a notebook and use the same file format (\**.ntop*). You set up a notebook however you like, with whatever inputs you want (the notebook inputs will convert to block inputs when you load the file as a block). An output is required for the notebook to register as a custom block. If there is no output, an alert will appear when you try to load it. ![](https://files.learn.ntop.com/lessons/automation-and-custom-blocks/230_2_2-Custom-Block-Example.png) Custom block example Custom blocks have a double line on their left side to indicate that they are CBs. If you are working with a file with a block with this double line, you can open the block by right-clicking and then selecting the *Open Block* to view the packaged nTop workflow. Then, you can modify the block or further understand how the process works. ## Reasons for Using a Custom Block * Readability: easier for a user to digest. * Repeatability: if you use the same process multiple times, you can use a CB instead of repeating those steps. * Controlling the areas a user can change: If you share a workflow, you may only want a colleague to change a few parameters. Using a CB will yield a gated view of a workflow. ## Overloading You can set up a custom block with one or multiple overloads, which will let you switch between different forms of the block. You can do this by ensuring all relevant CBs have the same notebook name before importing them. ![](https://files.learn.ntop.com/lessons/automation-and-custom-blocks/230_2_3-Overloading.png) Notice in this example, how the CB's name is the same, but one option uses a mesh face to place supports, while the other uses a CAD face to place supports. ![](https://files.learn.ntop.com/lessons/automation-and-custom-blocks/230_2_4-Overloading-Example.png) In the upcoming lessons, we will explain how you can create your own CB. # Before We Begin: Custom Blocks Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/before-we-begin-custom-blocks [https://www.youtube.com/embed/MfCSsGHqDZM](https://www.youtube.com/embed/MfCSsGHqDZM) In this course, we will: * Understand the key areas for defining a custom block. * Explore how to use list processing. * Learn how to implement a custom block into a workflow. # Commonly Used Custom Blocks Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/commonly-used-custom-blocks Below are some of our most common, easy-to-use custom blocks to get started in a workflow. Feel free to download these and add them to your “My Blocks Folder” to always have them available in nTop. **CB Mesh Export:** This block will export mesh files with a randomly generated number at the end of the name so it does not overwrite the previous exported mesh when changing the workflow. ![](https://files.learn.ntop.com/lessons/commonly-used-custom-blocks/230_7_1-CB-Mesh-Import.png) **Example File:** [230\_7\_1 CB – Mesh Export.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_7_1%20CB%20-%20Mesh%20Export.ntop) *This file was last updated in nTop 3.38.4* **CB Move Object:** This block moves the object's center to the new location provided and can rotate the object. ![](https://files.learn.ntop.com/lessons/commonly-used-custom-blocks/230_7_2-CB-Move-Object.png) **Example File:** [230\_7\_2 CB – Move Object.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_7_2%20CB%20-%20Move%20Object.ntop) *This file was last updated in nTop 3.38.4* **CB Point from Bounding Box:** Input an implicit body and extract a point on the bounding box based on the min, max, or centroid values of the bounding box in x, y, and z. ![](https://files.learn.ntop.com/lessons/commonly-used-custom-blocks/230_7_3-CB-Point-from-Bounding-Box.png) **Example File:** [230\_7\_3 CB – Point from Bounding Box.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_7_3%20CB%20-%20Point%20from%20Bounding%20Box.ntop) *This file was last updated in nTop 3.38.4* **CB One Sided Offset:** Creates a one-sided offset based on a given mesh. ![](https://files.learn.ntop.com/lessons/commonly-used-custom-blocks/230_7_4-CB-One-Sided-Offset.png) **Example File:** [230\_7\_4 CB – One Sided Offset.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_7_4%20CB%20-%20One%20Sided%20Offset.ntop) *This file was last updated in nTop 5.20.* 2 **CB Implicit Body from CAD Faces:** This custom block allows a user to select a list of CAD faces, add thickness to them, and trim them to the original bounding geometry. The result will be an implicit body with thickness. ![](https://files.learn.ntop.com/lessons/commonly-used-custom-blocks/230_7_5-CB-Implicit-Body-from-CAD-Faces.png) **Example File:** [230\_7\_5 CB – Implicit Body from CAD Faces.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_7_5%20CB%20-%20Implicit%20Body%20from%20CAD%20Faces.ntop) *This file was last updated in nTop 4.2.3* **CB List Processed Booleans:** This custom block creates a list of implicit bodies that applied each item individually to the primary body. The default boolean operations would instead apply all items at once on the primary body and produce one body. ![](https://files.learn.ntop.com/lessons/commonly-used-custom-blocks/230_7_6-CB-List-Processed-Booleans.jpg) **Example File:** [230\_7\_6 & 21\_2 CB – List Processed Booleans.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_7_6%20%26%2021_2%20CB%20-%20List%20Processed%20Booleans.ntop) *This file was last updated in nTop 4.2.3* # Creating a Custom Block: Defining an Output Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/creating-a-custom-block-defining-an-output The other key area when creating a CB is the Output. Any notebook with a defined output can be repackaged into a single, customized block, complete with custom inputs and descriptions. To add an output, simply drag the block into the *Output* section of the notebook. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-defining-an-output/230_5_1-Defining-Output.gif) # Creating a Custom Block: Defining Inputs Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/creating-a-custom-block-defining-inputs To change the parameters of the CB, we need to place those variables in the input section of the nTop file. First, turn the inputs of blocks that you want as parameters into variables. To get the variables to the *Inputs* section, you can drag and drop them into the Inputs section, or you can right-click on the variable and from the drop-down menu, select *Make Model Input*. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-defining-inputs/230_4_1-Defining-Inputs.gif) If you want to create a CB with many variables, it is very helpful to arrange the variables in the order of operation. > [!NOTE] > > **Note**: If a variable in the input is referencing something in the workflow, you will not be able to place it into the input. To place that variable into the input, you will have to remove the unit that is being called. See the example below. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-defining-inputs/230_4_2-Remove-Reference.gif) ## Unit Type Before importing your CB into another notebook, you could change the variable type. For instance, point spacing is a scalar variable in the example below. However, if you intend to have varying point spacing and uniform values, you must change the type to a scalar field. To do this, click the icon and change it to the right variable type. Once you export this notebook, you will not be able to change that type, so we recommend changing the variable type to the broadest option. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-defining-inputs/230_4_3-Unit-Type.gif) ## Commenting The custom block input name and descriptions will be taken from the notebook's input name and description. Before exporting, we also recommend adding comments to your inputs. This will help others understand key information regarding those inputs in your CB, whether that is a longer description of the input or a recommended range of values for that input. To add a comment, hover over the top of the input variable and add the comment. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-defining-inputs/230_4_4-Commenting.gif) Once you import the CB to another notebook, in the information tab of the block details, any comments for your inputs will show in the *Input Description* in the Information Panel of the imported CB. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-defining-inputs/230_4_5-Imported-CB.png) > [!TIP] > > **Tip:** > We recommend removing the variables, such as file path or CAD body, before saving the CB. If you keep these in, you will have a larger file size, and the CB may take longer to run. # Creating a Custom Block: Notebook Title and Description Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/creating-a-custom-block-notebook-title-and-description The process overview for creating a CB is shown below. First, create the nTop workflow as you normally would. We recommend saving this workflow before you create your CB, because once you begin to create the CB, you may be altering the workflow. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-notebook-title-and-description/230_3_1-Creating-Custom-Block-Process.png) Once you have created your workflow, there are four key areas to create the CB: the notebook name, the description, the inputs section, and the output section. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-notebook-title-and-description/230_3_2-CB-Structure.png) ## Notebook Title and Description The name and description of the custom block are taken directly from the notebook's name and description. We recommend starting the name of the notebook with “CB” for custom block to clarify that this is a custom block and not a built-in block or toolkit within nTop. We also recommend writing a description to help you or your colleagues understand what the CB does. ![](https://files.learn.ntop.com/lessons/creating-a-custom-block-notebook-title-and-description/230_3_3-Notebook-Title-and-Description.png) In the next few lessons, we will show examples with the nTop file labeled “Completed Stochastic Lattice Workflow” If you want to create a CB with this file, please download the file below. Later, we will create a CB with the same file in the Follow Along: CB Stochastic Lattice lesson. To learn how this workflow was created, check out our lessons on Non-Periodic Lattices in the [210: Intro to Lattices](https://learn.ntop.com/courses/210-intro-to-lattices/) course. **Example File:** [230\_3\_1 & 8\_1 Completed — Stochastic Lattice Workflow.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_3_1%20%26%208_1%20Completed%20--%20Stochastic%20Lattice%20Workflow.ntop) *This file was last updated in 5.20.2* # Creating a List Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/creating-a-list To create a list of any type, type 'list' into the search bar; along with the block type you would like to create. Lists are denoted in nTop by three small rectangles of increasing width in the bottom left corner of the data type icon. You can see the list size in parentheses next to the block type. Not all lists are created from the search bar, some are made unintentionally or automatically with certain blocks, which we will go into further detail in the List Errors lesson. Some blocks turn a singular entity into a list, and some merge lists together. ![](https://files.learn.ntop.com/lessons/creating-a-list/230_12_1-Creating-a-List.jpg) ## Adding or Removing an Item in a List There are two methods to add blocks to a list: 1. Drag a new block into a List block. Remember that all entities in a list must have the same block type (i.e. they must have the same icon in the top left corner of the block). 2. Select the '+' to add more inputs. If you add too many, use the '-' on the left of the input to remove them. ![](https://files.learn.ntop.com/lessons/creating-a-list/230_12_2-Adding-or-Removing-an-Item-in-a-List.gif) The order of list entities can be changed by dragging list entities around within the List block. ## Auto-Populated Lists Some blocks use list inputs and combine them into a singular entity. An example of this is the **Boolean Union** block, which takes in a list of bodies and generates a single unioned body. Blocks like this are auto-populated with an empty list, which is useful for quickly dragging bodies inside to complete the operation. ![](https://files.learn.ntop.com/lessons/creating-a-list/230_12_3-Auto-Populated-Lists.jpg) *Auto-generated Implicit Body List in the Bodies input.* Sometimes, a user already has a list prepared that they would like to perform a **Boolean Union** operation on. In this case, the auto-populated list must be deleted and replaced by the desired list. ![](https://files.learn.ntop.com/lessons/creating-a-list/230_12_4-Boolean-Union.gif) ## Changing Variable Type to a List You can also create a list from a variable by clicking on the icon and choosing a list from the options. In the example below, we change the variable type from Sphere to Implicit Body List. ![](https://files.learn.ntop.com/lessons/creating-a-list/230_12_5-Changing-Variable-Type-to-a-List.gif) # Download: CB Stochastic Lattice Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/download-cb-stochastic-lattice Now that you have completed the follow along, feel free to download below the completed file with descriptions on creating a custom block and importing it into a notebook. **Example File:** [230\_9\_1 CB – Stochastic Lattice.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_9_1%20CB%20-%20Stochastic%20Lattice.ntop) *This file was last updated in nTop 3.38.4* **Example File:** [230\_9\_2 Using a Custom Block.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_9_2%20Using%20a%20Custom%20Block.ntop) *This file was last updated in nTop 3.38.4* # Download: List Processing Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/download-list-processing Now that you have completed the follow along, feel free to download the completed file with descriptions as a resource. **Example File:** [230\_17\_1 Complete — List Processing.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_17_1%20Complete%20--%20List%20Processing.ntop) *This file was last updated in nTop 3.38.4* # Follow Along: CB Stochastic Lattice Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/follow-along-cb-stochastic-lattice In this lesson, we will walk through creating a custom block from a stochastic lattice workflow and use this custom block in another workflow. To learn how this workflow was created, check out our lessons on Non-Periodic Lattices in the [Intro to Latticing](https://learn.ntop.com/courses/210-intro-to-lattices/) course. [https://www.youtube.com/embed/EUHIs5aKSsA](https://www.youtube.com/embed/EUHIs5aKSsA) > **Transcript** > > In this lesson, we will use the completed stochastic lattice workflow that you can download below this video and use that workflow to create a custom block that can add a stochastic LCE and union it to another body on any two implicit bodies. So, if you haven't viewed our intro to lacing course, we recommend that you check out the lesson linked below if you are interested to see how we can produce this non-periodic lattice. But I'll also review what is going on in this file. > > So I have this bracket and it's split into two bodies. I have my outer body, I have my inner body, and I take that CAD inner body and convert it to an implicit body, and my outer body is also an implicit body. And our inner body, we want to add that lattice structure, that Voronoi lattice. So I first take a set of random points in the body and then I apply my **Lattice Body to Volume Voronoi** to create this stochastic lattice with a thickness of 5 mm. And I trim this lattice body so that we only have the lattice structure that's within that inner body. > > Once I've done that, I then fully union this lattice structure to our outer body and I have this 5 mm L radius. So taking this whole piece, we're going to think about how to create a custom block, and I'm going to save this file as is. And then I'll save this as what our custom block will be labeled, which will be **CB Stochastic Lattice** (CB for custom block). I'll also rename that title to **CB Stochastic Lattice**. It's a good practice to have your file name equal that of a notebook name as well. And I'll change this description to say that this workflow adds a Voronoi lattice to a bracket and unions the two bodies together. So especially if you're sharing this custom block, it's good to add a description just to let others know what this block does. > > And we also need to think about what are our key variables. I'll right-click on that thickness and make it a variable. Maybe we want to change that input, and I want to place it into this input section. So you can just drag and move that. So any of those variables we want to change, we'll move into the inputs. I'll also right-click and make our point spacing a variable, and we can either drag and drop it or we can right-click and choose to make model input, that bottom option. So then once I have that, I can also maybe make my blend radius a variable, and I'll also select make model input to bring it to the input section. Now I also need my CAD bodies, but if I try to drag and drop those into the input, it won't let me. And that is because it is using that **CAD Box** body that's in our notebook. So in order to drag and drop this into my notebook, I have to remove that variable from that option, and then once I do that, I can now drag and drop my inner body variable to that top input. I'll do the same thing for my outer body, deleting that variable and placing it in there. > > And if I want to add a comment, I can hover above that block and type in my comment as I have for my further body. So also, you might want to think about the unit types that you have for this. So for instance, my point spacing is a scaler, but I might want to change it to scalar field, and that will allow me to have a varying point spacing. It's also a good practice to organize your inputs in the steps that you took to create them. And my inputs are complete. So now I have to think about my output, what do I want to produce after this custom block runs, which will be that final part. > > Now before I'm done creating this custom block, I also want to remove any block that I'm no longer using, especially this geometry section, because keeping that pad body in there will increase that file size. I can just right-click and delete that section, and now I have everything that I need to create my custom block. So what I'll do is file and save this custom block, and let's try importing this into another file. We can import this in the file import. We can save it in my nTop folder. So if you save it in here, you'll always be able to access it in the search bar. You don't have to import each time. So I type CB. These are all those custom blocks that I typically use. Another option is to click on this plus button. So I'll import that block that **CB Stochastic Lattice** nTop file. We can see that I now have this in my notebook and I have one item in my imported block since I have one imported custom block, and all of my five inputs I defined earlier are here. As you can see, our point spacing is now that scalar field option. And I can export this block as well if you see that custom block with the double lines. > > So I'm going to test this out by importing two-part small bracket. So that should be the file that you downloaded below this video. And if you don't see it on your screen, you can select that block and just type V to zoom in on that part. And very similar to the path bracket I made to slightly different dimensions, and I'll right-click and make that **CAD Body** variable labeled CAD inner, and I'll double-click on my outer body, right-click and label this our CAD outer. So all I will do is place those into our inner body and outer body options. And if I type I to isolate my view to that stochastic lattice, now I can also change these inputs. So for instance, I can change that blend radius that I have like so, and that's how we can create a custom block, implement it into our workflow, and use it across a very various sort of parts. > > [0:00](https://www.youtube.com/watch?v=EUHIs5aKSsA) Introduction to Stochastic Lattice Workflow > [1:40](https://www.youtube.com/watch?v=EUHIs5aKSsA\&t=100s) Preparing for Custom Block Creation > [2:00](https://www.youtube.com/watch?v=EUHIs5aKSsA\&t=120s) Annotating Your Custom Block > [2:33](https://www.youtube.com/watch?v=EUHIs5aKSsA\&t=153s) Identifying and Setting Inputs > [4:25](https://www.youtube.com/watch?v=EUHIs5aKSsA\&t=265s) Setting an Output > [4:55](https://www.youtube.com/watch?v=EUHIs5aKSsA\&t=295s) Using the My Blocks Folder > [5:35](https://www.youtube.com/watch?v=EUHIs5aKSsA\&t=335s) Importing and Testing the Custom Block Please download the nTop file below to follow along with the tutorial. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [230\_3\_1 & 8\_1 Completed — Stochastic Lattice Workflow.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_3_1%20%26%208_1%20Completed%20--%20Stochastic%20Lattice%20Workflow.ntop) *This file was last updated in nTop 5.20.* 2 [230\_8\_1 2part\_smbracket.x\_t](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/Models/230_8_1%202part_smbracket.x_t) [230\_8\_1 Follow Along — CB Stochastic Lattice.pdf](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/PDFs/230_8_1%20Follow%20Along%20--%20CB%20Stochastic%20Lattice.pdf) # Follow Along: List Processing Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/follow-along-list-processing [https://www.youtube.com/embed/842GpkyCRBQ](https://www.youtube.com/embed/842GpkyCRBQ) > **Transcript** > > In this lesson, we will use the concepts that we learned about list processing and implement them to a list of implicit bodies. So, the first thing I'll do is rename this section to “Creating Lists and Sequencing.” I'm going to go to my create tab and choose a sphere, cube, torus, cone, and cylinder for our body list. > > To place these all into one list, I will search for **Implicit Body List** and add that to my notebook. I'll click on this plus button, which we can also remove items in our list by clicking on that minus button, and add five items to this list and place all of my implicit bodies into our implicit body list. > > And I will right-click and make this a variable, which I'll label “Implicit Body List,” which we'll be using in the rest of this lesson. Next, I'm going to go to my imported blocks, and I'm going to import our CB Wall TPMS. You can download this file below this video, and we'll be using this custom block that will add a wall TPMS to a part. > > We have this example box in the custom block like so, where we can put in different TPMS structures, change the cell size, and the approximate thickness. So, I'll remove that box and instead put in my implicit body list, and I could do this five times with each of those parts. But by putting in this list, I will have that wall TPMS on all five of my implicit bodies in that list using this one box. > > And we can see this is a lattice list, since this is a lattice that is taken out of this, and I have those five lattices created. And I'll right-click, make this a variable. This is a lattice list, and I'll label this “Bodies with TPMS.” The last thing I'll do is just click on that icon and convert this from a lattice list to an implicit body list, choose a cell size of 222, a thickness of 0.5 mm, and choose a gyroid structure. > > And so, we can see this has produced five items in this wall TPMS. And to see all of this, I'm going to use a **Translate Object**. So, I can translate these all out, place my wall TPMS into this object, and for the vector, I could choose a vector list and have a vector for each one of these. Or what I can do is just type in a singular vector and control that X, Y, and Z. So, I can put a list into there, or I can go to my math tab, and under utilities, I can choose a sequence, sequence from bounds, or random sequence, and we'll use **Sequence**. > > So, for my start, my first item I want to be right at 0 mm, then an increment of 15, and my count. I can put in a value here and get three items in my list. We can see 0, 15, and 30 mm. Or I can go into my implicit body list and choose that size and place it in there. So, even if I remove an item, we can see that that size changes to match how many items are in my list, as does my sequence. > > So, I will drag and drop that **Sequence** block into the X for my vector, and then for the Y and Z, I'll have 0 mm. So, we just have that translation in the X direction. And if I type 'I' to only view this, I can see that all of my items have that wall TPMS on each of them. And I'll right-click and make this a variable, which I will label “Translated Bodies.” And we can see that each of these are an implicit body list as opposed to implicit body, and they all have that five items in our list. Since we started with a list, all down that stream, we'll have a list. > > Next, we'll talk about sort and filtering. So, I'll right-click and add a section labeled “Sort and Filter.” So, I'll add a **Filter** block to my notebook, which we can choose to put in a list and a condition. Or if we click on that overload, we can have our list values, comparison, and reference. So, I'm going to filter out my bodies with TPMS, and for the values, I want to use the mass of all of these. So, I can place in that bodies with TPMS. I'll put in a density of one, and this will give me my mass properties for all five of those. And we'll just use that mass, and I'm going to drag and drop that to do a separate line in its notebook and label this “Mass of Object.” So, I'll use that as my values, and for the comparison, I only want my items that have a mass that is greater than 200 grams. So, we can see that now this has filtered these three items. > > Let me make this a filtered variable and add that to the bottom of my notebook. Since I use those bodies with TPMS and not the translated objects, in order to visualize which ones these are, what I can do is use a **List Element** block for my filter. I'll place that in as the list, and I can type zero to isolate my view to that list element and change that index to see the different options I have. > > If I type a three for instance, we can see I have an index out of range because I only have three items in my filter list. So that would be index 0, 1, 2, and our list element, as we can see, is an implicit body as opposed to an implicit body list. So this is also a good way to transition from a list to an implicit body. I also want to sort, so I'll grab that **Sort** block, and I'm going to also sort these by mass. > > So I'll click on that overload section. For my list, I'm going to have my bodies with TPMS, and I want to sort them by the mass of objects. So now I have these five items. They're sorted, and to better visualize how they're sorted, I'll use another **Translate Object** block. So I'll place these in here for the vector. I'll type in Vector so that I can again have that change along that x-axis, and I'll use that same sequence we made before. > > So I'll right click and make this a variable and label this translated sequence. I'll place this into my X, and I'll also translate this down 20 mm in the Z Direction just so that we have it below our translated bodies. And now if we turn on that translated bodies, we can see how we now have this filtered so that we're going from the smallest mass to the largest mass. So I'll right-click and make this a variable, and I will label this volume sorted. > > The next thing I'll do is just choose those three lightest by using a **Sub List**. So our **Sub List** we can put in our list, and this will allow me to have a range. So I'll go from zero index to three. So this will allow me to choose these three lightest items, and I'll right click and make this a variable and label this choosing lightest three. I can also change its index length. So if I just had 0 to 1, I would just have that lightest object. But even if I have only one item in my list, in order to have a single implicit body and set of a list, I would have to drag and drop that item from the properties into my notebook. But I'll keep that to be the lightest three. > > And then let's add a new section, and this last section will be an example custom block that implements this idea of filtering that we can use for other applications. So you can import this block if you download the file from below this video. I already have this in my blocks folder, and that's going to be CB. If, and because this is a custom block, you can also right-click and Export that block. What I'll do is I can say if true, if false, then I'm going to have something happen. And I'm just going to go in my bodies with TPMS and put that first item for if true, second item if false, and that condition, if I click on that, it'll switch from that sphere to that cube. So I'll right-click and make that a variable, which I will label choose sphere. So if you click on that, it will show that wall TPMS on a sphere, otherwise a wall TPMS on a cube. > > We could also use our logic tab in the math tab and choose something like this greater than and say if the mass properties are greater for one than the other, show that item. So I'll go into my mass of object and take that first mass and that second mass. So if the first object's mass is greater than the second object's mass, we would get something true, otherwise false. So this block will show me the object with the greatest mass, which in this case would be that wall TPMS cube. And so we can see that and also note that this is instead of that **Filter** block. This is always going to have just one item, so we just have an implicit body as opposed to a list. So this shows some of the options that we can do with our list processing to help automate and save time when creating an nTop workflow. In this lesson, we will walk through the different list processing concepts and will demonstrate how to use the **Sequence**, **Filter**, **Sort**, **List Element**, and **Sub List** blocks as well as an example custom block that uses these concepts. Please download the nTop file below to follow along with the tutorial. For a faster or slower video speed, click on the settings in the bottom right of the video. **Example File:** [230\_16\_1 & 21\_1 CB – If.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_16_1%20%26%2021_1%20CB%20-%20If.ntop) *This file was last updated in nTop 3.38.4* **Example File:** [230\_16\_2 CB – Walled TPMS.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_16_2%20CB%20-%20Walled%20TPMS.ntop) *This file was last updated in nTop 4.2.3* [230\_16\_1 Follow Along — List Processing.pdf](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/PDFs/230_16_1%20Follow%20Along%20--%20List%20Processing.pdf) # Importing a Custom Block Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/importing-a-custom-block Once you have created a custom block, the next step is to implement it in another workflow in a separate nTop file. There are a few ways to import a CB into your notebook: * Importing the CB by going to *Hamburger icon* \*→\**File → Import* or use the shortcut *Ctrl+I* and selecting the corresponding nTop file * Saving the CB in “My Blocks Folder” * Select the *Show Side Bar* icon options and then in the *Imports* tab header, click “*Import Block*” to select the corresponding nTop file. Some of these import methods are described in further detail below. ## My Blocks Folder If you use a CB frequently, we recommend saving it in your “My blocks folder” as shown below. The default folder is in the nTop folder under “Myblocks”. If you want to share the CBs across your team, you can change the location of your “My blocks folder” to a shared folder by going to the *Hamburger icon* → *Settings*→ *General* as shown below. Once you save the block in this folder, it is automatically imported into the notebook, and all you need to do to add it to your workflow is search for the block in the search bar. ![](https://files.learn.ntop.com/lessons/importing-a-custom-block/230_6_1-My-Blocks-Folder.jpg) ## Importing a Custom Block The last option to import a CB is to select the View Imported Blocks icon in the notebook header and to click on “Import Block” to select the corresponding nTop file. Once you have imported a CB into your file, the symbol will update to reflect the total number of imported blocks in your file. If you click on that icon again, you will see the names of the CBs imported and a symbol shown below indicates that it is used in the notebook. ![](https://files.learn.ntop.com/lessons/importing-a-custom-block/230_6_2-Importing-CB.jpg) ## Using the Imported Custom Block Once you import the CB, you can add it to the notebook by searching for its name in the search bar. When imported, the CB will appear as a single block in the body of the notebook. If you change the nTop file containing the unpacked CB, you'll need to re-import the CB to see the changes take effect. Notice that the same inputs in the CB are the input parameters for the CB. ![](https://files.learn.ntop.com/lessons/importing-a-custom-block/230_6_3-Using-Imported-CB.png) > [!NOTE] > > **Note**: If you have not properly defined the CB's inputs or outputs, you may see the error below. ![](https://files.learn.ntop.com/lessons/importing-a-custom-block/230_6_4-Error-Importing.png) ## Deleting Unused Blocks We recommend deleting unused custom blocks to decrease file size, improve opening speed, and maintain organization. You can only delete imported blocks that are unused in the notebook. You can also click the Remove Unused Blocks to remove all the unused imported CBs. Blocks appearing at least once in a workflow are marked with a notebook icon in the *Imports* panel, like **CB Stochastic Lattice** in the example below. ![](https://files.learn.ntop.com/lessons/importing-a-custom-block/230_6_5-Delete-Unused-Block.png) > [!TIP] > > **Tip:** > You can use the *Imports* viewing pane to manage and modify CBs used in your workflow. Visit this [Help Center article](https://support.ntopology.com/hc/en-us/articles/5473123308435-How-to-modify-a-custom-block) to see how you can modify the CBs from within your notebook. # Knowledge Check: Custom Blocks Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/knowledge-check-custom-blocks # Knowledge Check: List Processing Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/knowledge-check-list-processing # List Errors Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/list-errors When working with lists, it is important to understand the key errors that could occur, including invalid input errors and lists within lists, described below. ## Invalid Input Error If you get an 'invalid input error', it may be because you are trying to input a list into a singular type input. nTop doesn't allow this, which would cause the block input not to be accepted. **There are several options on how to get rid of a List:** 1. Use a Block to get rid of the List by joining bodies together * If your list contains meshes, use **Merge Meshes** * If your list contains implicit bodies, use **Boolean Union** * If your list contains CAD faces, use **Stitch Adjacent CAD Faces** (only works if Adjacent). If you use Stitch CAD Surface Bodies, you may end up with a List of 1. 2. Open up the properties of the list block and select the chip at the bottom, of the same type, with \[0] behind its name. Drag this chip into the notebook or directly into an input. ![](https://files.learn.ntop.com/lessons/list-errors/230_15_1-Invalid-Input-Error.gif) ## Lists in Lists – Inputting a list block within another list block A list block cannot be input into another list block. ![](https://files.learn.ntop.com/lessons/list-errors/230_15_2-Lists-in-Lists.png) If you want to input a list into a block that doesn't accept lists, you can create a custom block to run the list instead. This works because the inputs of a notebook are in variables, and variables cannot process lists. However, once you use it as a CB, it's a block like any other and, therefore, can process lists. This is not equivalent to putting the list into the input, but rather running the custom block workflow multiple times, once for each element in the list. Another way to solve this problem is to use **Concatenate Lists** to combine the two lists. ## Lists of One (1) You may encounter a situation where you try to add one part to a block, and it won't let you. ![](https://files.learn.ntop.com/lessons/list-errors/230_15_3-List-of-One.png) This is because the input you are trying to add looks like “**Block Name (1)**“. Somewhere, a “list of one” was created. Lists of one are sometimes unintentionally created by the user, or during CAD/Part importing. They can be converted to singular entities by either dragging the entity out of the *Properties* tab of the *Block Details* or by using the **List Element** block. ![](https://files.learn.ntop.com/lessons/list-errors/230_15_4-List-Elements.png) In many cases, it may be useful to make changes to listed blocks in order to rearrange the order of lists through **sorting**, and remove certain items from a list through **filtering** as discussed in the previous lesson. # List Manipulation Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/list-manipulation Lists can be powerful for automating workflows. The manipulation tools are in the *Utilities* Ribbon Tab, under *General*. Some of these blocks are shown below. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_1-Utilities-General-Tab.png) ## List Element Extract a single entity from a list based on its index number. Note that the first item in a list always is index 0. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_2-List-Element.gif) ## Insert Combine two lists into one by inserting a list into another at a specified index location. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_3-Insert.jpg) ## Sub List Extract a smaller list from a larger input list, based on a starting index and the desired size of the sublist. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_4-Sub-List.png) ## Remove Remove one or more entities from a list, based on a starting index and the number of removed entities. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_5-Remove.png) ## Concatenate List & Concatenate Text Multiple lists can be added together using the **Concatenate Lists** block. In order to do this, *the Lists must be of the* *same type*. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_6-Concatenate-List.png) To combine text, you can use the **Concatenate Text** block. Our **CB Mesh Export** block, shown in the *Commonly Used Custom Blocks* lesson, uses this block to add a randomly generated number at the end of the name, so it does not overwrite the previously exported mesh when changing the workflow. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_7-Concatenate-Text.png) ## Sort The **Sort** block will rearrange a list from the lowest to the highest value. If you would like the values sorted from highest to lowest, you can use the 'reversed' scalar list in the block's properties. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_8-Sort.gif) ## Filter The **Filter** block removes items from a list based on a **Bool List**, which must be the same length as the List input in the block. The default state of the **Filter** block takes in a Bool list, a series of checkboxes where items in the list can be kept or removed from the input lists by toggling the checkboxes. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_9-Filter-Bool.gif) The **Filter** block allows a list to be filtered by a scalar list of the same length, by selecting the second option in the dropdown menu from the arrow next to the block's name. ![](https://files.learn.ntop.com/lessons/list-manipulation/230_14_10-Filter-List.gif) Filtering is useful for many different application areas, especially when you want to add more intelligence to your workflows and isolate or add conditionals for certain types of results. This naturally makes filtering useful for simulation workflows, where a lot of data is generated. An example of filtering in simulation workflows is looking at Min values and looking at Max values. # List Processing and Sequencing Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/list-processing-and-sequencing ## List Processing When applicable, blocks can accept list inputs instead of singular inputs. The block will then become a listed block of the same length as the input list. We refer to this as list processing—it can be useful for running through a series of input options, as shown below. ![](https://files.learn.ntop.com/lessons/list-processing-and-sequencing/230_13_1-List-Processing.jpg) In this example, instead of using three **Periodic Lattice** blocks, we can use just one to create three lattice structures with different beam thicknesses. We can further automate this process using sequencing blocks. ## Sequencing If you create a scalar list, use one of our three sequencing blocks below. These blocks can be found in the *Math* tab under *Utilities*. ![](https://files.learn.ntop.com/lessons/list-processing-and-sequencing/230_13_2-Utilities-Tab.png) A **Sequence** creates an equally spaced sequence of values. ![](https://files.learn.ntop.com/lessons/list-processing-and-sequencing/230_13_3-Sequence.png) A **Sequence from Bounds** will create an equally spaced sequence between two values. ![](https://files.learn.ntop.com/lessons/list-processing-and-sequencing/230_13_4-Sequence-from-Bounds.png) A **Random Sequence** will create a sequence of random scalar numbers from 0 to 1. ![](https://files.learn.ntop.com/lessons/list-processing-and-sequencing/230_13_5-Random-Sequence.png) # Lists Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/lists All blocks in nTop can exist as singular entities or as a list. A ***list*** contains multiple items of the same type in a single block, like a list of points. When a process runs on a list block, it runs the process on every list item. Working with list blocks is called ***List Processing***. ![](https://files.learn.ntop.com/lessons/lists/230_11_1-Lists.png) Lists can be used in the input of CBs, so customized functions can be performed on multiple listed inputs at once. **Want to List Process and don't know where to start?** * Determine the input you want to iterate * Open up the info panel and find the input type * Search for that type of list in the notebook search bar (ex. Scalar List, Point List, Vector List…) ## List Properties Each list contains a set of List properties at the top and individual properties for each item within that list grouped under List Elements. You can drag an individual property from a List to create an item in the notebook. You can expand the dropdown arrow next to the individual entities to reveal more information on that individual list entity. ![](https://files.learn.ntop.com/lessons/lists/230_11_2-List-Properties.png) # Optional: Advanced Automation Problem Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/optional-advanced-automation-problem Feel free to try this advanced challenge problem to continue to test your list and custom block skills. Create a CB that will keep any implicit in a list that is at least partially within a region given. The final output of the CB should be an implicit body list of the items that intersect the region. Once this workflow and CB are created, create a second example file that shows this work using a list of 5 spheres that are 5mm spaced apart with a radius of 2mm (created using the CB Line of Spheres from the previous test problem). Feel free to use any region as your test region. There should be an option to either keep or remove items that are all/partially inside the body. > [!NOTE] > > **Note**: There are many ways to do the same task in nTop. The answer shown to this problem uses the **CB List Processed Booleans** and the **CB If** from a previous lesson in this course. You can download these custom blocks below if you would like to use them in your workflow. ![](https://files.learn.ntop.com/lessons/optional-advanced-automation-problem/230_21_1-Example-of-Final-Result.jpg) Example of final result **Estimated Time to Complete:** 40 minutes > [!TIP] > > **Tip:** > The answer shown in the next lesson uses the **Evaluate Field** block which will provide the scalar value of the field at a point. Your solution may use a different process, but if you want to learn more about fields, please visit our [220: Intro to Field Driven Design](https://learn.ntop.com/courses/220-intro-to-field-driven-design/) course. **Example File:** [230\_16\_1 & 21\_1 CB – If.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_16_1%20%26%2021_1%20CB%20-%20If.ntop) *This file was last updated in nTop 3.38.4* **Example File:** [230\_7\_6 & 21\_2 CB – List Processed Booleans.ntop](https://files.learn.ntop.com/Courses/230%20Intro%20to%20Automation/nTop%20Files/230_7_6%20%26%2021_2%20CB%20-%20List%20Processed%20Booleans.ntop) *This file was last updated in nTop 4.2.3* # Optional: Automation Test Problem Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/optional-automation-test-problem Now that you understand the basics of lists and custom blocks, feel free to try our optional test problem. Create a custom block labeled “CB Line of Spheres” that creates a line of spheres along the z axis. The user should be able to define the starting location, the number of spheres, the radius, and the increment. ![](https://files.learn.ntop.com/lessons/optional-automation-test-problem/230_19_1-CB-Line-of-Spheres.png) Once you create this CB, test your list manipulation skills by importing it into another notebook with the inputs shown above. Then… 1. Select the 3rd to the 8th items in the list 2. Remove the 4th and 5th items in the list 3. Select the last element in the list. **Estimated Time to Complete:** 25 minutes # Overview Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/overview This course will take you through the basics of creating a custom block and how to use lists in nTop. After completing this course, you will have developed an understanding of the best practices for creating a custom block, how to import a CB into your workflow, and how to use lists to save time when designing. ![Intro to Custom Blocks](https://storage.googleapis.com/files-learn/lessons/intro-to-custom-blocks/intro-to-custom-blocks.webp) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview) **What Will Be Covered:** * Creating custom blocks and defining the inputs and output. * Implementing custom blocks into workflows. * Creating and manipulating lists to automate workflows. ### Before We Begin > **[Before We Begin](/lessons/intro-to-custom-blocks/before-we-begin-custom-blocks)** ### Custom Blocks > **[Automation and Custom Blocks](/lessons/intro-to-custom-blocks/automation-and-custom-blocks)** > **[Creating a Custom Block: Notebook Title and Description](/lessons/intro-to-custom-blocks/creating-a-custom-block-notebook-title-and-description)** > **[Creating a Custom Block: Defining Inputs](/lessons/intro-to-custom-blocks/creating-a-custom-block-defining-inputs)** > **[Creating a Custom Block: Defining an Output](/lessons/intro-to-custom-blocks/creating-a-custom-block-defining-an-output)** > **[Importing a Custom Block](/lessons/intro-to-custom-blocks/importing-a-custom-block)** > **[Commonly Used Custom Blocks](/lessons/intro-to-custom-blocks/commonly-used-custom-blocks)** > **[Follow Along: CB Stochastic Lattice](/lessons/intro-to-custom-blocks/follow-along-cb-stochastic-lattice)** > **[Download: CB Stochastic Lattice](/lessons/intro-to-custom-blocks/download-cb-stochastic-lattice)** > **[Knowledge Check: Custom Blocks](/lessons/intro-to-custom-blocks/knowledge-check-custom-blocks)** ### List Processing > **[Lists](/lessons/intro-to-custom-blocks/lists)** > **[Creating a List](/lessons/intro-to-custom-blocks/creating-a-list)** > **[List Processing and Sequencing](/lessons/intro-to-custom-blocks/list-processing-and-sequencing)** > **[List Manipulation](/lessons/intro-to-custom-blocks/list-manipulation)** > **[List Errors](/lessons/intro-to-custom-blocks/list-errors)** > **[Follow Along: List Processing](/lessons/intro-to-custom-blocks/follow-along-list-processing)** > **[Download: List Processing](/lessons/intro-to-custom-blocks/download-list-processing)** > **[Knowledge Check: List Processing](/lessons/intro-to-custom-blocks/knowledge-check-list-processing)** ### Optional Test Problems > **[Optional: Automation Test Problem](/lessons/intro-to-custom-blocks/optional-automation-test-problem)** > **[Answer to Optional Automation Test Problem](/lessons/intro-to-custom-blocks/answer-to-optional-automation-test-problem)** > **[Optional: Advanced Automation Problem](/lessons/intro-to-custom-blocks/optional-advanced-automation-problem)** > **[Answer to Advanced Automation Problem](/lessons/intro-to-custom-blocks/answer-to-advanced-automation-problem)** ### What's Next > **[Resources](/lessons/intro-to-custom-blocks/resources)** # Resources Source: https://docs.ntop.com/lessons/intro-to-custom-blocks/resources ### **Additional Resources on Custom Blocks and Automation:** 1. Video Example: [Selecting the Right Lattice Structure through Simulation and Automation](https://www.youtube.com/watch?v=ZVroGxn3xGk\&t=570s) (\~20min) 2. Article: [List Processing Walkthrough](https://support.ntopology.com/hc/en-us/articles/360042292094-List-Processing-Walk-through) # Answer: Data Driven Design Test Problem Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/answer-data-driven-design-test-problem [https://www.youtube.com/embed/idjh0GMCo0A](https://www.youtube.com/embed/idjh0GMCo0A) > **Transcript** > > For this problem, you are asked to use the imported Von Mises stress data to shell and lightweight a bracket, reinforcing the areas of the model experiencing the greatest stress. Let's walk through a solution to this problem together. > > We'll begin by creating a stress field from our point map. We'll use the **Field From Point Map** block, then smooth in our field. Next, we'll determine our minimum and maximum stress from that Point map using the Point map values property from our Point map variable. > > Next, we'll create a ramp for our shell. We'll use our minimum and maximum stresses for our In Min and In Max, and we'll use negative values for our Out Min and Out Max values so that we shell our part inward. Next, we'll use an **Offset Body** to shell our part inward using our initial implicit bracket and the ramp that we've created. Finally, we'll use a **Boolean Subtract** to remove this infill volume from our implicit bracket. Using the hotkey X to create a section cut, we see that we now have this variable shell. > > Similarly, we'll ramp our lattice with a ramp using the minimum and maximum values that we pulled from our Point map. We'll create a ramp with our Min and Max stress, and we'll set an Out Min and an Out Max for our lattice thickness. We'll add a BCC **Graph Unit Cell** and a **Rectangular Cell Map** across our infill volume. Then, we'll create a lattice using the **Periodic Lattice** block along with our unit cell, cell map, and ramp that we created for our thickness. We'll use a **Boolean Intersect** to trim this to the infill volume, and finally, we'll use a **Boolean Union** to merge this with our varying shell. **Example File:** [320\_13\_1.ntop](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/nTop%20Files/320_13_1.ntop) *This file was last updated in nTop 5.14.* 3 # Before We Begin: Data-Driven Design Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/before-we-begin-data-driven-design [https://www.youtube.com/embed/hR7tnZ3nDzM](https://www.youtube.com/embed/hR7tnZ3nDzM) In this course, we will: * Understand **Point Maps** and how we can use them to drive designs in nTop * Explore **generating data** in nTop and how to use **imported data** in workflows * **Manipulate** the geometry and performance of parts using Point Map data # Creating and Using a Ramp from Fields Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/creating-and-using-a-ramp-from-fields Once you convert a point map to a field in nTop, you can use that field to manipulate implicit geometry. The most common way to do this is by using a **Ramp** block. Review the **Ramp** Block lesson in the course [220: Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/) to refresh your memory about how the **Ramp** block works. Let's start by looking at the steps to take with a scalar field, such as this von mises stress field from **Static Analysis**. * Add a **Ramp** block. * Input the **von mises stress** field as the Scalar Field input. * Take a look at the Min and Max values from the HUD. Using these values as the *range's In Min* and *In Max* is a great place to start. * You can use the **Min** and **Max** blocks to calculate these values if you are using a field created from Point Map. * Set the *Out Min* and the *Out Max* to correspond to the parameter to be varied. If varying thickness, for example, add appropriate units ('mm,' for instance) to these values. * Set the *Continuity* to your desired option. ![](https://files.learn.ntop.com/lessons/creating-and-using-a-ramp-from-point-maps/image-18-1024x487.png) Depending on the field type. You can access their associated fields through the Properties in the Block Details in such cases. For example, the displacement field in Static Analysis will have scalar fields inside for each vector component. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-19.png) These fields (Property chips) can be used in a **Ramp** block. Once you've created a **Ramp,** you can control the geometry parameters as input that accepts scalar fields. The Bike Seat example uses two scalar fields to drive the *Point Spacing* and *Thickness* parameters. ![](https://files.learn.ntop.com/lessons/creating-and-using-a-ramp-from-point-maps/image-20-1024x552.png) Of course, field property chips can be used directly as well. This [support article](https://support.ntop.com/hc/en-us/articles/360041676813-How-do-I-use-the-Ramp-block) explains different ways in which you can use the Ramp block. # Creating Fields from Point Maps Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/creating-fields-from-point-maps Once a Point Map has been created or imported, it is necessary to convert the data into a Field to then use it to modify a part. For example, to use Von Mises Stress data to create a field, you would: * Add a **Field from Point Map** block * Insert a **Von Mises Point Map** into the Point Map input * Select the appropriate [Interpolation options](https://support.ntopology.com/hc/en-us/articles/360049689373) ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/image-12.png) ![](https://files.learn.ntop.com/lessons/creating-fields-from-point-maps/320_6_2-1024x348.gif) ## Interpolation ### Nearest Looks for the closest point referenced in the point map and sets that value equal. Creates a Voronoi pattern, because it creates regions closest to a point. Below is the Field View of a Nearest Point interpolated Field. ![](https://files.learn.ntop.com/lessons/creating-fields-from-point-maps/320_6_5.jpg) ### Barycentric This should be used for points in a tetrahedral mesh, like FEA results. Linearly interpolates among the three closest points. Below is the Field View of a Barycentric interpolated Field. ![](https://files.learn.ntop.com/lessons/creating-fields-from-point-maps/320_6_6.jpg) If the Interpolation options from the **Field from Point Map** block aren't producing the desired results, you can also use the **Radial Basis Field from Point Map**, which creates a smooth field from a point map using radial basis interpolation. ## Extrapolation All fields created will be extrapolated based on the *Interpolation* option. If you wish not to extrapolate, set the value 0 to everything outside the domain. You can do it with a combination of **If-Else** block and **Less Than or Equal to** block. If you have vertices instead of an Implicit Body, you can use the **Delaunay Volume Mesh** block to create a convex hull and use its implicit property. ![extrapolation\_none.png](https://files.learn.ntop.com/help-articles/structures/34953460971795.png) Use the Field Viewer (hotkey 'F') to see the resulting field. Changing the Colormap option to Turbo helps with visualization. Fields can drive densities, thicknesses, and other values that affect your design. ![](https://files.learn.ntop.com/lessons/creating-fields-from-point-maps/320_6_8-1024x411.jpg) # Creating Point Maps Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/creating-point-maps #### **Creating a Point Map from nTop Simulation Results** > [!NOTE] > > *Note: **Point Map** is used only for visualization with a HUD, which lets you see the values by controlling parameters on the HUD. You can use the field to drive your design parameters, which will be discussed in the later lessons.* When you view an analysis's properties in nTop, you can see that different results are available as scalar fields. ![](https://files.learn.ntop.com/lessons/creating-point-maps/image-5.png) ![](https://files.learn.ntop.com/lessons/creating-point-maps/image-4.png) Add a **Point Map** block. We can see that it has two inputs: Points and Values. ![](https://files.learn.ntop.com/lessons/creating-point-maps/image-7.png) We will use a combination of the **Evaluate Field** block and nodes to calculate the field values in the node values and then use them as input to the **Point Map** block. For an example, let's use the von misses stress property of the **Static Analysis** block. *Points: FE Volume Mesh > volume mesh > vertices* *Evaluate Field: Scalar Field: Static Analysis > von misses stress* ![](https://files.learn.ntop.com/lessons/creating-point-maps/image-8.png) This generates a Point Map of the Von Mises stress. You can toggle the Lower and Upper Bounds of the Point Map when visible. The Point Map is the stepping stone to utilizing the Simulation results. It can be exported, filtered to show the max or min values, and used to create a Field for further design changes. ![](https://files.learn.ntop.com/lessons/creating-point-maps/320_3_4.gif) # Download: Stress Driven Mesh Refinement Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/download-stress-driven-mesh-refinement Now that you have completed the follow-along, feel free to download the completed file below with descriptions of how to drive mesh refinement with simulation data. **Example File:** [320\_9\_1.ntop](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/nTop%20Files/320_9_1.ntop) *This file was last updated in nTop 5.14.3* # Download: Variable Shell Thickness Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/download-variable-shell-thickness Now that you have completed the follow-along, feel free to download below the completed file with descriptions of how to vary shell and gyroid wall thickness based on simulation data. **Example File:** [320\_11\_1.ntop](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/nTop%20Files/320_11_1.ntop) *This file was last updated in nTop 5.14.3* > [!WARNING] > > **Warning:** **Walled TPMS** is deprecated. We encourage you to update your workflow to use the **Walled TPMS Unit Cell with Offset** block in the **Rectangular Volume Lattice** block. Click on *Learn More* in the block details for more information on the updated latticing blocks. # Follow Along: Stress Driven Mesh Refinement Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/follow-along-stress-driven-mesh-refinement [https://www.youtube.com/embed/pJn9Xg2iv7k](https://www.youtube.com/embed/pJn9Xg2iv7k) > **Transcript** > > This lesson will walk you through how to use ramps to refine meshes using stress data from previous structural analysis. This can be useful when trying to get more accurate FAA results in parts where your stress concentrations have already been evaluated, or for comparing a part that you've previously analyzed and then modified in some way. Let's begin by creating a geometry section and importing the same bracket we used in the last follow-along lesson. > > We'll add our CAD body to our notebook and convert to an implicit. We'll make this a variable and call it implicit. We'll add a new section called field from stress data. We'll use the same CSV file with stress data that we used in our last video in the utility section under our Fields tab in the upper ribbon. We'll import a **Scalar Point Map**. Follow the file path and import your CSV file. Again, our units will be in millimeters and our scale will be in Pascals. We can isolate this point map and view our results. > > Now, let's convert this point map into a field like we did earlier, using a **Field From Point Map** block. We'll call our point map stress data and again use bicentric interpolation and no extrapolation. After creating this stress field, I'll make this field into a variable called stress field. After creating this field, I'll pull a **Ramp** block into our notebook to drive the edge lengths of a mesh. I'll add a section called refine mesh based on stress results. From my search bar, I'll add a **Ramp** to my notebook. I'll pull my scalar field in and I'll set my in min and in max at 55 Pascals and 5E7 Pascals. My out min will be 2 mm and my out max will be 0.1 mm. I'll give it a geometric continuity. This **Ramp** block will make edge lengths longer where stresses are lower and much shorter where stresses are highest. I'll make this into a variable and call it Edge Length Ramp. > > Next, I'll begin to mesh our part. I'll add a **Mesh From CAD Body** block, and isolating, I see that we've created this mesh. Next, to distribute our triangles more evenly, I'll add a **Remesh Surface** block. We'll pull in our mesh, and for our edge length, we'll use the ramp that we created above. We'll choose triangles and let the mesh run. We'll add a **Volume Mesh** block as well, since we're setting this up for FAA, and pull in our remeshed surface as well as our edge length ramp. Finally, we'll add our **FE Volume Mesh**, pull in our **Volume Mesh** block, and select our geometric order. I'll make this a variable called FE Mesh. > > After our mesh is complete, we can see that the areas of high stress have much shorter edge lengths on their mesh elements than areas with lower stresses. Comparing this to our point map, we see that those areas are around these holes and this larger bearing hole. The same is reflected in our FE mesh, and at this point, we could rerun our structural analysis with our new mesh for more detailed information in the areas of higher stress. In this video, we will use imported stress data to drive mesh refinement in the higher-stress areas of the bracket. Using a refined FE Mesh, we can re-run the analysis to generate more accurate structural analysis results. If you would prefer to walk through this example using written instructions, download the PDF below. **Example File:** [320\_8\_1.x\_t](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/Models/320_8_1.x_t) [320\_8\_2.csv](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/Data%20Files/320_8_2.csv) [320\_8\_1.pdf](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/PDFs/320_8_1.pdf) # Follow Along: Variable Shell Thickness Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/follow-along-variable-shell-thickness [https://www.youtube.com/embed/-nfsPiz0SiI](https://www.youtube.com/embed/-nfsPiz0SiI) > **Transcript** > > In this lesson, we'll use an imported point map containing stress data to drive a variable shell and gyroid infill for a bracket. Let's start by importing the bracket that you downloaded below. Opening your file explorer, you can pull the part file into your notebook. I'll use the hotkey Z to zoom to fit, and I'll double click on the body, right click, and convert to an implicit body. I'll rename this implicit body “implicit” and I'll name the section “geometry.” > > Next, I want to import my stress data. I'll add a new section and call it “Field from Stress Data.” This is where we'll create our field that we'll use to ramp our wall thickness. In the Fields tab of our ribbon under utilities, I'll choose **Import Scalar Point Map**. We'll open our file path and add our CSV file. Note that the first, second, and third columns in this file denote the X, Y, and Z locations of each point. The fourth column contains the stress data. I'll add my units and set my scale to one Pascal. > > Once our import is complete, I'll isolate this block and zoom in where I can see our stresses at each discrete location. Next, under our field utilities, I'll add a **Field from Point Map** block. I'll drag our point map in, add a Beric Centric interpolation, and no extrapolation. Now I'll turn off all visibilities and use the hotkey F to view our field in the field viewer. I'll change our color map to Turbo, and now we can see a better representation of our stress field. > > If I want to smoothen my field to make these transitions more gradual, I can add a block called **Smoothing Field**. This can also be found in the utilities under your Fields tab. Viewing this smooth field, I see that we've now established a more gradual transition. I'll right click, make this a variable, and call it “stress field.” I'll collapse our two sections and add a new section called “varying thickness.” > > The first thing I'll want to do is create a shell from this part with varying thickness. I want to reinforce the shell at the areas of highest stress. I can double click and add a **Ramp** block. For scalar field, for this **Ramp** block, will be our stress field that we created, and I'll want to set my in min and in max as the minimum and maximum values from our point map. I can open up our point map, view its properties, and I see that we have this list of scalar values. What I can do is add a math block called **Max** and **Min** to each of these in min and in max values. I'll use this arrow to change the overload to a scalar list for both, and now I can add our scalar list values from our point map. I'll pull in our values, and in the upper right corners of either of these blocks, we see our minimum and maximum imported values. > > I want our out min to be the thinnest portion of our shell. I'll make this 2 mm, assigning it a negative value since we want to shell inward. I'll make our out max -20 mm so that we have a 20 mm thick shell anywhere we approach our maximum value. I'll add a geometric continuity, and I'll right click and make this ramp a variable called “shell ramp.” > > Next, I'll add an **Offset Body** block, and for our body, I'll double click and add our implicit bracket, and our distance will be the shell ramp that we created. If I isolate using the hotkey I and zoom to fit using Z, I see that this is our body with that variable shell removed. To isolate the shell, I'll add a **Boolean Subtract** block, and I'll make our primary body our implicit and our subtraction body this offset body. If I isolate the **Boolean Subtract** using the hotkey I and section cut using X, I'll adjust our normal, and we can view this variable shell thickness. If I view this in relation to our point map, I see that we have the thickest shells near the areas of the highest stresses. I'll right click and make this a variable called “varying shell.” > > Now let's follow a similar process to vary the wall thickness of a gyroid infill. I'll make a copy of this ramp using the duplicate variable option, and I'll drag it to the bottom of our notebook and rename it to “gyroid ramp.” At this minimum stress value, I'll make our gyroid 1 mm thick, and at the maximum stresses, I'll make it 20 mm thick. > > Next, I'll add a block called **Infill Gyroid**, where I'll use my gyroid ramp as our thickness. The body will be our initial implicit body, and we'll set a cell size of 10x10x10 mm. If I isolate this infill using the hotkey I, I see that we have this gyroid with thicker walls at the higher stresses. > > Finally, I can add a **Boolean Union** block and I'll union our infill with our variable shell. I can make this gyroid infill a variable, and I'll call it “gyroid.” If I add a blend radius to our **Boolean Union**, I see that we get some extra material built up on the outside of our part, so it's good practice to add a **Boolean Intersect** block where we can intersect our **Boolean Union** with our initial design space, our implicit body. I'll isolate this final part and section cut to view our results. Now we see that we have a gyroid infill bracket with wall and shell reinforcements at the area of the highest stress. I'll right click, make this a variable, and call it “final body.” To view in high resolution, I'll use Control H on my keyboard where we can view the final results of our part. Follow along as we use imported stress data to drive a shell and infill with variable thickness in the bracket. Download the part and .csv file below to get started. If you would prefer to walk through this example using written instructions, download the PDF below. [320\_10\_1.x\_t](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/Models/320_10_1.x_t) [320\_10\_2.csv](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/Data%20Files/320_10_2.csv) [320\_10\_1.pdf](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/PDFs/320_10_1.pdf) # Importing Point Maps Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/importing-point-maps We can also import Point Maps from outside sources. There are two ways to accomplish this: * Importing a .csv file * Importing results directly from other software ## Method 1: Working with a .csv File After generating the .csv file, we use the **Import Scalar Point Map** or **Import Vector Point Map** blocks to bring in the appropriate Point Map. *Image 1* below shows both blocks. If importing a **Scalar Point Map**, ensure your format is *X*, *Y*, *Z*, *S,* where *S* is the desired value at each point. If importing a **Vector Point Map**, ensure your format is *X, Y, Z, U, V, W,* where the *U*, *V*, *W* represents the vector at each point. ![](https://files.learn.ntop.com/lessons/importing-point-maps/image-9.png) *Image 1:* Import Scalar and Vector Point Map blocks ![](https://files.learn.ntop.com/lessons/importing-point-maps/image-11.png) *Image 2:* Assigning unit to the Scalar Point Map block To see a table of supported units and their abbreviations in nTop, navigate to *Documentation→ Blocks and the Notebook→ Using Blocks→ Units*. Use these when assigning complex units, and include the scalar value before the units. Once the inputs of File Path and Units are in, you can view the imported data, as in *Images 3-5*. ![](https://files.learn.ntop.com/lessons/importing-point-maps/320_4_Stress-Point-Map.gif) *Image 3:* 3D Scalar Point Map ![](https://files.learn.ntop.com/lessons/importing-point-maps/320_4_Vector-Point-Map.gif) *Image 4:* 3D Vector Point Map, in a cross-sectional view ![](https://files.learn.ntop.com/lessons/importing-point-maps/320_4_1D-Scalar-Map-1024x801.gif) *Image 5: 1* D Scalar Point Map ## Method 2: Working with Results Files While importing .csv files is the most robust and recommended way to import point maps from outside sources into nTop, the second method is to import the result files directly. This is done by using an **Import Result** blocks. ![](https://files.learn.ntop.com/lessons/importing-point-maps/image-10.png) To see what file types are supported, bring the appropriate **Import Result** block into the Notebook, click the folder icon, and then view supported file types that are possible in the Windows Explorer dropdown menu, or check out the [support article](https://support.ntop.com/hc/en-us/articles/360048249514-What-file-types-can-nTop-import-and-export) to learn about different file formats supported on import. Below is an example using the **Import CFD Analysis Result** block. ![](https://files.learn.ntop.com/lessons/importing-point-maps/320_4_Import-CFD-Block.gif) Once the Case and Data file paths, as well as the Unit inputs, are satisfied, you can view the imported data. The example image below is from a Conjugate Heat Transfer analysis of a cross-flow HEX with a simple TPMS Core. ![](https://files.learn.ntop.com/lessons/importing-point-maps/320_4_9-1024x560.png) Cross Section of Import CFD Results from a Conjugate Heat Transfer Analysis # Knowledge Check: Point Maps Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/knowledge-check-point-maps # Optional: Data Driven Design Test Problem Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/optional-data-driven-design-test-problem Using the starter file below, use the imported stress data to shell and lattice infill the bracket, reinforcing the areas with the greater stresses. Use a BCC unit cell with an 8x8x8mm cell size, and transition the beam thickness between 1mm and 4mm. ![](https://files.learn.ntop.com/lessons/optional-data-driven-design-test-problem/320_12_1-1024x534.jpg) **Estimated Time to Complete:** 20 minutes **Example File:** [320\_12\_1.ntop](https://files.learn.ntop.com/Courses/320%20Data%20Driven%20Design/nTop%20Files/320_12_1.ntop) *This file was last updated in nTop 5.14.3* # Overview Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/overview Explore driving geometry with data in nTop. Last updated on June 12, 2023 with version 4.2.3. In this course, we will explore how to use data to manipulate designs within nTop. We will discuss the types of data that can be utilized and how to employ methods within nTop to manipulate geometry and meshes. ![intro to data driven design](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/lessons/intro-to-data-driven-design/images/lessons/intro-to-data-driven-design/intro-to-data-driven-design.webp) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What will be covered:** * Using Ramps created from Point Maps to refine meshes for simulation * Using Ramps created from Point Maps to manipulate geometry * Generating Fields from Point Maps * Creating/importing data via Point Maps ### Introduction > **[Before We Begin](/lessons/intro-to-data-driven-design/before-we-begin-data-driven-design)** ### Basics > **[What is a Point Map?](/lessons/intro-to-data-driven-design/what-is-a-point-map)** > **[Creating Point Maps](/lessons/intro-to-data-driven-design/creating-point-maps)** > **[Importing Point Maps](/lessons/intro-to-data-driven-design/importing-point-maps)** > **[Knowledge Check: Point Maps](/lessons/intro-to-data-driven-design/knowledge-check-point-maps)** ### Apply Point Maps > **[Creating Fields from Point Maps](/lessons/intro-to-data-driven-design/creating-fields-from-point-maps)** > **[Creating and Using a Ramp from Point Maps](/lessons/intro-to-data-driven-design/creating-and-using-a-ramp-from-fields)** ### Examples of Data Driven Design > **[Follow Along: Stress Driven Mesh Refinement](/lessons/intro-to-data-driven-design/follow-along-stress-driven-mesh-refinement)** > **[Download: Stress Driven Mesh Refinement](/lessons/intro-to-data-driven-design/download-stress-driven-mesh-refinement)** > **[Follow Along: Variable Shell Thickness](/lessons/intro-to-data-driven-design/follow-along-variable-shell-thickness)** > **[Download: Variable Shell Thickness](/lessons/intro-to-data-driven-design/download-variable-shell-thickness)** ### Optional Data Driven Design Test Problem > **[Optional: Data Driven Design Test Problem](/lessons/intro-to-data-driven-design/optional-data-driven-design-test-problem)** > **[Answer: Data Driven Design Test Problem](/lessons/intro-to-data-driven-design/answer-data-driven-design-test-problem)** ### What's Next > **[Resources](/lessons/intro-to-data-driven-design/resources)** # Resources Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/resources In this session we covered importing Point Maps and creating them directly in nTop, then converting to Fields to drive designs. We applied learnings by manipulating geometry and refining FE Meshes using Fields generated from stress data. See the resources below to further explore driving designs with data. ## Additional Resources on Data Driven Design 1. Article: [How to use simulation results to create a Point Map or Field](https://support.ntopology.com/hc/en-us/articles/360054149874) 2. Article: [Interpolation and Extrapolation options for creating a Field from a Point Map](https://support.ntopology.com/hc/en-us/articles/360049689373-Interpolation-and-Extrapolation-options-for-creating-a-Field-from-a-Point-Map) 3. Article: [How to display and view imported CFD data](https://support.ntopology.com/hc/en-us/articles/4406854860179-How-to-display-and-view-imported-CFD-data) # What is a Point Map? Source: https://docs.ntop.com/lessons/intro-to-data-driven-design/what-is-a-point-map A point map is a set of numerical data representing scalar or vector values at discrete points. In the context of geometry, values are typically derived from analyses and thus carry units such as temperature, stress, distance, velocity, mass, density, pressure, etc. However, any data comprised of scalar or vector values could potentially be a point map. Similarly, a field is a rule that associates a value to each point in the 3D space. ![](https://files.learn.ntop.com/lessons/what-is-a-point-map/320_2_Stress-Point-Map.gif) Example of a stress point map ![](https://files.learn.ntop.com/lessons/what-is-a-point-map/320_2_Vector-Point-Map.gif) Example of a vector point map While Fields and Point Maps can be thought of as synonymous, for practical purposes, we refer to data that represent values (usually from simulation) as Point Maps and data being used (typically via **Ramps**) to manipulate geometry within nTop as Fields. See the “*What is a Field?*” section in the course, [220: Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/) for further explanation of fields. # Answer to Optional Intro to Fields Test Problem Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/answer-to-optional-intro-to-fields-test-problem [https://www.youtube.com/embed/Ce2o9XtPtQQ](https://www.youtube.com/embed/Ce2o9XtPtQQ) > **Transcript** > > In this lesson, we will walk through the answer to the optional test problem for our Intro to Fields course. You began with the starter file that had our geometry, which was this nTop tag, and you had a CAD inner body, the outer body, and then CAD and topology our name as well as this CAD faces for ramp, which you can use as one of your options for the scalar field in your field-driven design and ramping. > > So after we had the geometry in this starter file, the lattice was already created, which uses a **Branched Lattice Body** and we have it going through our inner body. We have these holes that will create using that **Branched Lattice Body**. And the final part is our Lattice inner, which is just a **Boolean Subtract** of the holes from that inner body and then we do a **Boolean Union** of that LTI inner, the nTopology name and the outer body. > > So this is what we were given with originally with a whole thickness that is uniform. In order to have some type of varying whole thickness, we can use our ramps and field-driven design, which we've talked about in the previous lessons of this course. So I have this field-driven design section, which we'll use to change the thickness of these holes. > > The first task was to use the nTopology name to drive these designs. So I have this whole thickness as a variable. So I'll just drag and drop that **Body Ramp** and we'll see what that looks like. And what this does is I have that nTopology logo as that scalar field. I'll type F so we can see what that ramp looks like and I'll actually turn off that final body. And what we can see if I probe my values is that at that nTopology logo, we'll have that out man of 1 millimeter. That's the thickness of our holes and it'll increase to 3 millimeters. And the in min and in max is that starting location and that end location for some type of change. And the thickness change is from 1 millimeter to 3 millimeters. So you might have a slightly different result, but something like this where you have those smaller holes around the name and then the larger holes as you get farther away should look similar to your piece. > > The second option we asked to do was to use instead three points to create this design. So to show that final results, I'll drag and drop that point ramp variable and that will apply this to my final body. And I'll also show these points which are highlighted in blue. So I have these three points and we can only have one scalar field in this ramp. So I do a **Boolean Union** to take these three points and make them into one scalar field, which if we look at that, I'll add a contour interval of one. Let me show that. We have those circles around the three points and it's going larger and larger. So this is the field that we're using as our reference. And when we're 2 millimeters away from those points, we'll start seeing that change and end that change 30 millimeters away. So if I type F to view that, we can see if I probe my values, we start with about one and then we go out to 3 millimeters. And that's what we see in this final body as well too. So you have those smaller holes when we're closer to the point and they're getting larger as we're farther away and you get a design like this. > > The last ask was to use that CAD faces for ramp that we have in our geometry section. So that would be these faces. And because it's more than just one face, we're going to convert this to an implicit body. So we have that field to work with. But we also need to stitch them so we don't have multiple fields to work with. So first I use that **Stitch Adjacent CAD Faces**, so it looks pretty much the same. But now they're acting as if one CAD face and then we convert this to an implicit body. If we type F, we now have this field. I'll make this size a little bit larger. And if I probe my values, we can see that anywhere going kind of outside of that face is going to be negative. Inside the face is positive. And the reason for this is because our CAD face that we chose is using that face inside that hole that we have. So anywhere that's on that kind of opposite side of the face is going to be negative. So a little tricky with this example is instead of using our in min and in max from, you know, 0 to 80, we're going to have this 0 to 80 because where we want to see that change, which is outside of that hole, is going to be all negative. So let me place that **Ramp** into that whole thickness and view this final body. And we can also turn on that field for the faces ramp. Let me type F. And let's make our contour interval, let's do 0.5. If we probe our values, we're going to go from 0.5 and then increase as we go farther along to 3.5. And you can see that in these whole sizes as well too. So those are three examples of when you might use our ramp to drive something like that beam thickness in this problem. This video reviews the answer to the Intro to Fields test problem to use the **Ramp** block to have a varying thickness of the holes to produce designs varying the thickness in three different ways using the three different scalar fields below: * The “nTopology” letters * Any three points (your choice of location) * The “CAD faces to Ramp” variable located in the Geometry section of the Starter File **Example File:** [220\_15\_1 Completed — Intro to Fields Test Problem.ntop](https://files.learn.ntop.com/Courses/220%20Intro%20to%20Field%20Driven%20Design/nTop%20Files/220_15_1%20Completed%20--%20Intro%20to%20Fields%20Test%20Problem.ntop) *This file was last updated in nTop 5.15.2* # Before We Begin: Field-Driven Design Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/before-we-begin-field-driven-design [https://www.youtube.com/embed/C95ZqcfhXWw](https://www.youtube.com/embed/C95ZqcfhXWw) In this course, we will: * Build your understanding of the concept of fields; what they are and the different types you will see in nTop * Learn the different ways to create fields in nTop * Get familiar with important tools for working with fields to drive your design # Different Types of Fields in nTop Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/different-types-of-fields-in-ntop You will see a variety of fields in nTop. Depending on your application and requirements, you can use these fields to drive of spatial variation of numerous design parameters. ## Fields of Implicit Bodies ![](https://files.learn.ntop.com/lessons/different-types-of-fields-in-ntop/image-34-1024x540.png) As explained in [101: nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/), implicit bodies in nTop are represented by signed distance functions that describe their shapes and give information about where the inside and the outside regions are. They also have distance units, which are *mm* by default in nTop. You can identify a field that is a signed-distance function by its parallel and equally spaced contour lines in the Field Viewer. ## Fields of Planes, Points, and Axes Planes, points, and axes are some of the simplest fields in nTop. ![](https://files.learn.ntop.com/lessons/different-types-of-fields-in-ntop/220_4_2-planes-points-axis-2.jpg) The field of a plane has all positive values to one side of the plane, in the direction of the normal, and all negative values on the other side. As this is a distance field, its values increase in magnitude the farther away it is from the plane. ![](https://files.learn.ntop.com/lessons/different-types-of-fields-in-ntop/220_4_3-planes-points-axis-3.jpg) The field of a point is completely positive and has radially increasing values in all directions moving away from the point. ![](https://files.learn.ntop.com/lessons/different-types-of-fields-in-ntop/220_4_4-planes-points-axis-4.png) An axis also has a field with all positive and radially increasing values, similar to that of a point. The values are constant along the axis's length and increase in both directions moving away from the axis. ## Periodic and Noise Fields Unbounded and dimensionless scalar fields of varying patterns can be found in the *Fields* tab. ![](https://files.learn.ntop.com/lessons/different-types-of-fields-in-ntop/220_4_5-periodic-and-noise.jpg) The Periodic options include Gyroid, Diamond, Schwarz, Lidinoid, SplitP, and Neovius patterns. The two 3D noise options include **Simplex Noise** and **Cellular Noise**. They are composed of pseudorandom values and are typically used for texturing applications. For more information on these blocks, go to *Documentation*→ *Block\*\*Documentation*→ *Blocks*→ *Fields*. # Different Ways to Create Fields Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/different-ways-to-create-fields You will now learn about the different approaches for creating and defining fields in nTop that will enable an unmatched degree of design freedom. The following three lessons will introduce some important tools that use these fields as references to give you more control over any parameter in nTop that is represented by the scalar field symbol. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_1-field-wifi1.png) ## Extracting Distance Field of Implicit Bodies Imported CAD or Mesh bodies do not have fields associated with them. However, once you convert them into implicit bodies, this generates distance fields. This means you can use any implicit body's geometry to drive your designs. You can use the implicit body itself as the scalar field input or go into the Properties panel and take out its Scalar Field chip if you want to manipulate this field further. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_2-Bracket-DF-loop.gif) ## Using Equations You can also manipulate and define fields with mathematical equations using the **Scalar Field Variable** block to create the x, y, or z variables. These represent the three axes and have fields that look like that of a plane set at the origin with the normal direction in the positive direction of the axis. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_3-xyz.png) You can use mathematical operations such as multiplication and exponents with the x, y, and z fields, as well as math blocks from the *Math* tab, but it is important to be mindful of the units. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_3-field-w-units-1.png) Just as you create fields from implicit bodies, you can also build implicit bodies from equations. However, to represent a geometry, it is best if the formula used is in implicit form for its signed distance function, which is often difficult to achieve for more complex shapes. For a simple geometry like the sphere, the standard form equation is: ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_4-equation-sphere.png) and the implicit form equation is: ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_5-equation-sphere-zero.png) The latter is the equation used to generate the field of a sphere. The resulting implicit body can be visualized with the visibility toggle and brought into the Notebook from the Properties panel. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_6-Sphere.jpg) But, in many cases, we are using a field to control variation, not to represent a solid object, so you are free to use any field we want — you don't have to restrict yourself to signed distance functions. ## Converting Data or Images Into Fields Different types of data and even images can be brought into nTop, converted into fields, and then used to drive your designs. ### Generating Fields from Data Any dataset can be imported in the form of point maps in CSV format using **Import Scalar Point Map** or **Import Vector Point Map** block, then interpolated using the **Field from Point Map** block to get values at other points to form a field. There are four interpolation methods to choose from, including Natural, Linear, Nearest, and Barycentric. For extrapolation, the methods include Nearest, Linear, Exponential, and None. Blocks for importing Point Maps ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_7-importdata.png) Block for converting a Point Map into a Field ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_8-fieldfrompm.png) Since we will use the resulting field to drive geometry, it may be a good idea to use the **Smoothen Field** block to create smoother transitions between values. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_9-smoothen.png) > [!NOTE] > > **Note**: The **Smoothen Field** block does not work on fields with infinite negative domains. This can be remedied by inputting a **Bounding Box** in the optional Domain input or by first using the **Set Field Bounding Box** on the field before inputting it into **Smoothen Field**. The image below shows the comparison of each step of this process and the final field-driven geometry with variable shell thickness and gyroid-infill wall thickness. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_10-pmfieldsmoothen-2.png) The simulation and simulation result importation blocks directly generate relevant fields, which can be found in their Properties panels. > [!TIP] > > **Tip:** > If the simulation software you use does not support the native output file type, you can still import the results as a CSV point map. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_11-import-sim.png) Depending on the input point map, the overload of the **Field from Point Map** may switch to a non-field type. You can access their associated fields through the Properties panel in such cases. ## Bitmapping Images Bitmapping is a beta feature that takes an image and uses it to create a design. This can be applied to texturing or adding logo marks to a part. > [!NOTE] > > **Note**: This Import Bitmap block currently only accepts PNG files. You can import the image via the **Import Bitmap** block. To visualize it, use the **Map Bitmap to Plane** block. The imported file size is in the Properties of the import block. The *Length* and *Width* inputs of the **Map Bitmap to Plane** block adjust this size and can be used to either scale or warp the original image. Blocks for importing and mapping Bitmap ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/image-35.png) Properties of the **Map Bitmap to Plane** block ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/image-36.png) In the Properties panel of the **Map Bitmap to Plane** block, you will find six color fields with values between 0 and 1. Each color has a different use case, depending on your application. For example, the grayscale color field would be appropriate if the imported file is a black-and-white image. ![](https://files.learn.ntop.com/lessons/different-ways-to-create-fields/220_7_16-bitmapprocess.png) Bitmap color fields are typically used to drive the offset distance from an implicit body using the **Offset Body** block. # Download: Completed Field Driven Bracket Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/download-completed-field-driven-bracket Now that you have completed the follow along, feel free to download the completed file with descriptions as a resource. Next, if you would like to test your knowledge of creating and using fields in nTop, feel free to try our optional Knowledge Check. **Example File:** [220\_12\_1 Completed — Field Driven Bracket.ntop](https://files.learn.ntop.com/Courses/220%20Intro%20to%20Field%20Driven%20Design/nTop%20Files/220_12_1%20Completed%20--%20Field%20Driven%20Bracket.ntop) *This file was last updated in nTop 5.15.2* # Field Viewer: Visualizing Fields in nTop Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/field-viewer-visualizing-fields-in-ntop The Field Viewer is a tool for visualizing fields in nTop. It is a view option that lets us see a 2D section of a 3D field at a specified size and orientation. ![](https://files.learn.ntop.com/lessons/field-viewer-visualizing-fields-in-ntop/image-32-1024x485.png) To view a block's field using the Field Viewer, press 'F' on the keyboard with the block selected or Right-click on the body and select Field Viewer here. If the selected block outputs an implicit body, turn off its visibility to see the field's negative domains. Alternatively, you can access the Field Viewer from the View Tools on the right side of the screen or from the View tab in the Menu Bar. If no block is selected before opening up the Field Viewer, the *Object* input will be empty. Select the object to analyze by typing in the name of the block. > [!NOTE] > > **Note**: While all implicit geometries have fields, not all fields render geometries that can be visualized using the visibility toggle. If a field does not have an enclosed negative domain that defines the inside of its body, the visibility toggle will not show any geometry or visual representation of that field. In such cases, the Field Viewer is the only way to visualize what the block generates. If you wish to visualize such a field, you can also use the Set Bounding Box to view the field in the input domain. ## Position Settings ![](https://files.learn.ntop.com/lessons/field-viewer-visualizing-fields-in-ntop/field_viewer-1024x805.webp) * **Size of the Field Plane:** The size of the field plane is automatically adjusted based on the selected object or the current view in the 3D scene, ensuring it is appropriately scaled for your visualization. If you want to reset the size of the plane, click the **Reset Button** next to the size input in the Tools panel to quickly set the plane to a size that fits the current viewport. You can also manually adjust the size of the plane by modifying the **Size** input in the panel. * **Position and Orientation of the Field Plane:** When the Field Viewer is triggered by right-clicking on an object in the viewport, the field plane will automatically be centered on the selected object and oriented based on the surface normal. This provides a quick way to inspect the field data on the object's surface. You can adjust the position or rotation of the plane manually if needed using the controls in the Tools panel and the gimbal in the 3D scene. The **Center** and **Normal** can be adjusted by either: * Manually typing in the values * Dragging the gimbal by the straight arrow, arc arrow, or the two-colored squares In addition to adjusting the size and location of the Field Viewer to cover the relevant area, you can adjust the *Normal* to view the field from different angles. > [!WARNING] > > **Warning:** Depending on the orientation at which you are viewing your object, the field plane may not be visible. For example, if you are viewing an object on the xy-plane with the z-axis pointing in and out of the screen, then you would not be able to see the field if the normal of the plane is set in the x-direction \[1,0,0] or y-direction \[0,1,0]. ## Display Settings * **Transparency:** By default, the Field Viewer will display the field with semi-transparency, so you can see the field data overlaid on your object while maintaining visibility of the underlying geometry. Use the **Opacity** Slider in the Tools panel to adjust the transparency level. * **Custom range:** Option to adjust the minimum and maximum value * **Contours:** Shows white lines of equal field values * **Colormap:** The Field Viewer allows you to select different colormaps for better visual representation of the field data. * **Implicit Bodies:** An Implicit colormap will be applied automatically when analyzing implicit bodies. This colormap is optimized to provide a clearer distinction of field values inside and outside the body. * **Scalar Fields:** The default colormap for scalar fields is Turbo. However, you can select the Distance Field colormap or the Implicit colormap from the Colormap Dropdown to view the field with a different color scheme. > [!TIP] > > **Tip:** If you need to know the Max and Min values to understand the Colormap, the screen should show them as inputs when you toggle the Custom Range button. * **Probe values:** Shows the value of the field at the location of the mouse cursor ![](https://files.learn.ntop.com/lessons/field-viewer-visualizing-fields-in-ntop/image-33.png) ![](https://files.learn.ntop.com/lessons/field-viewer-visualizing-fields-in-ntop/newfieldviewer2-ezgif.com-optimize-1024x792.webp) # Follow Along: Field Driven Bracket Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/follow-along-field-driven-bracket [https://www.youtube.com/embed/Pp9YoD2HzsA](https://www.youtube.com/embed/Pp9YoD2HzsA) > **Transcript** > > In this lesson, we will go through the fundamental tools and methods of implementing field-driven design on a periodic lattice structure. We will use the completed file from a follow-along lesson in the Intro to Lats course as our starter file, which you can also download below. We will work to create several design variations for this bracket part. > > In the final section of this notebook, which has been renamed to Original Periodic Lattice Body and Final Part, we have this lattice body and the final body variable that takes in this lattice, trims it, then merges it back with the outer bracket part. This input here is the lattice thickness parameter, which is currently constant at 5 mm. But, it does have the scalar field symbol next to it, so we will be using a field here to vary the lattice beam thickness across our geometry. We need these two blocks. So, let's make a new section called Field Driven Lattice Designs and copy these over by holding Control while selecting both, then pressing Ctrl+C, placing the white line under this new section, and then Ctrl+V. > > Let's now grab from the search bar the first tool we can use called the **Ramp** block. It needs a scalar field input as a reference for the in min and in max, which define the locations on that reference field that we want to start and end our change, and out min and out max, which are in this case going to be the thickness value at those start and end locations. To start, we'll use a simple field of a Plane by typing into the input and selecting **Plane from Normal** block. It's at the global origin right now, but we will click into this and move it to right at the bottom of the lattice structure because this is going to be where we want our zero reference point. We want to create a variation in this Y direction, so we'll also change the normal to point to that direction. > > To make sure the midpoint of this plane is precise, we can also use the bounding box property of this inner body. Let's type in “inner body bounding box midpoint” and press enter. If we now select this **Plane** block and press F to see its field, then let's move this to the bracket and increase its size. Add a contour into interval of five and then probe values. We can see that where we placed our plane the value is zero, and in that normal direction we have increasingly positive values. The lattice structure ends at around 95 mm, so we will use this in zero as our in min and in max. Out min will be the thickness we want at the in min location of zero, and out max the thickness at that 95 mm location. In between will be a gradual change. We'll put in 3 mm and 8 mm as well as geometric continuity. Let's make this ramp a variable called Ramp Thickness and bring this into the lattice body block's thickness input. If we isolate the final body, we can see that the lattice thickness is gradually increasing from bottom to top, and how this change can look will depend on the type of scalar field you use as input for the ramp. > > Let's try something different this time using a new **Ramp** block. We will create a new field by adding together two planes. For this, we can grab the **Boolean Union** block from the search bar, and we're reusing this **Plane from Normal**, so we'll make it a variable called Ramp Plane. Bring this into the **Boolean Union** block, and then adding another **Plane from Normal** block. Turn off that visibility, we're only interested in its field here. Let's place this one at the top this time, and we can similarly use the property of the inner body implicit bounding box, then use max point instead. Press enter. > > Let's take a look at both planes, highlighting them while holding Control. We will change the normal to be in the same but negative direction. And if we take a look at both of them again, we now have what we want to use to drive our ramp with. If we take a look at the resulting field of this **Boolean Union**, making it a little bit bigger again with contour intervals and probing values, we have created an effect where starting from both the bottom and top at zero, the values increase until the midpoint between the two planes, which is at around 45 mm. Let's call this Joined Planes and put this in our new ramp. The in min is zero and in max we will choose that 45 midpoint, and we want the top and bottom to be thicker at 12 mm and to have 3 mm in the middle, then geometric continuity. Since this can be considered another design variation, I'll make it a variable called Ramp Thickness 2 and then go back to the first ramp and add one. Then, with this new ramp thickness instead, we can see on the final part that the variation follows that new field, and we can really get creative with fields and manipulate them depending on how we want them to influence the spatial variation in our design. > > If we now want to change the lattice structure to have a cylindrical cell map instead of the rectangular one that we've been using so far, and instead of having this straight line linear change from bottom to top, we want a radial change that matches the lattice better. All we have to do is think about what kind of field we would need to use instead to achieve that. > > We will again add another **Ramp** block and let's go up to the geometry section and take a look at our original CAD part. We have this whole surface if we select it and make it a variable then look into its properties. We can for example take out this bounding box centroid point and use its field, which is radial with zero value at that point and increasingly positive the farther away from that point. Alternatively, we can also convert this face into an implicit. > > Let's rename this large hole. And because it is now an implicit body, there is now a field associated with it, which is also radial. But what we have here is just a surface boundary. So we will remove this variable content, add a **Thicken Body** block, bring this back in, and then add a thickness of 1 mm. This is so that we are able to have a cleaner field that we can have a bit more control over. Now, the field has a contained finite negative domain within the implicit body. > > So let's drag this large hole implicit body into our new **Ramp** block. We will go back up and turn on the large hole's field, make it a bit bigger, turn on the final body's visibility as well for reference. Then we'll probe to define our in-min and in-max locations on this field. Here we will choose the in-min to be 5 mm on this field, and the in-max to be 50 mm. The thickness we want to range from 2 to 15 mm with geometric continuity. > > And we'll do the same steps of making this a design variation variable, then bringing it into the thickness parameter of the lattice body block. And we can see here that we have created a radial variation in beam thickness based on that circular shape of the hole. Let's rename these two blocks to ramp lattice body and ramped final body. > > Then we'll collapse all these blocks and then move on to the next tool we can use, which will add to the nTop Notebook, called the **Transfer Function**. For this, we will again create a copy of the lattice body and final body by doing Ctrl+C and Ctrl+V. And I will rename these TF lattice body and TF final body to stand for transfer function. > > The **Transfer Function** block works very similarly to the **Ramp** block, and we also need to input a scalar field here. But the input and output needs to be lists of values instead. And these will create something like multiple mini ramps put together. So for our field, we will use a **Plane from Normal** block again. And we will reuse that same origin that we used for the first ramp plane, but we will change the direction of the normal to be along this x-axis. > > Let's look at its field, and we now have here an increasing value from the plane in the direction of the x-axis. And we will start to probe these values to fill out our scalar list input by adding those items, as well as for the scalar field output list. And the size of these two lists have too much. So the start of our change can be at zero. So the first item we will leave at 0 mm. Then we will have the end of the first change and the start of the second change at 28 mm. Then again, the next one at 87 mm, 190 mm, and then we'll have the last one right at the end at around 225 mm. > > Now the output will be our designated thickness at each of these points. So we'll go ahead and fill out this list with the different thickness values that we want. For extrapolation, we will choose clamped and then follow the same process as before and make this a variable, which we'll call TF, and then bringing this into the thickness parameter of the lattice. And to be able to better see the changes here, we'll change the cell map type to rectangular. > > Then if we turn off that field and isolate that final body, we can really see that the **Transfer Function** is like those mini ramps put together, where it will allow us to have more control over the different changes that we can apply across our geometry. The next and last tool we will use is called **Mix**, and this block will allow us to blend together two different fields. We can also use implicit bodies as inputs for these. > > For scalar field A, we will use the lattice body that we created with the **Transfer Function**. And we can go into the properties to grab the implicit chip, which contains its implicit form. Then for field B, we will use the inner body implicit body and we will try to blend the two together starting with the factor of 0.5, which is an equal mix of the two. This factor can range between 0 and 1. And here we can see that both of them are blended together. If we put in a factor of 0.9 instead, we will have more of the inner body, and 0.1 will have more of the lattice body. > > So this mix applies the blending across the entire structure of both of the input fields. But we can also ramp this factor to create again that variation across the geometry. To drive this ramp, we could of course use any of the fields that we have previously created for the **Ramp** and **Transfer Function** blocks. But this time we're going to use the implicit body of the outer body part of the bracket. And if we look at the field of this part and turn off the visibility of the object, put on a contour interval as well as probe the values, we have at the boundary of the body a value of zero, and a field that is following the shape of this object. > > So we will use this as our reference for ramp. And starting with 0 mm and then we want the areas closest to the outer body to be solid like the inner body. So we will choose the in-min of one. And closer to the center, where on our field is around 35 mm, we will want the lattice body, so a factor of zero. And we will choose geometric continuity in this case. And if we isolate the **Mix** block, we can see the result without the cleanup. > > So the last step we need for this is that final body block, which contains the last steps. So we will copy and paste this over and rename this mixed final body. Then we'll make this mix a variable called mix, bring it in instead of the lattice body to have our final mixed part. Using the arrow to the left of the input field, you can also play around with the different values for your in and in-max before deciding on a final value. In this video, we walk through the different ways to use fields to drive the design of a latticed bracket. The lesson will demonstrate how to use the **Ramp** block, the **Transfer Function** block, and the **Mix** block. Please download the nTop file below to follow along with the tutorial. This file is the completed file without descriptions from the *“Follow Along: Periodic Lattice”* lesson in the [210: Intro to Lattices](https://learn.ntop.com/courses/210-intro-to-lattices/) course. Check out our lessons on Periodic Lattices to learn how this latticing workflow was created. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [220\_11\_1 Starter — Field Driven Bracket.ntop](https://files.learn.ntop.com/Courses/220%20Intro%20to%20Field%20Driven%20Design/nTop%20Files/220_11_1%20Starter%20--%20Field%20Driven%20Bracket.ntop) *This file was last updated in nTop 5.15.2* [220\_11\_1 Follow Along — Field Driven Bracket.pdf](https://files.learn.ntop.com/Courses/220%20Intro%20to%20Field%20Driven%20Design/PDFs/220_11_1%20Follow%20Along%20--%20Field%20Driven%20Bracket.pdf) # Knowledge Check: Creating and Using Fields Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/knowledge-check-creating-and-using-fields # Knowledge Check: Introduction to Fields Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/knowledge-check-introduction-to-fields # Mix Block Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/mix-block The **Mix** block is a tool for blending two implicit geometries by mixing the values of their scalar fields based on a given factor. ![](https://files.learn.ntop.com/lessons/intro-to-field-driven-design/220_10_1-MixBlockSimple.png) The Factor value can range between 0 and 1, with 0 being entirely Input A and 1 being entirely Input B. The image below shows the effect of mixing a Box (Scalar Field A) and a Cone (Scalar Field B) using varying mix factors. ![](https://files.learn.ntop.com/lessons/intro-to-field-driven-design/220_10_2-mix.jpg) The Mix *Factor* can also be ramped using the previously introduced **Ramp** block. See the example below with the same Box and Cone geometries. ![](https://files.learn.ntop.com/lessons/intro-to-field-driven-design/220_10_3-MixBlock.png) ![](https://files.learn.ntop.com/lessons/intro-to-field-driven-design/220_10_4-mixcropped.jpg) ## Best Practice Because the **Mix** block performs operations on two fields to represent a new geometry, it is always a good idea to perform a clean-up step afterward. This ensures that the resulting field does not have an infinite negative domain, which you cannot render into a geometry. Using the **Set Field Bounding Box** block, either manually set a bounding box using the **Bounding Box** block or go into the properties of the initial design body and grab its Bounding Box chip. The resulting field is within the specified bounding box. ![](https://files.learn.ntop.com/lessons/intro-to-field-driven-design/220_10_5-SetFBB.png) ## Example Application ![](https://files.learn.ntop.com/lessons/intro-to-field-driven-design/220_10_6-MixExample.png) Gradually blending two types of TPMS lattices Starting with the Gyroid at the bottom, a Ramped Mix was applied to gradually blend the structure with the Neovius lattice. # Optional: Intro to Fields Test Problem Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/optional-intro-to-fields-test-problem Now that you have learned about ramping and field driven design in nTop, feel free to try this optional problem with a review of the answer in the following lesson. Given the workflow below, use the **Ramp** block to vary the size of the holes (Branched Lattice thickness) and produce designs similar to those shown in the images below. Feel free to choose whichever distances and thicknesses look best to you, but vary the thickness in three different ways using the three different scalar fields below: * The “nTopology” letters * Any three points (your choice of location) * The “CAD faces to Ramp” variable located in the Geometry section of the Starter File. **Examples of Possible Final Designs:** ![](https://files.learn.ntop.com/lessons/optional-intro-to-fields-test-problem/220_14_1-optional-problem.jpg) ![](https://files.learn.ntop.com/lessons/optional-intro-to-fields-test-problem/220_14_2-OptTestProblem1.png) ![](https://files.learn.ntop.com/lessons/optional-intro-to-fields-test-problem/220_14_3-OptTestProblem2.jpg) > [!TIP] > > **Tip:** > Remember to look at the *Scalar field* you are using as your reference in the **Ramp *,*** as well as the resulting field, to define the best *In min*, *In max*, *Out min* and *Out max* values. **Estimated Time to Complete:** 20 minutes **Example File:** [220\_14\_1 Starter — Intro to Fields Test Problem.ntop](https://files.learn.ntop.com/Courses/220%20Intro%20to%20Field%20Driven%20Design/nTop%20Files/220_14_1%20Starter%20--%20Intro%20to%20Fields%20Test%20Problem.ntop) *This file was last updated in nTop 5.15.2* # Overview Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/overview Learn the basics of fields in nTop and how to use them to drive designs. ![Bracket with field-driven internal lattice and solid attachment points](https://storage.googleapis.com/files-learn/lessons/intro-to-field-driven-design/field-driven-bracket-overview.png) This course will walk you through the basics of Field Driven Design in nTop. After completing this course, you will be familiar with the different tools in nTop for working with fields and how you can use information from fields to influence your designs. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview) **What will be covered:** * Creating/importing data via Point Maps * Generating Fields from Point Maps * Using Ramps created from Point Maps to manipulate geometry * Using Ramps created from Point Maps to refine meshes for simulation > **[Before We Begin](/lessons/intro-to-field-driven-design/before-we-begin-field-driven-design)** ### Introduction to Fields > **[What is a Field?](/lessons/intro-to-field-driven-design/what-is-a-field)** > **[Field Viewer: Visualizing Fields in nTop](/lessons/intro-to-field-driven-design/field-viewer-visualizing-fields-in-ntop)** > **[Different Types of Fields in nTop](/lessons/intro-to-field-driven-design/different-types-of-fields-in-ntop)** > **[Knowledge Check: Introduction to Fields](/lessons/intro-to-field-driven-design/knowledge-check-introduction-to-fields)** ### Creating and Using Fields > **[Different Ways to Create Fields](/lessons/intro-to-field-driven-design/different-ways-to-create-fields)** > **[Ramp Block](/lessons/intro-to-field-driven-design/ramp-block)** > **[Transfer Function Block](/lessons/intro-to-field-driven-design/transfer-function-block)** > **[Mix Block](/lessons/intro-to-field-driven-design/mix-block)** > **[Follow Along: Field Driven Bracket](/lessons/intro-to-field-driven-design/follow-along-field-driven-bracket)** > **[Download: Completed Field Driven Bracket](/lessons/intro-to-field-driven-design/download-completed-field-driven-bracket)** > **[Knowledge Check: Creating and Using Fields](/lessons/intro-to-field-driven-design/knowledge-check-creating-and-using-fields)** ### Optional Test Problem > **[Optional: Intro to Fields Test Problem](/lessons/intro-to-field-driven-design/optional-intro-to-fields-test-problem)** > **[Answer to Optional Intro to Fields Test Problem](/lessons/intro-to-field-driven-design/answer-to-optional-intro-to-fields-test-problem)** ### What's Next > **[Resources](/lessons/intro-to-field-driven-design/resources)** # Ramp Block Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/ramp-block The **Ramp** block allows you to change a value based on a field. It can be applied to several types of scalar fields and allows you to rescale those existing fields to create new ones. ![](https://files.learn.ntop.com/lessons/ramp-block/image-37.png) * **Scalar Field**: The field driving the Ramp. Define the *In Min/In Max* values based on this input. * **In Min/In Max**: The values where the Ramp will begin (min) and end (max). These values are in relation to the Scalar field (with 0mm being the neutral edge of the field). Negative values go inside the Real Field, and positive values expand. * **Out Min/Out Max**: The Ramp output values. *Out Min* is the output value at the *In Min* locations, and *Out Max* is the value reached at the *In Max* locations. They are the output field's values as a function of the *Scalar Field* input. * **Continuity**: Represents how the values will Ramp (by continuity order). See the image below to view the differences. The values ramp between the *In Min* and *In Max* values. Before *In Min*, the value stays constant at the *Out Min* value, and after *In Max*, the value stays constant at the *Out Max* value. > [!NOTE] > > **Note**: **Include units** when defining the *Out Min/Out Max* values\*.\* ![](https://files.learn.ntop.com/lessons/ramp-block/Ramp1-1024x486.png) In this example, a plane was used for the *Scalar Field* input to create the gradual linear change seen between the start and end of the Ramp. ![](https://files.learn.ntop.com/lessons/ramp-block/220_8_3-continuity.jpg) Visualization of the three different continuity options: Geometric (C0), Tangential (C1), and Curvature (C2) The change does not always have to be linear, depending on the field used. For example, if you use the field of x2 to drive the Ramp block, you would get a quadratic change. See this article on the Help Center for a walkthrough on creating a quadratic Ramp. > [!TIP] > > **Tip:** > Use the Field Viewer to visualize the new field created by the **Ramp** block by selecting the block and using the hotkey '**F**'. The new field will represent the output values assigned based on the spatial variation of the input field, which can then be used to control different design parameters. ## Example Applications ![](https://files.learn.ntop.com/lessons/ramp-block/220_8_4-rampedvoro.jpg) Manipulating density and beam thickness of a Voronoi lattice based on the field of a plane This image shows the ramped lattice structure overlaid on the modifying field. The field modifies the seed point spacing and lattice thickness parameters. ![](https://files.learn.ntop.com/lessons/ramp-block/220_8_5-ramped.jpg) Manipulating lattice beam thickness based on simulated stress data that has been converted into a field and smoothened The lattice beams were assigned a larger thickness value at areas of higher stress and a smaller thickness value at areas of lower stress. # Resources Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/resources ### **Additional Resources on Field Driven Design:** 1. nTop Live: [How to Design Using Fields in nTop](https://www.ntop.com/resources/videos/how-to-apply-field-driven-design-in-ntopology/)(5min) 2. nTop Live: [Custom Perforation Patterns with Field-Driven Design](https://www.ntop.com/resources/videos/ntop-live-custom-perforation-patterns-with-field-driven-design/) (12min) 3. nTop Live: [Complete Control over Geometry via Field-Driven Design](https://www.ntop.com/resources/videos/ntop-live-how-to-have-complete-control-over-geometry-via-field-driven-design/) (11min) 4. nTop Live: [Complete Control over Geometry via Field-Driven Design Pt. 2](https://www.youtube.com/watch?v=Q3bnkj0zazo) (14min) 5. Article: [Quadratic Ramp Walkthrough](https://support.ntop.com/hc/en-us/articles/360062746253-How-to-create-a-quadratic-ramp) 6. Article: [Interpolating with Implicit Modeling](https://www.ntop.com/resources/blog/interpolating-with-implicit-modeling/) We recommend our [320: Data-Driven Design](/courses/320-data-driven-design/) course to use the **Ramp** block with simulation data. To learn about warping and further field-driven design techniques, we recommend our [321: Intermediate Field Driven Design](/courses/321-intermediate-field-driven-design/) course. # Transfer Function Block Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/transfer-function-block The **Transfer Function** block works very similarly to multiple mini ramps put together. This block gives you more control over the changes throughout the domain. ![](https://files.learn.ntop.com/lessons/transfer-function-block/220_9_1-TFBlock.png) Instead of taking in minimum and maximum input and output values like the **Ramp** block, the **Transfer Function** requires lists of values as it uses piecewise interpolation to compute the output field value of a function approximated by a set of field data points. ![](https://files.learn.ntop.com/lessons/transfer-function-block/220_9_2-tf.jpg) * **Value**: The field driving the Transfer Function, a reference for the input domain. * **Input**: Pre-populated as a Scalar List for a user-defined set of values. You can use the **Sequence from Bounds**, **Sequence**, or **Random Sequence** blocks for incremented or random set of values. You can find these in the *Math* tab of the Ribbon under *Utilities*. To learn more about using these sequence blocks, visit our [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/) course. ![](https://files.learn.ntop.com/lessons/transfer-function-block/image-38.png) * **Output**: A Scalar Field List of output values. The length of this list should match the length of the **Input** list. > [!NOTE] > > **Note**: When defining the Input and Output values, ***make sure to******include units**\*\*.* * **Extrapolation**: How the output values extend beyond the specified input domain. See the image below for a comparison of the two options. * Clamped: Bounding output values remain constant beyond the specified domain * Linear: Linear extrapolation of output values beyond the specified domain ![](https://files.learn.ntop.com/lessons/transfer-function-block/220_9_4-cropextra-1.jpg) Example of the two extrapolation options ## Example Application ![](https://files.learn.ntop.com/lessons/transfer-function-block/220_9_5-TFExample.jpg) Advanced manipulation of beam thickness and density of a Voronoi lattice using a Transfer Function # What is a Field? Source: https://docs.ntop.com/lessons/intro-to-field-driven-design/what-is-a-field A field is a rule associating a value to each location in the 3D space. These values are usually numbers (scalars). A scalar field, defined by a mathematical function *F*, returns a numerical value *F (x, y, z)* at each point *P = (x, y, z)*. The values throughout a field function are not always scalar. Sometimes, instead, they are vectors, yielding a vector field. Weather reports can help us to understand fields. For example, the temperature and humidity at various locations throughout the atmosphere demonstrate scalar fields, and wind velocity a vector field. ![](https://files.learn.ntop.com/lessons/what-is-a-field/220_2_1-Scalar-Vector.png) Weather reports provide some nice concrete examples of fields. For example, the temperature and humidity at various points in the atmosphere can both be regarded as scalar fields, and wind velocity as a vector field. ## Fields in nTop It may be helpful to think of fields as “gradients for geometry”. Just as gradients allow you to control the variation of color across an image, fields in nTop give you precise control over spatial variations of shape. In the 2D representation of a signed-distance field, ramped geometry, and a color gradient below, you can see that a field can be used to radially control geometry (in this case, the pattern and diameters of holes on a plate), just as a radial gradient is used to control the grey level on the right. ![](https://files.learn.ntop.com/lessons/what-is-a-field/220_2_2-Gradient.jpg) In nTop, you can use fields extensively to control spatial variations of different design variables such as lattice beam or wall thicknesses, fillet radii, and material properties. To create a variation, you can use any parameter with the “WiFi” symbol next to it to drive a scalar field instead of a fixed number. ![](https://files.learn.ntop.com/lessons/what-is-a-field/220_2_3-field-logo-1.png) This symbol next to an input indicates that a scalar field can be used. # Answer to Field Optimization Test Problem Source: https://docs.ntop.com/lessons/intro-to-field-optimization/answer-to-field-optimization-test-problem [https://www.youtube.com/embed/i3ZhHPnNP-c](https://www.youtube.com/embed/i3ZhHPnNP-c) > **Transcript** > > Hello! Let's review a solution to our field optimization test problem. To change the speed that you're viewing the video, feel free to use the controls at the bottom right of your screen. > > We're going to start off by reviewing inputs in our geometry and meshing section, left for you in the starter file. Starting off, we have our imported inner and outer CAD body. In this example, we are going to be infilling our intersection with a field optimized lattice while the outer body remains solid. In order to tie these two together, we need to use a tie constraint further down in our workflow. But in this section, we are creating our faces to use in that constraint. For our inner body, we have our inner faces selected, and then for our outer body, we then have our corresponding outer faces. > > Our final face list here is then going to be used for our constrained faces that we are going to use to apply our displacement constraint also further down in the workflow. Next in this section, we're going to then take our CAD bodies and turn them into implicit and meshes. We do this by using our **Implicit Body From CAD Body** block, and then our **Mesh From CAD Body** block as well. We then repeat the same exact process for our outer body that we used for our inner body. > > Once we have completed this, we can then do a final Boolean Union with our inner and outer bodies to make one solid wrench. After this, we can then move on to our meshing section. In order to run our optimization, we need to have an FE volume mesh of each region. To make this mesh, we are going to use a **Remesh Surface** block, then a **Volume Mesh**, and then an **FE Volume Mesh** block to create both our inner region and our outer region. We use the exact same meshing pipeline for each of these with a consistent mesh Edge length used in this variable here of 1 mm. > > Once we have our FE volume meshes defined, we can then go about creating our parametric FE model. Starting off in our model, we're going to be using our predefined material located again in the starter file, and then we're going to go about creating a parametric lattice component for our inner body. To do this, we then use our inner FE mesh as the input with our material, our unit cell boundary behavior, cell size, and then our thicknesses listed here below. When we view it on our screen, we then see the corresponding initial thickness inside of our lattice component. > > Next, to create the component then for our solid outer body, we use **FE Solid Component**. In this block, all we need is a solid mesh and a material, and then we have our solid outer component. To tie these two components together, we then need to use a tie constraint. We then use **FE Face Boundary** blocks for independent and dependent regions, and then use our inner tie faces and our outer tie faces to define each of these. If we view this tie constraint now, we can see the selected nodes in between our inner and outer region connecting both of our components. > > Finally, we can create our finished parametric FE model with our inner lattice component, our outer solid component, and our tie constraint. The next step in creating our field optimization block is then going to be defining our optimization objective. We are going to be using a structural compliance response. To do this, we are going to define a force and then a displacement restraint. To apply our force, we're going to use our **Force Boundary** included in the original file, and then we are going to use a vector in the X direction. To apply our displacement restraint, we're then going to use an **FE Face Boundary** using our constrained faces and then applying a zero in all of these directions. So, we have zero degrees of freedom at any of these points. > > Finally, we use these two as load cases in our **Structural Compliance Response** block, and we have now completed our optimization objective. Next, we are going to go about defining our constraint for this example. We're just going to be using a volume constraint, but we need to specify the region that we are constraining our volume. To do this, we use **FE Region By Body** with our inner body, and then a volume fraction response that it is inside of. For our value then, we specify less than 0.3 of our original volume. > > In our next section, we can then build our field optimization block. Inside of this block, we then will input our parametric FE model, our optimization objective that we choose to minimize, and then our constraint. The rest of our values we can leave as default or change at will. Once our response runs, we can then view our field optimization on our screen. Here we can see the varying thickness values of our lattice to support our applied force with our displacement restraint here. This is our implicit view, but we can also view each component and the property and state fields that accompany it as well. > > Finally, to post-process our result, we are going to use the property chips located inside of our field optimization, inside of then our optimized model, our parametric FE components, our body list, and then our list elements. We're going to drag each of these into the notebook, so then we have our inner body final and our outer body final. Now, to combine these two and have a finished result, we'll do a simple Boolean Union with a 1 mm blend radius, and then a Boolean Intersect with our original full wrench design region, so we now have a flush field optimized design. Feel free to download the file supplied below for a finished copy of what we just reviewed. This video reviews the answer to the optional Field Optimization test problem. Download the file below to follow along with the solution. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [440\_21\_Complete — Field Optimization Test Problem.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_21_Complete%20--%20Field%20Optimization%20Test%20Problem.ntop) *This file was last updated in nTop 4.16.3* # Before We Begin: Field Optimization Source: https://docs.ntop.com/lessons/intro-to-field-optimization/before-we-begin-field-optimization [https://www.youtube.com/embed/ebSLhn09O00](https://www.youtube.com/embed/ebSLhn09O00) In this course, we will learn how to… * Generate a **Parametric FE Model** to define the model's behavior and designate the design parameters to optimize * Define **Objectives** and **Constraints** describing the desired performance characteristics * Apply **Field Optimization** in nTop workflows # Combined Approach Source: https://docs.ntop.com/lessons/intro-to-field-optimization/combined-approach While Field Optimization offers novel capabilities in terms of performance optimization, you can use it in conjunction with traditional optimization strategies to design high-performing parts. * Use historical knowledge and basic engineering principles to apply ***manual shape optimization*** to design and import CAD parts to optimize with shapes, aiding optimal performance. * Run traditional ***topology optimization*** on a part to approach an optimal shape before optimizing more complex parameters with Field Optimization. See an example of this combined optimization approach in our blog post, [Optimizing the mass and natural frequency of the NASA EXCITE bracket with Field Optimization](https://www.ntop.com/resources/blog/optimizing-the-mass-and-natural-frequency-of-the-nasa-excite-bracket-with-field-optimization-or-ntop/). # Constraints Source: https://docs.ntop.com/lessons/intro-to-field-optimization/constraints The *Constraints* input in the **Field Optimization** block is optional as the block inputs (*Max Iterations, Min Objective Change, Min Variable Change,* and *Move Limit*) and the Parametric FE Domains used in the model constrain the problem. However, most field optimization problems contain additional constraints. You can use all the design responses available for topology optimization in Field Optimization. Field optimization supports all geometric constraints but the **Extrusion Constraint** and the **Overhang Constraint**. ![](https://files.learn.ntop.com/lessons/constraints/440_14_contrtaintlisst.jpg) > **Design Response Constraint** > > A defined design response drives the field optimization result. The most commonly used constraint applies a minimum or maximum bound to a design response, such as volume fraction, displacement, or stress. > > Choose a design response to constrain the problem, ensuring the solution meets and falls under or exceeds your quantitative restriction (dependent on your choice), for example: > > * limiting the final volume of your part to 30% or less (with an input of 0.3) > > * limiting the stress in a particular FE region to 30 MPa or less > > * limiting the displacement of a node in a specific FE region to 2 mm or less > > > [!TIP] > > > > **Tips:** > > * In cases where you want your solution to meet or exceed quantitative restrictions, include an upper and lower bound in the constraint. > * The **Stress Constraint** does not resolve the stress on the actual geometry, but the background mesh with the equivalent properties. For this reason, it is important to perform a post-optimization verification on the results to ensure meeting stress constraints. > **Passive Region Constraint** > > The **Passive Regions Constraint** specifies a volume in which the field optimization process will not modify the topology. > > Specify any FE region. By default, the FE regions for the boundary conditions are passive regions. > **Planar Symmetry Constraint** > > You can add this to the constraints list to ensure symmetry in the resulting part. We recommend using a symmetrical FE Mesh that matches the planar symmetry of the field optimization constraint, using the **Mirror FE Mesh** block. Although this constraint yields a symmetric geometric result, it does not require symmetric boundary conditions. > > The model should be inherently symmetric for this to work. Planes should be orthogonal to the model and placed through the centroid of the FE model. > > To create a symmetric mesh: > > * Cut the design space in half using the splitting plane > * Generate an FE mesh from this half > * Mirror the FE mesh about the plane to create the second half of your design space > * Merge the FE meshes to union the halves back together # Design Responses Source: https://docs.ntop.com/lessons/intro-to-field-optimization/design-responses When setting up field optimization, use any of nTop's available design responses to specify optimization objectives and constraints. See descriptions of these responses (review of [340: Topology Optimization](/courses/340-topology-optimization/) below. > **Structural Compliance** > > The **Structural Compliance Response** block allows users to control the stiffness of a region or part. Compliance, as the inverse of stiffness, can be minimized to provide parts with maximal stiffness or used as a constraint to control the degree of stiffness. > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_Structural-Compliance.jpg) > **Stress** > > The **Stress Response** block evaluates the maximum centroidal von Mises stress in an FE boundary at every step of your optimization. It lists a set of boundary conditions as part of a static analysis. > > Including this response in a Field Optimization problem yields a longer solution time, as a full-body static structural simulation is conducted at each iteration to determine the stresses imposed upon the part. > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_Stress-Response.jpg) > **Displacement** > > The **Displacement Response** lists a set of boundary conditions. As a constraint, this response defines the maximum displacement of a node within a mesh of an FE boundary for a given direction. As a response, this block can maximize or minimize displacement as an objective function. > > This response yields a longer solution time, as a full-body static structural simulation is conducted at each iteration to determine individual node displacements. > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_Displacement.png) > **Volume Fraction** > > The **Volume Fraction Response** reflects the optimized geometry volume divided by the initial design space volume. You can use this block as either an objective or a constraint. Consider using it as a constraint if you know your desired mass. > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_Volume-Fraction.png) > **Natural Frequency** > > Use the **Natural Frequency Response** to measure the smallest natural frequency of the FE Model for a set of boundary conditions. The response is computed by > > *f = mini+1..N(|fi-f0|)* > > where fi represents the N smallest natural frequencies obtained by solving a linear modal finite element analysis, and f0 is an offset value. > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_Natural-Freq.jpg) > **Mass** > > Use the **Mass Response** to measure the total mass in a region. The response is computed by integrating the density field over the region. > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_Mass-Response.png) > **Center of Mass** > > Use the **Center of Mass Response** to measure a component of the COM vector in a region. > > The response computes the response for each vector component by integrating one of the following functions over the region, where x, y, and z are the coordinates of the material point in the given reference frame, ρ is the density field, and M is the total mass in the region. > > | *vx= ρ\*x/M* | *vy= ρ\*y/M* | *vz= ρ\*z/M* | > | - | - | - | > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_comass.png) > **Moment of Inertia** > > Use a **Moment of Inertia Response** that measures a component of the mass moment of inertia tensor in some region. > > For each tensor component, the response is computed by integrating one of the following functions over the region, where x, y, and z are the coordinates of the material point in the given reference frame, and ρ is the density field. > > | *Ixx = ρ(y2+z2)* | *Ixy = Iyx = -ρ\*x\*y* | > | - | - | > | *Iyy= ρ(x2 + z2)* | *Ixz = lzx = -ρ\*x\*z* | > | *lzz= ρ(x2+y2)* | *lyz = lzy = -ρ\*y\*z* | > > ![](https://files.learn.ntop.com/lessons/design-responses/440_12_moi-resp.jpg) > [!NOTE] > > **Note**: Setting loaded regions to be passive can ensure a more optimal solution by preserving geometry at these places. # Field Optimization Inputs Source: https://docs.ntop.com/lessons/intro-to-field-optimization/field-optimization-inputs Like nTop's topology optimization capabilities, Field Optimization requires a *Model* to store geometry/material data, an *Objective* function to define the optimization goal, and optional *Constraints* to achieve meaningful results. Use the tabs below to understand the remaining inputs. ![](https://files.learn.ntop.com/lessons/field-optimization-inputs/440_4_FO.jpg) > **Max Iterations** > > Field Optimization is an iterative process that will run until the convergence criteria are met or a maximum number of iterations have been performed. The Max iterations input is required as invalid convergence criteria would otherwise result in an endless optimization loop. > **Min Objective Change** > > The objective change is the value of the objective function between consecutive iterations. When this difference drops below the Min objective change input, the Field Optimization is considered complete (as long as the constraints are satisfied). Decreasing this number will result in more accurate results but longer computation time. > **Min Variable Change** > > This input is a convergence threshold, as described above, but for the relative change of the design variable values from one iteration to the next. Decreasing this number will result in a more optimized result due to more frequent sampling but a longer computation time. > **Save Increment** > > This input controls the amount of data stored and accessible after the Field Optimization process. You can increase this number to minimize the size of your completed file. The default value of 1 will save results for all increments, whereas a result of 0 will save only the first and last increments. For any value, N, greater than 1, it will save results for every N increments. Note that the final iteration will always save. > **Move Limit** > > This value between 0 and 1 defines how much a design parameter's value may change between iterations as a percentage of the design variable's range. Decreasing this number will result in a more optimized result but a longer computation time. # Field Optimization vs. Traditional Approaches Source: https://docs.ntop.com/lessons/intro-to-field-optimization/field-optimization-vs-traditional-approaches To understand the value of Field Optimization, let's reflect on how the standard CAE approach to part optimization has evolved throughout recent history. Our blog post, [Optimizing the mass and natural frequency of the NASA EXCITE bracket with Field Optimization](https://www.ntop.com/resources/blog/optimizing-the-mass-and-natural-frequency-of-the-nasa-excite-bracket-with-field-optimization-or-ntop/), offers a great visual example of the three stages of development using manual optimization, topology optimization, and field optimization. ### *1990s – 2000s* ## Parametric & Shape Optimization Using B-rep modeling, designers could optimize parts based on a few fixed dimensions. This process was manual and required alternating among calculations, design, and empirical testing. Via the rise of FEA, shape optimization became available in designers' toolkits. The results of these earlier methods were generally **hand-designed, simply-shaped parts**. ![](https://learn.ntop.com/wp-content/uploads/2024/04/440_3_1990-Shape-Opt.gif) ### *2000s – 2010s* ## Topology Optimization Driven by FEA, topology optimization iteratively computes density values for each finite element in a given design space, representing how essential the elements are to the overall design objective. The process then filters these elements by a threshold value, yielding new, optimized shapes. ![](https://learn.ntop.com/wp-content/uploads/2024/04/440_3_2000-Topopt.gif) ### *Today* ## Field Optimization An extension of nTop's implicit modeling, field-driven design, and topology optimization, Field Optimization unlocks incredible computational power to engineers for physics-driven design problems. Because Field Optimization is built on implicit modeling technology, it enables **optimal designs regardless of geometric complexity**. ![](https://learn.ntop.com/wp-content/uploads/2024/04/440_3_Field-Opt-Today.gif) ## How is Field Optimization different from Topology Optimization? For Topology Optimization, nTop employs the popular SIMP (Solid Isotropic Material with Penalization) method by computing a density for each finite element in the design space based on its importance to satisfy a set of objectives and constraints. Elements are then filtered by their density values based on user input or heuristics. The result is, in simplified terms, a suggestion of the optimal shape given the user's objectives and constraints. Often, we see this as branching, solid geometry like that in the bracket above. In lieu of a SIMP approach, in Field Optimization, we use a custom material model and optimization algorithm enabling many different design parameters (i.e., beam thickness) to be optimized directly. This novel approach allows for high-performance, complex geometric (variable shell and lattice) outputs from optimizations. # Follow Along: Combined Optimization Approach Source: https://docs.ntop.com/lessons/intro-to-field-optimization/follow-along-combined-optimization-approach [https://www.youtube.com/embed/a\_GJ5EN2I9o](https://www.youtube.com/embed/a_GJ5EN2I9o) > **Transcript** > > This lesson explores a combined optimization approach using both topology and field optimization. Let's begin by walking through the geometry variables and initial static analysis sections of this notebook. We're using the same CAD bracket that we used back in the parametric FE components lesson. We have our CAD bracket, the implicit version of that bracket, and an initial surface mesh. We've added a list of restrained faces and included our fine edge length for remeshing our surface and a stainless steel 316 variable. > > A good practice for optimization is to walk through an initial static analysis of our part. Here, we've created an FE volume mesh using that initial mesh and remeshing it using our final edge length. We generated a volume mesh with that same edge length for our internal mesh elements, then converted to an FE volume mesh. Next, since we're going to use CAD faces to drive some of our boundaries in our static analysis, our field optimization, and our topology optimization, let's go ahead and add an **Associate FE Mesh** block, associating that initial FE volume mesh back to our CAD bracket. The geometry of our FE mesh won't change, but now for our boundary conditions, we can use CAD features to place our boundaries. We add a gravity load of 9.8 m/s squared in the Z direction. We apply a displacement restraint at all of our restrained faces, and we apply a bearing force at the inner cylindrical face of this hole. We can pull all of these boundary conditions into a **Static Analysis** block along with an FE model that includes our Associated mesh, as well as our stainless steel 316 material. > > Viewing our static analysis results, we can verify our mesh readiness to move on to our first optimization step. We'll start with the topology optimization as our initial lightweight step to remove any excess material from our part. Remember that topology optimization yields pretty simple surfaces, so we'll start by removing about 25% of our material. You'll see that your starter file includes a passive regions variable already, which includes all of our loaded CAD faces that have been thickened to 3 millimeters. We'll include these passive regions in a passive region constraint during our topology optimization. > > Now, let's add a **Topology Optimization** block into our notebook. Since we already created our FE model above in our static analysis, we can use that same FE model for this first optimization step. Now, let's set our objectives and constraints for our optimization objective. We'll add an **Objective** block and assign our goal as to minimize the structural compliance under the same boundary conditions as above. We'll pull in our gravity displacement and our bearing force. Since we want to start by removing 25% of our material, let's go ahead and add in a volume fraction constraint. We'll set our volume fraction as 0.75, indicating that the result of this topology optimization should be just under 75% of our initial volume. Let's add a second constraint for our passive regions, pulling in our **FE Region by Body** block. Our mesh will be that Associated mesh. Our entities will be the cells that we want to retain, and our body will be those passive regions bodies that we see in the viewport. Let's isolate that passive region to make sure that we've retained the proper spots. And now, our topology optimization can run. > > A while later, the topology optimization should be complete. Let's right-click, make this a variable, and call it topology optimization. Now, we can add a parent block, **Implicit Body from Topology Optimization**. Since we're now back in the implicit realm, we can add a **Smooth in Body** block, dropping that grid size to 0.5 millimeters and our smooth iterations to one for smoother results. We can change our interpolation type to cubic and view our results. Remember that this **Smoothen Body** block can smoothen at critical geometries, so let's do a little bit of post-processing to add those back in. Remembering that variable passive regions that we created above, let's use a Boolean intersect to isolate the regions where our passive regions and our initial bracket overlap. I'll add a **Boolean Intersect** block and pull in our passive regions and our implicit bracket. Isolating this block, I see that critical geometry. Now, I can just use a **Boolean Union** block and union this with our **Smooth and Body** result. Isolating our result, we now have our topology optimized bracket. > > I'll make this a variable and call it topology optimization part. Now, let's move forward to lightweighting with a more complex geometry. I'll collapse some of these blocks that I don't need to see anymore. > > Now, we can move forward to creating our parametric FE model for field optimization. Let's start by creating a volume mesh from our topology optimized part. As a shortcut, we can copy and paste our initial FE volume mesh that we used above. I'll expand my block and remove that initial bracket surface mesh from our **Remesh Surface** block. I'll replace it with a **Mesh from Implicit Body** block and pull in our topology optimized part as my implicit body. I'll add a tolerance of 25 mm and my meshing blocks to run. For housekeeping's sake, I'll rename my variable to FO volume mesh. > > Like we did before, I'll add an **Associate FE Mesh** block so I can use those same CAD faces to recall our boundaries. Our CAD body will again be our CAD bracket, and let's add a tolerance of 0.25 mm. I'll right-click and make this a variable called FO associate mesh. > > Now, we can move forward to creating our parametric FE component for our parametric FE model. In this case, let's use a parametric shell infill component. As our mesh, we'll use that FO associated mesh that we've created. We'll add our stainless steel 316 and for this example, let's use a body-centered cubic unit cell. We'll set a cell size of 2 mm and set our min infill and max infill thicknesses to 0.3 and 1 mm, respectively. Our min and max shell thicknesses can be 0.5 and 1 mm. Let's set our initial infill thickness and our initial shell thickness to 0.5 and 0.3 mm, respectively. Allowing that to run and section cutting our component, we see that we've now created the shelled and infilled bracket. We can make this a variable called parametric shell infill component. > > Let's add it to a parametric FE model, making that a variable called parametric FE model. Now we can move forward to our field optimization. Let's add our **Field Optimization** block, pull in our model, and move on to generate our objective and constraints. Like we did for our topology optimization, let's set our objective to minimize structural compliance. We'll add the same load case, but now those loads should be applied to our topology optimized part rather than our initial bracket. Let's copy those three loads that we've created above—the displacement, the force, and the gravity loads—and paste them into this new section. I'll rename these variables with FO to indicate that these are being applied for our field optimization. Opening these blocks, I'll replace any of our associated meshes from the topology optimization with our field optimization associated meshes instead. > > Now I can view how these boundary conditions will be applied to my part, and I'll add them to my structural compliance response. Despite the field optimization already being constrained by the max and min parameters values, I'll add another constraint for volume fraction. In this case, I want to further lightweight my topology optimized part to retain only half of its input volume. I'll hit enter and allow my field optimization to run. > > A few minutes later, let's view the results by opening up our log panel, and we see that our FO took 52 iterations to converge. We can section cut our field optimization and view the thicknesses of our shell and our inside struts. Currently, we're in implicit view, but we can come over here to view our property fields as well as our state fields. Here, we're viewing shell thickness and we can see the infill thickness. Let's make our field optimization into a variable called FO results and we can convert to an implicit body, naming this final body optimized part. For further validation, you can rerun a static analysis block using another associated mesh. In this lesson, we will discuss a combined optimization approach using topology optimization for lightweighting a bracket's general shape and Field Optimization for geometrically complex, shell-infill lightweighting. Please download the nTop file below to follow along with the tutorial. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [440\_19\_Starter — Combined Optimization Approach.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_19_Starter%20--%20Combined%20Optimization%20Approach.ntop) *This file was last updated in nTop 4.16.3* [440\_19\_Complete — Combined Optimization Approach.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_19_Complete%20--%20Combined%20Optimization%20Approach.ntop) *This file was last updated in nTop *4.16.3** # Follow Along: Multi-Domain Parametric FE Model Source: https://docs.ntop.com/lessons/intro-to-field-optimization/follow-along-multi-domain-parametric-fe-model [https://www.youtube.com/embed/HYfdwlnU0r0](https://www.youtube.com/embed/HYfdwlnU0r0) > **Transcript** > > In this follow-along, we are going to be reviewing how to create a parametric FE model for a field optimization that we are performing on the midsole of the shoe that we are looking at below, but with our attached outsole here. So, we will have two separate regions inside of this optimization. > > We can see to the left in our notebook that we have three sections already completed for us: our geometry and import, our volume mesh, and our parametric FE components defined with a material, with a parametric **Voro** component for our midsole, and for a regular FE **Solid** component for our outsole. > > The first step is going to be navigating to our beta tab, coming to our field optimization section, and choosing **Parametric FE Model**. If I were to be running a field optimization with one component to finish my parametric FE model, all I would need to do is to drag my parametric FE component into my model section. However, since we have two separate components in this example, we are going to be dragging our parametric component as well as our regular FE **Solid** component into this section, and we're going to be specifying a connector between both of these regions. > > To start off, I'm going to right-click and say “make a variable” for our parametric FE model, and I am going to name this “PF model” for short. Next, I'm going to hit the plus here, so I now have two inputs for my components, and I'm going to drag our midsole and our outsole into the section below. > > Our next step is then going to be specifying our tie connector. I can find our tie connector block by coming to our simulation tab above, going to our model section, and choosing **Tie Constraint**. > > To choose our boundary regions, I am then going to double-click on these empty inputs here and choose **FE Face Boundary** for both of them. For face input, I am going to use our bottom face specified in our geometry and import section. To then copy that into our CAD face list again below, I can simply hold control, click on the face that I want to copy, and drag it into my section. For our first mesh, I am going to choose our outsole mesh. Then, I'm going to choose nodes, and on our screen, we will see the nodes on our boundary face on our outsole mesh. Our next step is then going to be taking our midsole mesh and repeating the same process again. I'll select nodes, and now I can see our nodes again on that same boundary face but now on our midsole mesh. > > I can see when this automatically ran, we got a tolerance error because this tolerance in between our two regions is too small. To fix that, I'm going to update it to 2 mm and then hit enter. If we isolate our **Tie Constraint** now, I can see all of our connector nodes in between our regions. Finally, I'm going to right-click, make this into a variable, and I'm going to name it “tie constraint.” > > To finish off our FE model now, I'm going to drag my tie constraint into my model, and if I isolate this and wait for our implicit view to render, then I can view our final connected parametric FE model on our screen. In this lesson, we will set up a multi-body **Parametric FE Model** of a shoe sole. We will use this shoe example throughout our Field Optimization exploration. You can download the starter file below to follow along with the video. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [440\_10\_Starter — Multi-Domain Parametric FE Model.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_10_Starter%20--%20Multi-Component%20Parametric%20FE%20Model.ntop) *This file was last updated in nTop 4.16.3* [440\_10\_Complete — Multi-Domain Parametric FE Model.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_10_Complete%20--%20Multi-Domain%20Parametric%20FE%20Model.ntop) *This file was last updated in nTop *4.16.3** # Follow Along: Objectives & Constraints Source: https://docs.ntop.com/lessons/intro-to-field-optimization/follow-along-objectives-constraints [https://www.youtube.com/embed/I6pbfAnbUuA](https://www.youtube.com/embed/I6pbfAnbUuA) > **Transcript** > > In this follow-along, we are going to be reviewing defining objectives and constraints for our field optimization, optimizing the Voronoi midsole of this midsole and outsole combination that we see on the screen. So far, we have already created our parametric FE model using our **Parametric FE** component and our **Regular FE** component from our volume meshes that were imported in our geometry in the import section above. > > We're going to begin by choosing our optimization objective. I can do this by coming to my responses and choosing **Optimization Objective**. From here, I can double click inside of my **Design Response** block and I can choose **Structural Compliance Response**. We are then going to choose two load cases that we will put in this load case input here. These two are going to be a force applied downward on our midsole here and a displacement restraint placed at the bottom of our outsole here. First, though, we are going to go about defining our force. I can find our **Force** block by coming to our simulation Tab and going to our boundary conditions. For our force, I'm going to double click on our input and I'm going to select **FE Boundary by Body**. With this block, I'm going to then select our midsole mesh nodes as my entity, and for my body, I'm going to use our leg variable above in our geometry and import section. Choosing this leg variable is then going to choose the nodes where our midsole and our foot interact, giving us our foot imprint for our force here below. For a force vector, then I'm going to use 0 and 0 in our X and Y direction and then -500 Newtons in our Z direction. Once I hit enter, I can see our yellow glyphs indicating our force in the negative Z direction. To finish our force, then I'm going to right click and say make variable and just name this Force. > > Next, I'm going to go about creating my displacement restraint below my force. To do this, I'll come back to our simulation Tab and I'm going to go over to my boundary conditions again and select **Displacement Restraint**. For my boundary, for my displacement restraint, I'm going to double click and select **FE Boundary by Flood Fill**. For my mesh, I'm then going to choose outsole mesh nodes for my entity, and for my origin, I'm simply going to click into one of these tabs. Then I'm going to see this slider appear on my screen and I'm going to drag it as close to the bottom of my midsole as I can. When I let go, I can see the glyphs that are highlighted by this boundary by flood fill, and I can see we have a few too many. So I'm going to adjust my angle here to say 20 degrees, and now I can see I have all of the nodes at the bottom of my mesh selected. When I hover over this, I can then see that I have my displacement restraint set up at the bottom of my shoe while the yellow force is applied to the top of my midsole. My final step here with my displacement restraint is right clicking, making it a variable, and naming it Displacement. Our final step here is just going to be taking both of these and I'm closing them by hitting spacebar and dragging them into our boundary conditions here. To finish our optimization objective, I'm going to right-click, make it a variable, and name it Optimization Objectives. > > Now that our objectives are done, I'm going to close this block and we're going to move on to our final block where we are going to be defining our constraint. To define our constraint, I'll come back over to our optimization tab to our constraints, and I'll choose **Design Response Constraint**. For a response, then I'm going to double click and select **Volume Fraction Response**. When looking at my optimization object here, I know that the only region that I want to minimize the volume of is going to be our parametric FE region here. To select this region, I can then double click in this block and choose **FE Region by Body**. I'll then choose my corresponding mesh, my midsole mesh, from my entity, I'll use cells, and then for my body, I'll scroll all the way to the top and use midsole from my first section. Now that that is run, I can see the selected body on my screen if I visualize this block, and for my value, I'm going to say 0.2, meaning I want my final optimized result to have less than 0.2 of the original volume of this midsole. To finish this constraint, I'll then right-click, say make a variable, and name this Volume Constraint. In this lesson, we will define objectives and constraints for our Field Optimization problem. This exercise builds on that of the [Follow Along: Multi-Domain Parametric FE Model](https://learn.ntop.com/lessons/follow-along-multi-component-parametric-fe-model/) lesson. To follow along, continue using the shoe sole file from that lesson or download the starter file below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [440\_15\_Starter — Objectives and Constraints.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_15_Starter%20--%20Objectives%20and%20Constraints.ntop) *This file was last updated in nTop 4.16.3* [440\_15\_Complete — Objectives and Constraints.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_15_Complete%20--%20Objectives%20and%20Constraints.ntop) *This file was last updated in nTop *4.16.3** # Follow Along: Parametric FE Domains Source: https://docs.ntop.com/lessons/intro-to-field-optimization/follow-along-parametric-fe-domains [https://www.youtube.com/embed/6xHmR8v2Cac](https://www.youtube.com/embed/6xHmR8v2Cac) > **Transcript** > > In this follow-along exercise, we'll discuss meshing considerations and best practices for creating four different parametric FE components: the Parametric Lattice component, the Parametric Shell component, the Parametric Shell Infill component, and the Parametric Foro component. We'll consider the effects of meshing, namely mesh edge length, on computation time and accuracy in the context of homogenization and other field optimization considerations. > > Let's step back to the beginning of our workflow to take a look at all of the variables that we've already created. We started with a CAD bracket import and converted the optimization body to an implicit. Then we created an initial mesh from our CAD body. As we know, this initial mesh often creates surface elements that are too large or too irregular for FAA or optimization. So our first step in creating any FE model is to use a **Remesh Surface** block. > > For our first parametric FE component that we're working with, the Parametric Lattice component, we want to start with an edge length that's pretty fine compared to the overall scale of our part. Here we'll use this variable that we've labeled fine Edge length to remesh our initial surface to generate this surface mesh with consistently sized and well-distributed mesh elements. > > Then we moved on to creating our volume mesh. Since the Parametric Lattice component uses field homogenization in the background of FO, we'll create a volume mesh using that same fine Edge length that we used in the fine surface mesh. Now we can distribute our fine Edge length throughout our part to generate our volume mesh. > > Finally, we can use this volume mesh in our Parametric Lattice component. We'll add our discretization to the **FE Volume Mesh** block and drop it into the Parametric Lattice component block. Note that although we're making a Parametric Lattice component, we'll always use an FE volume mesh with a solid volume in any of our parametric FE components. > > Within our Parametric Lattice component block is where we'll add our unit cell boundary behavior and any of our lattice parameters. Like we've done in all of our other FE models, we'll add our material here, in this case, just Stainless Steel 316. Note that for field optimization, we can only optimize isotropic materials. > > We'll add our unit cell, in this case, a Body Centered Cubic, then set our constant cell size. This will be cubic and rectangularly mapped. Next, we'll set our minimum, maximum, and initial thickness. The implicit view of your Parametric Lattice component will reflect that initial thickness value during field optimization. This initial thickness can also drive how many iterations the FO completes. The closer your initial thickness is to the optimized value, the fewer iterations your field optimization will take to converge. > > Setting our boundary behavior to conformal, we'll pull all of the vertices and open beams from our trimmed lattice to the surface of our input FE volume mesh. If instead we change that boundary behavior to trimmed, we would see sharp lattice cut-offs as if we had used the **Trim Lattice** block with that initial implicit bracket. By default, the density threshold is set to zero. Maintaining this will fill the entire domain with a lattice. Whereas, similar to topology optimization, if you increase this toward one, the FO process will completely remove less important material, which could result in a part with a slightly different shape that still falls within that initial design domain. > > The optional filter size input can give you control over the smoothness of the underlying field during the FO process, similar to the **Smoothing Field** block. If you leave this input empty, the filter size will be automatically generated based on the size of your part. > > Next, let's take a look at the parametric shell component. Remember, the parametric shell component will be this solid shell with no volume on the inside. Note that although this component is a shell, we'll need a volume mesh to input into this block just like we did before. > > We'll use that fine surface mesh that we used for our parametric lattice component. Instead of infilling it with fine mesh elements, now we'll use a **Ramp** block to create these coarser elements toward the inside of our part. Since the field optimization won't be sensitive to this material on the inside, we can use a much coarser edge length to mesh this inner volume. If you recall from our course on field-driven design, we can use this **Ramp** block and an implicit body to drive the edge length throughout our mesh. > > Let's take a look at the scalar field of our implicit bracket. I'll use the hotkey F to view our field and we can turn off the visibility of our volume mesh for now. We're setting our max shell thickness to 3 mm, so probing our values on the inside of our part, we can take a look from our surface down to the 3 mm mark. But we see all of these negative values toward the inside, so we'll set our in Min and our in Max of our **Ramp** block to -3. > > Remember, the inside distances of an implicit body will all be negative and the outer distances will all be positive. So at this distance of -3, we'll see a transition between our coarse edge length on the inside of our part and our edge length toward the shell. Taking a look at our volume mesh, we see that our resulting mesh has these coarse insides and the fine outer elements. We'll drop that volume mesh into another **FE Volume Mesh** block and add it to our parametric shell component block. > > Just like before, we'll add our material, our min and max shell thickness, and our initial shell thickness, remembering that the closer that initial shell thickness is to our optimized shell, the faster our field optimization will run. > > Now, let's take a look at the parametric shell infill component. Since this component also uses homogenization throughout, we'll use that same fine volume mesh that we used for our initial parametric lattice component to create our parametric shell infill component. Here we'll set our lattice parameters, in this case, using a TPMS gyroid unit cell, setting our cell size as before, then specifying those optimizable parameters. We'll set a min and max infill thickness as well as a min and max shell thickness. During our optimization, both of these parameters will be optimized. Again, we'll add our initial infill and our initial shell thicknesses. > > Finally, let's take a look at our parametric voronoi component. Like we saw in the parametric lattice and the parametric shell infill component, since this will be homogenized throughout, we'll again use that fine volume mesh. We'll add our material and our optimizable parameters of cell size and thickness. Note that the voronoi component is the only component in which you can optimize cell size. We'll set a min and a max and our initial cell size, as well as our min and max thickness and that initial value. > > We'll take a look at our final parametric component and now we can turn our attention to our heads-up display. So far, we've been working in our implicit view to visualize the topology of each of these different components. We also have the options to view the property fields, which include relative density, density, Young's modulus, Poisson's ratio, and Shear modulus. We can also view state fields to understand the states of the optimizable parameters, in this case, cell size and beam thickness. At this stage, many of those values will be constant, but after the field optimization, we should see gradients in these values. > > Now that we've considered parametric FE components, let's review optimization objectives and constraints to build our own field optimization problem. This lesson discusses the meshing considerations, inputs, and view options for **Parametric FE Domains**. To follow along with the video, you can download the file below. **Example File:** [440\_8\_Starter — Parametric FE Domains.ntop](https://storage.googleapis.com/files-learn/Courses/440%20Field%20Optimization/nTop%20Files/440_8_Starter%20--%20Parametric%20FE%20Domains.ntop) *This file was last updated in nTop 4.16.3* [440\_8\_Complete — Parametric FE Domains.ntop](https://storage.googleapis.com/files-learn/Courses/440%20Field%20Optimization/nTop%20Files/440_8_Complete%20--%20Parametric%20FE%20Domains.ntop) *This file was last updated in nTop *4.16.3** > [!NOTE] > > **Note**: In these files, the *'Initial Surface Mesh'* is set to [Manual Run Mode](https://support.ntop.com/hc/en-us/articles/15740885830803-How-to-reduce-the-file-size-using-Manual-Run-Mode) to unbuild blocks and minimize file size. # Follow Along: Running a Field Optimization Source: https://docs.ntop.com/lessons/intro-to-field-optimization/follow-along-running-a-field-optimization [https://www.youtube.com/embed/pEotDyY8uvg](https://www.youtube.com/embed/pEotDyY8uvg) > **Transcript** > > This follow-along is going to be based on running a field optimization with the objectives and constraints and parametric FE model that we have defined in the prior two follow-alongs. To begin running our field optimization, I'll simply navigate to my Beta Tab and to the field optimization section, and select **Field Optimization**. > > Once I do that, I can see that I have three inputs here: one for each of my model, my objective, and my constraints that I already have defined. I'll simply drag my volume constraint, my optimization objective, and my parametric FE model into these inputs and leave default values for everything else. Once I drag these, I can see that our field optimization will begin running, where I can see some of the progress in the bottom left of my screen. Another place that I can see the progress of my field optimization is by coming to the bottom right of my screen and saying, “Show Bottom Panel,” where I can see real-time updates of which iteration I'm on, as well as the objective, constraint, and max change. > > If I want to see a more detailed view, I can choose to view my block details located in the **Field Optimization** block, and I can see a graph of my total objective as well as my constraint here. I can see that our constraint has reached our defined value, and we are going to begin minimizing our total objective. > > As my field optimization continues to progress on my screen, I can again see further updates in this bottom left or in my hidden panel below, but I can also use my heads-up display located on my screen to view real-time results. Right now, I'm viewing all components, and I'm viewing the implicit view, and I can even begin to see some changes in the lattice on my screen. If I want to see some more information about this lattice, I can choose to go to my Component Zero and then navigate to my property or my state fields. In each one of these, I can then choose between viewing our beam thickness or our cell size values. And with our property fields, I can view information such as our relative density, our density, our Poisson's ratio, our Young's modulus, and our shear modulus as well. > > Just right there, if you caught it on my screen, we can see updates every five increments because we have a specified save increment of five here on the left of our screen. If I wanted to view every iteration, then I could choose this to one instead of five as well. > > Now that our field optimization is complete, we can finish our workflow. I can see that it's finished after 73 iterations here at the bottom of the screen. To finish this, my first step is going to be right-clicking and making this a variable that I'll entitle **Field Optimization**. To get our optimized results out of this block, I can come in, navigate to my properties, to my optimized model, and then to my parametric FE components, and then view this list of bodies. I'll drag this list into my notebook, and I'll entitle this **Finished Components**. If I view this, this is now a list of implicit versions of my finished parts. The absolute final step here would then to be a Boolean Union, and I'm searching for by hitting the hotkey S while hovering in my notebook, deleting this bodies list, and dropping our B's list in. When I entitle this **Final Union** by making it a variable, I have now completed my midsole and outsole optimization workflow in nTop. In this lesson, we will continue building on our shoe sole problem, running the field optimization, and discussing results. To follow along with the tutorial, continue working in your file from the 'Follow Along: Objectives and Constraints' lesson, or download the starter file below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [440\_16\_Starter — Running a Field Optimization.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_16_Starter%20--%20Running%20a%20Field%20Optimization.ntop) *This file was last updated in nTop 4.16.3* **Example File:** [440\_16\_Complete — Running a Field Optimization.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_16_Complete%20--%20Running%20a%20Field%20Optimization.ntop) *This file was last updated in nTop *4.16.3** # Homogenization Considerations for Field Optimization Source: https://docs.ntop.com/lessons/intro-to-field-optimization/homogenization-considerations-for-field-optimization ## Homogenization Review Field Optimization employs homogenization, a technique that allows you to extend micro-scale properties across a macro-scale problem. When using a data model that relies on homogenization (**Parametric Lattice Domain**, **Parametric Shell-Infill Domain**, and **Parametric Voronoi Domain**), you should consider some assumptions such as your lattice, mesh size, and specific engineering problem as homogenization is an approximation-based method. **Homogenization Advantages** * High-speed computation * Simulates bulk large-scale behavior for large and high-density lattices **Homogenization Considerations** * Works best with high-density lattice cells * Does not consider certain mechanical behaviors, such as lattice edge effects and stress concentrations * Result accuracy will depend on the mesh size, the data collected, and the homogenization assumptions' accuracy for the given engineering problem. ## Lattice Optimization Considerations As in simulation and topology optimization, FE mesh edge length can significantly influence the accuracy of the results. Finer meshes yield more accurate results (optimal optimization outputs) but negatively affect speed and memory performance. Another consideration for optimizing lattice structures is lattice cell size. Since larger lattice cells span greater distances across fields, they can yield abrupt parameter transitions and neglect isolated field behavior. Smaller cells see more gradual transitions and reflect more precise field data. Finally, when optimizing lattices, consider the ratio between the design space and cell size dimensions. Since the lattice properties rely on homogenization, a considerable number of unit cells should occupy the design space to reduce the effect of the boundary and produce more accurate results. As a rule of thumb, a minimum of 10 unit cells should span each dimension (length, width, height) of the design space. ![](https://files.learn.ntop.com/lessons/homogenization-considerations-for-field-optimization/440_6_Optimization-Considerations.jpg) For a deeper dive into homogenization, review [342: Lattice FEA](/courses/342-lattice-fea-2/). # Knowledge Check: Field Optimization Source: https://docs.ntop.com/lessons/intro-to-field-optimization/knowledge-check-field-optimization # Knowledge Check: Parametric FE Model Source: https://docs.ntop.com/lessons/intro-to-field-optimization/knowledge-check-parametric-fe-model # Objectives Source: https://docs.ntop.com/lessons/intro-to-field-optimization/objectives The Optimization objective is what property(ies), or **Design Response(s)**, we hope to minimize or maximize within our part. nTop supports several design responses, including Structural Compliance, Volume Fraction, Displacement, and Stress. Use the **Optimization Objective** block to specify the design response(s). ![](https://files.learn.ntop.com/lessons/objectives/440_13_opt-obj.jpg) Just like you would in a Topology Optimization setup, define the response(s) you want to minimize or maximize using the **Optimization Objective** block. If you leave the optional *Weights* input blank, all the design responses will be weighted equally in your Optimization Objective. However, it is critical to adjust the weightings for accurate optimizations if combining unlike responses. To customize weighting, input a **Scalar List** block with the same number of list elements as your **Design Response List**. Assign weights based on corresponding list elements. # Optional: Field Optimization Test Problem Source: https://docs.ntop.com/lessons/intro-to-field-optimization/optional-field-optimization-test-problem Now that you know how to run Field Optimization in nTop, try this optional problem and compare your workflow to our solution in the next lesson. ## Problem Statement Using the ***Inner FE Mesh*** and ***Outer FE Mesh*** variables in the starter file, set up and run a Field Optimization to generate a latticed wrench. Minimize structural compliance of the part under the loading conditions below while constraining the inner body to a volume fraction of less than 0.3. * Apply a **Force**(yellow arrows) of 10,000N in the negative *x* direction to the area selected in the provided ***Force Boundary*** * Apply a **Displacement Restraint** (red cones) to the wrench jaw profile While setting up your model, use a **Tie Constraint** to connect the inner **Parametric Lattice Component** and solid outer component. Use the following inputs to define the inner lattice component: * *Face-centered cubic unit cell* * *Conformal Boundary behavior* * *2 mm Cell size* * *0.3 mm Min thickness* * *0.8 mm Max thickness* Pull the optimized implicit bodies from the **Field Optimization** block into your notebook and use Boolean operations to generate your final part. ![](https://files.learn.ntop.com/lessons/optional-field-optimization-test-problem/440_20_Test.jpg) **Estimated Time to Complete:** 20 minutes > [!TIP] > > **Tip:** > Use an **FE Region by Body** nested inside a **Volume Fraction Response** to isolate the inner body to constrain to a specific region. **Example File:** [440\_20\_Starter — Field Optimization Test Problem.ntop](https://files.learn.ntop.com/Courses/440%20Field%20Optimization/nTop%20Files/440_20_Starter%20--%20Field%20Optimization%20Test%20Problem.ntop) *This file was last updated in nTop 4.16.3* # Overview Source: https://docs.ntop.com/lessons/intro-to-field-optimization/overview This course will explore Field Optimization, nTop's new generative design technology that enables you to solve today’s most complex engineering problems, accelerating and improving decision-making for highly engineered parts.After completing this course, you will understand how to set up, run, and post-process high-performance designs using FO. ![Featured Image](https://mintlify.s3.us-west-1.amazonaws.com/ntopology/lessons/intro-to-field-optimization/images/lessons/intro-to-field-optimization/Featured_Image_Field_Optimization.png) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [240: Intro to Simulation](/lessons/intro-to-structural-analysis/overview), [340: Topology Optimization](/lessons/intro-to-topology-optimization/overview), [342: Lattice FEA](/lessons/lattice-structural-analysis/overview) **What will be covered:** * What is Field Optimization? * Parametric FE Model * Objectives and Constraints * Field Optimization Results * Optimization Approaches and Considerations > **[Before We Begin](/lessons/intro-to-field-optimization/before-we-begin-field-optimization)** > **[What is Field Optimization?](/lessons/intro-to-field-optimization/what-is-field-optimization)** ### Preparing For Field Optimization > **[Field Optimization Inputs](/lessons/intro-to-field-optimization/field-optimization-inputs)** ### Parametric FE Model > **[Parametric FE Model](/lessons/intro-to-field-optimization/parametric-fe-model)** > **[Homogenization Considerations for Field Optimization](/lessons/intro-to-field-optimization/parametric-fe-model)** > **[Parametric FE Domains](/lessons/intro-to-field-optimization/parametric-fe-domains)** > **[Follow Along: Parametric FE Domains](/lessons/intro-to-field-optimization/follow-along-parametric-fe-domains)** > **[Review: FE Connectors](/lessons/intro-to-field-optimization/review-fe-connectors)** > **[Follow Along: Multi-Domain Parametric FE Model](/lessons/intro-to-field-optimization/follow-along-multi-domain-parametric-fe-model)** > **[Knowledge Check: Parametric FE Model](/lessons/intro-to-field-optimization/knowledge-check-parametric-fe-model)** ### Objectives & Constraints > **[Design Responses](/lessons/intro-to-field-optimization/design-responses)** > **[Objectives](/lessons/intro-to-field-optimization/objectives)** > **[Constraints](/lessons/intro-to-field-optimization/constraints)** > **[Follow Along: Objectives & Constraints](/lessons/intro-to-field-optimization/follow-along-objectives-constraints)** ### Building A Field Optimization Workflow > **[Follow Along: Running a Field Optimization](/lessons/intro-to-field-optimization/follow-along-running-a-field-optimization)** > **[Knowledge Check: Field Optimization](/lessons/intro-to-field-optimization/knowledge-check-parametric-fe-model)** ### Combined Optimization Approach > **[Combined Approach](/lessons/intro-to-field-optimization/combined-approach)** > **[Follow Along: Combined Optimization Approach](/lessons/intro-to-field-optimization/follow-along-combined-optimization-approach)** ### Optional Test Problem > **[Optional: Field Optimization Test Problem](/lessons/intro-to-field-optimization/optional-field-optimization-test-problem)** > **[Answer to Field Optimization Test Problem](/lessons/intro-to-field-optimization/answer-to-field-optimization-test-problem)** ### What's Next > **[Resources](/lessons/intro-to-field-optimization/resources)** # Parametric FE Domains Source: https://docs.ntop.com/lessons/intro-to-field-optimization/parametric-fe-domains Choose from four available Parametric FE Domain blocks to set up your model's domain(s). ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-Lattice.png) ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-Shell.png) ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Shell-Infill.png) ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Paramteric-Voronoi.png) **Parametric Lattice Domain** **Parametric Shell Domain** **Parametric Shell-Infill Domain** **Parametric Voronoi Domain** Regardless of the intended output geometry, the *Mesh* input for any Parametric FE Domain will always be an **FE Volume Mesh**. Navigate the accordion below to understand each parametric domain's design parameters and input considerations. > **Parametric Lattice Domain** > > Use this domain to generate optimized lattice structures. The domain's homogenization data is gathered from thousands of simulations to correlate the beam thickness of the selected unit cell to its mechanical response. The domain supports our face-based, graph-based, or TPMS unit cells and produces a rectangular lattice structure. See the Mesh input below. > > \*\*Constant Design Parameters:\*\**Unit Cell, Boundary Behavior, Cell Size* > > \*\*Optimizable Design Parameters:\*\**Min/Max Thickness* > > > [!TIP] > > > > **Tips:** > > * The infill material model is homogenization-based, so the model accuracy will improve as you reduce the size of your *Cell Size*/design space ratio. > * Adjust the *Initial Thickness* to view the geometry generated for the Upper/Lower bounds to ensure manufacturability before running a Field Optimization. > * Use the *Density Threshold* to alter the lattice thickness and design space. The threshold value will remove less significant design space volume. A value of 0 will remove no design space and behave solely as a thickness optimization. A value of 0.3 will remove areas with less than a 30% relative density. > * The maximum allowable lattice thickness is 1.5 times the *Cell Size*. Thickness is limited due to the data collected, as most lattices reach solid volume before this threshold. > > ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-Lattice-Component.jpg) > **Parametric Shell Domain** > > Use this domain to generate optimized shell structures. > > **Constant Design Parameters:** N/A > > \*\*Optimizable Design Parameters:\*\**Min/Max Shell Thickness* > > > [!TIP] > > > > **Tips:** > > * For the most accurate results, the input mesh should be very fine from the surface through the maximum shell thickness. To ensure fine mesh elements throughout the shell region while optimizing for computation time, you can use a **Ramp** block for *Edge Length* during the **Remesh Surface** and **Volume Mesh** steps to refine your input *Mesh* across the expected shell region, as shown below. > * The *Filter Size* input is a length measure that controls the smoothness of the design parameter field. If not specified, the process will apply an estimate based on the model size. As *Filter Size* increases, the problem constraint increases, and the granularity of the output field decreases, yielding smoother geometry that could result in less optimal results. > > ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-Shell-Component.jpg) > **Parametric Shell-Infill Domain** > > This block utilizes the same data set used in the **Parametric Lattice Domain** to determine the homogenized properties of the lattice infill. It uses the same approach for shell optimization as the **Parametric Shell Domain** block. Therefore, you should take the same *Mesh* input considerations for this type as the two above—see the mesh below. > > \*\*Constant Design Parameters:\*\**Unit Cell, Cell Size* > > \*\*Optimizable Design Parameters:\*\**Min/Max Infill Thickness*, *Min/Max Shell Thickness* > > > [!TIP] > > > > **Tips:** > > * The infill material model is homogenization-based, so the model accuracy will improve as you reduce the C *ell Size*/design space ratio. > > ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-Shell-Infill-Component.jpg) > **Parametric Voronoi Domain** > > This block creates a Voronoi lattice domain with variable cell size and lattice thickness as the optimization parameters. Parametric Voronoi lattices use a theoretical relationship between the relative density of an open-celled foam and the resulting mechanical properties. > > **Constant Design Parameters:** N/A > > \*\*Optimizable Design Parameters:\*\**Min/Max Cell Size, Min/Max Thickness* > > > [!TIP] > > > > **Tips:** > > * The *Cell Size* is the average spacing between the center points of the Voronoi lattice. > * Due to the variability of a Voronoi lattice, the result accuracy improves as relative density increases. > * If you wish to optimize only the thickness instead of the cell size, use a constant *Min* and *Max Cell Size*, and vice versa. > > ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-Voronoi-Component.jpg) Note that the *Initial Thickness* and *Initial Cell Size* inputs are user-defined “starting places” for optimizations, specifying the initial iteration's design parameter values. The geometry generated with these design parameters will appear as the implicit view of the parametric domain. > [!NOTE] > > **Note**: **To explore Custom Parametric FE Domains, see**[**this article**](https://support.ntop.com/hc/en-us/articles/16505180871315-How-to-create-Custom-Field-Optimization-Component-with-a-Custom-Graph-Unit-Cell)**.** ## Parametric FE Domain View Options With a **Parametric FE Domain** selected, you will see view options in the bottom right corner of the viewport. ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-View.jpg) *Implicit View* allows you to view the resulting geometry by changing the *Initial values* in the input of the **Parametric FE Domain** block. ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_Parametric-FE-Component.jpg) *Property Fields* allow you to view the homogenized mechanical properties of the structure across the design space before performing field optimization. Available properties are *Relative density*, *Density*, *Young's Modulus*, *Poisson's ratio*, and *Shear modulus*. ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_property-fields.jpg) *State Fields* allow you to view the values of the design parameters across the design space before performing the field optimization. In this case, the optimizable input is shell thickness, which is constant based on the *Initial Shell Thickness* input. ![](https://files.learn.ntop.com/lessons/parametric-fe-domains/440_7_state-fields.jpg) # Parametric FE Model Source: https://docs.ntop.com/lessons/intro-to-field-optimization/parametric-fe-model Since Field Optimization operates on domains whose material properties depend on design variables (**Parametric Domains**), an FE model with constant solid, beam, and shell geometry is no longer relevant. Instead, we use a **Parametric FE Model** to specify one or more of these Domains and their connectors. ![](https://files.learn.ntop.com/lessons/parametric-fe-model/Parametric-FE-Model.png) # Resources Source: https://docs.ntop.com/lessons/intro-to-field-optimization/resources ## Additional Resources on Field Optimization 1. nTop Support Article: [Field Optimization FAQ](https://support.ntop.com/hc/en-us/articles/15280003943571-Field-Optimization-FAQ) 2. nTop Support Article: [How to run field optimization](https://support.ntop.com/hc/en-us/articles/15022831283475-How-to-run-field-optimization) # Review: FE Connectors Source: https://docs.ntop.com/lessons/intro-to-field-optimization/review-fe-connectors You will need connectors if working with multiple domains in your **Parametric FE Model**. Review these connectors from [240: Intro to Simulation](/courses/240-intro-to-simulation/) below. ## Tie Constraint A **Tie Constraint** is a rigid connection that ties two nodes together. Tie constraints make the displacement of the selected nodes equivalent, effectively removing one degree of freedom from the system. Choose the *Independent* nodes and the *Dependent* nodes using a boundary selection block. The *Independent* boundary looks for the *Dependent* boundary within a specified tolerance. An error will occur if the tolerance is too low to locate the boundary. You can fix this error by increasing the tolerance or modifying the boundary. The *Rotation* checkbox toggles the option to tie rotational degrees of freedom. You can see an example of this below. ![](https://files.learn.ntop.com/lessons/review-fe-connectors/tie-constraint.gif) ## Structural Bonded Contact A **Structural Bonded Contact** is an elastic connection between the two models that allows relative motion with a defined stiffness. Designers typically use these to model two surfaces glued together by some material with a vastly different stiffness than the connected surfaces, allowing the bonded surfaces to not move entirely in sync but have specific resistance between them. It's often used to calculate contact failure and to model connected/welded surfaces more accurately, but generally for any connection dictated by a finite stiffness. ![](https://files.learn.ntop.com/lessons/review-fe-connectors/440_9_Structural-Bonded.png) Note that the setup of the **Structural Bonded Contact** is very similar to the setup of a **Tie Constraint**, but now we define the *Contact Stiffness*. > [!TIP] > > **Tip:** > We recommend a *Contact Stiffness* of 0.5 \* (Young's Modulus of Part 1 + Young's Modulus of Part 2). Another method of determining the contact stiffness is *k = E \* A/d*(where A is the contact area and d is the contact layer thickness). > **You can also use**[**Cyclic Symmetry (Beta)**](https://support.ntop.com/hc/en-us/articles/4405063819539-nTopology-3-8-What-s-New)**and**[**Rigid Connectors (Beta)**](https://support.ntop.com/hc/en-us/articles/20815137402899-nTop-4-10-What-s-New-#h_01HAMNN6WW2FNSS3963XHXT7F2)**in your model.** # What is Field Optimization? Source: https://docs.ntop.com/lessons/intro-to-field-optimization/what-is-field-optimization [https://www.youtube.com/embed/VOzB9w7deos](https://www.youtube.com/embed/VOzB9w7deos) Learn more about the [NASA Excite Challenge](https://www.ntop.com/resources/videos/lightweighting-a-bracket-for-the-nasa-excite-challenge/) and [Field Optimized hip implant](https://www.ntop.com/resources/blog/improving-the-biomechanical-profile-of-additive-hip-implants-with-field-optimization/). Built upon nTop's implicit modeling, field-driven design, and optimization capabilities, Field Optimization (FO) is a new multi-objective and multi-scale generative design technology that computes spatially varied design parameters to achieve specified design objectives. Essentially, FO allows users to specify design parameters, optimize the parameters for a given objective, and then seamlessly post-process results into geometry ready for manufacturing. ![](https://files.learn.ntop.com/lessons/what-is-field-optimization/440_2_Parametrize.jpg) ![](https://files.learn.ntop.com/lessons/what-is-field-optimization/440_2_Optimize.jpg) ![](https://files.learn.ntop.com/lessons/what-is-field-optimization/440_2_Synthesize.jpg) **Parametrize** Map design variables to a structure's physical response through simulation, testing, or analytical equations. **Optimize** Set up objectives, constraints, and the upper and lower bounds of your design variables and run your optimization. **Synthesize** Automatically convert the results into editable implicit geometry for post-processing and refinement. # Assignment: Flow Analysis Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/assignment-flow-analysis Now, try setting up a flow analysis on the elbow below. The (2) pink faces represent the inlets. At the larger inlet, define a fluid velocity 0, 0, -50000] mm/s. At the smaller inlet, assign a velocity of \[0, 0, -6000] mm/s. The yellow face represents the outlet. Here, assign a pressure of 101,325 Pa. Download the starter file below to begin. In the next lesson, we will walk through the solution together. ![](https://files.learn.ntop.com/lessons/assignment-flow-analysis-2/part-with-gimbals.png) **Downloadable Files:** [(Starter) Assignment – Flow Analysis.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Flow%20Analysis/\(Starter\)%20Assignment%20-%20Flow%20Analysis.ntop) *This file was last updated in nTop 5.23* # Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/boundary-conditions After defining our flow analysis *Model*, we assign conditions at our inlet and outlets using *Boundary Conditions*. The **Flow Analysis** block auto-generates an empty **Boundary Condition List**. ![](https://files.learn.ntop.com/lessons/boundary-conditions/Screenshot-2025-05-20-095046.png) ## Assign Boundary Conditions ![](https://files.learn.ntop.com/lessons/boundary-conditions/image-1-1024x161.png) Within the **Boundary Condition List**, we describe the fluid's velocity. **Velocity** is a *Boundary Condition* we typically assign at the inlet(s) of the fluid domain. **Pressure** is a *Boundary Condition* we typically assign at the outlet(s). A good practice is to assign a gauge pressure of 0 to determine pressure differential across your system. ![](https://files.learn.ntop.com/lessons/intro-to-flow-analysis/velocity-and-pressure-blocks.png) ## Define a Boundary for Each Boundary Condition ![](https://files.learn.ntop.com/lessons/boundary-conditions/utilities-1024x146.png) Now, we must define a location at which to apply these boundary conditions. We do these with virtual boundaries. Just as we saw with the *FE Domain* versus the *Virtual Domain* in the [Simulation Model](https://learn.ntop.com/?post_type=sfwd-lessons\&p=13174), the flow analysis uses ***virtual boundaries*** rather than finite element (FE) boundaries. We create these using the **Virtual Boundary by Body** block. ![](https://files.learn.ntop.com/lessons/boundary-conditions/image-3.png) As a rule of thumb, we should define the boundary thickness as less than *0.5\*(cell size)*. > [!NOTE] > > **Note**: The boundary of a fluid domain with which is not used to define an pressure/velocity boundary conditions is considered to have a no slip boundary condition. At these boundaries, the fluid velocity is 0. # Cell Size Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/cell-size The third input of the **Flow Analysis** block, *Cell Size*, is the single parameter used to define the Cartesian grid on which to run the simulation. ![](https://files.learn.ntop.com/lessons/cell-size/cell-sized-input.png) The smaller your cells, the more there are to run the particle distribution functions on. Inherently, flow analysis setups with small cells require more GPU memory to run. ## Estimating Required GPU Memory Ten million (10e6) cells require about 1GB of dedicated GPU memory to run. You can use the equation below to estimate required GPU memory for your flow analysis setup. ![](https://files.learn.ntop.com/lessons/cell-size/calculation-1024x400.png) # Common Applications Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/common-applications With an incompressible and isothermal LBM-based solver, nTop Fluids is best used for internal flow simulation and provides: * Accurate **pressure drop prediction** across complex geometries to minimize energy losses and optimize system designs. * Effective simulation of **laminar, turbulent, and** **transitional flow regimes** for comprehensive and accurate flow behavior analysis * Detection and visualization of **recirculation zones** to improve flow efficiency and system reliability * **Maximum velocity calculation** to detect critical high-speed zones and prevent erosion or mechanical failure. * **Flow path analysis** to detect blockages and inefficiencies for enhanced flow distribution and reduced pressure losses. * Identification of high-fluid velocity zones and flow separation points via **instantaneous and time-averaged velocity and pressure distributions**. > **Heat Exchangers** > > ![](https://files.learn.ntop.com/lessons/common-applications-2/cold_plate-1.png) > > **Transient Simulation:** Optimizes performance under fluctuating thermal loads for stable operation. > > **Pressure Drop Calculation:** Ensures efficient heat transfer by minimizing pressure drop and reducing energy consumption. > > **Flow Regime Transition:** Helps design optimal flow conditions to maximize thermal performance. > > **Recirculation Zone & Vortex Detection**: Eliminates dead zones that contribute to fouling and reduce heat transfer efficiency. > > **Maximum Velocity Prediction**: Prevents excessive velocity that could cause tube erosion and reduce exchanger lifespan. > > **Flow Path Analysis**: Ensures even flow through channels for optimal heat transfer efficiency. > > **Flow Homogeneity**: Ensures uniform fluid distribution for consistent thermal transfer and prevents localized overheating. > > **Velocity & Pressure Fields:** Improves design by identifying pressure losses and optimizing flow channels. > **Manifolds** > > ![](https://files.learn.ntop.com/lessons/common-applications-2/manifold-1.png) > > **Transient Simulation**: Analyses transient flow changes to prevent pressure surges and fluctuations. > > **Pressure Drop Calculation**: Prevents excessive losses in fluid distribution networks, ensuring balanced flow across outlets. > > **Flow Regime Transition**: Ensures smooth transitions between flow regimes to prevent turbulence-induced inefficiencies. > > **Recirculation Zone & Vortex Detection**: Reduces stagnation points and prevents swirling flows that could cause uneven pressure distribution and fluctuations. > > **Maximum Velocity Prediction**: Ensures controlled velocities to prevent pressure surges and flow instability. > > **Flow Path Analysis**: Prevents flow restrictions that could cause pressure imbalances and inefficiencies. > > **Flow Homogeneity**: Balances flow between multiple outlets, reducing pressure imbalances. > > **Velocity & Pressure Fields**: Ensures even pressure distribution across multiple outlets for uniform performance. > **Turbines** > > **Pressure Drop Calculation**: Reduces pressure losses in cooling or lubrication systems to maintain turbine efficiency. > > **Flow Regime Transition**: Prevents unwanted turbulence in cooling passages that could lead to erosion or inefficiencies. > > **Recirculation Zone & Vortex Detection**: Prevents localized turbulence that could lead to energy losses or component wear and minimizes vortex-induced vibrations that could lead to fatigue failure. > > **Maximum Velocity Prediction**: Protects components from high-speed fluid erosion, improving durability. > > **Flow Path Analysis**: Optimizes cooling paths to prevent overheating and maintain efficiency. > > **Flow Homogeneity**: Improves cooling efficiency by ensuring even fluid distribution across turbine blades. > > **Velocity & Pressure Fields**: Reduces high-pressure zones that could cause mechanical stress and inefficiencies. > > **Transient Simulation**: Evaluates unsteady aerodynamics to improve efficiency and longevity. > **Chemical Reactors** > > * **Pressure Drop Calculation**: Maintains proper reactant flow, preventing flow restrictions that could impact reaction rates. > * **Flow Regime Transition**: Maintains the correct flow regime for efficient mixing and reaction kinetics. > * **Recirculation Zone & Vortex Detection**: Improves reactant flow by reducing stagnant regions that lower reaction efficiency. > * **Maximum Velocity Prediction**: Prevents excessive shear forces that could damage delicate catalysts or particles. > * **Flow Path Analysis**: Enhances reactant distribution for more effective chemical processing. > * **Flow Homogeneity**: Ensures proper reactant mixing for uniform reaction rates and efficiency. > * **Velocity & Pressure Fields**: Maintains consistent reactant flow to prevent reaction inefficiencies. > * **Transient Simulation**: Captures dynamic flow interactions for improved reaction efficiency and process control. > **Filters** > > * **Pressure Drop Calculation**: Ensures optimal pressure conditions to maintain effective filtration without excessive clogging or back pressure. > * **Flow Regime Transition**: Optimizes flow behavior to prevent premature clogging and maintain filtration efficiency. > * **Recirculation Zone & Vortex Detection**: Reduces trapped contaminants and turbulence that could clog or cause inconsistent flow through filters and ultimately reduce flow rates. > * **Maximum Velocity Prediction**: Avoids excessive stress on filter media, ensuring longer operational life. > * **Flow Path Analysis**: Identifies flow restrictions that could cause premature clogging or uneven filtration. > * **Flow Homogeneity**: Prevents uneven loading on filter media, extending lifespan and improving performance. > * **Velocity & Pressure Fields**: Prevents pressure spikes that could damage filter materials or lead to bypassing. > * **Transient Simulation**: Models real-time clogging behavior to optimize cleaning and replacement schedules. These are only some of the most common applications for nTop Fluids. Other parts that can also benefit from this capability include but are not limited to manifolds, HVAC ducts, valves, flow restrictors, nozzles, diffusers, pipe bends and elbows, and orifices. # Download: Flow Analysis Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/download-flow-analysis Now that you have completed the follow along exercise, feel free to download below the completed file with descriptions on how to set up and run a flow analysis. **Downloadable Files:** [(Completed) Follow Along – Flow Analysis.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Flow%20Analysis/\(Completed\)%20Follow%20Along%20-%20Flow%20Analysis.ntop) *This file was last updated in nTop* 5.23 # Evaluate Results Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/evaluate-results After the **Flow Analysis** block runs, you can evaluate your results using the Right Side Panel, heads-up display, and display block. ## Results Display Use the *Display* tab in the Right Side Panel control how you view results. You can toggle the *Display Mode* to visualize the results as a color gradient as a domain or as individual streamlines. These streamlines are calculated on the time averaged velocity results. ![Left Image](https://files.learn.ntop.com/lessons/evaluate-results-2/domaingif.gif) ![Right Image](https://files.learn.ntop.com/lessons/evaluate-results-2/last-try-comapare-streamlines.png) ![](https://files.learn.ntop.com/lessons/evaluate-results-2/cfd-resutls-right-side-panel.png) Say, when displaying results as streamlines, you want to see how fluid behaves in a specific region. Check *Specify Seed* to define a region, and visualize the upstream and downstream behavior of only the fluid that passes through the specified region. You can imagine this as placing a drop of dye into a specific location to visualize its behavior in your domain. ![](https://files.learn.ntop.com/lessons/evaluate-results-2/seed-streamlines-w-gimbal-1.png) ![](https://files.learn.ntop.com/lessons/evaluate-results-2/seed-streamlines.png) ## View CFD Results Used the heads-up display to view the initial, instantaneous, and time-averaged pressures and velocities. * **Instantaneous** results show the results at the moment the analysis reaches a statistically steady state. * **Time-Averaged** results show averaged velocity and pressure throughout the analysis. ![](https://files.learn.ntop.com/lessons/evaluate-results-2/results-toggle-.gif) ## Flow Analysis Results on Boundary To evaluate results on a specific boundary , you can use the **Flow Analysis Results on Boundary** block. ![](https://files.learn.ntop.com/lessons/evaluate-results-2/flow-analysis-results-block.png) Specify the *Result* you want to evaluate (this is simply the **Flow Analysis** block) and the *Boundary* of interest. Note this boundary must reference the same virtual domain as the flow analysis simulation model. To define the *Property Field* to evaluate, open the flow analysis properties and expand the property (velocity or pressure) of interest. In the list elements of *keys*, you will see the descriptions of each key. Then, expand the *values*, and drag the associated property chip from its list elements to the *Property Field* input. ![](https://learn.ntop.com/wp-content/uploads/2025/04/extract-flow-analysis-results.gif) In this example, we want to evaluate the time-averaged pressure at the inlet boundary. Within the flow analysis pressure properties, *keys \[2]* indicates “pressure time averaged”, so we use *values \[2]* as our *Property Field* input. # Flow Analysis Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/flow-analysis After completing all three inputs in the **Flow Analysis** block, the simulation will automatically run and produce your results. ## GPU Memory Considerations Recall that Flow Analysis runs on GPU memory. Before running a full simulation, the **Flow Analysis** block estimates available GPU memory. If insufficient, you will see an insufficient memory error. ![](https://files.learn.ntop.com/lessons/flow-analysis/error-1024x319.png) If your analysis runs slowly or encounters memory errors, you can free up available memory by: * Decreasing your nTop resolution in the bottom-right corner of your screen * Closing other nTop instances and GPU-intensive applications ## Monitor Block Progress To monitor progress as your flow analysis runs, you can open the Log Panel. ![](https://files.learn.ntop.com/lessons/flow-analysis/progressbar-1024x265.gif) # Flow Analysis Custom Blocks Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/flow-analysis-custom-blocks [https://www.youtube.com/embed/5uRTvjqdEQE](https://www.youtube.com/embed/5uRTvjqdEQE) > **Transcript** > > Let's take a look at three custom blocks you can implement in your flow analysis. We'll start with the **Mass Flow Rate** custom block. This block will translate a mass flow rate into a velocity boundary condition. It has five inputs: the boundary, mass flow rate, direction, area, and density. We can start by defining our boundary, which is just our inlet boundary. In this case, we'll define a mass flow rate in g/s, or we can use more conventional units. > > Define your direction as a vector and input your area. Here we've just sectioned our fluid body using a plane from normal, calculated our surface area, then divided by two to account only for the inlet rather than the inlet and the outlet. Finally, we'll apply a fluid density and use our mass flow rate as our velocity boundary condition in our flow analysis. Note that the output type for our **Mass Flow Rate** block is velocity. After running a flow analysis, you can evaluate your results using the **Flow Analysis Results on Boundary** block, or you can use either of the **Pressure Drop** custom blocks that we've provided. The first will evaluate pressure drop across virtual boundaries. You can add in your flow analysis, your inlet boundary, and your outlet boundary, granted they're virtual boundaries that were set up on implicit bodies. Once the block runs, your pressure drop will appear in the top right corner. If instead of virtual boundaries, you set up CAD boundaries, you also have the option to use our second custom block that evaluates the pressure drop across CAD boundaries. Here you would follow a similar setup, pulling in your flow analysis results and your CAD boundaries one and two. This video introduces three custom blocks you can implement when running flow analysis in nTop. * **Mass Flow Rate** converts a mass flow rate (g/s) to a velocity (mm/s) that you can add to a boundary conditions list in a flow analysis. * **Pressure Drop (Virtual Boundary)** evaluates the system's pressure drop across virtual boundaries. * **Pressure Drop (CAD Boundary)** evaluates the system's pressure drop across CAD boundaries. **Downloadable Files:** [Flow Analysis with Custom Blocks.ntop](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Flow%20Analysis/Flow%20Analysis%20with%20Custom%20Blocks.ntop) Download Individual Custom Blocks: * [Mass Flow Rate.ntop](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Flow%20Analysis/Mass%20Flow%20Rate.ntop) * [Pressure Drop (Virtual Boundary).ntop](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Flow%20Analysis/Pressure%20Drop%20\(Virtual%20Boundary\).ntop) * [Pressure Drop (CAD Boundary).ntop](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Flow%20Analysis/Pressure%20Drop%20\(CAD%20Boundary\).ntop) *This file was last updated in nTop 5.25* # Flow Analysis in nTop Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/flow-analysis-in-ntop Welcome to nTop's Flow Analysis course! Flow Analysis is a subset of nTop Fluids, a new computational fluid dynamics (CFD) toolset integrated directly in nTop. CFD has traditionally been a specialized discipline requiring dedicated software systems separate from your design environment. Traditional CFD workflows are plagued by bottlenecks that can severely impede design exploration. By embedding Flow Analysis within nTop, we empower designers to: ![](https://files.learn.ntop.com/lessons/what-is-cfd-2/hex-with-flow-analysis-1024x964.png) > **Eliminate Meshing Bottlenecks** > > Meshing complex domains for exporting to CFD solvers demands substantial computational resources, with each iteration requiring intricate mesh regeneration. Instead, perform flow analysis directly on implicit bodies, nTop's native geometry. > > ![](https://files.learn.ntop.com/lessons/intro-to-flow-analysis/AGV_vUfa6CWfVCAqW_jKilp_SiczZG3s2XgJlIVLwZczPSHLcpTNKWIA_3y6BJHmDT6kzfkJs6uEY4OOOFKh9_dzxigLSUI7qwSd-35BaD0qE-swZNz1FiM-QW3dBL7zgvoFZTebw-Go6g=s2048.png) > **Expedite & Scale Compute** > > Solve times can stretch from hours to days, creating lengthy waiting periods between design iterations. Additionally, large-scale simulations often face resource limitations, such as insufficient computing power and parallel inefficiencies. These challenges can hinder the performance and scalability of simulations. > > ![](https://files.learn.ntop.com/lessons/intro-to-flow-analysis/AGV_vUdissfO9H6L_dZGO4zSDsJi7s8KE99LhUgj5vyKBNMWZOMmXYc39aifGUfojNvg3YGNnzHLoQ0slvVrL50oW9CTg5PkEd9CX_WZ3BUmyYwcs14j2yH2XmCLIM2r9BzH_fUGK_ay6A=s2048.png) > > nTop's Flow Analysis uses Lattice-Boltzmann algorithms, well suited for complex geometries and nTop's ability to leverage modern, GPU-based computing architectures. > **Combine Modeling & Physics** > > Iterative design involves preparation, simulation, interpretation, and refinement along each step, allowing engineers to progressively explore a wide design space and understand the nuanced impacts of parameter adjustments. > > These constraints have long been a critical pain point in CFD, restraining the full potential of design optimization. This disconnected process creates significant friction and delays in the design cycle, often taking days or weeks to complete single design iterations. > > ![](https://files.learn.ntop.com/lessons/what-is-cfd-2/image-5-1024x355.png) > > The seamless integration of CFD into nTop means fluid simulations can happen within the same environment as your design work, creating a truly iterative process without the traditional barriers between CAD modeling and CFD analysis. These advantages combine to support rapid iteration and allow thorough exploration of design spaces, empowering engineers to approach optimal solutions that may have remained undiscovered with conventional methods. > [!NOTE] > > **Note**: Flow Analysis in nTop requires an NVIDIA GPU. # Follow Along: Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/follow-along-boundary-conditions [https://www.youtube.com/embed/dNaO2IlY\_io](https://www.youtube.com/embed/dNaO2IlY_io) > **Transcript** > > Let's now set up the boundary conditions for our flow analysis. For any flow analysis, we need at least one velocity and one pressure at the inlet and the outlet. Using my boundary conditions drop down in our fluids tab, I'll add a **Pressure** block and a **Velocity** block to my notebook. We typically assign velocity at our inlet and pressure at our outlet, so I'll go ahead and make these into variables and name them accordingly. I'll right click on my velocity to make it a variable called inlet velocity. I'll do the same for my pressure and call it outlet pressure. > > Scrolling back down to our flow analysis section, I can go ahead and reference both of those variables within my boundary conditions list in my **Flow Analysis** block. I'll add a list item and drop in my velocity and my pressure. Let's begin with our inlet. We want our fluid to enter our fluid domain at 10 mm/s. We can easily assign this velocity using a vector. In that velocity input, we'll assign a vector of -10 by 0 by 0 mm/s. Now we've assigned our velocity, but we still have to assign the location of that flow. To do that, we'll assign a boundary using the **Virtual Boundary by Body** block. We can find this in our utilities dropdown, or we can double click within our velocity block and add our virtual boundary this way. > > This **Virtual Boundary by Body** has four inputs: an implicit body that we use to select our boundary, an option to reverse our selection, a tolerance for our implicit body's boundary, and a domain body. The domain body is how we define our domain that we want to place this boundary on. We've already built our fluid domain for our simulation model, so I can drag and drop that fluid domain into our domain body. Now let's add our selection body using a simple primitive implicit cube from our create tab. I'll use our primitives dropdown and add a cube to our notebook. > > I can drop it into my body input, locate it in my viewport, and drag its center point toward my inlet. Zooming in, maybe I want to resize this so that I capture my entire inlet. I'll resize it to 15 mm, view the result, and now I see that I've got some level of overlap. As a rule of thumb for flow analysis, we want this overlap to be about three times the cell size that we assign later. To help visualize my overlap, I can go into the display panel of my cube and adjust my transparency. > > Now that we've created this overlap, I see this yellow velocity glyph, indicating that we've successfully implemented our inlet velocity. For clarity and organization, I can right-click on that virtual boundary we created and make it a variable called inlet boundary. I'll collapse my inlet blocks, and now we can move on to our outlet. Zooming back out on my model and moving over to the other side, this is where I want my outlet to exist. > > Similar to what we did before, I can double-click into my boundary input and add another **Virtual Boundary by Body**. We can make our body another cube and use the same domain body as we did last time, our fluid domain. To assign our cube, we can go into our create tab and add another primitive, or we could even copy the initial cube that we made and paste it into our body input. Now I can just take that same center point as we used last time and drag it over to the other side of my model, and we'll see this new cube appear. > > I can make this display transparent as well, and making sure that we've captured our entire end, we've now assigned our virtual boundary to our pressure. I can right-click and make that into a variable called outlet boundary, then add my pressure magnitude. I'll assign this as 101,325 pascals, or simply one atmosphere. Zooming in, we see this new glyph appear, and we can see it even more obviously if we isolate our outlet pressure using the hotkey “I”. So now I can collapse all of my blocks, maybe turn on the visibility of my fluid domain, and both my inlet velocity and my outlet pressure. At this point, I've successfully set up my simulation model and applied my boundary conditions. > > [0:00](https://www.youtube.com/watch?v=dNaO2IlY_io) Setting Up Boundary Conditions > [1:23](https://www.youtube.com/watch?v=dNaO2IlY_io\&t=83s) Assigning Inlet Velocity > [4:28](https://www.youtube.com/watch?v=dNaO2IlY_io\&t=268s) Assigning Outlet Pressure Now, let's define the boundary conditions at the cold plate's inlet and outlet. Continue following along in the starter file from the previous lesson. # Follow Along: Flow Analysis Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/follow-along-flow-analysis [https://www.youtube.com/embed/HVGNzJZynRc](https://www.youtube.com/embed/HVGNzJZynRc) > **Transcript** > > Now that we've added our simulation model and our boundary conditions to our **Flow Analysis** block, let's add a cell size and run our analysis. This cell size input defines the Cartesian mesh on which this analysis will run. We'll add a cell size of 0.75 mm. > > Before the flow analysis runs, it'll calculate the available GPU memory. Available GPU memory will be based on how much nTop and other programs are using. Of course, a smaller cell size will also increase the number of cells, causing you to need more GPU memory. To help maximize your available memory, I would suggest changing your resolution to low. If you still have insufficient memory to run your flow analysis, you'll see an error appear on your block properties. To view the progress of your flow analysis, you can open your log panel in the bottom right corner and expand it to see your progress. > > Now let's view the results of our flow analysis. You'll see this color map across your domain representing both your instantaneous and time averaged pressures and velocities. The instantaneous values represent your instantaneous results from your last time step. Your time average results smooth the fluctuations throughout your simulation to reveal your mean flow structure. In your display panel, you can switch from the domain mode to the streamlines mode. Here you can see the streamlines of the fluid moving through your domain. You can adjust your seed count or you can specify an individual seed. Doing this will allow you to take a sphere and drop it at any point within your domain. Here you can adjust your radius and visualize the upstream and downstream behavior of the fluid moving through that region. > > Now we've finished running our flow analysis, so I'll right-click and make it a variable to mark these results. Navigating one more time to the fluids tab, I'll expand my utilities drop-down and add a block called **Flow Analysis Results On Boundary**. This will allow us to evaluate average flow analysis properties on specific boundaries. For example, if I wanted to find my average velocity at my outlet, I could simply drop my flow analysis results into this block. Specify my property field by opening the properties of my flow analysis and expanding my velocity drop-down to compare my keys and expand those list elements to find index number two or my time average velocity with my values, grabbing that second length in my list elements, and then applying my boundary at my outlet. This **Flow Analysis Results On Boundary** block will specify my time average velocity at my outlet, which is 8.7 mm/s. > > I'll right-click, make this a variable, and call it outlet velocity. I can repeat this process for any result field on any boundary. > > [0:00](https://www.youtube.com/watch?v=HVGNzJZynRc) Adding Cell Size and Running Analysis > [0:24](https://www.youtube.com/watch?v=HVGNzJZynRc\&t=24s) GPU Memory and Error Handling > [1:17](https://www.youtube.com/watch?v=HVGNzJZynRc\&t=77s) Viewing Flow Analysis Results > [2:41](https://www.youtube.com/watch?v=HVGNzJZynRc\&t=161s) Using Flow Analysis Results On Boundary Follow along to assign a cell size, run a flow analysis, and evaluate your results. # Follow Along: Simulation Model Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/follow-along-simulation-model [https://www.youtube.com/embed/kAQNV9QwHi4](https://www.youtube.com/embed/kAQNV9QwHi4) > **Transcript** > > Let's set up and run a simple flow analysis. Start by opening your starter file and navigating to the imported bodies. Isolating my first body, I see this cold plate that we're going to simulate fluid moving through. In the display tab on my right side panel, I can check the transparency box so that we can see what's going on inside of this plate. My second variable represents our fluid body. This is the fluid domain we plan to model for our flow analysis. > > Now navigate to the fluids tab in your ribbon to view the flow analysis tools that you have available. I'll drop our line into our flow analysis section in the notebook, and from the analysis dropdown I'll add a **Flow Analysis** block to our notebook. This **Flow Analysis** block is going to intake a model boundary conditions and a cell size and output the results of our flow analysis. At any point, you can navigate to the right side panel and view the information tab to read about our blocks as well as their inputs and their output. > > Let's begin by building our simulation model that we want to analyze. To keep things organized, I'll drop my cursor into this simulation model section within my notebook. Then from my model dropdown, I'll drop a **Simulation Model** into my notebook. Notice that this simulation block has an overload from which we can select an FE domain list or a virtual domain list. The FE domain list will apply to our FE models that we use for structural and thermal analysis, and our virtual domain list is going to apply to our simulation models for flow analysis. At this point, we can right click on our **Simulation Model** block and make it a variable. I'll name this variable simulation model and drag this variable chip into our **Flow Analysis** block so that flow analysis can reference it later on. > > Drilling into this simulation model, we see that we have two main inputs: the domains and the connectors. For flow analysis, we can ignore this optional connectors input. Let's expand this virtual domain list and build out our fluid domain. At this point, we can expand our model dropdown and add our fluid domain to our notebook, or instead, we can just double-click into our virtual domain list and view our domain options. I'll add my fluid domain and now we see these two inputs: our body and our attribute. Let's start with our body. This is going to represent the geometry of our fluid domain. We can drag and drop our fluid body into that body input and then move forward to describe our material properties. We'll do this in our fluid attribute block where we can define our isotropic material. Again, I can double-click into this input to view my material options or I can expand my material information in my fluids tab. As we can see, we already have two materials that are available to us: air and water. We can also define our own fluids we want to simulate. To do this, we can use the **Isotropic Material** block. We'll drag and drop this into our isotropic material input and now we can define its properties relevant to flow analysis. Those two properties will be density and kinematic viscosity. Say we want to simulate antifreeze. Let's add a density of 1,114 kg per meter cubed. > > Next, we can add our kinematic viscosity. Since this is inherently a fluid property, we can come back up into our material information and add in an **Isotropic Fluid Property**. We can drag and drop it into our isotropic material then add our kinematic viscosity of 1.78 e to the -5 m squared per second. When I hit enter, I see that all of my block details are turning gray. My simulation model runs and if I isolate using the hotkey I, I see my resulting model. Since prior to building this simulation model we already turned it into a variable and referenced it within our flow analysis, it's going to be recalled later on when we run that analysis. To keep our notebook organized, maybe we want to add a couple more variables throughout this first section. This will help our future selves and colleagues follow and understand our setup. I can right-click on my isotropic material and make it into a variable, and I'll do the same for my fluid domain. I'll collapse each of these variables and we finished setting up our simulation model. > > [0:00](https://www.youtube.com/watch?v=kAQNV9QwHi4) Introducing Flow Analysis > [0:45](https://www.youtube.com/watch?v=kAQNV9QwHi4\&t=45s) Navigating Flow Analysis Tools > [1:20](https://www.youtube.com/watch?v=kAQNV9QwHi4\&t=80s) Building the Simulation Model > [2:47](https://www.youtube.com/watch?v=kAQNV9QwHi4\&t=167s) Defining Fluid Domain Inputs > [3:24](https://www.youtube.com/watch?v=kAQNV9QwHi4\&t=204s) Describing Material Properties > [5:23](https://www.youtube.com/watch?v=kAQNV9QwHi4\&t=323s) Finalizing Simulation Model Setup Let's simulate fluid flow across a cold plate together. In this exercise, we will create a simulation model. Download the starter file below to follow along. **Downloadable Files:** [(Starter) Follow Along – Flow Analysis.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Flow%20Analysis/\(Starter\)%20Follow%20Along%20-%20Flow%20Analysis.ntop) *This file was last updated in nTop 5.23* # Lattice Boltzmann Method (LBM) Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/lattice-boltzmann-method-lbm Flow Analysis in nTop leverages the [Lattice Boltzmann Method (LBM)](https://support.ntop.com/hc/en-us/articles/40839307817619) for complex geometry handling, reduced mesh dependency, and efficient parallel computing. Let's dig into LBM before running our own flow analyses in nTop. ## Analysis at the Mesoscopic Scale We can approach fluid dynamics at three distinct scales: microscopic, mesoscopic, and macroscopic. ![](https://files.learn.ntop.com/lessons/lattice-boltzmann-method-2/fluid-scales-1024x305.png) * ###### Microscopic * ###### Mesoscopic * ###### Macroscopic Approaching fluid dynamics at the ***microscopic*** view uses molecular dynamics, tracking the movement and interactions of individual atoms or molecules, governed by Newton's laws of motion. This approach is computationally intensive, limiting its application to very small spatial and temporal scales or specialized applications where molecular-level interactions are crucial. The Lattice Boltzmann Method (LBM) offers a powerful alternative by operating at the ***mesoscopic*** level. It bridges the gap between molecular dynamics and conventional fluid mechanics, simulating fluid flow through discrete particle distributions. Traditionally, engineers have modeled fluid dynamics through ***macroscopic*** equations, such as using the Finite Volume Method (FVM) to solve the Navier-Stokes equation. These approaches describe fluid as a continuous medium, dealing with observable properties like velocity, pressure, density, and viscosity that represent the average behavior of large numbers of particles. ## Discretization for LBM Rather than relying on complex and computationally expensive meshing algorithms, LBM models efficiently subdivide a fluid domain into a Cartesian grid composed of equally sized cells. Each cell represents a discrete location where the particle distribution functions are tracked. ![](https://files.learn.ntop.com/lessons/lattice-boltzmann-method-2/voxel-mesh-1.png) The particle distribution functions are based on the Lattice-Boltzmann Equation (LBE): ![](https://files.learn.ntop.com/lessons/lattice-boltzmann-method-2/equation.png) f: discrete particle distribution function c: discrete velocity x: position t: time Ω: collision operator Each cell within this grid has distribution functions arranged in specific velocity sets. Each direction stores a particle distribution function that represents the probability of finding particles moving in that direction. You'll often see LBM models denoted as “DnQm” where: * m = number of discrete velocities * n = number of dimensions (2D or 3D) ![](https://files.learn.ntop.com/lessons/lattice-boltzmann-method-2/lbm-cube-1.png) *D3Q19 is a common 3D model with 19 discrete velocities, including a zero velocity*. ## Collision and Streaming There are two major steps in the LBM algorithm, ***collision*** and ***streaming***, that represent fluid particle behavior at each of these discrete locations. ![](https://files.learn.ntop.com/lessons/lattice-boltzmann-method-2/collision-streaming-overlay-8.gif) **Collision** captures how particles in each cell redistribute their momentum through microscopic interactions while conserving mass and momentum. **Streaming** connects neighboring cells and represents the fluid particle advection (density, momentum) through the domain. These alternating processes create the characteristic space-time evolution of the fluid dynamics. This approach offers several advantages: ✅ **Simplified Algorithms:** The regular structure allows for more straightforward implementation of the collision and streaming steps. ✅ **Complex Geometries:** Representing complex boundaries simply requires defining a consistent cell size to capture volumetric features. ✅ **Computational Efficiency:** The regular structure is particularly well-suited for GPU implementation and parallel computing. ## GPU Implementation & Parallel Computing nTop's implementation of LBM on GPUs unlocks dramatically faster simulation times; often 10-100x faster than CPU implementations. The chart to the right shows performance on two NVIDIA GPUs. 1000 Million Lattice Updates per second (MLUPs) means that you can compute 1000 Iterations on 1 million cells in one second. ![](https://files.learn.ntop.com/lessons/lattice-boltzmann-method-2/AGV_vUcKEbpTAZoHdquTU6wPh5IvebdV2RDsnBEETKJVIssNUY4QuRv7kEmyoDuOZF-heQtlLjVSPwYPt9TkoU-Z3PMfukzymh_TaZVTkATW3WlaZNHSWaD0t1vGJWG3DYJC5O8Hs7Bw=s2048.png) > [!NOTE] > > This allows users to handle larger, more complex simulation domains without prohibitive runtime, and to achieve real-time or near-real-time results for certain problem sizes, enabling interactive exploration. # Overview Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/overview This course will introduce you to nTop Flow Analysis, a powerful subset of nTop Fluids. Through hands-on learning and practical examples, you’ll master the essential skills needed to leverage nTop’s flow analysis capabilities. This course will walk you through: ![hex with flow analysis](https://storage.googleapis.com/files-learn/lessons/intro-to-flow-analysis/intro-to-flow-analysis-overview.webp) * Lattice Boltzmann Method * Virtual Model * Boundary Conditions * Flow Analysis * Useful Custom Blocks ### CFD and LBM > **[Flow Analysis in nTop](/lessons/intro-to-flow-analysis/flow-analysis-in-ntop)** > **[Lattice Boltzmann Method (LBM)](/lessons/intro-to-flow-analysis/lattice-boltzmann-method-lbm)** > **[Common Applications](/lessons/intro-to-flow-analysis/common-applications)** ### Flow Analysis in nTop > **[UI and Blocks](/lessons/intro-to-flow-analysis/ui-and-blocks)** > **[Simulation Model](/lessons/intro-to-flow-analysis/simulation-model)** > **[Follow Along: Simulation Model](/lessons/intro-to-flow-analysis/follow-along-simulation-model)** > **[Boundary Conditions](/lessons/intro-to-flow-analysis/boundary-conditions)** > **[Follow Along: Boundary Conditions](/lessons/intro-to-flow-analysis/follow-along-boundary-conditions)** > **[Cell Size](/lessons/intro-to-flow-analysis/cell-size)** > **[Flow Analysis](/lessons/intro-to-flow-analysis/flow-analysis)** > **[Evaluate Results](/lessons/intro-to-flow-analysis/evaluate-results)** > **[Follow Along: Flow Analysis](/lessons/intro-to-flow-analysis/follow-along-flow-analysis)** > **[Download: Flow Analysis](/lessons/intro-to-flow-analysis/download-flow-analysis)** > **[Flow Analysis Custom Blocks](/lessons/intro-to-flow-analysis/flow-analysis-custom-blocks)** ### Assignment: Flow Analysis > **[Assignment: Flow Analysis](/lessons/intro-to-flow-analysis/assignment-flow-analysis)** > **[Solution: Flow Analysis](/lessons/intro-to-flow-analysis/solution-flow-analysis)** ### Additional Examples & Resources # Simulation Model Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/simulation-model The **Simulation Model** is where you will define the geometry and inherent behavior of your fluid domain(s). ![](https://files.learn.ntop.com/lessons/simulation-model/Screenshot-2025-05-20-093456.png) All simulations in nTop use the **Simulation Model** block regardless of the type of analysis you run. [Structural](https://learn.ntop.com/courses/240-intro-to-simulation/) and [Thermal](https://learn.ntop.com/courses/341-intro-to-thermal-fea/) simulations in nTop run on finite element (FE) models which intake tetrahedral meshes to represent solid volumes. ![Left Image](https://files.learn.ntop.com/lessons/simulation-model/compare-mesh-final-1.png) ![Right Image](https://files.learn.ntop.com/lessons/simulation-model/compare-implicit-final-1.png) **Flow Analysis** runs on a virtual model which intakes an implicit body to represent fluid volumes. Use the block's overload to specify a **Virtual Domain List** for flow analysis applications. You cannot run flow analysis on FE domains. ![](https://files.learn.ntop.com/lessons/simulation-model/simulation-model-overload-block.gif) When building a model for flow analysis, you can ignore the optional *Connectors* input. ## Fluid Domain ![](https://files.learn.ntop.com/lessons/simulation-model/image-12-1024x167.png) The **Virtual Domain List** is where you will add one or more **Fluid Domain** blocks to your model. The **Fluid Domain** contains the *Body*, defined by an implicit body to represent the fluid volume, and an *Attribute*, which dictates material (fluid) properties. ![](https://files.learn.ntop.com/lessons/simulation-model/image-9.png) ## Fluid Attribute ![](https://files.learn.ntop.com/lessons/simulation-model/image-13-1024x247.png) Within the **Fluid Domain** block, an empty **Fluid Attribute** block auto-populates in *Attribute* input. This is where we define the attributes of our material. For flow analysis, add an *Isotropic Material* to define density and kinematic viscosity. You can define your own fluid to simulate or use pre-made fluid custom blocks. ![](https://files.learn.ntop.com/lessons/simulation-model/image-8.png) * ###### Define a Fluid * ###### Use a Pre-Made Fluid To define a fluid, add an **Isotropic Material** to your fluid attribute. Fill the inputs as follows. * *Properties* *(Choose One)* * Add an **Isotropic Fluid Property** block and define a *Kinematic Viscosity*. * Add an **Isotropic Porous Medium Property** block and define a *Permeability* and *Forchheimer Parameter*. * *Density* * Define a *Density* value. ![](https://files.learn.ntop.com/lessons/simulation-model/image-14.png) Example of a coolant. ![](https://files.learn.ntop.com/lessons/simulation-model/Isotropic-Porous-Medium-Property-1.png) Example of a fine sand. > [!NOTE] > > **Note**: To create a fluid and then recall it in future nTop workflows, you can build and save it as a [custom block](https://support.ntop.com/hc/en-us/articles/7042784039443-How-to-create-a-custom-block). Custom blocks for **Air** and **Water** are already available to you. You can find them in the *Fluids* tab under *Material Information*. ![](https://files.learn.ntop.com/lessons/simulation-model/image-10.png) # Solution: Flow Analysis Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/solution-flow-analysis [https://www.youtube.com/embed/PxRYqvuI5zI](https://www.youtube.com/embed/PxRYqvuI5zI) > **Transcript** > > Let's walk through the solution to this assignment. We were tasked with running a flow analysis on air moving through this elbow. We began with our part and a fluid domain represented by CAD. First, we isolate our outlet and our two inlets. The inlets are these top two CAD faces, and our outlet is here. > > We know that to run a flow analysis, we need three main inputs: our model, our boundary conditions, and our cell size. Let's start by creating our simulation model. To begin creating our simulation model, we'll create a fluid domain. This fluid domain represents both the geometry and the properties of our fluid. To specify our geometry, we can easily generate an implicit body from our imported fluid CAD and drop it in as our first input. > > To influence the behavior of our fluid in our simulation, we can add a fluid attribute and use one of our pre-built isotropic materials, air, that you can find in our fluids tab under material information. We can then add this fluid domain to a **Simulation Model** block, ignore our connectors input, and we've completed setting up our simulation model. > > Now we can move forward to creating our boundary conditions. To specify our inlet velocities and our outlet pressure, we'll start with our two inlets. We can use **Velocity** blocks that we also find in our fluids tab under boundary conditions. And unlike our follow-along exercises, where we were specifying inlets and outlets on an implicit body, now we're specifying these on CAD faces. > > We can use the drop-down in our **Velocity** block to specify a CAD face list and a vector rather than an implicit boundary and a vector. This allows us to use those individual CAD faces that we specified for our inlet one and our inlet two. In this case, we can generate these velocities quickly and easily. > > To specify our outlet pressure, we'll use a similar process, adding a pressure boundary condition to our notebook using the overload of that block to specify a CAD face input and using our outlet CAD face and our pressure magnitude. We can view our outlet pressure like so. We'll add all three of those boundary conditions to our boundary conditions list in our flow analysis, specify a cell size of 5 mm, isolate our results, and use the display tab in our right side panel to view our streamlines and toggle through our results options using the heads-up display. > > Say I want to visualize the streamlines of the air only entering through the smaller inlet, I could specify a seed, drop its center to that smaller inlet, adjust my radius to make sure that I'm capturing my inlet, and now I can visualize the streamlines of only the air that enters that smaller inlet. See the solution to the assignment. You can download the completed file below. **Downloadable Files:** [(Completed) Assignment – Flow Analysis.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Flow%20Analysis/\(Completed\)%20Assignment%20-%20Flow%20Analysis.ntop) *This file was last updated in nTop 5.* 23 # UI and Blocks Source: https://docs.ntop.com/lessons/intro-to-flow-analysis/ui-and-blocks nTop Fluids features are currently [beta blocks](https://support.ntop.com/hc/en-us/articles/360062442113-What-are-beta-blocks). To access them, check *'Show beta blocks'* in your general settings. ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/turn-on-beta-blocks-1-1024x643.gif) ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/image-11-1024x124.png) After showing beta blocks, you will see the *Fluids \[Beta]* tab appear. You can now access a series of dropdown lists containing blocks you can use to set up a flow analysis. ## Flow Analysis Block Begin setting up your simulation by adding the **Flow Analysis** block to your notebook. Every block you use to define your flow analysis problem will get referenced here. The **Flow Analysis** block has three inputs which we will explore in the following lessons. ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/image.png) ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/model-icon.png) ### Model Define the fluid domain and material attributes to simulate. ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/boundary-condition.png) ### Boundary Conditions Assign pressure and velocity at inlet(s) and outlet(s). ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/cell-size.png) ### Cell Size Assign a size for the cells used in the analysis. # ラティス入門 Source: https://docs.ntop.com/lessons/intro-to-lattices-ja/overview ![ラティス入門](https://storage.googleapis.com/files-learn/lessons/intro-to-lattices-ja/overview.png) このコースでは、nTop内のさまざまなラティス生成オプションについて説明します。コース修了後には、ワークフローにラティスを実装する方法について理解を深めることができます。 **前提条件:** [101: nTopのコア機能と操作](/lessons/ntop-core-features-ja/overview)、[102:メッシュ作成ガイド](/lessons/intro-to-meshing/overview) **対象:** * Unit Cells(ユニットセル)、Cell Maps(セルマップ)およびPeriodic Lattices(周期的ラティス) * Periodic LatticesおよびNon-Periodic Latticesの生成 # Answer to Optional Periodic Lattice Test Problem Source: https://docs.ntop.com/lessons/intro-to-lattices/answer-to-optional-periodic-lattice-test-problem [https://www.youtube.com/embed/spJi-lVVD1c](https://www.youtube.com/embed/spJi-lVVD1c) > **Transcript** > > In this optional test problem, you were tasked with using custom unit cells to add a lattice infill to the inner body of this bracket and a texture to the outer faces. Let's begin with our infill. > > First, we created this skewed box and used its bounding box property as the domain of our custom unit cell. Then we added a rectangular cell map to the inner body of our bracket. After this, we used a periodic lattice block, adding our unit cell and our cell map with no parameters since this is an implicit unit cell. Then we trimmed our lattice using our inner body, and we're left with this lattice infill. > > To create our custom texture, we used another **Custom Unit Cell** block, this time creating a cone. And instead of using that cone's bounding box property, we created our own bounding box, which spanned further than the domain of this cone. Since we wanted to texture multiple CAD faces, we used a **Mesh From CAD** body to mesh our stitched CAD. Then we quadrangulated the mesh and used a **Cell Map From Quad Mesh** block to create our cell map. We used this cell map along with our custom unit cell in a periodic lattice and generated this texture. > > Finally, we used a **Boolean Union** block to union our outer body, our infill lattice, and our texture. This video reviews a solution to the lattices test problem to use the **Custom Unit Cell** block to generate unique periodic lattices and textures. **Example File:** [210\_17\_1 Completed–Optional Periodic Lattice Test Problem.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_17_1%20Completed--Optional%20Periodic%20Lattice%20Test%20Problem.ntop) *This file was last updated in nTop 4.2.3* # Applying Lattice Utilities Source: https://docs.ntop.com/lessons/intro-to-lattices/applying-lattice-utilities [https://www.youtube.com/embed/rsXxtGzTozI](https://www.youtube.com/embed/rsXxtGzTozI) > **Transcript** > > This lesson will give you an overview of the utilities found in the Lattices tab. Watch as we walk through this example file and see how the different utilities affect our lattice. To retain this file as a resource, feel free to download it below. > > Opening the notebook outline to see the overview of our work, we've created a section for each of our utilities. We've begun by importing this CAD part of this shoe sole. We've created a CAD variable and converted it to an implicit. We'll keep these both in our geometry section along with a simple rectangular cell map, a unit cell, and a periodic lattice block. > > Let's begin by taking a look at the **Trim Cell Map** block. When working with any of these lattice utilities, you see that our output type will be purple, denoting that they'll retain lattice properties. Let's isolate the visibility of our rectangular cell map and compare it with our trimmed cell map. Here we see that we've used our implicit midsole as our trimming body and set our fill type so that any of the cells in our initial cell map that were touching our implicit midsole are retained. Now, when we use the trimmed cell map as our cell map in a periodic lattice, we see this result that more closely resembles our initial body. > > In addition to trimming our cell map, we can also trim a lattice itself. Here we're using the **Trim Lattice** block to trim our initial periodic lattice. Our body will again be our implicit midsole. So, if I isolate this trimmed lattice, we see that we've trimmed our lattice to that body. Notice that our properties match the properties of a lattice, whereas if we had used a Boolean intersect to achieve the same look, our properties are those of an implicit body rather than a lattice. > > The **Modify Lattice Thickness** block will take your input lattice and modify the beam thickness. Here we're using our trimmed lattice as our input, and we can alter the thickness. Notice that even as we thicken our beams, we maintain the same outer surface as our trimmed lattice and don't go beyond the bounds of the implicit body used to trim it. > > The **Merge Lattices** block will merge a list of two or more lattices. Here we've taken our CAD face list from the outer part of the midsole, stitched it, and created a mesh from our CAD body. We used that mesh in a **Lattice From Surface Mesh** block, where we chose our mesh boundaries and created the resulting lattice along those boundaries. We then used the **Merge Lattices** block to merge our trimmed lattice with that outer boundary. We can apply a thickness here as well, and the resulting lattice will have beams that all match that thickness. > > The **Extrude Lattice** option can help you to create ribs rather than cylindrical beams. If I move back up into our geometry section, I'll isolate our imported part and take a look at the bottom of this sole. We've selected our bottom face, meshed it, then remeshed the surface to have better control over our mesh element size. With this remesh surface, we've again used the **Lattice From Surface Mesh** block, now selecting mesh edges, and created the resulting lattice. We've then used the **Extrude Lattice** block, where we've used our implicit midsole as our direction. This indicates that our resulting lattice will extrude normal to the field of this implicit midsole. We've added a height of 2 mm and a lattice thickness of 0.5 mm. If I isolate, we see that we've created these ribs rather than those cylindrical beams. We've then converted the bottom of this sole to an implicit body and used a Boolean union to merge the two. > > Next, let's take a look at the **Extend Open Lattice Beams** block. This block will take any outer open lattice beams and extend them a user-defined distance. Insert a body in which you'd like to select those open beams, and those outer beams will be extended. To help visualize, I'll change our graph unit cell type to a simple cubic. > > Finally, the **Collapse Lattice Vertices** block will identify vertices that are within a certain distance of one another. Vertices falling within this distance threshold will be collapsed and merged with one another. With this distance threshold at 0 mm, you see open beams, and as I increase this distance threshold, we see some of these vertices start to collapse. One way to help visualize how this block works is to use this Delaunay lattice as our input. Because our vertices aren't spaced as evenly as they are in our body-centered cubic, we see how this distance threshold can affect our output. > > To reference this file later on or further explore the lattice utilities, feel free to download this file below. Watch as we apply these Lattice Utilities to the sole of a shoe. There is no need to follow along, but feel free to download the example file below as a reference. **Example File:** [210\_24\_1 Lattice Utilities.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_24_1%20Lattice%20Utilities.ntop) *This file was last updated in nTop 5.20.* 2 # Before We Begin: Lattices Source: https://docs.ntop.com/lessons/intro-to-lattices/before-we-begin-lattices [https://www.youtube.com/embed/q74K3s-gPhI](https://www.youtube.com/embed/q74K3s-gPhI) In this course, we will: * Get to know Lattices, their properties, and how to apply them to designs. * Understand how to work with the **Periodic Lattice**, including defining **Unit Cells** and the **Cell Map** of a lattice structure * Explore the various ways of latticing to create and manipulate custom or conformal structures, surface textures, and ribbings **Example File:** [210\_1\_1 Lattice Type Visualization.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_1_1%20Lattice%20Type%20Visualization.ntop) *This file was last updated in nTop 4.2.3* # Cell Maps Source: https://docs.ntop.com/lessons/intro-to-lattices/cell-maps We also need a Cell Map to generate a lattice in the **Periodic Lattice** block. The Cell Map is made entirely separate from the Unit Cell. Its purpose is to define the layout of where each Unit Cell will go. To add a lattice to an implicit body, we use three types of Cell Maps: **Rectangular**, **Cylindrical**, and **Spherical**. ![](https://files.learn.ntop.com/lessons/cell-maps/210_8_1-cm-options.png) The Cell Map governs where the Unit Cells will go (aligning the u, v, and w coordinates of each), allowing you to edit the size, radius, and cell counts. Each Cell Map block has a *Volume* input that uses an implicit body to define its extent and an optional *Frame* that defines the starting point and orientation of the map. ## Rectangular Cell Map The **Rectangular Cell Map** block generates a cell map across the input volume with cells of defined *Cell Size* in rectangular coordinates. This map serves as a layout for the lattice Unit Cells. ![](https://files.learn.ntop.com/lessons/cell-maps/image-4-1024x441.png) > [!NOTE] > > **Note**: The default Cell Map's starting point is the Minimum point of the body's bounding box. To change this starting point or the cell map's orientation, add a Frame or Plane block to the optional Frame input. ## Cylindrical Cell Map The **Cylindrical Cell Map** block generates a Cell Map with a cylindrical coordinate system that covers the entire input volume with cells using the specified *Cell radius* (U), *Cell height*(V), and *Arc count* (W). The Cell Map edges will be default curved to the cylindrical coordinate system. Check the *Linear* input to generate straight edges only. ![](https://files.learn.ntop.com/lessons/cell-maps/image-5-1024x460.png) > [!TIP] > > **Tip:** As a general rule, check the linear input when using a **Graph Unit Cell** and uncheck it when using a **TPMS Unit Cell** in the periodic lattice block. However, this will vary depending on your application and design goals. > [!NOTE] > > **Note**: The default Cell Map's starting point is auto-computed based on the volume's principal axes about the center of mass. To change this starting point or the cell map's orientation, add a **Frame** block to the optional Frame input. ## Spherical Cell Map The **Spherical Cell Map** generates a Cell Map with a spherical coordinate system that spans the entire input volume with cells using the specified *Cell radius* (U), *Latitude count* (V), and *Longitude count*(W). The Cell Map edges will be default curved to the cylindrical coordinate system. Check the *Linear* input to generate straight edges only. ![](https://files.learn.ntop.com/lessons/cell-maps/image-6-1024x439.png) ### View Settings When creating the Cell Map, you can isolate the block using 'I' and view the Full Map or Navigate the Map using the heads-up display. The Navigate and Full display modes are available in the Display tab of the Right Panel. The Navigate mode allows you to view individual cells. ![](https://files.learn.ntop.com/lessons/cell-maps/cell_map_hud.gif) # Cell Maps Using CAD Faces Source: https://docs.ntop.com/lessons/intro-to-lattices/cell-maps-using-cad-faces Generating cell maps using CAD faces can help create conformal lattices and textures. See the options below. ## Cell Map from CAD Face The **Cell Map from CAD Face** block outputs a Cell Map on any CAD Face. The block has three inputs: *Face*, *UVW count*, and *Height*. By default, the Cell Map contains straight edges only. By default, the Cell Map contains only straight edges. Uncheck the *Linear* input for edges that curve more conformally to the CAD Face. * **Face:** Accepts a single CAD Face * **UVW Count:** The number of Unit Cells in each axis of the CAD Face * **Height:** The Cell Map's height from the CAD Face can be either a constant value (scalar) or a variable (scalar field). ![](https://files.learn.ntop.com/lessons/cell-maps-using-cad-faces/210_12_1-cm-fromcad.gif) > [!NOTE] > > **Note**: The UVW count input follows the UVW parameterization of the CAD Face. If you're unsure of what U, V, and W counts represent on your particular CAD face, try inputting sample values so that the block runs. Then, the UVW guides will appear. ## Cell Map between CAD Faces The **Cell Map between CAD Faces** block generates a Cell Map between two CAD faces. The *UVW count* input specifies the number of cells in the three coordinate directions. By default, this block tries to automatically select the parameterizations of the input CAD Faces to achieve the best Cell Map between them. An overload is available to choose the parameterizations manually. ![](https://files.learn.ntop.com/lessons/cell-maps-using-cad-faces/210_12_2-cm-between-cad.gif) # Cell Maps Using Meshes Source: https://docs.ntop.com/lessons/intro-to-lattices/cell-maps-using-meshes If you want to add texture or ribbing to a surface, you may want to use the **Cell Map from Quad Mesh** block instead of generating the Cell Map from an implicit body. If you have multiple CAD faces for a ribbing, you will also use the **Cell Map from Quad Mesh** and convert those faces to a mesh in the process explained below. ![](https://files.learn.ntop.com/lessons/cell-maps-using-meshes/210_11_1-quad.png) The **Cell Map from Quad Mesh** takes in a quadrangulated surface mesh. The **Quadrangulate Mesh** block will add quads to a surface, and the edges of these quads are used to create the cells in the Cell Map. > [!NOTE] > > **Note**: To learn more about the Quadrangulate Mesh block or how to select a portion of a mesh, visit our [102: Guide to Meshing](/courses/102-guide-to-meshing/) course. If we increase the *Target count*, the number of quads increases, and the size of our cells decreases. To control how far the cells extend from the surface, we use a scalar value for the *Height*. To create the Cell Map underneath the surface (to remove material on the surface of a part), we can input a negative value for the *Height*. ![](https://files.learn.ntop.com/lessons/cell-maps-using-meshes/210_11_2-cm-from-quad.gif) # Custom Unit Cells Source: https://docs.ntop.com/lessons/intro-to-lattices/custom-unit-cells If none of the provided unit cells yield the lattice you hope for, you can use a **Custom Unit Cell instead**. When used in a **Periodic Lattice**, this block generates a user-defined lattice. This [support article](https://support.ntop.com/hc/en-us/articles/360055403953-How-to-build-a-custom-lattice-unit-cell#:~:text=To%20create%20a%20Custom%20Unit,spatial%20information%20within%20that%20boundary.\&text=Let's%20take%20a%20closer%20look,at%20the%20Body%20or%20Graph.) shows different options for building Custom Unit Cells. ![](https://files.learn.ntop.com/lessons/custom-unit-cells/210_7_1-custom-unit-cell.jpg) To create a **Custom Unit Cell**, you define an Implicit Body or a Graph to use as the repeated entity and define the body's *Domain*. The Unit Cell Domain defines the boundary of the Unit Cell and its spatial position within that boundary. ## Domain Let's take a closer look at the Unit Cell Domain. One method for defining the domain is using the *bounding box* chip, a property of the Implicit Body. This bounding box property inherently matches the boundary of the geometry and will create an exact fit for the **Custom Unit Cell**. ![](https://files.learn.ntop.com/lessons/custom-unit-cells/210_7_2-1-1.gif) Another method is to define the *Domain* separately using the **Bounding Box** block, as shown below. Note the position of the geometry within a separately created bounding box will affect the resulting lattice. For example, a small floating sphere centered inside a much larger domain will generate a lattice of spaced, floating spheres. ![](https://files.learn.ntop.com/lessons/custom-unit-cells/210_7_3-customunitcellbb.gif) # Delaunay Lattice Source: https://docs.ntop.com/lessons/intro-to-lattices/delaunay-lattice The **Delaunay Lattice** creates a lattice forming a Delaunay tetrahedralization from a list of points, as shown below. The lattice consists of triangles that maximize the minimum angle in each triangle. Tetrahedralization requires at least four points to run. ![](https://files.learn.ntop.com/lessons/delaunay-lattice/210_20_1-delaunay.png) Choose from the following lattice creation methods: * **Mesh edges:** Creates lattice beams along the mesh edges. * **Vertex Centroid:** Creates a vertex at each mesh face's centroid and the mesh vertices. Lattice beams connect the vertices. * **Dual:** Creates a vertex at the centroid of each mesh face and creates a connecting beam to the next closest mesh centroid. ![](https://files.learn.ntop.com/lessons/delaunay-lattice/delaunay.png) ## Stochastic Lattice Types Since maximizing minimum angles prevents long beams, the resulting Delaunay structures are typically stiff. The result is a stochastic, stiff lattice. In contrast, the Voronoi lattice is typically softer/ more flexible. ![](https://files.learn.ntop.com/lessons/delaunay-lattice/image-9-1024x436.png) # Download: Completed Non-Periodic Lattices Source: https://docs.ntop.com/lessons/intro-to-lattices/download-completed-non-periodic-lattices Now that you have completed the follow along, feel free to download the completed file with descriptions as a resource. Next, if you would like to test your knowledge on creating Voronoi and Delaunay lattices in nTop, feel free to try our optional Knowledge Check at the end of this course. **Example File:** [210\_22\_1 Completed–Non-Periodic Lattices.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_22_1%20Completed--Non-Periodic%20Lattices.ntop) *This file was last updated in nTop 5.12.2* # Download: Completed Periodic Lattice Source: https://docs.ntop.com/lessons/intro-to-lattices/download-completed-periodic-lattice Now that you have completed the follow along, feel free to download below the completed file with descriptions on how to add a lattice to a body. **Example File:** [210\_10\_1 Completed–Periodic Lattice.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_10_1%20Completed--Periodic%20Lattice.ntop) *This file was last updated in nTop 4.2.3* # Download: Completed Periodic Lattice on Faces Source: https://docs.ntop.com/lessons/intro-to-lattices/download-completed-periodic-lattice-on-faces Now that you have completed the follow along, feel free to download the completed file with descriptions as a resource. **Example File:** [210\_14\_1 Completed–Periodic Lattice on Faces.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_14_1%20Completed--Periodic%20Lattice%20on%20Faces.ntop) *This file was last updated in 5.12.2* # Filtering Lattice Beams Source: https://docs.ntop.com/lessons/intro-to-lattices/filtering-lattice-beams In addition to modifying lattices using the Utilities in the previous lessons, you can also filter beams in a graph lattice using the filter options in the *Lattice Utilities*. The output type of any of these Filter blocks is a Lattice. ![](https://files.learn.ntop.com/lessons/filtering-lattice-beams/210_27_1-filter-beams-options.png) We offer five filtering options for comparing lattice beams to different criteria. If the comparison is false, the corresponding beam is filtered from the resulting Lattice. These are toolkit blocks, so right-click and select 'Open Block' to see their associated workflows. The **Lattice from the\*\*\*\*Beams** block, also in the Lattice Utilities, appears in each of these toolkit blocks. > **Filter Beams by Length** > > Retain a lattice's beams that meet a specified length. > > ![](https://files.learn.ntop.com/lessons/filtering-lattice-beams/210_27_2-filter-by-length-1024x462.gif) > **Filter Beams by Angle** > > Specify a Plane against which to compare beam angles. > > ![](https://files.learn.ntop.com/lessons/filtering-lattice-beams/210_27_3-filter-by-angle.gif) > **Filter Beams by Connectivity** > > Isolate or remove Closed, Floating, or Open Beams. > > ![](https://files.learn.ntop.com/lessons/filtering-lattice-beams/210_27_4-filter-by-connectivity.gif) > **Filter Beams by Containment** > > Differentiate between beams that are fully or partially contained by a specified Region (Implicit Body). > > ![](https://files.learn.ntop.com/lessons/filtering-lattice-beams/210_27_5-filter-by-containment.gif) > **Filter Beams by Thickness** > > Filter by a specified beam thickness. > > ![](https://files.learn.ntop.com/lessons/filtering-lattice-beams/210_27_6-filter-by-thickness.gif) In addition to the five blocks above, use the **Filter Beams** block to generate your filtering criteria. You can compare each value in the Values list against the Criteria with the selected Condition. If the comparison is false, the corresponding beam is filtered from the resulting lattice. Therefore, the number of *Values* must match the number of beams in the input *Lattice*. ![](https://files.learn.ntop.com/lessons/filtering-lattice-beams/210_27_7-filter-beams-1.jpg) # Follow Along: Non-Periodic Lattices Source: https://docs.ntop.com/lessons/intro-to-lattices/follow-along-non-periodic-lattices [https://www.youtube.com/embed/HscPvs9F67w](https://www.youtube.com/embed/HscPvs9F67w) > **Transcript** > > In this lesson, we'll discuss our options for stochastic or non-periodic lattices in nTop. We'll discuss Voronoi and Delaunay lattices, as well as a custom block that adds noise to otherwise uniform periodic lattices. Download the starter file below to begin. When you open the starter file, you'll see the part that we've been working with throughout this course. We've already defined the inner body and outer body implicits. Let's begin with a **Voro Volume** lattice. > > We'll drop our white line into this section and add a **Voro Volume Lattice** block from our stochastic dropdown in our Lattices tab. With Voronoi lattices, we need to define seed points or locations for nodes. We can double click on this input and add a **Random Points In Body** block. This block takes a body input, which will be our inner body, and a point spacing input, which we'll make 30 mm. We'll add a random seed, typically one, unless you want to achieve a new random set of points. And we've created these points that are approximately 30 mm apart from one another. We can make these seed points a variable called “points in body.” We'll also add a thickness of 5 mm. We can right-click to make this thickness a variable as well. > > Now that we've created this **Voro** lattice, let's trim it to fit completely within this inner body. From the utilities dropdown, I'll add a **Trim Lattice** block and I'll pull in our volume lattice as well as our inner body. For our volume, we'll choose the lattice inside to remain and set a tolerance. Now we've trimmed our lattice to the inside of our inner body and we'll right-click, make this a variable and call it “Voronoi Volume Open.” > > With the lattice that we've created, notice that all of the outside branches are open. If you'd prefer closed beams, we could add a mesh to this optional mesh input. To do this, let's copy using control C and paste using control V to create a new variable. We'll rename this variable “Voronoi Volume Closed.” In our mesh input, we can double-click and we'll add a **Volume Mesh** block. Within this domain, we'll double-click and add a **Mesh From CAD Body**. This **Mesh From CAD Body** would run faster than a **Mesh From Implicit Body** if we wanted to mesh our inner body implicit. For our CAD body, we can pull in our inner body CAD by making this a variable called “inner CAD” and adding it to our CAD body input. We'll add a tolerance and an edge length, and viewing our **Voro** lattice, we see that we now have a completely closed lattice. > > Now let's use a custom block with **Voro** properties to add noise to a lattice. We'll start by importing the custom block that you downloaded below. Under file and import, you can choose this custom block, “Add Noise To Beam Lattice Vertices.” At any point, if you're working with a custom block, you can right-click and export to save as an nTop file and see the workflow behind the block. We'll drop this into our custom block section. Let's start by creating a periodic lattice like we did in our last lessons, and we'll add a **Graph Unit Cell** and a **Rectangular Cell Map**. We'll choose a simple cubic, and for our **Rectangular Cell Map**, we'll choose our inner body. We'll make a cell size of 15x 15x 15 mm, and we'll make our thickness a variable called “thickness.” We'll make this a scalar input and make it 5 mm. If I isolate using I, I see that we have this regular periodic lattice. I'll right-click, make it a variable and call it “Simple Cubic Lattice.” > > Now let's input this to our custom block and set a maximum offset of 5 mm. We'll pull in our beam thickness and keep our collapse threshold at zero. If I isolate using I, I see that we still have this periodic body, but we have an element of randomness added into our lattice. I'll make this a variable right-clicking and calling it “random.” Now in our Utilities tab, I'll pull in a **Trim Lattice** block, drag in our random lattice and our inner body, and setting a tolerance isolating using I, I see that we now have this randomized periodic body for our inner bracket. I'll make this a variable called “CB noise lattice.” > > Next, let's apply a **Voronoi Surface Lattice** to our inner body. We'll start by pulling in a **Voronoi Surface Lattice** block, and for our seed points, we'll assign **Random Points On A Mesh**. This will create points across the surface of a mesh. For our mesh, we can use the mesh that we created earlier for our inner body. We'll scroll up to find that mesh, make it a variable, and call it “Mesh Inner Body.” For organization, I'll pull it up into our geometry section. I'll add this as our mesh and set a point count of 100, 30 relaxation iterations, and keep our random seed at one. I'll use the same thickness as we used earlier and apply this surface lattice to our mesh. If I isolate using I, I see that we've created this **Voro Surface Lattice** with our points. I can call this “Voronoi Surface Lattice.” > > Next, I can create a **Delaunay Lattice** from our stochastic dropdown in our Lattices tab. I'll pull the **Delaunay Lattice** block into our notebook. For our vertices, I'll use the same points in the body that we created for our **Voronoi Volume** lattice. I'll select the mesh edges and assign my thickness that we used earlier. If I isolate using I, I see that we've created this **Delaunay Lattice** in place of our **Voro**. I'll right-click to make this a variable and call it “Delaunay Lattice.” > > Then to merge these lattices that we've created with our outer body, we'll move our white line into our final part section and open our modeling tab to pull in a **Boolean Intersect** block. I can intersect any of these lattices with our inner body, and then I can pull in a **Boolean Union** block to union this with our outer body. I'll assign a blend radius and view my results. In cases where this **Boolean Union** radius creates features that fall out of our initial design space, I'll add a **Boolean Intersect** block and intersect our **Boolean Union** with a union of our initial inner and outer body bodies. I'll add a **Boolean Union** block and drop in our inner and outer bodies. I'll right-click and make this a variable called “Final Part.” To view all of our different lattice options in this final part, I can just pull in any of these lattices that we've created and replace our lattice in our “Final Part.” This lesson will demonstrate how to use the **Voronoi Volume Lattice** block, the **Voronoi Surface** **Lattice** block, and the **Delaunay Lattice** blocks. To learn more about the volume and surface meshes discussed in this video, please visit our [102: Guide to Meshing](https://learn.ntop.com/courses/102-guide-to-meshing/) course. Please download the two nTop files below to follow along with the tutorial. This starter file is the same file used in the previous lesson, “Follow Along: Periodic Lattices,” so you can also use that same starting file. The only differences between the two are that there are different section titles in these two download files. Please also download the file labeled “CB Add Noise to Beam Lattice Vertices” which we will also use in this follow along. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. **Example File:** [210\_21\_1 Starter–Non-Periodic Lattices.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_21_1%20Starter--Non-Periodic%20Lattices.ntop) *This file was last updated in nTop 3.38.4* **Example File:** [210\_21\_2 CB Add Noise to Beam Lattice Vertices.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_21_2%20CB%20Add%20Noise%20to%20Beam%20Lattice%20Vertices.ntop) *This file was last updated in nTop 5.12.2* [210\_21\_1 Follow Along – Non Periodic Lattices.pdf](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/PDFs/210_21_1%20Follow%20Along%20-%20Non%20Periodic%20Lattices.pdf) # Follow Along: Periodic Lattice Source: https://docs.ntop.com/lessons/intro-to-lattices/follow-along-periodic-lattice [https://www.youtube.com/embed/29klcbkeFqQ](https://www.youtube.com/embed/29klcbkeFqQ) > **Transcript** > > Follow Along: Periodic Lattice > [https://youtu.be/29klcbkeFqQ](https://youtu.be/29klcbkeFqQ) > > In this lesson, we'll lightweight a two-part bracket using the **Periodic Lattice** block. We'll discuss both a TPMS unit cell, as well as a graph unit cell and practice cell mapping across a nTop part. Download the starter file below to begin. > > In this starter file, you'll see an embedded part. If you don't see the part in your viewing window, select the block and use the hotkey “Z” to zoom to fit your viewing window. Before we begin our workflow, hovering over this part, we see that we can select edges and faces. This is a CAD part, so we'll first have to convert to implicit bodies and nTop native geometry. > > We'll start in the Utilities tab under Conversion, and we'll pull an **Implicit Body from CAD Body** block into our notebook. This is where we'll define the inner body. We can copy using Control-C, and paste a second block of the same type into our notebook using Control-V. Now let's open the block details of our part, and under Properties, we can pull our Body 0 and Body 1 into our CAD body inputs. Selecting either of these blocks and isolating using the hotkey “I,” we can view which part of the bracket we're defining. We see that this first block is the inner body of the bracket, so I'll right-click and make this a variable called “inner body.” Then I'll isolate the next block using “I” and I'll make this a variable calling it “outer body.” > > Now that we've defined both the inner and the outer bodies, I also want to define the entire bracket. Under our Modeling tab, in the Boolean section, I'll add a **Boolean Union** block to my notebook. For our implicit body list, I'll pull in both our inner body and our outer body. Isolate using “I,” and I see that I've now defined our entire bracket. I'll right-click to make this a variable and call it “entire bracket.” To clean up my notebook, I can collapse each of these blocks using the space bar. > > Now let's explore latticing using graph-based unit cells. Click into the graph-based lattice section to drop this white line, which is where all of our new blocks will go. Let's begin by adding our **Periodic Lattice** block into this section. I'll go to our Lattices tab and under Lattice, add this block to our notebook. In this block, we see that we have our two main inputs: a unit cell and a cell map. Let's begin by adding our unit cell. Under Unit Cells, I'll add a **Graph Unit Cell** to our notebook. > > In this new block, I'll choose our unit cell type, body-centered cubic, and I can change our orientation. If I zoom to fit using “Z,” I see that this is our individual unit cell that will map across our cell map. Under Cell Maps, I'll add a **Rectangular Cell Map** to our notebook. And for our volume input, I'll use our inner body, because this is the body that I want to lattice. I'll set a cell size 30 mm cubed, and if needed, I could set a frame where I could define my origin and X and Y axes for rotation. > > Now that we've defined both our unit cell and our cell map, we can add them to our **Periodic Lattice** block. We see that this first parameter has updated to thickness, since that's the parameter associated with our **Graph Unit Cell**. I'll give this unit cell a thickness of 5 mm and press Enter. If I zoom to fit using the hotkey “Z,” I see that we've created this periodic lattice across the span of our inner body. > > Now, to trim the excess from the outside of this body, I'll add a **Boolean Intersect** block, which can be found in our Modeling tab. I'll intersect this new **Periodic Lattice** block, as well as our initial inner body. If I isolate using the hotkey “I,” I see that we've now trimmed this lattice to only fit within the bounds of our inner body. I'll right-click and make this a variable called “graph lat.” > > Say that instead of a **Graph Unit Cell**, I wanted to use a walled TPMS unit cell. Let's drop our line into our walled TPMS section and add another **Periodic Lattice** block to our notebook. For our unit cell, we'll use a walled TPMS, and we'll select a gyroid infill. We can add this to our **Periodic Lattice** block. > > Now let's create our cell map. In comparison to our **Rectangular Cell Map** that we created earlier, let's try making a cylindrical cell map that aligns with this hole in our inner bracket. Under our Cell Maps in our Lattices tab, add a **Cylindrical Cell Map** block to your notebook. In our volume, we can double-click and choose our inner body variable, and let's set our cell radius as 30 mm, and a cell height as 30 as well. We'll make our arc count 15 and view our results. > > We see that this isn't lined up with the hole like we would like, so let's adjust our frame. We can double-click in our frame input and add our frame. For our origin, we can pull this gimbal to the center of our hole, and we can adjust our X and Y axes as needed. If I view this new frame, I see that we've created this cylindrical cell map that's aligned with our part. Our cell radius is 30 mm, our cell height is 30 mm as well, and we have an arc count of 15 arcs going around this cell map. Let's pull this cell map into our **Periodic Lattice**, and we'll give our wall DPMS an approximate thickness of 5 mm. Here we can see the periodic lattice that we've created along this cell map in comparison to our rectangular periodic lattice from before. > > Let's add a **Boolean Intersect** block to trim this up, and we'll intersect this periodic lat with our inner body. We can right-click and make this a variable called “walled TPMS.” Using the space bar, I'll collapse both of these variables, and we can move on to creating our final body. Here we'll add a **Boolean Union** block to union one of our lattices with our outer body. It's good practice to add a blend radius to strengthen the connections between the lattice and the outer frame, as well as decreased stresses in these areas. I'll add a radius of five and isolate this using “I.” > > Often, when adding these blend radii, we see these extensions of our structures. We can trim these the same way we did with our periodic lattice using a **Boolean Intersect** block, and we'll intersect our **Boolean Union** with our entire bracket that we made in our geometry section. Now we've trimmed off any excess, and we have our final lightweighted part. To view this part with our cylindrically mapped wall TPMS, we can just pull that in in place of our graph lattice. In this lesson, we will walk through adding a TPMS and Graph Lattice to the inner volume of a CAD bracket. To review importing and selecting CAD bodies, please revisit [101: nTop Essentials](/courses/101-ntop-essentials/). Please download the nTop file below to follow along with the tutorial. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [210\_9\_1 Starter–Periodic Lattice.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_9_1%20Starter--Periodic%20Lattice.ntop) *This file was last updated in nTop 5.4.2* [210\_9\_1 Follow Along – Periodic Lattices.pdf](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/PDFs/210_9_1%20Follow%20Along%20-%20Periodic%20Lattices.pdf) # Follow Along: Periodic Lattice on Faces Source: https://docs.ntop.com/lessons/intro-to-lattices/follow-along-periodic-lattice-on-faces [https://www.youtube.com/embed/mPUsn9gR4sw](https://www.youtube.com/embed/mPUsn9gR4sw) > **Transcript** > > In this lesson, we'll learn how to use meshes and CAD faces to create cell maps and generate periodic lates for lightweighting and texturing. Begin by downloading the starter file below. As we saw in the last lesson, if we isolate this part using “I” and zoom using “Z”, we have a two-part CAD bracket that we're starting with. Under the Utilities tab, we'll again add two **Implicit Body From CAD Body** blocks to our notebook. > > We'll pull in our inner body and our outer body. Isolate using “I” to see which one we're working with and right-click to make each a variable. Again, we'll use a **Boolean Union** block under the modeling section and Union both of these variables to create a third variable called “entire part”. I'll collapse these new variables with the space bar and move on to our Unit Cells section. Here, I'll create two different unit cells: a walled TPMS and a graph unit cell. Under my Lattices tab, I'll pull in a **Graph Unit Cell** as well as a **Walled TPMS Unit Cell**. For our TPMS, I'll choose a split P unit cell, and for our graph, I'll choose a square honeycomb. I'll make these into variables and call them “graph” and “TPMS”. I'll collapse using the space bar and move on to our Cell Map section. > > First, I'll want to lightweight our inner body using our split P wall TPMS unit cell, so I'll have to create a cell map across this inner body. I'll add a **Cell Map** block, **Rectangular Cell Map**, and make our volume inner body with a cell size of 35x 35x 35 mm. I see that we've created this cell map across this body. Notice that here we're viewing the full map, but we can also navigate the map using our unit cell viewer. Each of these boxes is where one of these unit cells will go. I'll right-click to make this cell map a variable called “rectangular cell map”. > > In addition to creating cell maps across implicit bodies, we can also create them on CAD faces. I'll isolate my CAD part using “I”, and under Cell Maps, I'll add a **Cell Map From CAD Face** block. Let's say we wanted to add a periodic lattice to this CAD face. I would click the face I wanted to select, right-click, and create a CAD face variable. I could then pull this variable or its contents in as my CAD face. Then I could select a UVW count. Here, I'll make it 10, 3, 1, and select my height. I'll make my height -1 since I want to texture this face and remove material from our periodic lattice that we're creating. Zooming in, we see the cell map that we've created from this CAD face. With our UVW guide, we can see exactly what's happening with our local coordinates. In the U direction along this red axis, we have 10 evenly based cells. Across our green V-axis, we have three cells, and along our W axis, we have only one cell. I'll right-click to make this a variable and call it “CAD cell map”. > > In addition to creating cell maps across a CAD face, we can also create them from quad meshes. I'll add a **Cell Map** block, **Cell Map From Quad Mesh**, and we'll need to create a quadrangular mesh of the faces that we want to cell map across. I'll start by isolating my part using the hotkey “I”, and then I'll create a CAD face list of the faces that I want to texture. Holding the Control key, I can click each face that I want to texture, and I'll click all of these CAD faces around the outside edges of our part. I'll right-click and create a CAD face list variable. > > I'll then add a block, **Stitch Adjacent CAD Faces**, and I can delete out this pre-populated CAD face list and pull in our variable that we've created. If I isolate using “I”, I've created this CAD body. Next, under our Utilities section and Conversion, I'll add a **Mesh From CAD Body** block and pull in our CAD body. Isolating using “I”, I see that we've created this mesh. Next, I'll quadrangulate this mesh using the context search. To do so, I'll add a **Quadrangulate Mesh** block that will be this parent block, and I see that my mesh has automatically been nested into this **Quadrangulate Mesh** block. Next, we'll add this quadrangulate mesh into our **Cell Map From Quad Mesh** block. We can add a height of -1 to remove one mm of material once we make our periodic lattice, and we'll add one as our layer count. If we view our cell map, we see that it's created this cell map on all of the edges of our quad mesh. Let's make our target count a variable. If we change this down to 500 from 2,000, we see that our cell map updates to have larger cells and a lower cell count. Let's make this cell map from quad mesh a variable, right-clicking, making it a variable, and calling it “mesh cell map”. > > We'll collapse all of our variables, and now we can move on to creating our periodic lattices and our final part. Let's start by lightweighting our inner body. Under our Lattices tab, we'll add a **Periodic Lattice**, and we'll pull in our TPMS unit cell as well as our rectangular cell map across our inner body. We'll set a thickness of 5 mm and create this internal split P periodic lattice. I'll isolate this and make it a variable called “inner lattice”. > > Now, we'll add a **Periodic Lattice** block for our texturing, and our unit cell will be this graph unit cell that we created. Let's make our cell map our CAD cell map from before, and we'll make our thickness 1 mm. If I view this periodic lattice in relation to our entire part, I see that we've created this 3D structure across the CAD face that we selected earlier. I'll right-click to make this a variable and call it “texture”. This will be the substance that we remove from this face to create a debossed texture across our body. > > Now, we'll put the final part together. I'll add a **Boolean Intersect** block from our Modeling tab, and I'll intersect our inner lattice with our inner body. I'll then add a **Boolean Union** block, and I'll Union this intersect with our outer body. I'll add a blend radius of 5 mm, and then I'll have to trim away any of this excess material. I'll use another **Boolean Intersect** block to do so. I'll intersect this part with our entire part, and now we have clean edges across our entire part. > > Finally, to remove the texture, I'll add a **Boolean Subtract** block and pull in our Boolean intersect as our primary body and our texture as our subtraction. If I right-click and make this a variable called “final part” and collapse all of our variables, I can view this final part that's lightweighted across the inner body and textured across our CAD face where we've created our cell map. If instead of this cell map that we created across our CAD face we wanted to texture the entire mesh cell map that we created earlier, we could pull our mesh cell map into our texture variable, and viewing our final part, we've textured all of the outer sides of the outer bracket. In this video, we walk through an example of using the **Periodic Lattice** to lattice an implicit body, a CAD face, and a mesh for lightweighting and texturing. Please download the nTop file below to follow along with the tutorial. This file is the same file used in the previous lesson, “Follow Along: Periodic Lattices,” so you can also use that same starting file. The only differences between the two starter files are different section titles between these two download files. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [210\_13\_1 Starter–Periodic Lattice on Faces.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_13_1%20Starter--Periodic%20Lattice%20on%20Faces.ntop) *This file was last updated in 3.37.3* [210\_13\_1 Follow Along – Periodic Lattice on Faces.pdf](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/PDFs/210_13_1%20Follow%20Along%20-%20Periodic%20Lattice%20on%20Faces.pdf) # Graph Unit Cells Source: https://docs.ntop.com/lessons/intro-to-lattices/graph-unit-cells You can use the **Graph Unit Cell** block to create a Periodic Lattice. A Unit Cell Preview will pop up when selecting your Unit Cell type, and you can change the parameters in the view settings from the Display tab on the Right Panel. You can toggle between *Implicit* and *Graph* display modes. With Implicit display mode, you can change the Thickness of the Unit Cell to view a 3D rendering. You can also toggle the Bounding Box view to show the extent of the Unit Cell. ![](https://files.learn.ntop.com/lessons/graph-unit-cells/unit_cell_hud.gif) The second input of the **Graph Unit Cell** block allows you to change the cell's orientation, or you can use the **Orient Unit Cell** block. The orientation changes the layout of the Unit Cell, which can affect the structure based on its usage. ![](https://files.learn.ntop.com/lessons/graph-unit-cells/orient_unit_cell.gif) > [!NOTE] > > **Note**: The preview will show thickness, but no thickness will be added to the Unit Cell at this step. The View Setting is just for visualization purposes. ## Graph Properties In the Properties of graph-based lattices, you can find the *graph* property. To use this property, drag it from the Properties panel into the Notebook or a block input. Expand the *graph* property to see *valencies*, *edge counts*, and more properties. ![](https://files.learn.ntop.com/lessons/graph-unit-cells/210_5_3-graph-properties-1.gif) ## Graph Unit Cell Options Below are the options available for Graph Unit Cells. If you are receiving an error when using a Hex prism and other non-cubic unit cells, Follow the steps listed in this [article](https://support.ntop.com/hc/en-us/articles/32550573343891). ![](https://files.learn.ntop.com/lessons/graph-unit-cells/graph_unit_cells.png) ## Some Notes on our Lattice Types: * **Honeycombs** are hard to beat in the stiffness-to-weight ratio in their extruded direction. Still, they are much softer in the other two orthogonal directions (by around an order of magnitude). * **Octet** lattices are stiff in all three principal directions but more challenging to manufacture. * **Stochastic foams** are much more compliant but the easiest to finely tailor to a design's functional requirements through cell size and relative density. * **Auxetic honeycombs** can be designed to exhibit special properties like a negative Poisson's ratio (contracts inwards when compressed instead of barreling outwards). For more information on our lattices and their properties, check out this blog post, [Architected Materials for Impact Absorption](https://www.ntop.com/resources/blog/architected-materials-impact-absorption/). # Knowledge Check: Non-Periodic Lattices Source: https://docs.ntop.com/lessons/intro-to-lattices/knowledge-check-non-periodic-lattices # Knowledge Check: Periodic Lattices Source: https://docs.ntop.com/lessons/intro-to-lattices/knowledge-check-periodic-lattices # Lattice Properties and Terminology Source: https://docs.ntop.com/lessons/intro-to-lattices/lattice-properties-and-terminology ## What is a Lattice? The term “lattice” refers to any structure made from some fine pattern of material and air. In nTop, we have Graphs and Lattices. A *graph* type is a structure composed of beams with no thickness. A *lattice* can be a TPMS Structure, a custom pattern, or a graph with thickness included. Later in this course, we will use the **Periodic Lattice** block to generate lattices in nTop. ## Lattice Properties A lattice has three main properties: beams (if it is a graph lattice), implicit (to convert to an implicit body), and thick graph. To take a lattice out of the lattice body (so removing the beam thickness), you can drop down the thick graph type and use that graph. Some blocks like the **Voronoi Volume Lattice** have additional properties. ![](https://files.learn.ntop.com/lessons/lattice-properties-and-terminology/210_2_1-lattice-properties-1.png) ## Graph Properties The key properties specific to graphs include line segments, vertex count, vertex valencies, and vertices. Line segments refer to the different beams that make up the lattice. Vertices can be used to create uniform points across a body and in courses such as our [311: Ribbing and Texturing](/courses/311-ribbing-and-texturing/) course. ![](https://files.learn.ntop.com/lessons/lattice-properties-and-terminology/210_2_2-graph-properties-1.jpg) There is also a property called “faces as mesh” for the graph data type. This property allows you to extract a Mesh from a face-based Lattice automatically. You can access the Mesh in the Properties tab of the Block Information panel or by typing “your Lattice instance name.thickgraph.graph.faces as mesh” directly into an input. This property shows an error for beam-based lattices and has no output because there are no faces. ![](https://files.learn.ntop.com/lessons/lattice-properties-and-terminology/210_2_3-facesasmesh-1.png) # Lattice Utilities Source: https://docs.ntop.com/lessons/intro-to-lattices/lattice-utilities You can use Lattice Utilities to modify lattices after creation. These blocks are in the *Utilities* dropdown of the *Lattices* tab in the Ribbon. Lattice Utilities blocks output a lattice type containing lattice properties.\` See the options below, and watch how to apply them in the next lesson. ![](https://files.learn.ntop.com/lessons/optional-follow-along-fe-model-and-boundary-conditions-2/image-2.png) > **Trim Cell Map** > > Trim a cell map with an implicit body. > > ![](https://files.learn.ntop.com/lessons/lattice-utilities/210_25_2-trimcm_3.gif) > **Trim Lattice** > > Trim a lattice with an implicit body. > > ![](https://files.learn.ntop.com/lessons/lattice-utilities/210_25_3-trim-lattice.gif) > **Modify Lattice Thickness** > > Adjust the thickness of a lattice. > > ![](https://files.learn.ntop.com/lessons/lattice-utilities/210_25_4-modify-thickness.gif) > **Merge Lattices** > > Merge a list of two or more lattices. > > ![](https://files.learn.ntop.com/lessons/lattice-utilities/210_25_5-merge-lattices.gif) > **Extrude Lattice** > > Create directional ribs from the beams of a lattice. > > ![](https://files.learn.ntop.com/lessons/lattice-utilities/210_25_6-extrudelattice-1024x388.gif) > **Extend Open Lattice Beams** > > Extend open beams within a lattice. > > ![](https://files.learn.ntop.com/lessons/lattice-utilities/210_25_7-extend-open-beams.gif) > **Collapse Vertices** > > Merge and collapse vertices of a lattice within a specified distance > threshold. > > ![](https://files.learn.ntop.com/lessons/lattice-utilities/210_25_8-collapsevertices.gif) # Optional: Periodic Lattice Test Problem Source: https://docs.ntop.com/lessons/intro-to-lattices/optional-periodic-lattice-test-problem Now that you have learned about Periodic Lattices in nTop, feel free to try this optional problem with a review of the answer in the following lesson. Given the starter file below, use your own **Custom****Unit****Cell** to * generate a custom lattice infill across the implicit body variable labeled *Inner Body* * add a custom texture across the variable labeled *Faces to Texture* **Estimated Time to Complete:** 30 minutes **Example File:** [210\_16\_1 Starter–Optional Periodic Lattice Test Problem.ntop](https://files.learn.ntop.com/Courses/210%20Intro%20to%20Lattices/nTop%20Files/210_16_1%20Starter--Optional%20Periodic%20Lattice%20Test%20Problem.ntop) *This file was last updated in nTop 3.38.4* # Overview Source: https://docs.ntop.com/lessons/intro-to-lattices/overview ![Shoe sole form with intricate lattice structure](https://storage.googleapis.com/files-learn/lessons/intro-to-lattices/lattice-sole-overview.png) This course will introduce you to nTop's latticing options. After completing the course, you will have developed an understanding of how to implement a lattice into your workflow. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/before-we-begin-meshing) **What will be covered:** * Unit Cells, Cell Maps, and Periodic Lattices * Creating Periodic and Nonperiodic Lattices ### Before We Begin > **[Before We Begin](/lessons/intro-to-lattices/before-we-begin-lattices)** > **[Lattice Properties and Terminology](/lessons/intro-to-lattices/lattice-properties-and-terminology)** ### Periodic Lattice > **[Periodic Lattice](/lessons/intro-to-lattices/periodic-lattice)** > **[Unit Cells](/lessons/intro-to-lattices/unit-cells)** > **[Graph Unit Cells](/lessons/intro-to-lattices/graph-unit-cells)** > **[TPMS Unit Cells](/lessons/intro-to-lattices/tpms-unit-cells)** > **[Custom Unit Cells](/lessons/intro-to-lattices/custom-unit-cells)** > **[Cell Maps](/lessons/intro-to-lattices/cell-maps)** > **[Follow Along: Periodic Lattice](/lessons/intro-to-lattices/follow-along-periodic-lattice)** > **[Download: Completed Periodic Lattice](/lessons/intro-to-lattices/download-completed-periodic-lattice)** > **[Cell Maps Using CAD Faces](/lessons/intro-to-lattices/cell-maps-using-cad-faces)** > **[Cell Maps Using Meshes](/lessons/intro-to-lattices/cell-maps-using-meshes)** > **[Follow Along: Periodic Lattice on Faces](/lessons/intro-to-lattices/follow-along-periodic-lattice-on-faces)** > **[Download: Completed Periodic Lattice on Faces](/lessons/intro-to-lattices/download-completed-periodic-lattice-on-faces)** > **[Simple Volume Lattices](/lessons/intro-to-lattices/simple-volume-lattices)** > **[Knowledge Check: Periodic Lattices](/lessons/intro-to-lattices/knowledge-check-periodic-lattices)** ### Optional Test Problem > **[Optional: Periodic Lattice Test Problem](/lessons/intro-to-lattices/optional-periodic-lattice-test-problem)** > **[Answer to Optional Periodic Lattice Test Problem](/lessons/intro-to-lattices/answer-to-optional-periodic-lattice-test-problem)** ### Non-Periodic (Stochastic) Lattices > **[Voronoi Volume Lattice](/lessons/intro-to-lattices/voronoi-volume-lattice)** > **[Voronoi Surface Lattice](/lessons/intro-to-lattices/voronoi-surface-lattice)** > **[Delaunay Lattice](/lessons/intro-to-lattices/delaunay-lattice)** > **[Follow Along: Non-Periodic Lattices](/lessons/intro-to-lattices/follow-along-non-periodic-lattices)** > **[Download: Completed Non-Periodic Lattices](/lessons/intro-to-lattices/download-completed-non-periodic-lattices)** > **[Knowledge Check: Non-Periodic Lattices](/lessons/intro-to-lattices/knowledge-check-non-periodic-lattices)** ### Modifying Lattices > **[Lattice Utilities](/lessons/intro-to-lattices/lattice-utilities)** > **[Applying Lattice Utilities](/lessons/intro-to-lattices/applying-lattice-utilities)** > **[Filtering Lattice Beams](/lessons/intro-to-lattices/filtering-lattice-beams)** ### What's Next > **[Resources](/lessons/intro-to-lattices/resources)** # Periodic Lattice Source: https://docs.ntop.com/lessons/intro-to-lattices/periodic-lattice In the *Lattices* tab, we have the **Periodic Lattice** block, which creates all of the periodic lattices in nTop. The block generates these lattices through **Unit Cells** and **Cell Maps**. Using this block, we can create a lattice with a custom implicit design, a TPMS structure, or a graph. The **Periodic Lattice** block has three key inputs: *Unit Cell*, *Cell* *Map*, and *Unit Cell Parameters*. In the next few lessons, we will go into detail about these inputs and how to create a lattice using this block. ![](https://files.learn.ntop.com/lessons/periodic-lattice/210_3_1-periodic-lattice.jpg) # Resources Source: https://docs.ntop.com/lessons/intro-to-lattices/resources ### **Additional Resources on Latticing:** 1. Video Example: [Custom Lattice Unit Cell for Pie-Tops](https://ntopology.com/videos/video/ntop-live-designing-custom-lattice-pie-top-dough-cutters/) (\~3min) 2. Blog: [Top 7 shoe design video tutorials](https://www.ntop.com/resources/blog/top-shoe-design-video-tutorials/) 3. Simulating lattice structures in nTop: [342: Lattice FEA](https://learn.ntop.com/courses/342-lattice-fea-2/) # Simple Volume Lattices Source: https://docs.ntop.com/lessons/intro-to-lattices/simple-volume-lattices To expedite periodic lattice creation, when you want to add lattice to a volume, you can use one of three blocks: 1. Rectangular Volume Lattice 2. Cylindrical Volume Lattice 3. Spherical Volume Lattice These blocks will generate periodic lattices in rectangular, cylindrical, and spherical coordinates, respectively, without using the **Periodic Lattice** block or generating Cell Maps separately. These blocks automatically create a Cell Map based on the implicit body used as the *Volume* input. You can use the *Frame* input to translate and orient the tessellation of the Unit Cells and check/uncheck the *Trim* option to trim the final lattice to the input *Volume*. ![](https://files.learn.ntop.com/lessons/simple-volume-lattices/210_15_1-rect.png) ![](https://files.learn.ntop.com/lessons/simple-volume-lattices/210_15_2-cyl.jpg) ![](https://files.learn.ntop.com/lessons/simple-volume-lattices/210_15_3-spher.jpg) > [!NOTE] > > **Note**: These blocks use the same underlying technology as the **Periodic Lattice** block but can eliminate some setup steps when appropriate. # TPMS Unit Cells Source: https://docs.ntop.com/lessons/intro-to-lattices/tpms-unit-cells We can also create TPMS Structures using the blocks below along with our graph-based lattices. ![](https://files.learn.ntop.com/lessons/tpms-unit-cells/210_6_1-tpms-uc-dropdown.jpg) TPMS stands for ***triply periodic minimal surface***, and these structures are created from the sine and cosine equations. These surfaces form continuous, periodic structures when stacked in the x-, y-, or z- directions. See our [support article here](https://support.ntop.com/hc/en-us/articles/4403371438611-How-to-create-a-TPMS-from-an-equation) to build your own TPMS from an equation. ![](https://files.learn.ntop.com/lessons/tpms-unit-cells/210_6_2-tpms-types.jpg) The gyroid and broader family of triply periodic structures inherently have two sides or fluid domains, making them natural candidates for heat exchanger applications. They can be easily tailored or offset differently to alter stiffness and/or flow properties. Three blocks allow you to select a unit cell from a library of TPMS Unit Cells. ### Walled TPMS Unit Cell This block is a 1 Parameter Unit Cell, requiring one parameter to define it. The Unit Cell's parameter is the thickness of the TPMS walls. ![](https://files.learn.ntop.com/lessons/tpms-unit-cells/walled.png) ### TPMS Unit Cell with Offset This block is a 1 Parameter Unit Cell, requiring one parameter to define it. The parameter is the mid-surface offset of the TPMS, which is either a positive or negative distance. The Mid-surface offset wall shifts inward for negative values and outward for positive values. ![](https://files.learn.ntop.com/lessons/tpms-unit-cells/tpms_offset.png) ### Walled TPMS Unit Cell with Offset This block is a 2 Parameter Unit Cell, requiring two parameters to define it. The first parameter is the thickness of the TPMS walls, shown as ***T*** in the image below. The second parameter is the Mid-surface offset distance of the TPMS, shown as ***D*** in the image below. The offset can be a positive or negative distance. When viewing the Unit Cell in Front view, positive values move the mid-surface left, and negative values move it right. ![](https://files.learn.ntop.com/lessons/tpms-unit-cells/2_parameter-1024x543.png) > [!NOTE] > > **Note**: The *Approx. thickness* and *Mid-surface offset* inputs are approximate values, so the thickness and offset will vary based on the input provided. If you need Exact Thickness, we recommend using the overload on these TPMS Unit Cells and toggling the *Exact Thickness* checkbox. Some applications of our TPMS structures include [biomedical devices](https://ntopology.com/blog/designing-lattice-structures-for-medical-implants/), [supports for printing](https://ntopology.com/webinars/webinar/the-use-of-integrated-sacrifical-gyroid-support-structures-in-metal-additive-manufacturing/), and [heat exchangers](https://ntopology.com/webinars/webinar/design-process-with-simulation/). # Unit Cells Source: https://docs.ntop.com/lessons/intro-to-lattices/unit-cells A **Unit Cell** is the smallest portion of a lattice that defines the three-dimensional pattern to be repeated. There are three Unit Cell types in nTop: Non-Parametric Unit Cells, 1 Parameter Unit Cells, and 2 Parameter Unit Cells. The number indicates how many parameters are needed to define the Unit Cell. Below you can see the three Unit Cell types and descriptions: ![](https://files.learn.ntop.com/lessons/unit-cells/210_4_1-unit-cells-.png) The standard Unit Cell options are located in the *Lattices* tab. ![](https://files.learn.ntop.com/lessons/unit-cells/210_4_2-unit-cell-dropdown.png) # Voronoi Surface Lattice Source: https://docs.ntop.com/lessons/intro-to-lattices/voronoi-surface-lattice The **Voronoi Surface Lattice** block creates a lattice from the Voronoi diagram of a list of points restricted to the surface boundary of a body. ![](https://files.learn.ntop.com/lessons/voronoi-surface-lattice/210_19_1-voronoi-surface-lattice.jpg) ## Surface Voronoi Properties Along with the properties found with a lattice, the **Voronoi Surface Lattice** has one additional property: *voronoi surface patches*. This contains a list of meshes split by the Voronoi structure. You can use these surface patches with an **Implicit Body from Mesh** block and a **Thicken Body** block to fill in regions of the lattice structure. ![](https://files.learn.ntop.com/lessons/voronoi-surface-lattice/210_19_2-voronoi-surf-prop-1.gif) # Voronoi Volume Lattice Source: https://docs.ntop.com/lessons/intro-to-lattices/voronoi-volume-lattice In addition to periodic lattices, you can create non-periodic (stochastic) lattices in nTop. The **Voronoi Volume Lattice** block creates a lattice from the Voronoi diagram of a list of points within a volume. ![](https://files.learn.ntop.com/lessons/voronoi-volume-lattice/image-7.png) You can include a surface mesh as an optional *Boundary* input, which will confine the lattice created inside the mesh and close the beams. ![](https://files.learn.ntop.com/lessons/voronoi-volume-lattice/image-8-1024x433.png) You can also use the **Trim Lattice** or the **Boolean Intersect** blocks to remove the lattice extending outside the part to keep open beams at the edges. Note: The **Trim Lattice** option will maintain lattice properties in the output's details, while the **Boolean Intersect** option will output an implicit body with no lattice properties. ## Volume Voronoi Properties Along with the standard properties within a lattice, the **Voronoi Volume Lattice** has two additional properties: *cell diameters* and *voronoi cells*. ![](https://files.learn.ntop.com/lessons/voronoi-volume-lattice/210_18_4-vor-vol-properties-1.png) The **cell diameters** property provides the porosity of each cell produced in the Voronoi lattice. While the Point spacing input in the Random Points in a Body controls the porosity, there is a range across the lattice due to how the Voronoi lattice is produced, as shown below. ![](https://files.learn.ntop.com/lessons/voronoi-volume-lattice/210_18_5-cell-diameters.gif) The *voronoi cells* property is a list of the Voronoi cells produced in the lattice as shown below. ![](https://files.learn.ntop.com/lessons/voronoi-volume-lattice/210_18_6-voronoi-cells.gif) ## Example Application Below is an example Custom Block that uses the Voronoi lattice to add randomness to any lattice structure. See the example below with a simple cubic graph lattice. You can download this block in the [Follow Along: Non-Periodic Lattices](https://learn.ntop.com/lessons/follow-along-non-periodic-lattices/) text lesson in this section. ![](https://files.learn.ntop.com/lessons/voronoi-volume-lattice/210_19_7-example-application.jpg) # Answer to Mesh Portions Optional Test Problem Source: https://docs.ntop.com/lessons/intro-to-meshing/answer-to-mesh-portions-optional-test-problem [https://www.youtube.com/embed/dB3pB7LYfn4](https://www.youtube.com/embed/dB3pB7LYfn4) > **Transcript** > > In this lesson, we'll walk through the last step for our optional test problems of this course, which is selecting portions of a mesh. I'll use the previous answer from the last test problem for our starter file that you can download here, or you can use your own completed version of this, which uses our FE volume mesh, and we're going to select portions of this mesh. > > So the first thing we're asked to do is select these series of faces. All I have to do is with the AI volume mesh selected, I can right-click and choose this **Apply Boundary by Flood Fill** and I'll add that to the selection portion of a mesh. Because this is going to select the majority of the mesh, I can lower this angle and I'll lower this to 10°, and now we get that portion of the mesh that I want. So this is, I'll make this a variable, and I'll label this “Boundary Faces.” > > We're also going to select just the left half of this, and the way that we can do that is using our **Boundary by Body**. You can use our **Boundary by Body**, which is in beta, or **FE Boundary by Body**. The way that this works is I bring in that FE volume mesh. I'll select faces as the prompt asked, and for the body, I'm just going to use a **Box from Corners**. You could be more exact as well if you really wanted to make sure you take the entire half, but if I want the entire left half, I'm just going to move my corners. That's about half. If I look at my **Box from Corners**, I'm just going to move that again so that it encompasses the whole thing. > > Now when I visualize this, we can see this isn't exactly half. I can continue to move this or I can use our variables. So for instance, I could go into that volume mesh, or even our lattice part, for instance, take that **Bounding Box** and choose that centroid, and use that centroid as part of a way to select that it's exactly in the middle. But this is another way that we can select a portion of a mesh. So I'll right-click and make this a variable, and I'll label this “Left.” That's the last step for our series of optional test problems for this course. This video reviews the answer to the Mesh Portions Optional Test Problem to select the outer boundary and the left half of the latticed part. **Example File:** [102\_30\_Complete — Selecting Portions Test Problem.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_30_Complete%20--%20Selecting%20Portions%20Test%20Problem.ntop) *This file was last updated in nTop 5.20.2* # Answer to Optional Export Mesh Problem Source: https://docs.ntop.com/lessons/intro-to-meshing/answer-to-optional-export-mesh-problem [https://www.youtube.com/embed/W4xmgopbugE](https://www.youtube.com/embed/W4xmgopbugE) > **Transcript** > > In this lesson, we will walk through the optional test problem for our guide to meshing course, which starts with a starter file that has this latest part in it. And we have to **Export** it so that it is lower than 10,000 kilobytes. So, if you are interested in learning how this part was created with this Voronoi lattice, you can visit our Intro to Latticing course. If you're interested in learning how this custom block was created, you can visit our Intro to Automation course, both linked below this video. But we'll start with this implicit body, and what we are going to do first is just mesh this. > > So, we'll use the **Mesh From** a body block. We have the tolerance requested, which was 0.1 millimeters, and we have this part here, so it's a very fine tolerance. And I can also always go to my block details under display and uncheck that wireframe if you want to see what that finished result is. You could play around with that minimum feature size. You could also choose sharpen or simplify, but this is such a fine tolerance, we don't really need to do that. It's not asked to do those. And if we wanted to see what this looked like without that simplify check, I have that exported and let's see what that is. So, we have that value as our starting mesh, and our starting mesh, you can see, is 134,000 kilobytes roughly. And my final one, as a sneak preview, is under 7,000. So, we only had to have it under 10,000, so this is a little bit smaller than that. So, we do need to simplify in some way to lower that file size. Having it come out as that 3MF is also going to help lower that file size as well. > > And you could choose to just simplify right off the bat here, but note that this simplification is going to simplify it by about 90%, so this might introduce some self-intersections on some complex parts. So, a simple part is great to just check that simplify. You have a smaller file size coming out, but another way you can do that is using our **Simplify Block** and our **Remeshing Block**. So, that's what I'll do. So, we have the starting mesh. The next thing I'll do is use their **Simplify Mesh by Amount**. We could also use the **Simplify Mesh by Threshold**, and you can see I actually have simplified this by 90%. But the nice thing with our amount, a **Simplify Mesh by Amount**, is you can really control this. So, I recommend starting with 50%, seeing how that is, and then continuing to create that larger amount simplified. So, with certain files, maybe if you have the sharpen, you might notice that you'll get self-intersecting if you have a higher amount simplified. You maybe can only simplify 30%, so it's a good kind of trial and error for something like this when you're really trying to lower the file size while still producing a fine result. > > So again, I'll go into that block details. We can turn off that wireframe. Looks good. This is just now a simplified part, or we put in that starting mesh. I'll add another **Export Mesh** so we can see how this has affected our file size, and I'll label this simplified mesh and save that as a 3MF. So, we can see that this is already a lot smaller, so this is now 15,000 roughly kilobytes. So, it already does a great deal of help. And our last step, using that **Remesh Surface**, is going to bring us to be below that 10,000. Also, note, there are many ways to go about something in nTop. If you have a process that's slightly different, that's okay too. This is just one option for creating that result. > > So the last thing I did was this **Remesh Surface**, and I'm taking my simplified mesh and using that as my surface. Our edge length, I'm going to have as 1 millimeter, so it's going to create something like this. Our triangle, I also played around a little bit with some of these starting values. So, I added a minimum feature size. Let me show the original. So, I added that minimum feature size of 0.1. I also changed the growth rate to 1.2. So, depending on what you want, two is fine, but if you really want to have that smoothness between the transitions, then you may want to do something like 1.2, especially if you're creating something like a heat exchanger. So, I just made that 1.2 so we could see what that looks like. And you can see it looks pretty nice with these transitions. > > And the last thing I just did was export this. So, maybe you noticed that you have an edge length that is a lot larger. You can have even lower file size. You didn't do that growth rate. Those are all okay too. This is really just for practice. So, when you're ready to export maybe a complex part, you know the process that we would go through. So, we have that **Export Mesh**. And again, for the **Remesh Surface**, you just want to double-check when going into the block details and into properties. You want to make sure for your final mesh that it is closed, it is Edge manifold oriented, and it is not self-intersecting. So, if you do see that this is self-intersecting, you might want to change around some of these values. Maybe change around that **Simplify Mesh by Amount**. Maybe it's too simplified, and you just want to double-check throughout the way that that is the case. So, you can also check with that last one. The **Simplify Mesh by Amount** and **Simplify Mesh by Threshold** will give you a warning if it is self-intersecting. The **Remesh Surface** currently does not, so always double-check with the properties in that mesh, and then we can export this. This video reviews the answer to the Meshing Export test problem to export the latticed part as a 3MF with a file size lower than 10,000kB. **Example File:** [102\_17\_Complete — Export Mesh Test Problem.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_17_Complete%20--%20Export%20Mesh%20Test%20Problem.ntop) *This file was last updated in nTop 5.20.2* # Answer to Optional FE Volume Mesh Test Problem Source: https://docs.ntop.com/lessons/intro-to-meshing/answer-to-optional-fe-volume-mesh-test-problem [https://www.youtube.com/embed/nEqy40fKhoQ](https://www.youtube.com/embed/nEqy40fKhoQ) > **Transcript** > > In this lesson, we will walk through the answer to the optional volume mesh test problem, which uses the starting—which uses the final answer from the previous meshing optional test problem—on exporting, or you could use your end file as well. This optional test problem was to create an Fe volume mesh and then export that, and select portions of the mesh. > > So now that we have this remeshed surface, I can put that into a volume mesh. So it looks pretty much the same, but if I type X, I have that volume mesh. You can see, as opposed to just the remesh, which is those triangles on the surface, and then I have a growth rate of two. I could have done 1.2, like I had done for the remesh as well. > > And then I have my **FE Volume Mesh**. So depending on what you're using this for, you can do geometric order of linear quadratic. I used quadratic for this. And then we could export this if we wanted to export this out, or if we wanted to run a simulation, we have that as well. This video reviews the answer to the FE Volume Meshing Test Problem to create an FE Volume Mesh using the mesh from the previous test problem. **Example File:** [102\_23\_Complete — Volume Mesh Test Problem.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_23_Complete%20--%20Volume%20Mesh%20Test%20Problem.ntop) *This file was last updated in nTop 5.20.2* # Before We Begin: Meshing Source: https://docs.ntop.com/lessons/intro-to-meshing/before-we-begin-meshing [https://www.youtube.com/embed/ADXF6\_7GxX8](https://www.youtube.com/embed/ADXF6_7GxX8) In this course, we will: * Learn about the **properties and terminology** in meshing. * Understand how to **select specific areas of a mesh, clean mesh imports, and refine** **meshes** for latticing, simulation, and exporting. * Explore the **various ways of meshing** for simulation and converting to a CAD body. # Best Practices for Exporting Summary Source: https://docs.ntop.com/lessons/intro-to-meshing/best-practices-for-exporting-summary Throughout the Refining/Cleaning Meshing Section, we explored the different options to prep your part for export. If you are working with a complex meshing structure, here is the method we recommend to export for printing or simulation. ![](https://files.learn.ntop.com/lessons/best-practices-for-exporting-summary/102_14_MFIBtoExport-1024x138.png) While it depends on the application, here are the suggestions that we have for meshing complex TPMS or lattice structures for each block: > **Mesh from Implicit Body** > > **Tolerance:** > > * “Step Down Method” – Start with a large tolerance and then continue to lower > * Starting Size: 30-50% of your minimum feature size > > **Minimum Feature Size:** > > * “Step Down Method” > * Use this input if the output mesh captures small details which are not manufacturable. > > **Sharpen:** > > * (In the Overload Option) nTop gives you the option to sharpen only specific regions using the Sharpen Extents to avoid sharpening the whole mesh. > * If you're not satisfied with the output, first try increasing the number of iterations and then lower the tolerance (Generally, three sharpening iterations is a recommended starting point. Increasing the number of sharpen iterations can help to reduce down steam issues when remeshing. > > **Simplify:** > > Complex Part? Don't Simplify (this option will simplify by \~90% ) which may result in a loss of geometric fidelity. > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/MFIB-block.png) > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/MFIB-mesh-1024x868.png) > **Simplify Mesh by Amount** > > Start with 50% and check quality (i.e. self-intersection, fidelity, etc.) > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/SMBA-block.png) > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/SMBA-mesh-1024x868.png) > **Simplify Mesh by Threshold** > > Start with 10% of the input mesh tolerance and then decrease from there. (i.e. if your **Mesh from Implicit Body** tolerance is 0.2mm, your starting Simplify Threshold value is 0.02mm) > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/SMBT-block.png) > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/SMBT-mesh-1024x868.png) > **Remesh Surface** > > **Growth Rate:** > > * The default is 2, but when a higher-fidelity mesh is required, use a growth rate between 1.2 and 1.5. > > **Additional Inputs:** > > * Edge length is not the only or always the best way to control your mesh. For example, the Span Angle and Chord Height can be great ways to preserve your geometry. > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/RS-block.png) > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/RS-mesh-1024x868.png) > **Export Mesh** > > If your downstream application will accept a 3MF file, these are generally 1/3 the size of an equivalent STL file. > > ![](https://files.learn.ntop.com/lessons/intro-to-meshing/exportmesh-block-1.png) > [!TIP] > > **Tip:** > *“I generally use the Remesh Surface Block before I go to manufacturing or a high-fidelity analysis. I set the edge length quite large to start and adjust as needed. The geometric fidelity can also help be preserved with other control options. I ALWAYS start with my Growth Rate at 1.2. If I have a large model with a wide range between Min and Max feature sizes, I will generally try adjusting the Span angle and other inputs first to try and preserve curvature, etc., before reducing the Edge Length by too much. Let the meshing algorithm and inputs work for you.”* Tip from an nTop Solutions Engineer > [!NOTE] > > **Note**: We have recently added the **Mesh Quality** block to compute mesh quality metrics relevant for simulation analysis. This block is useful if the given volume mesh or (surface) mesh is used to create a downstream FE mesh. Available metrics include orthogonality, skewness, composite mesh quality, and intersecting triangles. The HUD also features a mix and max slider to view elements within the selected range to easily identify specific elements that may cause issues solving the simulation and getting accurate results. # Cleaning Meshes with a Voxel Grid Source: https://docs.ntop.com/lessons/intro-to-meshing/cleaning-meshes-with-a-voxel-grid If you are working with an imported mesh and you are having problems when converting it to an implicit body, this workflow can help: ![](https://files.learn.ntop.com/lessons/cleaning-meshes-with-a-voxel-grid/102_11_ImportToVoxel.png) ![](https://files.learn.ntop.com/lessons/cleaning-meshes-with-a-voxel-grid/102_11_MFVG.png) **Voxel Grid from Mesh** will fill the volume of your imported mesh with voxels, or “3D pixels,” and converting back to a mesh will generate a clean mesh which can then be converted to an implicit body. # Conversion to CAD with Quadrangulate Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/conversion-to-cad-with-quadrangulate-mesh To convert an Implicit Body or Mesh to CAD, we will use the **CAD Body from Quad Mesh** Block. This block is capable of exporting implicit or mesh parts to STEP or Parasolid formats. If you are working with an older version of nTop, this block is called **CAD Body from Mesh**. ![](https://files.learn.ntop.com/lessons/conversion-to-cad-with-quadrangulate-mesh/102_5_CBQM.png) ## CAD Body from Quad Mesh Before converting, we will use the **Quadrangulate Mesh** Block to generate a Quad mesh as in the workflow shown below. ![](https://files.learn.ntop.com/lessons/conversion-to-cad-with-quadrangulate-mesh/102_5_CBQM2.jpg) ## Quadrangulate Mesh The **Quadrangulate Mesh** block creates a mesh with the number of Quads indicated in the target count. For finer details, increase the target count. The quad mesh allows for easier and faster conversion to a CAD Body format. Note that meshes may need further refinement before being converted into a Quad Mesh, and this should not be used with lattices or TPMS structures. ![](https://files.learn.ntop.com/lessons/conversion-to-cad-with-quadrangulate-mesh/102_5_Quadmesh.gif) > [!NOTE] > > **Note**: This block works best with simpler structures and some TPMS lattices. We do not recommend it for use with a complex lattice structure. > For small to medium-sized lattices that this method cannot support, try the **CAD Body from Implicit Body** block discussed in the Working with CAD Bodies Lesson in [101: nTop Essentials](/courses/101-ntop-essentials/). # Converting to a Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/converting-to-a-mesh ## Mesh from CAD Body This block creates a mesh from a CAD body. If the imported CAD part has errors or holes, this may cause issues with the resulting mesh. ![](https://files.learn.ntop.com/lessons/converting-to-a-mesh/102_4_MFCB.png) ## Mesh from Implicit Body The **Mesh from Implicit Body** block converts an implicit body to a surface mesh. The block works by creating a 3D grid of voxels throughout the object's bounding box. The voxels intersecting with the input body are maintained and generate a mesh from the voxel edges. ![](https://files.learn.ntop.com/lessons/converting-to-a-mesh/102_4_MFIB.jpg) * ***Tolerance:*** Translates to the voxel size. Half the input tolerance gives the voxel size. As a rule of thumb, the number of triangles in the unsimplified output mesh quadruples whenever the tolerance input is halved. Keep that in mind to avoid generating unreasonably large meshes. If you only use this input, the output mesh is guaranteed to be watertight and manifold. In most cases, the output mesh will also be free of self-intersections. * ***Min. Feature size:*** This input is very different from the min feature size of v1 and should not be confused. If you provide a feature size, the block performs a filtering step to remove any features or holes smaller than the provided input. Use this input if the output mesh captures small details that are not manufacturable. * Apart from the “Min. Feature size” input, the block automatically removes meshing artifacts (where an artifact is a connected component smaller than 0.1% percent of the surface area of the largest connected component). This step is different from the filtering step in that it cleans up artifacts produced by the meshing step, while the filtering step works directly on the (voxelized) implicit surface. * ***Sharpen:*** Enable this to reconstruct sharp features present in the implicit body. Typically, enabling the sharpening option improves the mesh's approximation quality significantly. Thus, in practice, it is often possible to decrease the tolerance input and enable sharpening to obtain a given target tolerance between the mesh and the implicit. * In most cases, the output mesh should not have any defects (i.e., it should be closed, have no self-intersections, and be manifold). However, in a rare occurrence, the resulting mesh may have self-intersections, be non-manifold, or have pockets (i.e., two triangles with an extremely small dihedral angle). Enabling this option will substantially increase the runtime of the block; typically, it will take more than twice as long. * ***Simplify:*** The Simplification option forcibly decimates and combines \~ 90% of the elements which can result in loss of geometry fidelity. Simplifying Mesh By Threshold will allow you to tune the decimation percentage. Enabling this option will substantially increase the runtime of the block. If you use the section option of the drop-down menu, you can choose to sharpen only a specific region, as shown below. You can use the Sharpening iterations parameter to run the sharpening algorithm multiple times to potentially increase the quality of the sharp feature reconstruction. **Overloads:** The block has an overload that provides even more inputs. In particular, it provides a “Sharpening Extent” input, which can be used to localize the sharpening to certain regions of the mesh. It also provides a “Sharpening iterations” parameter, which can be used to run the sharpening algorithm multiple times to potentially increase the quality of the sharp feature reconstruction. ***Warning:*** If you are working with a version of nTop before 3.16, you will see two options: Mesh from Implicit Body and Mesh from Implicit Body by Voxels. The **Mesh from Implicit Body** block mentioned above follows the old **Mesh from Implicit Body by Voxels** block. We recommend updating to the latest version. Once updated, any **Mesh from Implicit Body by Voxels** block in a workflow will show as this new **Mesh from Implicit Body** block. ## Recommended Settings As a starting point, we recommend using a tolerance **equal to 0.5 times the thickness of the smallest feature**. This value will typically exceed the accuracy of most additive manufacturing processes. If you plan to sharpen the mesh, avoid this block's simplifying and remeshing options. A single iteration using the Sharpen Mesh option will usually produce good results. Still, we recommend three iterations, especially if you are preparing a mesh of a complicated model for simulation. Without enough sharpening iterations, you may have too many small elements that can cause issues during remeshing. * ***Tip:*** * Depending on the application, you may want to uncheck the *Simplify* option in the **Mesh from Implicit Body** block to maintain fine details. You can always simplify after sharpening using the **Remesh Surface** block, **Simplify Mesh by Threshold** block, or **Simplify by Amount** block. * We recommend a tolerance of approximately a quarter of the minimum wall thickness, such that each sharp feature is well-defined. * By default, the sharpening algorithm will run once, but you can change the *Sharpen iterations* input. If you're not satisfied with the output, try increasing the number of iterations and then lower the tolerance set in the **Mesh from Implicit Body** block. * The **Mesh from Implicit by DC** block has a lower computational overhead than the **Mesh from Implicit Body** block. We recommend using this if your computer is having trouble running a larger mesh. Please be aware that the resulting mesh may contain self-intersections and non-manifold edges or vertices. * Later in this course, we will discuss suggested inputs for exporting a complex mesh. # Download: CAD and Mesh Export Source: https://docs.ntop.com/lessons/intro-to-meshing/download-cad-and-mesh-export Now that you have completed the follow along, feel free to download below the completed file with descriptions on converting to a CAD Body and exporting. **Example File:** [102\_7\_Complete — CAD and Mesh Export.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_7_Complete%20--%20CAD%20and%20Mesh%20Export.ntop) *This file was last updated in nTop 5.15.2* # Download: Cleaning and Simplifying a Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/download-cleaning-and-simplifying-a-mesh Now that you have completed the follow along, feel free to download below the completed file with descriptions on cleaning and simplifying a mesh. **Example File:** [102\_13\_Complete — Cleaning a Mesh.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_13_Complete%20--%20Cleaning%20a%20Mesh.ntop) *This file was last updated in nTop 5.12.2* # Download: Creating an FE Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/download-creating-an-fe-mesh Now that you have completed the follow-along, feel free to download below the completed file with descriptions on creating an FE Mesh. **Example File:** [102\_21\_Complete — Creating an FE Mesh.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_21_Complete%20--%20Creating%20an%20FE%20Mesh.ntop) *This file was last updated in nTop 5.12.2* # Download: Selecting Portions of a Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/download-selecting-portions-of-a-mesh Now that you have completed the follow along, feel free to download below the completed file with descriptions on how to select portions of a mesh. **Example File:** [102\_28\_Complete — Selecting Portions of a Mesh.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_28_Complete%20--%20Selecting%20Portions%20of%20a%20Mesh.ntop) *This file was last updated in nTop 3.38.4* # FE Meshes Source: https://docs.ntop.com/lessons/intro-to-meshing/fe-meshes Creating an FE Mesh is one of the first steps in setting up a Simulation or a Topology Optimization. The image below shows the basic steps for creating an FE Mesh. If you are working with a solid body, we recommend the **FE Volume Mesh**, and for lattices, we recommend **FE Lattice Mesh**. ![](https://files.learn.ntop.com/lessons/fe-meshes/102_19_FE-Mesh-Chart.png) ## FE Volume Mesh The **FE Volume Mesh** block places FE elements over volume mesh elements. The geometric order defines the number of nodal elements placed in the mesh elements. ![](https://files.learn.ntop.com/lessons/fe-meshes/102_19_FE-Volume-Mesh.jpg) ## FE Surface Mesh The **FE Surface Mesh** block creates 2D surface elements with 'isoparametric' elements. The thickness defined is normal to the surface in the Shell Attribute. ![](https://files.learn.ntop.com/lessons/fe-meshes/102_19_FE-Surface-Mesh.png) > [!NOTE] > > **Note**: The toolkit block **FE Shell Mesh** remeshes and creates a surface mesh using the block above. ## FE Lattice Mesh The **FE Lattice Mesh** block creates beam elements coinciding with lattice beams. The thickness of the beams is defined in FE Attributes (can be nonuniform). ![](https://files.learn.ntop.com/lessons/fe-meshes/102_19_FE-Lattice-Mesh.jpg) ## Merge FE Meshes When some regions are easier to mesh than others, you can mesh them separately and join them using **Merge FE Meshes**. This process is good for interfacing surfaces. ![](https://files.learn.ntop.com/lessons/fe-meshes/102_19_Merge-FE-Mesh.jpg) To merge, at least one node from each mesh must be within the distance threshold. Use distance threshold of at least ½ of mesh size. > [!TIP] > > **Tip:** **General rules of thumb for elements in FEA** > **Thermal:** at least 1 element across thin or small design features and or parts. Typically linear, unless you start to tie in deflection or stress due to thermal distribution. > **Deflection:** at least 3 elements across thin or small design features and or parts, and is typically linear. > **Stress:** at least 5 elements across thin or small design features and or parts. In nTop, use the Quadratic Geometric order (i.e., Mid-side nodes). # Follow Along: CAD and Mesh Export Source: https://docs.ntop.com/lessons/intro-to-meshing/follow-along-cad-and-mesh-export [https://www.youtube.com/embed/GYFBzHuJAcA](https://www.youtube.com/embed/GYFBzHuJAcA) > **Transcript** > > In this lesson, we will show how to export a mesh or a CAD body out of nTop. So, if you plan to follow along, please download and open up that starter CAD and mesh export file below this video. This file has a completed topology optimization on a bracket that we can see here that is already implemented in this file and we will export it as a mesh and a CAD body. > > First, let's export this as a mesh. Since this is an implicit body, we'll have to convert this to a mesh, which we can do in our search blocks or in the Utilities tab. We'll go to that Conversion tab and choose the **Mesh from Implicit Body**. I can add my part to export into the body. I can choose a tolerance of, let's say, 1 mm, and we will have that mesh. So, this will be a clean, non-self-intersecting manifold mesh. We can also add that minimum feature size. We can see there's some rounding of this part, so you might want to check the sharpen or simplify this as well. Though both of these options will take a little bit longer to run when choosing those, but you'll have that simplified part like so. > > We can also go to our Block Overload next to that title and choose this second option. So, if you wanted to sharpen a portion of your mesh, you can add an implied body here, have sharpened areas, and have those rounded areas, and you can define that sharpen iterations as well. But we'll go back with our implicit body. We'll just keep that tolerance of one and that body, which is our part to export. We can double-check that this is a clean mesh by going to our Block Details under properties and we can see that it is closed, it's manifold oriented, and it's not self-intersecting. So, that can be a good check and you'll get a little warning if that is not the case for any of these options. > > And if I wanted to export this part now, I will right-click and make this a variable, which I will label mesh. Then, I can go to my Exchange under Utilities tab and I will choose **Export Mesh**. So, I'll place this in as my mesh. We can have millimeters as the units. And then for the path, we can save this with our file name and we can save this as an OBJ, STL, or 3MF. > > If we go to our Conversions, we can then convert this from a mesh to a CAD body if we want to export this as a CAD body. So, I'll click on this block and it's important to note with our **CAD Body from Mesh** is this is really created for our topology optimization or a design that is not as complex like that lattice structure. So, if you are creating a complex lattice structure, this **CAD Body from Mesh** will not work as effectively because it has all those extra surfaces and edges. So, really use this for our topology optimization or simpler parts. > > And before I can place this mesh into our **CAD Body from Mesh** block, I'm first going to quadrangulate that mesh as we discussed in the text lessons. So, I'll place this mesh in here and it's going to add that target count of 2,000. So, I have 2,000 of these quads creating this part. So for finer details, increase that target count, and you can decrease that target count to save on time, but you won't have as fine features. So from this quadrangulated mesh, I can click on my **CAD Body from Mesh** and turn that visibility on, and now we have this part with those different surfaces and edges. > > Now I can go to my Exchange and I'll choose to export a part. This part will go to our Change Block Overload, and instead of exporting a curve, we can choose to export a part. So I can place my **CAD Body from Mesh** right in there and under file path you can see I can save it as a Parasolid, a Step, or IGS file. So that's how you would export this CAD body or a mesh out of nTop. This lesson takes a completed Topology Optimization of a bracket and converts it to a mesh. We discuss how to export this mesh and convert a CAD body for exporting as a STEP or Parasolid file. Note that you should only use the **CAD Body from Mesh** block (renamed **CAD Body from Quad Mesh** in version 3.17) for simpler geometries, like parts created with Topology Optimization, and not lattice structures. Please download the nTop file below to follow along with the tutorial. For a faster or slower video speed, click on the settings in the bottom right of the video. **Example File:** [102\_6\_Starter — CAD and Mesh Export.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_6_Starter%20--%20CAD%20and%20Mesh%20Export.ntop) *This file was last updated in nTop 5.12.2* [102\_6\_Follow Along – CAD and Mesh Export.pdf](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/PDFs/102_6_Follow%20Along%20-%20CAD%20and%20Mesh%20Export.pdf) # Follow Along: Cleaning and Simplifying a Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/follow-along-cleaning-and-simplifying-a-mesh [https://www.youtube.com/embed/rkDCY-nw1kM](https://www.youtube.com/embed/rkDCY-nw1kM) > **Transcript** > > In this lesson, we will walk through examples of how to clean and simplify a mesh. So, to start off, please download the mesh file linked below this video, and I'm going to click on that section I have labeled as cleaning a mesh. And I can go to my utilities and I'm going to import that mesh. So, I'll go to my path and I have it labeled as unclean mesh. It's an STL. And we can see, like so, it's our sphere cube with a gyroid. But the way that I created this, I created this unclean mesh, and we can see that I have this warning. And if I click on that, I can see that some vertices were merged, some removed. But then a key issue is that the output mesh is self-intersecting. > > And if we go to our properties tab, we can also see that this is the case, that it is self-intersecting. So, some ways, if you happen to have a mesh like this that you're either bringing in, you can use some of those processes we discussed in the lessons above, such as using a voxel grid. So, taking that voxel grid from a mesh and then converting it back into a mesh. But in this example, we're going to show another option, which is using our **Split and Filter Block**. So, I'll grab our **Split Mesh** and our **Filter Mesh List**. > > And so sometimes we have our self-intersecting meshes because multiple meshes were produced that are not connected. So, if I bring in my **Import Mesh**, let me right-click and make this a variable, which I will label self-intersecting mesh, and I'm just going to place that into that mesh option. And we can see, even though I had only one mesh in here, I go to my properties, I have one mesh. But using our **Split Mesh**, we'll have 10 different meshes come out of that. And to see what some of those meshes look like, if I go to my block details, if I grab this first one and type I, we can see, let me zoom in by typing Z, that we have this creation. So, part of the reason you might have a self-intersecting mesh if you're planning to export an nTop ology, especially you have a very complex part, maybe you're sharpening and simplifying, and it causes some errors like this. You might see these disconnecting pieces within your part. So, doing that **Split Mesh** will help you avoid those and remove those disconnected pieces. So, I'll double-click and rename this just disconnected piece as an example. > > Another way that you can grab the design that you want, so instead of having to go through this entire list to find which is the actual part you wanted to export for instance, or work with, is using our **Filter Mesh List**. So, let me type I, and we can see where that is placed in our part right there. And I'm going to type Z, so we can see this whole sphere cube. And for our mesh list, for our **Filter Mesh List**, because our **Split Mesh** is already a list, I can delete that mesh list and place in **Split Mesh**. Then we have this volume threshold. So, it will only keep the meshes that are above that. So, if I put something like one, we can see out of those 10 meshes we had in our **Split Mesh**, only one is going to be larger than that volume threshold. And so, then we have the part that we're actually looking for, and we just removed all those other disconnected pieces. So, that's one way that you can work to clean that mesh a little bit. > > You might want to also simplify your mesh. So, our **Mesh From Implicit Body**, let me grab that block and add that to our simplifying a mesh section, has a simplify option. If you want a bit more control over how much your part is simplified, we can use those blocks we discussed in the lessons before this. So, for this example, I'll turn off that sphere cube, hide that section, and go to the create tab, and we'll use a Taurus for this example. So, I'll place this in as my body. I'll do a tolerance one, and I haven't simplified it. If I do, we can see what that looks like. Maybe that's too much of a simplification. So, I'm going to right-click and make this a variable, and I'll just label this mesh Taurus and show two of the options that we can simplify using different blocks. So, the first one I'll show you, type in simplify, we have a **Simplify Mesh By Threshold** and **Amount**. I'll use **Simplify Mesh By Amount**. And for the amount, let's do 50%. So, this way we can control that if we don't want that basically 90% simplification, similar to what we had if we had simplified this, we can control that a bit better and get more of that shape that we're looking for with that simplification. > > We can also use a **Remesh Surface** block to control that edge length. So, I'll place that mesh Taurus in there, and let's do an edge length of 2 mm. So, that'll be that maximum edge length that we might see in certain regions. And that shape I'll choose as a triangle. So, now we're also going to have that simplified mesh where in certain areas we might have an edge length of 2 mm, but when we need to have a smaller edge length, it will maintain that as well. And you can control that span angle growth rate, etc., as we've discussed in the past lessons. So, these are some options for cleaning and simplifying a mesh. This lesson will walk through an example of using the **Split Mesh**, **Filter Mesh Volume**, **Simplify by Amount**, and **Remesh Surface** blocks. Please download the mesh file below to follow along with the tutorial. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. [102\_12\_Unclean Mesh.stl](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/Models/102_12_Unclean%20Mesh.stl) *[Report File](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit)* [102\_12\_Follow Along — Cleaning and Simplifying a Mesh.pdf](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/PDFs/102_12_Follow%20Along%20--%20Cleaning%20and%20Simplifying%20a%20Mesh.pdf) # Follow Along: Creating an FE Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/follow-along-creating-an-fe-mesh [https://www.youtube.com/embed/A26R4ypsyCk](https://www.youtube.com/embed/A26R4ypsyCk) > **Transcript** > > In this lesson, we will create an FE mesh using a car brake pedal. The first step that we'll do is import a part, so I'll go to my utilities and choose that **Import Part**. > > For my part, you can download our solid brake pedal example. So I have my CAD body and the first thing that we're going to do is convert our CAD body into a mesh. So I'll double click to select the entire body and I'll make it a variable. So I'll do a right click, **Create CAD Body Variable**, and I'll rename this by double clicking on that title and labeling this part. > > To convert this to an FE mesh, I have to do that **Mesh From CAD Body** which I can find under my conversions in my utilities tab. So that third option, I'll convert my part to a mesh like so. If we are going to run a simulation on a part like this, we're also going to want to remesh the surface so we can control that edge length of our mesh. So I can search in my search bar for **Remesh Surface** and for the surface, I will choose this mesh from CAD body. For our edge length, we can put in a non-uniform edge length which you can learn more about in our Field Driven Design, but I'll just use the value of 2 mm and for the shape, I want a triangle. So now it's taken that mesh and it has given it that uniform edge length of 2 mm throughout that surface. > > If I do a section cut by typing X, what we can see is that this is only a mesh on the surface. So if we want to create a volume mesh or an FE mesh, we will want to have that mesh going throughout our part. To do this, I will grab from my search bar a **Volume Mesh** for the domain that will be our remesh surface. So I'll drag and drop that. Our edge length, I'll keep the same as a remesh surface of 2 mm, and now we can see that I have my mesh going throughout my part and not just in the surface. So that is our volume mesh. > > If I was planning to run a simulation on this part, I have one last step which is our **FE Mesh** block. So I'll do our **FE Volume Mesh** for discretization that will be our volume mesh and we can choose to have linear or quadratic geometric order. So it'll look pretty much the same but now we will be able to use this for our mesh when running a simulation. This lesson teaches how to create an FE Volume Mesh of a brake pedal by importing the CAD part below, converting it to a mesh, remeshing the surface, using the Volume Mesh block, and then using the **FE Volume Mesh** block. To change the speed of the video, click on the settings at the bottom right of the video. Please download the CAD file below to follow the tutorial. [102\_20\_Solid Brake Pedal.x\_t](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/Models/102_20_Solid%20Brake%20Pedal.x_t) [102\_20\_Follow Along — Creating an FE Mesh.pdf](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/PDFs/102_20_Follow%20Along%20--%20Creating%20an%20FE%20Mesh.pdf) # Follow Along: Selecting Portions of a Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/follow-along-selecting-portions-of-a-mesh [https://www.youtube.com/embed/XpdqLX1la0E](https://www.youtube.com/embed/XpdqLX1la0E) > **Transcript** > > In this lesson, we will talk about selecting a portion of a mesh. To start, let's import a mesh into our notebook by going to Utilities and then **Import Mesh**. For the path, I'm using pipe.OBJ, which you can download below this video. > > So, what I want to do, I'll first type “Z” so that this is centered in my viewport. I'm going to go to my Block Details and to Display to turn off that wireframe. I want to first select this inner piping, and the best way to do that is with our flood fill options. In these text lessons, we've talked about the **FE Boundary by Flood Fill**, and we'll also talk about that **Filter Mesh by Flood Fill**. > > So, if you were doing a simulation and wanted to define those boundaries, we could go to our Simulation Tab and go to our Utilities and choose this **FE Boundary by Flood Fill**, **FE Boundary by Body**, or **FE Region by Body**. I will instead be focusing on our blocks that select a mesh as opposed to an FE mesh. So, what I'll do is search in my search bar for **Filter Mesh by Flood Fill**, and we'll also be using our **Remove Mesh Faces by Body**. > > So, let's start with this **Filter Mesh by Flood Fill** to select the faces inside of this pipe. So, for my mesh, I'll make this a variable since I'll use this in multiple blocks. So, I'll right-click and make variable, which I will label Mesh. And I'll place this in as my mesh for my **Filter Mesh by Flood Fill**. For the origin, I'm going to want to put this inside of my piping like so. And I have my angle at 45 degrees. > > To get a clearer sense of what this is, I'm going to go to my Block Details and that Display and change the color and remove that wireframe so we can see that just that one point has selected all of that inner piping. The way that our **Filter Mesh by Flood Fill** works is that the flood fill really shoots a ray at the vent and finds the intersection. If the direction is not given, it'll choose that closest face to that point, and the first intersecting face becomes the basis for that flood fill. Then the flood fill compares the normal of that face with all the neighboring faces which are below the tolerance angle that we have here of 45. > > So, if we lower this angle, let's say to 5, this is a pretty good face. So, if I move this origin so that it's instead facing this flat face like so, I can see I've only selected these two faces, and I can move this around to select different faces. > > So, let's select this face, and we have it in that hole. We can move this around, and if I decrease this angle, let's say it's 2 degrees, we can see that I'm not selecting as much of the mesh. So, if you wanted to increase or decrease how much you have, you can use that angle or that origin. So, I'll place this back into that original hole that we had, like so. > > If I wanted to select a small portion of this mesh, what I could do is decrease that angle, let's make this 2, 1, and we can see that it's only selecting some of this piping. It's not selecting those other faces. So, with the piping, it'll still select a large number of it, but depending on your part, if it has some sharp edges, you might want to use that angle. But this is really a good block for getting an inside of a piping, for instance, different types of holes, something like that. > > You can also use our **Remove Mesh Faces by Body**. So, let's try that. So, let's start with that, where we will begin by placing that mesh into the mesh. And this body will allow us to select where we want to keep that mesh. So, for the body, I like to use a **Box from Corners**. You could use any implicit body though, and I like the **Box from Corners** because I can just quickly move one corner and change that other corner. So, I can select this whole region. > > So, we can see that it has selected all of them. I'll again change this display. So, I'll go to that Block Details under Display and switch out the wireframe and change that color. So now we can see I might need to move up my box a little bit more, but now I'm selecting this entire region. So that can also give you greater control when you are selecting a portion of the mesh, and you can also reverse that selection as well. > > So, those are two examples for selecting the mesh, and the same principles apply if you're using that **FE Boundary by Body** block and that **FE Boundary by Flood Fill**. So, wherever the mesh and the body overlap, that is what selected for that **Remove Mesh Faces by Body** and the **FE Boundary by Body** and the **FE Boundary by Flood Fill**, same process as that **Filter Mesh by Flood Fill**. This lesson will take an imported pipe mesh and use the **Filter Mesh by Flood Fill** and **Remove Mesh Faces by Body** blocks to select certain portions. For a faster or slower speed for the video, click on the settings in the bottom right of the video. Please download the mesh file below to follow along with the tutorial. [102\_27\_Pipe.obj](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/Models/102_27_Pipe.obj) [102\_27\_Follow Along Selecting Portions of a Mesh.pdf](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/PDFs/102_27_Follow%20Along%20Selecting%20Portions%20of%20a%20Mesh.pdf) # Knowledge Check: Converting to a Mesh or CAD Body Source: https://docs.ntop.com/lessons/intro-to-meshing/knowledge-check-converting-to-a-mesh-or-cad-body # Knowledge Check: FE and Volume Meshes Source: https://docs.ntop.com/lessons/intro-to-meshing/knowledge-check-fe-and-volume-meshes # Knowledge Check: Refining / Cleaning Meshes Source: https://docs.ntop.com/lessons/intro-to-meshing/knowledge-check-refining-cleaning-meshes # Knowledge Check: Selecting Portions of Meshes Source: https://docs.ntop.com/lessons/intro-to-meshing/knowledge-check-selecting-portions-of-meshes # Meshing in nTop Source: https://docs.ntop.com/lessons/intro-to-meshing/meshing-in-ntop Meshing is the process of dividing a 3D model into thousands of elements to define its shape — the more detailed the mesh, the better the approximation. There are three main types of meshes: Mesh (also known as a surface mesh), Tet/Volume Mesh (a solid mesh), and FE Mesh (Used for simulation and is a solid mesh). In this lesson, we will focus on this first type, but later in this course, we will also discuss Volume and FE Meshes. ![](https://files.learn.ntop.com/lessons/meshing-in-ntop/102_2_Meshes.jpg) Simplified meshes are suitable for manufacturing, while more refined meshes are more suitable for FEA and CFD and can be converted into volume meshes. * **Surface meshes** use two-dimensional elements — typically triangles or quads — to approximate the outer surface of a 3D body. You can use surface meshes in manufacturing or rendering applications and CAE simulation. * **Volume meshes**, also known as solid meshes, use three-dimensional elements — typically tetrahedrons, hexahedrons, and polyhedrons — to define the surface and interior structure. To run FE or CFD simulations, you can convert surface meshes into volume meshes. ## **What is a Surface Mesh?** A mesh/surface mesh is a discretization of a surface geometry using **vertices**, **edges**, and **faces**. **Mesh Connectivity** defines the incidence relations among mesh elements (adjacent vertices and edges of a face, etc.). **Mesh Geometry** specifies the position and other geometric characteristics of each vertex. Other names for a mesh include surface mesh, surface, and domain. # Meshing Properties and Terminology Source: https://docs.ntop.com/lessons/intro-to-meshing/meshing-properties-and-terminology ## Mesh Properties This lesson will focus on four fundamental mesh properties: *closed*, *manifold*, *oriented*, and *self-intersecting*. These bool types show true or false in the properties section of the block details and are key to determining if you have a clean mesh. If the mesh is not *closed*, *manifold*, or *oriented*, or if the mesh is self-intersecting, you will receive a warning, which can result in issues when converting the mesh or exporting the part. ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/image-12.png) Other unique properties for meshes, such as the *face count*, *vertex count*, and *vertices*, are also available. ## Terminology ### Edges and Closed Meshes There are different types of edges when referring to a mesh and checking if it is closed. A closed mesh refers to a mesh with no boundary edges, where all edges have more than one adjacent face. We can have **Boundary Edges**, which are adjacent to exactly one face, **Regular Edges**, that are adjacent to exactly two faces, and **Singular Edges**, which are adjacent to more than two faces. ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/102_3_ClosedvsOpen-1024x495.jpg) ### Manifold For a mesh to be manifold, it must be a continuous surface resembling Euclidean space up close. A way to think about this is: “If I could shrink myself down, could I walk around the entire mesh?” The causes of **non-manifold** meshes are not always obvious, but below are some common scenarios: ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/102_3_Manifold.png) ### Oriented Mesh * Used to provide a consistent means of differentiation between the two sides of a mesh face * 'Oriented' = normal vectors of all mesh faces are consistently facing outward or inward * Which side of the face is the top (facing outward, indicated by the color gray), and which is the bottom (facing inward, indicated by the color black)? ***Tip:** If you have imported a Mesh or generated a Mesh and it has flipped normals, use the **Flip Mesh Normals** block.* ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/102_3_Oriented-1024x453.jpg) An example of a mesh that is oriented but not closed ### Self-Intersection * A part of a surface mesh collides with another part of itself, i.e., at least two mesh elements intersect. ***Note:** An implicit body created from a self-intersecting mesh may have erroneous open extensions that extend outward infinitely. The generated implicit body will slow processes down the line (because of the infinitely large bounding box).* ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/image-11-1024x472.png) ## Clean Meshes In this context, a clean mesh is a mesh free from any of the abovementioned issues. ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/102_3_CleanMeshes.png) ## Wireframe The wireframe for a mesh is automatically visible and shows its edges. You can turn off this wireframe view by going to the Display settings in the Right Panel. ![](https://files.learn.ntop.com/lessons/meshing-properties-and-terminology/102_3_Wireframe-2.gif) # Meshing Tradeoffs Source: https://docs.ntop.com/lessons/intro-to-meshing/meshing-tradeoffs When meshing, the user must balance computational resources and the intended use of the geometry. This tradeoff is especially relevant when generating meshes for parts with complex geometry, such as lattices and organic shapes. These geometries require more elements to capture the intricate part features and curved surfaces accurately. ## Independent of your application, a high-quality mesh should be: 1. **Error-free** (i.e. manifold, oriented, and non-self-intersecting) 2. **Detailed enough** to produce accurate simulation results, yield acceptable tolerances, and ensure that your manufacturing part is accurate 3. **Not too detailed** to make the file size unmanageable The best meshing parameters depend on the intended application. For example, a very fine mesh captures the 3D geometry more accurately, allowing for higher fidelity simulations. However, it also produces a larger file size; as a rule of thumb, halving the grid size increases its file size and the time it takes to compute by a factor of 4x to 8x. > [!NOTE] > > **Note**: There is no need to spend additional computational resources when the same result can be achieved with a simpler mesh. ## Time to Mesh Comparisons This [Surface Meshing Techniques](https://learn.ntop.com/courses/surface-meshing-techniques/) video, summarized below, compares the different parameters in these blocks for printing. **Mesh from Implicit Body** is generally the best first step to generate a mesh from your implicit bodies; this, however, often leads to quite a large mesh. Additional techniques are required to reduce the final mesh size while maintaining fidelity. In most cases, you can use the **Remesh Surface** block as the final step in surface meshing. Its computation time is highly sensitive to the input mesh size, so any simplification prior to this block (ex. **Simplify Mesh by Threshold**) will help reduce its solve time. Utilize the mesh control inputs to help preserve quality while reducing both time to solution and total element count. For large, complex parts, we suggest that you perform an initial meshing process on a sample section of your part. You can do this using a **Boolean Intersect** block to trim your implicit body. ![](https://files.learn.ntop.com/lessons/meshing-tradeoffs/102_15_TimetoMesh.png) ![](https://files.learn.ntop.com/lessons/meshing-tradeoffs/102_15_RemeshSurface.png) ![](https://files.learn.ntop.com/lessons/meshing-tradeoffs/102_15_RemeshComparisonHex.png) # Optional: Export Meshing Test Problem Source: https://docs.ntop.com/lessons/intro-to-meshing/optional-export-meshing-test-problem Now that you have learned ways to export a mesh out of nTop, feel free to try this optional problem with a review of the answer in the following lesson. Given the variable “Final Body” in the starter file, export this implicit body as a 3MF with a file size smaller than 10,000kB. The final mesh should have a closed, edge manifold, and oriented mesh that is not self-intersecting. The mesh tolerance should be 0.1mm, and you do not need to check Sharpened. ![](https://files.learn.ntop.com/lessons/optional-export-meshing-test-problem/102_16_TestProblem.jpg) **Estimated Time to Complete:** 25 minutes **Example File:** [102\_16\_Starter — Export Mesh Test Problem.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_16_Starter%20--%20Export%20Mesh%20Test%20Problem.ntop) *This file was last updated in nTop 5.12.2* # Optional: FE Volume Mesh Test Problem Source: https://docs.ntop.com/lessons/intro-to-meshing/optional-fe-volume-mesh-test-problem Now that you have learned ways to create an FE volume mesh in nTop, feel free to try this optional problem with a review of the answer in the following lesson. Given the final mesh from the previous optional test problem, create an FE Volume Mesh with an Edge Length of 1mm and Quadratic Order. You can download the answer from the original test problem below as the starter file for this problem. **Estimated Time to Complete:** 15 minutes **Example File:** [102\_22\_Starter — Volume Mesh Test Problem.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_22_Starter%20--%20Volume%20Mesh%20Test%20Problem.ntop) *This file was last updated in nTop 5.20.2* # Optional: Mesh Portions Test Problem Source: https://docs.ntop.com/lessons/intro-to-meshing/optional-mesh-portions-test-problem Now that you have learned ways to select portions of a mesh in nTop, feel free to try this optional problem with a review of the answer in the following lesson. Given the final FE Volume Mesh from the previous optional test problem, create two boundaries containing faces as shown below. ![](https://files.learn.ntop.com/lessons/optional-mesh-portions-test-problem/102_29_OuterBoundary.jpg) First boundary: Select the outer face ![](https://files.learn.ntop.com/lessons/optional-mesh-portions-test-problem/102_29_Halfpart.jpg) Second boundary: Select the left half of the part **Estimated Time to Complete:** 15 minutes [102\_23\_Complete — Volume Mesh Test Problem.ntop](https://files.learn.ntop.com/Courses/102%20Guide%20to%20Meshing/nTop%20Files/102_23_Complete%20--%20Volume%20Mesh%20Test%20Problem.ntop) *This file was last updated in 5.12.2* # Overview Source: https://docs.ntop.com/lessons/intro-to-meshing/overview This course will take you through the basics of meshing in nTop used alongside our implicit bodies. We recommend this course, nTop Essentials, as it provides vital recommendations for when you are importing a mesh, creating a surface lattice, running a simulation, or planning to export.  After completing the course, you will understand when and how to mesh in nTop.  You will also gain familiarity with some of the operations and properties of meshes and best practices for working with a mesh. ![intro to meshing](https://storage.googleapis.com/files-learn/lessons/intro-to-meshing/intro-to-meshing.webp) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview) **What will be covered:** * Converting to a mesh and CAD body * Cleaning a mesh * Selecting portions of a mesh * Creating a volume mesh and FE mesh > **[Before We Begin](/lessons/intro-to-meshing/before-we-begin-meshing)** > **[Meshing in nTop](/lessons/intro-to-meshing/meshing-in-ntop)** > **[Meshing Properties and Terminology](/lessons/intro-to-meshing/meshing-properties-and-terminology)** ### Converting and Exporting to a Mesh and CAD Body > **[Converting to a Mesh](/lessons/intro-to-meshing/converting-to-a-mesh)** > **[Conversion to CAD with Quadrangulate Mesh](/lessons/intro-to-meshing/conversion-to-cad-with-quadrangulate-mesh)** > **[Follow Along: CAD and Mesh Export](/lessons/intro-to-meshing/follow-along-cad-and-mesh-export)** > **[Download: CAD and Mesh Export](/lessons/intro-to-meshing/download-cad-and-mesh-export)** > **[Knowledge Check: Converting to a Mesh or CAD Body](/lessons/intro-to-meshing/knowledge-check-converting-to-a-mesh-or-cad-body)** ### Refining/Cleaning Meshes > **[Remesh Surface](/lessons/intro-to-meshing/remesh-surface)** > **[Split and Filter Mesh](/lessons/intro-to-meshing/split-and-filter-mesh)** > **[Refine and Simplify](/lessons/intro-to-meshing/refine-and-simplify)** > **[Cleaning Meshes with a Voxel Grid](/lessons/intro-to-meshing/cleaning-meshes-with-a-voxel-grid)** > **[Download: Cleaning and Simplifying a Mesh](/lessons/intro-to-meshing/download-cleaning-and-simplifying-a-mesh)** > **[Knowledge Check: Refining and Cleaning Meshes](/lessons/intro-to-meshing/knowledge-check-refining-cleaning-meshes)** ### Tips and Tricks for Export > **[Best Practices for Exporting Summary](/lessons/intro-to-meshing/best-practices-for-exporting-summary)** > **[Meshing Tradeoffs](/lessons/intro-to-meshing/meshing-tradeoffs)** ### Optional Mesh Export Test Problem > **[Optional: Export Meshing Test Problem](/lessons/intro-to-meshing/optional-export-meshing-test-problem)** > **[Answer to Optional Export Mesh Problem](/lessons/intro-to-meshing/answer-to-optional-export-mesh-problem)** ### FE and Volume Meshes > **[Solid/Volume Meshes](/lessons/intro-to-meshing/solid-volume-meshes)** > **[FE Meshes](/lessons/intro-to-meshing/fe-meshes)** > **[Follow Along: Creating an FE Mesh](/lessons/intro-to-meshing/follow-along-creating-an-fe-mesh)** > **[Download: Creating an FE Mesh](/lessons/intro-to-meshing/download-creating-an-fe-mesh)** > **[Knowledge Check: FE and Volume Meshes](/lessons/intro-to-meshing/knowledge-check-fe-and-volume-meshes)** ### Optional Volume Mesh Problem > **[Optional: FE Volume Mesh Test Problem](/lessons/intro-to-meshing/optional-fe-volume-mesh-test-problem)** > **[Answer to Optional FE Volume Mesh Test Problem](/lessons/intro-to-meshing/answer-to-optional-fe-volume-mesh-test-problem)** ### Selecting Sections of a Mesh or FE Mesh > **[Selecting by Flood Fill](/lessons/intro-to-meshing/selecting-by-flood-fill)** > **[Selecting FE Mesh with CAD Faces](/lessons/intro-to-meshing/selecting-fe-mesh-with-cad-faces)** > **[Follow Along: Selecting Portions of a Mesh](/lessons/intro-to-meshing/follow-along-selecting-portions-of-a-mesh)** > **[Download: Selecting Portions of a Mesh](/lessons/intro-to-meshing/download-selecting-portions-of-a-mesh)** > **[Knowledge Check: Selecting Portions of Meshes](/lessons/intro-to-meshing/knowledge-check-selecting-portions-of-meshes)** ### Optional Portions of a Mesh Test Problem > **[Optional: Mesh Portions Test Problem](/lessons/intro-to-meshing/optional-mesh-portions-test-problem)** > **[Answer to Mesh Portions Optional Test Problem](/lessons/intro-to-meshing/answer-to-mesh-portions-optional-test-problem)** > **[Resources](/lessons/intro-to-meshing/resources)** ### What's Next # Refine and Simplify Source: https://docs.ntop.com/lessons/intro-to-meshing/refine-and-simplify ## Simplify Mesh by Amount The **Simplify Mesh by Amount** reduces the number of triangles on the surface mesh depending on the amount entered (ranging from 0-1, but not including 0 or 1). This block helps shrink the size of the file. When simplifying, it does not consider surface tolerance (the distance between the original input mesh surface and the new surface). ![](https://files.learn.ntop.com/lessons/refine-and-simplify/102_10_SMBA.gif) > [!NOTE] > > **Note**: Amount input of 0.4 removes 40% of the mesh elements. ## Simplify Mesh by Threshold The **Simplify Mesh by Threshold** reduces the number of triangles on the surface mesh. The block ensures that the distances between the surface input mesh and the surface of the new mesh are below the defined Threshold. This block helps shrink the size of the file. ![](https://files.learn.ntop.com/lessons/refine-and-simplify/102_10_SMBT.gif) > [!NOTE] > > **Note**: The Threshold must be larger than 0mm. ## Refine Mesh **Refine Mesh** refines a mesh using subdivision. Increasing the triangle count increases the size of any mesh to be exported. It creates subdivided meshes that can convert into lattices (**Lattice from Surface Mesh**). ![](https://files.learn.ntop.com/lessons/refine-and-simplify/102_10_RefineMesh.gif) This block is useful for refining Quad meshes before converting them to a CAD part. It is usually used in CGI applications and can be good for exporting to rendering software. # Remesh Surface Source: https://docs.ntop.com/lessons/intro-to-meshing/remesh-surface The **Remesh Surface** block cleans up defects in a mesh, consolidates meshes into fewer elements, and/or spatially varies the mesh density. It gives more control over the size, shape, and uniformity of the original mesh. Use this block to generate FEA-quality meshes for downstream analysis. ![](https://files.learn.ntop.com/lessons/remesh-surface/102_8_Remesh.png) > [!TIP] > > **Tip:** > Useful in converting a surface mesh to a solid mesh. When doing this, ensure the *Edge length* is the same size for the **Remesh Surface** block and the **Solid Mesh** block to create tetrahedral elements. > The **Edge Length** should be greater than the feature size of the input Mesh. Start high and reduce it until you are happy with how it looks. > **Minimum Feature Size:** If you are setting a minimum Feature Size, we recommend to use 5% of the chosen Edge Length. > You want to balance ***fidelity** and **computing time***. > Too many elements = long computing time, and not enough elements = low fidelity. > **Shape:** Triangular is the most commonly used and most efficient. Quad and Quad-dominated can't be converted to a volume mesh in nTop but you can use it in **CAD Body from Quad Mesh**. ![](https://files.learn.ntop.com/lessons/remesh-surface/102_8_EdgeLength.jpg) **Edge length:** Specifies the approximate edge length of the mesh elements. It can be a singular, consistent value, or a scalar field, meaning you can spatially vary the size of the mesh. ![](https://files.learn.ntop.com/lessons/remesh-surface/102_8_SpanAngle.jpg) **Span Angle:** Refines elements that lie on curves. It signifies the maximum allowed angle elements on curved surfaces can span. With a smaller span angle, elements on the curve are more refined to fit the span angle. Mesh will recalculate on curved regions until it reaches each discrete element span angle. * Coarse = 91-60 deg * Medium = 75-24 deg * Fine = 36 – 12 deg (nTop default 30) ![](https://files.learn.ntop.com/lessons/remesh-surface/102_8_GrowthRate.jpg) **Growth Rate:** Specifies the ratio of element size from one element to another. The number can be anything greater than 1: the smaller the number, the more uniform the mesh. The image to the right shows how changing the growth rate from 2 to 1.05 creates a more uniform mesh. A general rule is to use a growth rate of 1.2. ![](https://files.learn.ntop.com/lessons/remesh-surface/102_8_FeatureAngle.jpg) **Feature Angle:** Controls the degree to which curved surfaces convert to flat edges in a mesh. The value represents the maximum allowed angle between two adjacent planes that define an edge—a lower value results in more planar regions of the mesh where an input surface is curved. ### **Troubleshooting** * **When you have mesh elements clustering together:** Increase the Growth Rate, add a Minimum Edge Length * **When high fidelity is needed on curved surfaces:** Lower the Chord height, lower the Span angle * **If you have surface divots or self-intersections:** Lower the Chord height * **For a more uniform mesh:** Lower the Growth Rate, lower the Edge Length * **Why is the progress bar getting stuck?** Need to adjust your inputs: Chord height, Span angle, and Growth rate * **Why is it taking so long?** Try increasing mesh size. * **Why isn't my texture captured in the mesh?** Check that the initial mesh is detailed enough and add a minimum feature size. ## Applications The **Remesh Surface** Block is used in workflows when running a simulation, creating an FE mesh, preparing for export, and creating surface lattices. The surface mesh lays the framework for a volume mesh. # Resources Source: https://docs.ntop.com/lessons/intro-to-meshing/resources ### **Additional Resources on Meshing:** 1. **Training Video:** [Quick Guide to Surface Meshing](https://learn.ntop.com/courses/quick-guide-to-surface-meshing/) (5min) 2. **Training Video:** [Surface Meshing Techniques](https://support.ntop.com/hc/en-us/articles/16991004064531). (35min) 3. **Video Example:**[Robust Meshing of Complex Geometries for Manufacturing](https://ntopology.com/videos/video/ntop-live-robust-meshing-of-complex-geometries-for-manufacturing/). (6min) 4. **Article:**[How to mesh complex parts](https://support.ntopology.com/hc/en-us/articles/360040769654-How-to-mesh-complex-parts). For specific questions on meshing, check out our [Help Center](https://support.ntopology.com/hc/en-us) or email [support@ntopology.com](mailto:support@ntopology.com). If you are looking to use meshing for running simulation, we recommend our [240: Intro to Simulation](/courses/240-intro-to-simulation/) Course. # Selecting by Flood Fill Source: https://docs.ntop.com/lessons/intro-to-meshing/selecting-by-flood-fill **FE Boundary by Flood Fill** is used to select surface entities on an FE Mesh. The entities available to be selected are nodes, faces, or edges. The **Filter Mesh by Flood Fill** follows the same process described below to select portions of a surface mesh. ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_Flood-Fill.jpg) When a direction is defined, Flood Fill shoots a ray at the mesh and finds the intersection. The first intersecting face (*face0*) becomes the basis for Flood Fill. The Flood Fill compares the normal of *face0* with all the neighboring faces, which are below the tolerance angle provided by the user and selects it. When you don't provide a direction, it finds the closest face to the origin, which becomes the face. ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_FloodFillNoDirection.gif) ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_FloodFill-no-Direction.jpg) When you define the direction with a vector, the Flood Fill operation will shoot a ray from the origin in that direction to choose the seed entity (*face0*). For example, if you choose the vector as 0,0,1 (x,y,z), then the closest intersecting surface mesh entity only in the positive Z-direction will be chosen. If the origin point doesn't intersect with an entity in that direction, you will receive an error that says, “No mesh entities were found.” Watch below to see how Flood Fill with a defined direction works. ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_FloodFillwithDirection.gif) ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_FloodFillwith-Direction.jpg) ## Angle The angle defines how many entities to select by comparing the normal of *face0*(seed entity) with all neighboring faces. If the faces are below the tolerance angle, they will be selected. It is helpful when selecting entities on curved surfaces. If the angle is x degrees, the Flood Fill will choose all entities with an angle of up to but not including x degrees between them and the normal of *face0*. Watch below to see this behavior. ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_FloodFillAngle.gif) ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_FFAngleChart.jpg) ## Right-Click Flood Fill You can also select a mesh face in the 3D scene and flood to the boundary. Right-clicking on the mesh launches a context menu with the option to perform the flood fill operation. The option works for both an FE Mesh or Mesh object. The flood fill operation creates a block in the Notebook with the associated inputs, so your flood selection is preserved. Selecting the **FE Boundary by Flood Fill** context menu floods the mesh faces in the vicinity of the selection point. ![](https://files.learn.ntop.com/lessons/selecting-by-flood-fill/102_24_FFbyRightClick-1.jpg) # Selecting FE Mesh with CAD Faces Source: https://docs.ntop.com/lessons/intro-to-meshing/selecting-fe-mesh-with-cad-faces Our **FE Face Boundary** block is a toolkit block that will select a portion of an **FE Mesh** based on CAD faces. This block will select only the FE mesh areas that intersect the CAD faces chosen. To see how this block works, right-click and export this block. ![](https://files.learn.ntop.com/lessons/selecting-fe-mesh-with-cad-faces/102_26_FE-Face-Boundary.gif) # Solid / Volume Meshes Source: https://docs.ntop.com/lessons/intro-to-meshing/solid-volume-meshes There are multiple ways to create a solid or volume mesh for simulation or latticing. Below are the most common blocks to create volume meshes. Remember that surface mesh lays the framework for your volume mesh. If you want to adjust your volume mesh, consider changing the surface mesh. Other synonyms for volume mesh include tet mesh, discretization, and solid mesh. ## Volume Mesh The **Volume Mesh** block creates a solid mesh with tetrahedral elements. If using a volume mesh for an FE Mesh, we recommend using a **Remesh Surface** block before placing the mesh in the domain input for the volume mesh. ![](https://files.learn.ntop.com/lessons/solid-volume-meshes/102_18_VolumeMesh.jpg) The *Growth rate* is a ratio that defines the maximum growth of an element in relation to the adjacent cell. A general rule of thumb is to use a growth rate of 1.2. > [!NOTE] > > **Note**: Overcoming a failed **Volume Mesh**? Try using the **Split Mesh** block to isolate the main structure or the **Collapse Vertices** block to remove intersecting triangles. If there are still issues, try changing the surface mesh parameters or use the **Robust Tetrahedral Mesh** block. ## Delaunay Volume Mesh The **Delaunay Volume Mesh** block forms a mesh by connecting the points using the Delaunay tetrahedralization. The points can be user-defined, random, or imported from another program. ![](https://files.learn.ntop.com/lessons/solid-volume-meshes/102_18_DVM-1.jpg) ## Robust Tetrahedral Mesh The **Robust Tetrahedral Mesh** block will remesh the input boundary to generate valid, high-quality elements. This block uses algorithms that are tolerant of defects such as self-intersections. If the input mesh does not have defects, consider using the faster **Volume Mesh** block. ![](https://files.learn.ntop.com/lessons/solid-volume-meshes/102_18_RTM.png) > [!NOTE] > > **Note**: To reduce the computation time, try raising the tolerance. We recommend using this block only for hard-to-mesh regions (where it is needed) and using **Tie Constraints** or **Merge FE Meshes** to connect to meshes created with easier or faster blocks. # Split and Filter Mesh Source: https://docs.ntop.com/lessons/intro-to-meshing/split-and-filter-mesh One cause of a mesh being self-intersecting could be fragmented mesh pieces (an example of one of these fragmented pieces is shown below). To fix this, you can use the **Split Mesh** and **Filter Mesh List** blocks. ![](https://files.learn.ntop.com/lessons/split-and-filter-mesh/102_9_SIWarning.png) ## Split Mesh The **Split Mesh** splits a mesh into multiple mesh objects. You can use it for separating disconnected parts from a larger mesh. Even if you can't see the fragments, they may appear when using the **Split Mesh** block. ![](https://files.learn.ntop.com/lessons/split-and-filter-mesh/102_9_SplitMesh-1.jpg) > [!NOTE] > > **Note**: To extract the meshes, you must open the Properties panel in the Block Details. The largest mesh is always at the top of the list. ## Filter Mesh List The **Filter Mesh List** filters the **Split Mesh** results, based on a volume, to remove small disconnected pieces from the mesh. Its primary use is for minor mesh fixing. In the example below, the starting mesh had floating meshes, but when the **Filter Mesh List** was used, it removed them with only the large mesh remaining. ![](https://files.learn.ntop.com/lessons/split-and-filter-mesh/102_9_FilterMesh.jpg) # Basic Curves and Profiles Operations Source: https://docs.ntop.com/lessons/intro-to-modeling/basic-curves-and-profiles-operations The curve and profile modeling capabilities in nTop allow users to create and manipulate 2D and 3D curves, just like in traditional CAD systems while maintaining the unique advantages of the implicit modeling approach. ### **Curve Capabilities** The unified curve architecture is built around five key types: * Abstract Curve type, and four concrete implementations: * Arc * Line * Spline * Polycurve The genius of this system lies in its interoperability – any curve type can be used in any “Curve” input, thanks to automatic type conversion to the abstract Curve type. This unified approach allows engineers to create complex curve networks by combining different curve types seamlessly, without worrying about type compatibility issues. A design might start with imported spline curves from a CAD system, incorporate precise arc segments for specific geometric requirements, and connect everything with straight line segments – all within a single, cohesive workflow. ### **Profile Capabilities** The Profile type represents sets of coplanar curves that can be: * open or closed * simple or complex with multiple loops. This flexibility enables the creation of sophisticated 2D shapes that serve as the foundation for 3D geometry generation through extrusion, revolution, or sweeping operations. The Profile system includes two important field properties that extend its utility beyond simple 2D shape definition: * The first is a signed distance field to the infinite extrusion relative to the profile's plane, which enables advanced geometric operations and field-driven modifications. * The second is an unsigned distance field to the enclosed region, which is particularly useful for creating complex internal structures or for defining regions for lattice filling. Open profiles receive special treatment in the new system. When an open profile is used in operations that require closure, nTop automatically extends the profile and closes it with straight lines if the infinite extensions intersect. This intelligent behavior reduces the manual work required to prepare profiles for 3D operations while maintaining predictable and controllable results. Now in the next few lessons we will explore these modeling capabilities with several follow-along examples. # Basic Import Operations Source: https://docs.ntop.com/lessons/intro-to-modeling/basic-import-operations While modeling implicit bodies directly in nTop offers advantages for parameterizing design spaces, you can also work with imported implicit bodies as well as discrete geometry like CAD files and meshes. Use the *Conversion* blocks in the *Exchange* tab of the ribbon to convert imported discrete geometry into implicit bodies. ## Working with CAD nTop supports both multi-body parts and assemblies and treats CAD imports as collections of bodies; even if the import only contains a single body. Some operations require identifying the specific CAD body or face by creating a CAD body or face variable. > **Extraction by Manual Selection on Screen** > > The quickest way to convert an imported CAD part into an implicit body is to extract directly from the part shown on the screen. Both the CAD Body and Face can be converted into implicit bodies as well as made into CAD Body or Face Variables. > > **Double-Click** to select the whole body, then right-click to either “Create CAD Body Variable” or “Convert CAD Body to Implicit Body” > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Extract-Double-Click.gif) > > **Single-Click** to select a face, then right-click to either “Create CAD Face Variable” or “Convert CAD Face to Implicit Body” > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Single-Click-Extract.gif) > > **Hold Ctrl** to select more than one body or face, then “Create CAD Body List Variable” or “Convert CAD Body to Implicit Bodies”. A List is created if more than one item is selected. > > In this example, we choose 2 faces, so the block will have a (2) behind its name, with 2 being the size of the list. > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_CTRL-Select-Extract.gif) > > Edges or vertices can also be extracted the same way, but they can only be made into CAD Vertex or CAD Edge Variables and not implicit bodies. > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_CAD-Edge-Extract.gif) > **Extraction by Properties** > > Open the Properties Panel of the Imported part. Expand the Bodies Properties until you reach the desired element. Drag it into the Notebook to create a block from it. > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Extract-Properties-Standard.gif) > **Extraction by Properties Using CAD View** > > When opening the properties panel of an imported CAD part or assembly, there are many property chips to choose from. To simplify extraction we added a CAD View filter, which hides all properties except for CAD bodies. > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Extract-Properties-CAD-View.gif) > **Extraction by CAD Blocks** > > In nTop 5.8, we released a series of new blocks that are designed to help users interact with CAD bodies more efficiently. > > **To extract CAD Faces:** > > Use the **Get CAD Faces** block: > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-Faces.jpg) > > **To extract CAD Bodies:** > > Use the **Get CAD Bodies** block: > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-Bodies.jpg) > > You can also use the **Get CAD Bodies by Name** or **Get CAD Faces by Name** block to further refine your selections: > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-Bodies-by-Name.jpg) > **Extraction by Color Blocks** > > You can extract CAD Faces and CAD Bodies using our two color based blocks: > > * **Get CAD Faces by Color** > * **Get CAD Bodies by Color** > > In the gif below, the Color property chip is extracted from the face/body. We recommend this method as it directly links to color, as opposed to inputting the RGB values of an empty **Color** block. > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-by-Color.gif) > > If you import your CAD part and it doesn't have any color, make sure you change the Display Mode to “CAD Color”. > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Toggle-CAD-Color.gif) > **Turning Multiple CAD Faces into a Single Surface** > > Create a CAD Face List of faces you want to merge, then use the **Stitch CAD Surface Bodies** or the **Stitch Adjacent CAD Faces** block. These blocks merge multiple sheets within a tolerance range and output the results as a list. > > This block comes auto-populated with a list, however. ***You cannot input a list into a list.*** You need to delete the auto-populated list to input the CAD faces. > > ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Single-Surface-1.gif) ## Optional Challenge Problem **Estimated Time to Complete:** 25 minutes ### Challenge Problem Statement Feel free to try our nTop Essentials challenge problem after completing the optional test problem. Given the CAD file below, shell the part with a 3mm wall thickness inwards and add a hole for powder removal. Then, mesh the part with a 1mm tolerance and export it as a 3MF. For an added challenge, the hole for powder removal should resemble the shape highlighted below. Your final result should look something like the second image if you choose to create a hole resembling that CAD face. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_22_OptionalChallenge.jpg) [101\_22\_bracket.x\_t](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/Models/101_22_bracket.x_t) [*Report File*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) ### Challenge Problem Solution [https://www.youtube.com/embed/hhWKbSlEOgI](https://www.youtube.com/embed/hhWKbSlEOgI) This video reviews the answer to the nTop Essentials challenge problem to shell a part, add holes for powder removal, and then export it as a 3MF file. **Example File:** [101\_23\_AnswerChallenge.ntop](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/nTop%20Files/101_23_AnswerChallenge.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop 5.15.2* # Basic Modeling Operations Source: https://docs.ntop.com/lessons/intro-to-modeling/basic-modeling-operations ## Basic Implicit Operations At the heart of nTop's modeling capabilities are the fundamental geometric operations that enable the creation and combination of shapes. Many operations in nTop reflect those you might see in a B-rep CAD system. > **Primitives** > > Primitives, found in the *Create* tab, are simple shapes that are generated as implicit bodies. > > ![](https://files.learn.ntop.com/lessons/overview-of-primitives-transformations-and-modeling-operations/Primitives.jpg) > **Transformations** > > In the *Utilities* tab, you can find object Transformations such as: scaling, rotating, translating, and orienting. You can perform these operations on any type of geometry and in combination with each other. The block will output your transformed geometry while the original geometry remains as a prior block. > > ![](https://files.learn.ntop.com/lessons/overview-of-primitives-transformations-and-modeling-operations/Transforms.jpg) > **Modeling Operations** > > In the *Modeling* tab, you can find common operations such as: offsetting, extruding, shelling, thickening, and revolving. These operations may perform differently than expected on Implicit Bodies compared to traditional CAD. > > ![](https://files.learn.ntop.com/lessons/overview-of-primitives-transformations-and-modeling-operations/Modeling-Operations.jpg) > **Import & Conversion** > > The typical first steps of building a workflow are importing a part, then converting it into an implicit body to be able to work with it. Blocks for importing and conversion can be found in the *Utilities* tab. > > ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Utilities-Tab-1024x84.jpg) > > ## Importing Parts > > There are three main methods for importing parts, data, and more. See the full list of files types that can be imported into and exported out of nTop [here](https://support.ntopology.com/hc/en-us/articles/360048249514). > > ## Method 1: Drag and Drop > > Open the folder on your computer that contains the part file. Drag and drop it into nTop. This will import your part and automatically create a block. > > ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Drag-and-Drop.gif) > > ## Method 2: File > Import > > Go up to *File > Import* (or use hot-key Ctrl + I) to open the Import Window. From there, choose your file and it will import your part. > > ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_File-Import.png) > > ## Method 3: Import Block > > Use the search bar and type in 'Import'. All of the import options will pop up, allowing you to choose the block you need. These blocks can also be found in the *Utilities* tab in the Ribbon. > > ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Import-Block-1.gif) > > > [!TIP] > > > > **Tip: If the part is not visible after importing, it may be because it is not at the location of the viewport. Use the hotkey 'Z' to bring the part into view.** > > ## Converting to an Implicit Body > > Depending on your imported file type, different blocks are available for converting parts to an implicit body. Use the search bar to explore the possible block options. You can find these conversion blocks in the *Utilities* tab. > > ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Convert-to-Implicit.png) ## Boolean Operations The Boolean operations – union, intersection, and subtraction – form the foundation of most modeling workflows. However, nTop's implementation of these operations goes beyond simple geometric combination to include advanced blending and transition capabilities. ![](https://files.learn.ntop.com/lessons/building-blocks-of-design/Boolean-edited.png) The table below shows the different Boolean operations performed on a cube and a sphere. ![](https://files.learn.ntop.com/lessons/building-blocks-of-design/101_16_Boolean-Chart.png) > **Boolean Union** > > The **Boolean Union** function can create smooth blends between intersecting objects, eliminating the sharp edges that would result from simple geometric addition. This capability is controlled through blend radius parameters that can be constant or variable, enabling the creation of organic, flowing shapes that maintain the underlying geometric logic of the design. > **Boolean Subtract** > > The **Boolean Subtract** function, perhaps the most commonly used boolean operation, enables the creation of holes, pockets, and complex internal geometries. nTop's implementation includes advanced options for draft angles, blend radii, and custom cutting directions, making it possible to create manufacturing-ready features directly within the modeling environment. > > > [!TIP] > > > > **Tip: Splitting, cutting, or trimming an object in nTop is just a matter of Boolean subtracting. Subtract the body you wish to split with a plane, created with a **Plane** or **Plane from Normal** block. > > The field associated with a plane has a value of 0 at the plane. The normal direction of the plane has a positive value, while the opposite direction is negative. Boolean subtracting keeps the part in the direction of the normal where field values are positive.** > **Boolean Intersect** > > **Boolean Intersect** operations enable the creation of complex shapes by finding the common volume between multiple objects. This capability is particularly useful for creating components that must fit within specific envelopes or for generating complex internal structures through the intersection of multiple lattice or texture patterns. ## Field-driven Operations One of nTop's most powerful capabilities is its ability to modify geometry using mathematical fields. * **Ramp block** system enables the creation of gradients and transitions that can control various geometric properties across the extent of a part. These ramps can be linear, exponential, or follow custom mathematical functions, providing precise control over how properties vary throughout the design. * **Remap Field blocks** provide even more sophisticated control over field-based modifications. These blocks enable the transformation of existing fields through mathematical operations, allowing engineers to create complex spatial variations that respond to multiple input criteria. For example, a remap field might combine stress analysis results with manufacturing constraints to create a geometry that is both structurally optimized and manufacturable. The distance field approach that underlies nTop's implicit modeling enables sophisticated geometric modifications that would be difficult or impossible with traditional CAD. * **Offset** operations can be used create uniform or variable wall thicknesses * **Shell** operations can hollow out solid geometries with precise control over wall thickness variations ## Surface and Volume Operations nTop provides sophisticated capabilities for creating and modifying complex surfaces and volumes. * **Lofting operations** enable the creation of smooth transitions between different profile shapes, with control over the transition path and cross-sectional variation. This capability is essential for creating aerodynamic shapes, ergonomic surfaces, or any geometry that must transition smoothly between different cross-sections. * **Sweeping operations** extend the lofting concept by allowing profiles to follow complex 3D paths while potentially varying in size, orientation, or shape along the sweep path. This capability enables the creation of complex ducting, piping, or structural elements that follow non-linear paths while maintaining specific cross-sectional requirements. * The **surface area calculation and mass property analysis** capabilities built into nTop, enable engineers to evaluate their designs quantitatively throughout the modeling process. These tools provide real-time feedback on how geometric modifications affect important design metrics, enabling optimization workflows that balance multiple competing objectives. ## Optional Test Problem **Estimated Time to Complete:** 15 minutes ### Test Problem Statement Now that you have learned the basics of nTop, feel free to try this optional test problem with a review of the answer in the following lesson. Create a torus with a radius of 10mm, and a torus radius of 4mm with the center at (0,10,0) mm. Then, translate the object 40mm along the positive y-direction and change the color of the object. Lastly, export as a 3MF with a mesh tolerance of 1mm. ### Test Problem Solution [https://www.youtube.com/embed/GevfDoX09Rc](https://www.youtube.com/embed/GevfDoX09Rc) This video reviews the answer to the nTop Modeling test problem to create a torus, translate it and change the display color, and export it as a 3MF file. **Example File:** [101\_21\_Completed — nTop Core Optional Test Problem.ntop](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/nTop%20Files/101_21_Completed%20--%20nTop%20Core%20Optional%20Test%20Problem.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop 5.15.2* # Follow Along: Model a Cylinder Head Source: https://docs.ntop.com/lessons/intro-to-modeling/follow-along-model-a-cylinder-head [https://www.youtube.com/embed/LfWlq5cyQC8](https://www.youtube.com/embed/LfWlq5cyQC8) > **Transcript** > > Welcome to nTop Learns training on Introduction to Modeling Using Curves and Profiles. In today's training, we're going to learn how to make the part on our screen solely inside of nTop using our new curve and profile features. We're going to be following the steps listed as sections in our notebook here to the left. So we're first going to start with a raw extrusion, perform an extruded cut, then a revolve cut, add in our bolt holes, and then finally create a channel with a poly curve cut. Modeling an nTop is made easiest when we're able to use our reusable custom blocks. So we're going to be using five different ones throughout today's training. > > They're listed as **Line By Direction**, **Rectangle Fillet Center Points**, **Mirror Spline Rectangle**, and **Symmetric Spline**. To show off why we're going to use these and kind of what is the underlying method to using these, if I create a line and I isolate and I hit Z to zoom fit to screen, I can see my line is created by two points. But oftentimes, I want to create a line by a single point and then a direction and magnitude to translate that second point. > > If I wanted to do that with this original **Line** block, I would have to do a **Translate Object** block. I'd have to make one point into a variable. Then I'd have to translate and specify a vector with a different magnitude and direction every time. And this can turn into a two, three, or even four block process that I'd need to repeat every single time I'd want to use this throughout my notebook. Instead, I made a single custom block called **Line By Direction**, which allows me to start with a point, specify a direction, and then a magnitude on top of this, making this a simple one-block process. Every time I want to create this line to look how we actually created any of the custom blocks used in this file, you can right-click on any of them, say “open custom block,” and we can see our four block process in between where we translate and multiply our unit vector with a magnitude. Again, feel free to do this with any of the included custom blocks in this file or open the downloadable files attached at that same link. > > To start off in our first section, then we're going to start under raw extrusion. And basically, if I open up our sample part once again, I can see we're basically going to start with a rounded rectangle profile that we will extrude. So my first block that I'm going to introduce is going to be our **Rectangle** block. And I'll search for this in my notebook. If I isolate on this rectangle, I can see we have inputs for a center point, width, height, and corner radius. I'm going to remain having this centered at our 000 origin. But I'm actually going to make a variable for our width, height, and corner radius. I'll right-click on any of these inputs and I'm going to name this profile width, then profile height, and then corner radius. > > After I've done this, I'm then going to change these values to 600 mm for our width, 600 mm for our height, and then finally 70 mm for our fillet radius. When I do this, then I can see the output of our rounded rectangle on our screen. If I were to do this with lines and arcs in nTop, that would be a totally fine workflow as well. But packaging this all up into a rectangle workflow allows this to be a really quick, seamless process. Once I have this, I can then right-click on my rectangle, make this a variable, and I'll name this raw profile. > > To finish up this section, then I'm simply going to use an **Extrude Profile** block to actually extrude this profile normal to the plane that we've started it on. And I'll make a variable for our distance, and I'll name that extrusion distance. And I'll extrude this 600 mm upwards, giving us a 600 x 600 x 600 rounded rectangular object. > > Now that we've finished our first raw extrusion section here, we're going to move on to our second section, where we're going to be creating an extruded cut of this spline and spline open profile that we see here. I'm going to isolate my raw extrusion once again, and now I'm going to start with my next section. > > In this section, I'm actually going to declare some of the scalar variables before we actually create the **Blocks** to help give us some guiding principles. If I isolate my sample part once again, I can see that I have variables here such as my spline width, the total height of my cut, as well as the width of my cut. So those are going to be the three variables that I define. I'll type scalar variable in here, and I'll Ctrl+C and Ctrl+V twice to copy and paste. I'll then create my spline height variable, my spline width variable, and my cut width variable. > > We're also going to create two more variables that are actually dependent on some of the variables we've already created. This is going to be the straight line width, or the width from where my fillet begins on one side of my rectangle to the other. And then also the offset from this fillet begin point here to where I want my spline to begin. So to get our straight line width, I'm simply going to multiply my corner fillet radius, my corner radius from above by two, and then subtract that from my total profile width. > > I'll then right-click on this **Block**, make this a variable, and I'll name this straight line width. Now that I have my straight line width, then I can much more easily get this edge offset right here, simply by subtracting my cut width or the width of my spline cut here from my straight line width, and then dividing that by two because we have that space on either side. And I will name this then my edge offset. > > If I want to see what this looks like actually loaded, I can create a value for my cut width, which I'll specify as 300 mm here. And now I can see that we need to offset this cut by 80 mm on each side to get our final result. I'll collapse these two **Blocks** then, and we're going to create our first spline. I'm going to do this by using another custom **Block** that I've loaded in called **Symmetric Spline**. This will create a spline with a tangency vector at both the start and end point for this given direction. We can also then control the distance along our tangent vector that our second and third control points will be as well as the degree of our spline as well. So basically, if we think about it, we just need to specify our start and end point as well as our tangency vector, which is going to be 1, 0, 0 in this case, and then our control point distance. > > To start off, I'm going to choose a start point from our actual rectangle, which is going to be the start of this fillet here. And then I'll create my spline located here and then offset by our edge offset. So to find my start point, I'm going to isolate my raw profile from above, and I'm going to enter the properties. Inside of this, I'm going to go inside my polycurves list, then inside the list element of the polycurve, then inside the properties of that individual polycurve, and then inside the vertices. Once I'm in the list elements of the vertices, as I hover over each vertex, I can see the point actually show up in the viewport. Once I get to the verticy that I want, which is going to be five in the list, I'm going to pull that out into my notebook, and I'm going to name this my spline start point. > > I'll then drag this **Block** into my start point input of my **Symmetric Spline Block** to create our endpoint. Then all I need to do is translate this start point by our spline height and our spline width. So I'll load a **Translate Block**. I'll drop in our point, and for the vector, I'll type in a **Vector Block**. And I'm going to add my spline height to my Y and my spline width to my X. These values I'm going to make 50 mm for each of them, and then I'll adjust the units of my spline, excuse me, of my vector. And now I can see that that translated point is viewable in the viewport. I'll then use this as the endpoint for my tangency vector. I'll specify 1, 0, 0, meaning that the tangent at both ends of my spline are going to be pointing in our horizontal direction. And for my control point distance, I'm actually going to have these control points located exactly halfway in between. So if I divide my spline width by two, that's going to be the distance along our tangents that these control points will be located. If I drop this into my input and view the spline, I can see the two-degree version here, but I'm actually going to up the degree of my spline to give us a more smooth shape. I'll right-click, make this a variable, and I'm going to name this raw spline one. > > I'll then collapse this **Block** to save room in my notebook, and we're going to translate this spline by the edge offset to actually give us our finished spline. I'll choose another **Translate Object Block**, drop in my raw spline one, and for the vector then, I'll load in a **Vector Block**. And I want to translate it by my edge offset in the X. I'll change the units then of my vector, drop this into my **Translate Object**, and now I can see our spline has been offset by our edge offset value. I'll make this a variable, and I'll name this spline one. > > To create our second spline, now if I turn off the visibility of our raw spline in our point, I can see we actually just want to mirror this spline across our central plane. So we can use the included custom **Block** **Mirror Spline**. To use this **Block**, all I'm going to do is drop in our spline one, and then I'm going to make a **Plane From Normal Variable**, excuse me, **Block**. I can see when this plane loads that we're actually facing our Z direction, but we actually want this plane to face our X direction. So I'll simply flip my normal here. And since our rectangle was centered on 0, 0 and always will be, I can just leave this here. And if I drop my plane here, I can see we get a mirrored version of our original spline across that plane. I'll make this a variable, and I'll name this spline two. > > To connect these two splines, then I'm going to use a **Line Block** to connect these. Then I can just enter the properties of each one of our splines, and if I hover over the start and end points, I can select the one at the top of each spline, which is going to be our two end points. And this will then create a line that connects in between. I'll make this a variable, and I'll name this cut line. > > To make the open profile that we can use to do this extruded cut, I'm going to use the **Profile From Curves** block. With this, we can drop in our curves into this list of curves. And if I isolate this block, I can see that we actually have these darkened regions emanating kind of from each side of our curve. I can see that this is a little bit opposite of what I wanted to use for extruded cut, and I actually wanted the internal region to be referenced on the other side. > > So to do this, I can actually just flip the normal. So instead of 001, we can use 0 01, or I can flip back and forth to influence these. Since this is the plane that our profile is on, I can see when I flip that plane, then the dark region of our open profile changes and now our profile is ready to go. I'll make this a variable, and I'll name this cut profile. And even though this is an open profile, if I actually hit F to view the field viewer of this open profile and change to our implicit color map, I can see, although the profile is open, our field actually exists infinitely following the tangents at the end of our profile here. Meaning, this will perform extremely well for an implicit extruded cut. I'll close our field viewer, and now I'll load in an **Extruded Cut** block for our profile. I'll simply choose our cut profile. And for our target, then I'm going to choose our raw extrusion from above. If we isolate this body, then I can see we've actually performed our extrude cut on that raw extrusion now, and we're ready to move to the next section. I'll make this a variable, and I'll name this cut extrusion. > > In our next section now, we're going to be creating a revolved cut around the top of our body to give us this curved and then cylindrical look. We're going to have two variables in this section. One is R1, which is the radius of our cut at exactly halfway around our body. And the second will be R2, which will be the radius of the cut a quarter of the way up our body. I'll create these variables by making two scalar variables. I'll copy and paste, and I'll name it R1 and R2. > > I'm also going to create an axis that goes through the center of our part, and I'm going to say that the center point of my axis is at the center point of our bounding box from our cut extrusion. I'll right-click, make this a variable, and I'll name this center axis. And we're going to use this to do our revolve cut later on. First, to create this open profile, we're going to create an angled line from R2 to R1 away from our center and then a straight line from R1 to the top of our part. I'll load in a line variable, and we're going to translate the center point of this axis to give us R2 for our first point. So I'll choose a **Translate** block, and I'm going to translate the center point of our axis by a vector that is going to be R2, excuse me, R1 away from our body. I'll pull our vector in. And since this is going to be in our X direction, I'll say R1 is going to be my X distance. And if I choose 400 mm for our R1 and I adjust the units of my vector, I can see our start point has been translated to the side. I'll use this as the start point of our first line. For our second point, I'll choose another **Translate Object** block, and this one I'm going to be translating both in the Z and in the X. As I create another vector block, I'll be translating by R2, which is going to be 250 mm. And I'll adjust our units. And in the Z, I'm going to be translating up by a quarter of our extrusion distance. This means if I divide my extrusion distance by four, this will be our Z distance that we are translating. If I pull this vector into my translation, and the object I'm translating will be the origin of my axis, I can see our second point is located at this corner. I'll pull this block in, and now I can see my first line has been created, and I'll make this a variable named angled line. > > I'll collapse this block, and then we'll move on to creating our straight line. To do this, I'm going to use the **Line By Direction** block, which is a custom block included in the file. For our start point, I'll select the end point from our previous line. And for our direction, I'll choose 0 01 since we're going vertically upwards. For the magnitude, then we're again going to open up our angled line block, and I'm simply going to copy and paste our extrusion distance divided by 4 since that's the rest of the distance that we need to use. If I click on this block, I can see our blue outline here signifies that this line has been made. And if I right-click, make this a variable and name it straight line, I can see our open profile is ready to be created. I'll then choose **Profile From Curves**. I'll add another to our list, and I'll drop in my angled line and my straight line. I can then see that our open profile has been created on the right side of our body, meaning this is what we intended, so we don't need to change the normal. But now I'll right-click, make this a variable, and I'll name this profile to revolve. > > Since our profiles are also implicit bodies themselves, we can actually use this as a boolean subtract later on, which is the step that we'll use. First though, I'm going to use the **Revolve Profile** block to revolve the profile that we've just created around our central axis by 360°. We shouldn't see any output since this is an infinite profile. It's kind of extruding everywhere outside. But if we use this to subtract from our part, it will give us the cut that we're looking for. I'll use a **Boolean Subtract** block then, where I'm going to subtract this revolved profile from our primary body, which will be our cut extrusion. And if I isolate this block now, I can see we've gotten that desired cut around our body. I'll right-click and make this a variable, and I'll name this revolve cut. > > Now that our revolve cut has been performed, we're going to cut our bolt holes out of our four corners here. To do this, we're going to create four circles at the same center point as our corner radii here. To get the center points, we're going to use another custom block included in the file called **Rectangle Fillet Center Points**. If we use the same inputs here then that we did for our rectangle at the top, where if I close these sections, we can navigate to the top, it will then give us the exact center points that we're looking for. And I'll choose my corner radius, and there I can see those four points for the center points of our circles. I'll right-click, make this a variable, and I'll name this arc centers. Then I'll load in a **Circle** block, and this will allow us to actually list process with these four points to create four circles. I'll drag in our arc centers as the center points, and then I'm actually going to right-click on our radius and name this bolt hole radius. And this is going to be then the variable to control the radius of our circles. I'll make our radius 30 mm, and if I click on our circles here, I can see our 30 mm circles ready to be cut out. I'll right-click on this block, make this a variable, and I'll name this circles. > > Then since I have a list of four, I'm actually going to use a **Boolean Subtract** block to cut these out of our part rather than our extrude cut. These techniques will work virtually the same, but since I have a list, our **Boolean Subtract** block is a little bit easier to do this. Then to grab our subtraction bodies, I'm actually going to go in and grab the distance to extrusion conversion from our circle profiles. I'll use that as our subtraction bodies. And then if I open my revolve cut section once again, I'll use my revolve cut as my primary body. When I isolate this block then, I can see that our bolt holes have been cut out, and I'll name this block bolt cut. > > For our final section here, called polycurve cut, we're going to perform a curved channel cut starting at the top of our body and moving through to the side here. To do this, we're going to create a polycurve from two lines and an arc, and then we're going to thicken that polycurve. > > We're going to use our **Line By Direction** custom block included in the file to start, and we're going to create our first point inside of our body here. And we're basically going to extrude that line all the way out. For our start point, then I'll load in a **Point** block. And for our X location, if I look from the top, I just want that to be the centroid of our part. So our X location is actually just going to be zero, and I don't need to change that. For our Y though, I'm actually going to slightly offset this from the centroid of our part by the fillet radius, or the channel bend radius, excuse me, that we're going to use. I'm going to actually make a scalar variable for that channel bend radius so we can use this. > > Let's say that our radius is 100 millimeters for now. And so I'm actually going to offset this by 100 mm in my negative Y direction, so I can subtract 100 from the centroid of our above bounding box. And again, this will be from the Y value, which will then be, and this will be where our point is going to start in the Y. > > For the Z or the height of where I want this line to be, I want it to actually be the extrusion distance divided by 2.5 down, basically from the top, which is going to equal about 240 mm. To automatically give us that value though, I can load in a **Divide** block. And if I divide our extrusion distance from the top by 2.5, this will give us the value we're looking for for our Z. If I click on this point, I can see it's about halfway through this solid region here, and it's correctly situated on both our X and Y axis. I'll drop this in as my point. > > And for our direction, I'm going to choose 0 -1 and 0. And for the magnitude, I want something that will just always make sure that this line is outside our body. And an easy way that we can do that is we can go into the properties of our bolt cut variable from above. I can go into our bounding box. And if I click on our span, which is the vector from one side of our bounding box to the other, and I choose the length, this will just always make sure that this line will always at least translate through our body. And I can see it's very far outside here. I'll right-click, make this a variable, and I'll name this P line one for polyline one. > > I'll then collapse this block and we're going to make our second line, which is going to be our **Line By Direction**. Again, this, if I click on our line here, is also going to be offset in our Z direction now from our original point by our fillet radius. So that's how we know where we need it to be located. I'm going to load in another **Point** block. And for our X and our Y values now, I'm just going to actually use the centroid X and Y from our bolt cut. And then for our Z value, we're actually going to take our extrusion distance divided by 2.5 from above. So I'll copy and paste that block into my notebook here. And now I'm going to actually add our channel bend radius to this value to give us that Z offset we're looking for. I'll drop that in to the Z value for my point. And now I can see our point is correctly located inside of our body. I'll drag my point into the **Line By Direction** block there. And then for our direction, I'll choose 0 0 1, because we're looking for this line to go into our vertical Z direction. And I'm actually going to use that same span length that we used above as the magnitude for this line as well. And I can see that this line has now gone outside of our body just like the one from above, which as well is going to give us a perfect cut. I'll make this a variable, and I'll name this P line 2. > > If I collapse both of these and now I isolate these so our part is no longer present, I can see the easy way we can connect these is by using the **Arc By Tangent** block. It's easy because I can just take the start point again from our body and I can take the included start tangent as well from those properties. And I can say, I just want this to be connected to the start point of our other line. This will then automatically connect it with that arc. And then I can make this a variable, and I'll just name this P arc for polyline arc. > > To make our polycurve then, where I believe I've been saying polyline but this is a polycurve because it's a collection of curves, I'll load in our **Polycurve From Curves** block. I'll add two more to our list, and I can drop in all of my included curves: so our two lines and our arc. I can now see our polycurve is connected. And if I make this a variable, I can just name this P curve for polycurve. > > To thicken a polycurve then, to perform that cut, we can add a **Thicken Body** block to the notebook. To thicken this then, I can go into the properties, grab the scalar field, which will convert to an implicit body then, and then I can specify the thickness of our channel. I'll make this a variable, and I'm going to make our thickness 150 mm. When I do this, I can see the thickened version of our polycurve on the screen, ready to boolean subtract from our final bolt cut. I'll add in one more **Boolean Subtract** block. And if I subtract our thickened body from our bolt cut variable, I can see our final part on the screen. If I right-click on this block, I can make this a variable, and I'll name this final. > > Now that our final part is made here, we can see how easy it is to parametrically change this part all the way throughout. So if I come down here, I could change something like my **Channel Thickness**, and I can see that quickly reflected on my screen. Or I can even change something up here at the top, like my **Profile Height**, and I can again see my workflow update as we go, and then a final version generated at the bottom of my screen as well. > > We can list process through these inputs in nTop as well. So we can do a type of parameter sweep on this object to have hundreds of thousands of different versions easily updated without those typical surface modeling errors that we can encounter when rebuilding a part. But if we kind of arrive to a final version of that part that we're looking to use, we can actually mesh our body directly in nTop here and send that off to somewhere else. And I'll show this process quickly. And we can also export the curves, which I'll highlight in a second as well. > > So to mesh, I can just drop our body in, choose a tolerance of, say, 10 mm, and I'll choose to sharpen in this case. And I can see that this body is quickly going to load. And if I isolate our final result here, I can see that we have a nicely sharpened body ready to send out for an export. > > However, if I'm looking to export those curves, I can actually go through and create a list of curves that we've actually used to create things along the way, such as our circles, our poly curve, our profile that we used to revolve our cut profile that we used, or even our raw profile here. And if we were to export these as a part from nTop, we can actually go into our CAD system and easily redraw this object into our typical STEP or Parasolid files that we're used to working with. If I go into my downloads here and I load in our simple cylinder, I can then see the CAD redrawn version from all of our reference curves that we've assembled on the way. > > So throughout today's workflow, we learned how to parametrically create this in nTop. And then we can see in our reference section here at the end, how we can mesh and even create a CAD version of this part just by exporting our curves. Thanks for attending this training, and we look forward to seeing the progress you make in nTop along the way in the future. > > [0:00](https://www.youtube.com/watch?v=LfWlq5cyQC8) Introduction to Modeling Using Curves and Profiles > [0:39](https://www.youtube.com/watch?v=LfWlq5cyQC8\&t=39s) Reusable Custom Blocks > [2:38](https://www.youtube.com/watch?v=LfWlq5cyQC8\&t=158s) Creating a Raw Extrusion > [5:37](https://www.youtube.com/watch?v=LfWlq5cyQC8\&t=337s) Extruded Cut with a Spline Profile > [16:42](https://www.youtube.com/watch?v=LfWlq5cyQC8\&t=1002s) Revolved Cut for Curved Body > [22:45](https://www.youtube.com/watch?v=LfWlq5cyQC8\&t=1365s) Cutting Bolt Holes > [25:15](https://www.youtube.com/watch?v=LfWlq5cyQC8\&t=1515s) Creating a Polycurve Channel Cut > [32:45](https://www.youtube.com/watch?v=LfWlq5cyQC8\&t=1965s) Parametric Design and Exporting Download the starter file below to follow along. * 0:00 Intro & Custom Blocks * 2:38 Raw Extrusion (**Extrude Profile** on a closed polycurve) * 5:48 Extruded Cut (**Extruded Cut** on an open polycurve) * 16:40 Revolved Cut (**Revolve Profile** and **Boolean Subtract** on an open polycurve) * 22:39 Bolt Holes (**Boolean Subtract** on profile list) * 25:16 Polycurve Cut (**Thicken Body** and **Boolean Subtract** on polycurve) * 32:45 Testing Parametric Model * 33:32 References (Mesh & CAD export options) **Downloadable Files:** [Starter — Modeling a Cylinder Head with Curves and Profiles.ntop](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Modeling/Starter%20--%20Modeling%20a%20Cylinder%20Head%20with%20Curves%20and%20Profiles.ntop) [Complete — Modeling a Cylinder Head with Curves and Profiles.ntop](https://files.learn.ntop.com/Courses/Intro%20to%20Modeling/Complete%20--%20Modeling_a_Cylinder_Head_with_Curves_and_Profiles.ntop) [Curve and Profile Custom Blocks.zip](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Modeling/Curve%20and%20Profile%20CBs.zip) *This file was last updated in nTop 5.20*.2 # Follow Along: Model a Double Pipe HEX Source: https://docs.ntop.com/lessons/intro-to-modeling/follow-along-model-a-double-pipe-hex [https://www.youtube.com/embed/MlDHMw0SUvc](https://www.youtube.com/embed/MlDHMw0SUvc) > **Transcript** > > Hello everyone and welcome back to the Intro to Modeling course on nTop Learn. Today we are going to be learning how to model a simple double-pipe heat exchanger inside of nTop using all of our new curve blocks available in the software. > > Right now in this file, we can see that we have our sample part on the screen here, which basically consists of two fluid interfaces where we actually have two separate layers of pipes going on top of each other. And although this may look like a complex workflow in typical CAD terms, this really has to do with curve and volume manipulation inside nTop, and we're going to make a repeatable workflow using this. > > To start off here too, I see that we have our sample located over here to the left. And also, if I open up my left side panel here, I can see all of the custom blocks that I'm going to be using to import located here on our left as well. These will be extra blocks associated in the file that you can download into your own custom block library, or since these are preloaded into the file, we can use **Flange**, **Remove Every Other Point**, and **Arc By Tangent From A Point List** separately as well. And again, all of these blocks really are just using profile and curve tools in nTop, but we're just going to use these already assembled custom blocks as an advantage to help us get to our end workflow faster. > > Now, to begin here, we're going to do a little bit of a tour of how we're going to construct this. And along the way, we're actually going to create some scalar and integer inputs that we're going to put at the top of our screen in our input section. So we can actually reference those to drive everything as we go along. So if I look at our pipe sections here, I can see that we have a pipe that kind of weaves back and forth in a zigzag as we go and outputs at the top. And then we also have one that starts and then does a smaller version of that without doing the complete bend, so that we have heat transfer in between the two fluids that would flow through these. > > The way that I broke it down when I created this is that if we think of the centerlines of each of these, we basically have a straight line at each one of these interfaces. So we're going to list process and create a list of centerlines as we go. Then we also have connecting left arcs here as well as a finish arc at the top. And then we have right arcs here with a finish arc at the bottom. That's how we're going to create the first centerline inside of our fluid one centerline location here. Then we're going to build that volume by thickening that curve. And then we're going to create our fluid two centerline in a similar way where we're going to have those centerlines here. And then we're going to connect it with verticals that connect it in between. And then we're going to thicken that pipe in a similar manner. Once that's done, then we're going to use that simple **Flange** custom block that I created to create these flanges at either side of our outputs. > > To begin, I'm going to actually create a section at the top in our input section here where we're going to have scalar and integer variables that are going to let us drive every other parameter that we need to create. So since we can create those inputs at the beginning, it makes it easier to kind of follow along and use the information that we have to start. I'm going to just create a scalar variable in nTop, and I'm going to need about six of these. So I'll simply do Ctrl C and then Ctrl V until I have six of these scalar inputs made. And then I'm also going to have one integer as well. So an integer variable for my first integer variable here as my input, I'm going to call this my Unit Count. And my Unit Count means that the amount of repeats that I'm going to have or the amount of repeat units. So each one of these bends to a certain side is going to count as one complete S unit. And since I'm counting these at units, this means that we're going to guarantee that our pipe on either side is going to start at kind of this general side of our heat exchanger each time. > > So that first one is going to be our Unit Count. Then I'm going to call this next my F1 for Fluid One Centerline Width. So this is going to be the straight line distance here from my fluid one centerline that snakes around. So this will tell us the width before we actually reach our arcs. Then we're going to have our Fluid One Centerline Bend Radius or F1 Centerline Bend Radius. This is going to tell us the radius of the centerline for each of these bends, which will also dictate, since we don't have any straight lines in between, will also dictate the height of each one of these units as well. Then we're going to have our Fluid One Fluid Diameter telling us how thick we're going to make the fluid itself. And on top of that, we're also going to have our Fluid One Pipe Thickness. So the thickness that we want to create our pipe for our last two variables. These are going to retain more information for our Fluid Two, and it's going to be our Fluid Two Centerline Width. And then lastly, our Fluid Two Thickness as well. And I'll get to what that means when we get to our Fluid Two section. But for now, I'm just going to enter this up to our top portion. And then this is going to be our total count of variables that we're going to use to drive everything inside of this part. > > Coming down to our constant section, then, this is where we're actually just going to have a few constants that are going to make it easier to actually work throughout our workflow. So our first constant here is just going to be our bend diameter. So instead of our bend radius, it's just going to be our diameter, so we're just going to be multiplying it by two. I'll hit S to context search here. > > For our first one, I'm simply just going to multiply our fluid centerline bend radius by two, and this variable is going to be named our bend diameter. To test this out, I can give us a radius of 50 mm here at the top, and then I can see that we get 100 millimeters for that diameter. > > For my next one, then, I'm going to call this our line count, or the total amount of center lines that we're going to need depending on the units that we have. I can see that in this example, we have 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 center lines for something that has six units total. So this means that we always need to multiply the amount of units that we want by two and then add one on the end to give us a full rotation. So for this, I'm going to multiply our unit count by two. And so our unit count in this case is going to be for example, six. So if I multiply this by two, that's going to give us the center lines that we need minus one. So to give us that final center line count that we need, I'm going to simply add one more to that multiplication step. And then this is going to be our line count variable, or the total amount of center lines that we're going to need to construct this. So I'll name this line count. And then this is basically going to be the end of our preparation steps before we really start creating these example lines. > > To create these lines, I'm going to collapse these two blocks here and I'm going to move on to our center line section. So I can see that we have these center lines as we go up. So I'm going to create these by list processing our **Line By Direction** block. With this block, I need a set of points, a direction, and a length each time. > > I can see that since this line direction is going to be the same for each one of these center lines that we create, I'm simply just going to choose a direction of 1 0 0. And the length is also going to be the same each time, which is going to be equal to our F1 CL width that we created above, or again, our fluid one center line width. And to approximate this to start, I'm going to give this a value of 1,000 mm. > > I'm also going to choose to center these around these points at 0 0 and X and Y as I go. And so the only input that we need now to actually list process our **Line By Direction** is going to be a list of points to create these from. So to create that list of points, I'm going to use a **Sequence** block. The **Sequence** block is going to give us a start, an increment, and a total count. So for our start, I'm going to say zero. And our initial point is going to be at 0 0. This is going to be my sequence in our Z direction. And for my increment, I'm going to give it my bend diameter because my bend diameter is going to be my total distance in between each one of these center lines vertically. > > Finally, for my total count of lines that I need, that's just going to be my line count variable that I created above. So after I drop that in, I see almost everything worked here, but we messed up our units with our start here, so I'm just going to give that 0 mm. And I can see now we've created a sequence between 0 and 1,200. > > Next, I'm going to create a point variable, excuse me, a point block. And for our sequence, I'm going to go ahead and drop that into our Z. Now, if I click on this, I can see I have created a sequence of center points to create our lines. And to create these center lines, all I have to do is drop this block into our **Lines By Direction**. Then I can see the center lines for our body have now been populated. I'm going to make this a variable, and I'm going to name this F1 center lines. > > The next step here then is going to be creating our list process arcs on either side of these center lines to combine all of these into a final polyline. To do this, I'm going to use my first included custom block that we talked about, which is going to be our **Arc By Tangent From A Point List**. So I'll search for this really quick, and I'll bring in that **Arc By Tangent From Point List** block here. I can see if I look at the information from this that this block runs arc from tangent, a block that we're familiar with where the start and end points for that are chosen by points grouped in two. So that means if I take this total grouping of center line end points here, that each group of two is going to be connected by an arc by tangent. And notice that this rule is going to work everywhere until I get to that odd one at the top. So we need to remove this point from where we take the end points of our center lines to use as inputs here. > > I can do this by using the **Remove** block. I'll load in a **Remove** block really quick. And then I'm going to navigate into the properties of our center lines. And I'm going to hover over either our start points, or I can see that we're looking for our end points here in this case. And that's going to be the list that I want to remove one point from. Since we started with our points down here, that means the end of our list is going to be up here. So I want to remove one from the end of our list here. To do that, I'm just going to use a simple **Subtract** block. And if I come to our results here, I can take the size of my list, subtract one from that, and then that is going to be the last index to remove that from. So now if I hover over this, I can see we've always removed the last index from that last center line up at the top. Meaning that if I use these points now as an input for this **Arc By Tangent Point List**, and I choose a start tangent for each one of these, I can see our start tangent should be in the positive X. I get a list of arcs connecting all of these points as I go up this left-hand side of my body. Now that I have this list of arcs, I'm going to right-click and make this a variable. And I'm going to name this left arcs. > > Now that I understand this process with our left side arcs, I'm going to repeat that on our right side, but in a slightly different process, because now we want to remove the first start point rather than the last. So I'll load in another **Arc By Tangent** block again with our point list. And I'm going to use a similar approach, but now I'm going to use that **Remove** block with the start points, which are on the right-hand side. I'll pull those in. And for my index now, I don't need to do that automatic sizing index before, since I know I always just want to remove the first point, giving us the results that we see on our screen. I'll then drop this into my point input. And then for my start tangent this time, I'm going to say -1 0 0. And this is going to give us our finished arc list on the right. So I'll make this a variable and I'll name this right arcs. > > Now that these three are done, I'm going to collapse these for now. Now that we've finished our arcs on either side, we just need to create our start and our finish arc here at the bottom. So I'm going to do this by loading in two **Arc By Tangent** blocks so we can finish our polyline with these blocks. Then we need a start point, an end point, and a start tangent. So we're going to use these again, using kind of the list element versions that we've been working with so far, and then also with a translation and a vector. So for our start point for our start arc, I'm going to begin by using the **List Element** block and pulling the first index of our start points out from our original center lines. So to create this arc at the bottom, I'm going to pull the first point out of our start points. So at index 0 of that list, this is going to be my start point. So my corresponding start tangent for this is going to be -1 0 0. For my end point then, I'm simply going to translate this by our bend radius here, downwards and to the right. So again, I'm going to load in a **Translate Object** block. And to finish this, I'm going to translate this point that we've just created by the vector of just down by our bend radius and over by our bend radius. So I'll make a **Vector** block as well. And inside of this vector, again, we're going to translate it down. So in our negative Z direction, by our bend radius. So if I come up to our inputs at the top, since I know I want it to go down in our Z direction, I'm going to take the negative of that block. And I'm also going to translate this point in the negative X direction as well. So again, I'll drag the negative version of this and put this in our X direction. And to fix our error here, I'm going to give units to our Y in the middle. And now if I look at this translated point, I can see it's correctly at our end region. If I use this as my end point, then I can see that we've successfully created our start tangent here. I'll make this a variable, and I'm going to name this start arc. > > Using a very similar process, then I'm going to create our end arc here at the top where we're just really going to have a different index. So I'll load in another **Arc By Tangent** block. And for our first point, I'm going to use **List Element** again, but this time it's going to be the last in the list on our left-hand side. So that means that I need to use that little subtraction and list size trick that we used before. So I'm going to take our list size, subtract one, and that is going to be our index. And for our list, that's going to be our end points from above. This is going to give us again our end point that we trimmed out from the other ones. That will be my start point. And for my start tangent, I'm going to choose 1 0 0 since it's facing in the positive direction. For our end point then, again, we're going to translate by our bend radius vector. So I'll choose a **Translate Object** block, and we're going to choose that point that we had just created. So I'm just going to copy and then paste that selection of blocks, use that as our object or the point that we're going to be translating. And for our vector this time, since we're going in our positive X and positive Z direction, all I need to do is drag our bend radius into both our X and our Z. I can also type in the name of the variable that I'm looking for so I don't have to go all the way to the top. I can then see this has correctly translated our point. And if I use this as my end point, we've successfully created that end arc. So I'll make it a variable, and I'll name this end arc. > > I'll collapse these two blocks. And then our last step here is going to be creating a polycurve from all of these lists of curves. I'll load in a **Polycurve From Curves** block. And what we're basically going to do here is we're going to concatenate a bunch of lists of these arcs that we've created. So to start, I'm going to load in a **Concatenate List** block. And I'm actually going to copy this block three times so we can concatenate all of the lists of curves that we've made. An important thing to note when we use the curve types in nTop, we just need to make sure that they end up being all curves when we union them together. So I'll start off by putting our left arcs and our right arcs into a concatenate list here. And again, I'm just going to change our type to make sure that these are both curves and not both arcs. Since again, curves are the overarching type, but arc, center line, line, these could all be different types as well. So we need to make sure that they're all curves. I'll change these other types too, just to make sure that these are all > > Now that our centerline is created, it's a pretty easy process to, excuse me, make our fluid one volume. That, which really is just going to involve a few thickening and Boolean operations. > > To start off, we're just going to do a simple **Thicken Body** on the poly curve field that we've created. And then we're going to intersect that with the two planes that we can create on either side as well. So I'll load in a **Thicken Body** to start with. And because we don't have an overload for an implicit body inside of our poly curve, we can't natively drive or drop it into thicken. So I can just take the scalar field inside of the properties, use that as a body for **Thicken Body**. And then for our thickness here, we can go ahead and we can actually use the Fluid 1 fluid diameter, which is going to be at our top. And the value that we can use for that input then to actually start with is going to be 50 mm to start. So I'll go ahead and add in 50 mm up here at the top. And then we can see our poly curve immediately thicken. > > However, because it's a curve, when we thicken, we're always going to get those little half circles on either end of the curve. There's a pretty simple way to get rid of that though, and that in this case is by creating a plane on either side and then doing a Boolean intersect operation with this thickened body. So I'll go ahead and I'm going to load in two **Plane From Normal** blocks. For the first one, I'm just going to use our start and our start tangent. And for our second, I'll use our end point and our end tangent. And just like that, we have two slicing planes on either side of our body. > > I'm going to name this one our F1 start plane. So I'll make a variable out of it and name it F1 start plane. And for the next, I'll name this F1 end plane. Now, if I do a Boolean intersect with our thickened body and our two planes, this is going to give us a trimmed version of what we've just created with a flat body on either side. I'm going to make this a variable and I'm going to name this F1 fluid. We also need to create a pipe out of this, so we're just going to use a few more Boolean operations to actually get that pipe to work for us. > > Next, we're going to create a solid version of that same pipe from before. So we're really just going to thicken our body and we're just going to make it thicker and do the same intersect interaction. So I'll load in another **Thicken Body** block. I'm going to use that same poly curve property inside our conversions. And then for the thickness here, I'm going to use our F1 fluid diameter as one of the thicknesses. I'll collapse these for now. So I'll use our F1 fluid diameter for one of these, but then we also need to account for our pipe thickness inside of our solid pipe as well. And the pipe thickness, if we think about, we need to multiply by two because there's thickness on either side of our pipe. So I'm going to multiply our pipe thickness by two and then I'm going to add that to our F1 fluid diameter. And as a good test value for that pipe thickness, we're going to use 8 mm to start. So if I type in 8 mm, I can see now we have a new amount to thicken by. And I can see we get a slightly thicker body on our screen. > > If I do that same Boolean intersect operation then with our two planes and this thickened body, this is going to give us a solid version of our pipe, which we're going to use later on. So I'll make this a variable and I'll name this solid, or excuse me, F1 solid pipe. > > And then finally, to give us that final shelled look, we're going to use a shell with a thickened body, and then we're going to trim it as well to open up those side regions. So I'm going to again use our **Thicken Body** block where I'm going to thicken that same poly curve property that we used before. And we're going to use our same fluid diameter thickness to start with and then create an external shell afterwards. So I can see that I've thickened our body. And now I'm going to use the **Shell** block where my shell thickness is going to be my F1 pipe thickness. And instead of shelling inward, I'm going to shell outward to give us the thickened version that we saw before with our solid pipe. And then finally, if I trim off each end again using our Boolean intersect, this is going to give us our Fluid 1 pipe. I'll drag both of these planes. And if I isolate this block, I can see that we have an open pipe on either side. And if I hit X to do a section cut and choose the correct plane, I can see our fluid channel going through our part. I'll simply right-click, make this a variable, and I'm going to name this F1 pipe. > > Now that our Fluid 1 portion is completed, we're going to go ahead and start by building our Fluid 2 centerline. So I'm going to go ahead and bring up our sample part once again so we can visualize that centerline that we need to create. And I'm just going to collapse these two sections just so we can see a bit easier. I can see we're going to make this in a similar fashion where we create our centerlines again, and then we just need to create some vertical lines throughout our part as well. > > So we're going to start off using that same process of creating our centerlines using a point, a centered centerline, and then our F2 centerline width. To save us some time since this is the exact same process as our F1 centerlines, I'm actually just going to copy that variable. And then I'm going to paste it into our Fluid 2 centerline portion. And instead of our F1 centerline width here, we're actually just going to use our new F2 centerline width. So I can drop that variable in here. And as an example value, we can go ahead and use 700 millimeters for that width as well. So I'll go ahead, type 700 in. And now if I view these lines that I've created and change our variable name to F2 centerlines, I can see the appropriate centerlines on our screen. > > And using a similar approach then, we're going to create the verts, or the verticals that we need as well. And we're going to use a slightly different technique and a slightly different custom block, but kind of the same as we did for our arcs. We're really, I just want to remove every other point and then create a line by direction in between to the other points. Although we could use a line by point list like we did for our arcs as well. Either way would work and either would be pretty much the same efficiency wise, which is kind of the beauty of nTop here where we can kind of pick and choose and create those points that we need. > > I'll collapse our centerlines here and I'm going to load in a **Line By Direction** block. So first off, let's start with our right side here. And I'm going to start with a point list. And if we look at this, we want to create a line basically starting with every other point going up. So I'm going to use our remove custom block that we have called remove every other point that's loaded in. So if I type in remove every other point, this is going to give us a point list. And if I drop in our list of start points here, and now I look at this list, I can see that we've removed every other point to start with. I want to start with this one here though. So I'll uncheck that alternate option. And now if I look, I can see that all of these points are going to be the start point for our verticals. I'll use these as a start point for my direction. They're all in the positive Z, so I'll select that option. And then for our length, I'm going to use our bend radius from above, excuse me, our bend diameter. If I drag in our bend diameter for our length, then I can see our verticals connected all the way above for this body. I'll right-click, make this a variable, and I'll name this right verticals. > > Next, we're going to use a similar process here for our left verticals. So, I'll go ahead and again grab our **Line By Direction** block. And I'm also going to use our **Remove Every Other Points** block again. So, I'll copy and paste that. Instead of our start points, I'll use our end points here. And now if I look at this, I can see if we now look downwards with what we're creating, that this is going to create the necessary verticals. So this is going to be our input point here. For our direction, I'll choose 0 01. I'll use that same bend diameter as my length. And now if I view this, I can see our verticals down the left-hand side ready to use as well. I'll right-click, make this a variable, and I'm going to name this left verts for left verticals. For our next step, then, I'm going to combine our verticals into one list. We're going to need that later on because we're going to thicken them slightly different. So, I'll use **Concatenate List** and I'm going to create one block here just called verticals or verts in this case. > > So, to finish off our polycurve, then, I'm going to use **Polycurve From Curves**. And then the two curves that I'll put in here inside this list are going to be our verts that I need to concatenate with our center lines. So, I'll use **Concatenate Lists**, use our verts, our center lines. I can see our types aren't matching up, so I'll simply change this to a curve type. Everything works. Drag this into my **Polycurve From Curves**. And if I click on that block, I can see our polycurve ready to go. I'll right-click, make this a variable, and I'll name this F2 for fluid 2 polycurve. > > Now, in our next section here called fluid 2 calculations, as I close these two, we're going to need to do some math in nTop to kind of figure out the thickening that we want to use to create our second fluid domain here. So, we're really going to thicken our verticals different than we're going to thicken the center line portions here to create a desired effect. To do this, we're going to use some calculations, some cross-sectional area so we can have kind of an equivalent cross-sectional area through our verticals just as we do through our part, so we can have kind of more even fluid flow throughout. Excuse me. > > So, what we're going to do is we're going to get, if I take a section cut of this, we're going to take the inner radius here and then the outer radius of our fluid. So, we're going to calculate both of those. We're going to get the cross-sectional area of our fluid. And then we're just going to make sure that then that can be, that cross-sectional area can be equivalent to then the radius of this thickness that we have throughout the center of our part there. So, our first calculation is just going to be getting the inner diameter of this horizontal portion, which if we think about it, is really just going to be the same as the outer diameter of our, excuse me, pipe. So, this calculation is going to be pretty simple because we're really just multiplying our F1 pipe thickness by two and adding it to our original fluid diameter. So, I'll load in a **Multiply** block. I'm going to multiply our pipe thickness by two. And I'm going to add this to our F1 fluid diameter. I'll make this a variable. And this is going to be our F2 horizon. I'll approximate with that inner diameter because this is going to be the inner diameter of what our fluid 2 is going to be, because we have that same wall again through the center of our part here. > > Our next calculation then is going to be getting the outer diameter of what our fluid to fluid is going to be. So, to get this, I'm going to simply add what I've just created, so this diameter, with what we want our F2 thickness to be. So, I'm going to approximate this thickness as 10 mm here. And this is again the thickness, if I section cut this one more time, the thickness of this region where we want fluid to flow. So, it's just going to be adding that thickness in. And then I'll make this a variable. And I'll name this F2 horizon outer diameter. > > To calculate the cross-sectional area in between, then, we're going to take the area of both of those circles and then we're going to subtract from each other. So, to do this, we're going to use some multiplication, squaring, and division blocks in nTop here. And we're just going to repeat it really quick to make it an easy operation. So, I'm going to first start with our outer diameter and I'm going to divide it by two to give us our radius. Then I'm going to square it, excuse me. And then I'm going to, yeah, excuse me, square it. And then I'll multiply by pi. And then this is going to be our first area. To get the second, I'm just going to copy and paste this. Excuse me, not pi. Copy and paste our multiply here. And I'll just drag in our inner diameter instead of our outer. And then this is going to be our second cross-sectional area. So, if I just subtract both of these, now this is going to give us the actual area of that region or the cross-sectional area inside. So, if I make this a variable, I can then name this fluid 2 F2 cross-sectional area. And since I just want this area to be consistent everywhere, I can then use this area to calculate what I want the thickness of our vertical regions to be. So, if I collapse this then, and I take this result and I divide this by pi and then take the square root and finish off by multiplying by two, this is going to be our outer vertical diameter. So, I'll make this a variable and then I'll name this F2 vert diameter. So, this is going to be the diameter of the fluid 2 in our vertical regions. > > So, for our final section here for fluid 2, excuse me, before flanges, we're going to create our volumetric fluid region using our curves and our calculations again that we just made. So, I'm going to do this with two **Thickened Body** blocks. And we're going to thicken our verticals and our center lines because we created those two different thicknesses that we need to use. So, first off, I'm going to drop our center lines into our body. And again, I need to take out our scalar field to use as our body here. And then for the thickness that we're actually going to use, I'm going to use our outer diameter that we just created for our horizontal ones. This is going to give us a list of 13 thickened bodies. And to finish that off, then I'm simply going to union these 13 bodies together, excuse me, to create our thickened horizontal regions. And I'll isolate those. I'll make this a variable. And I'll name this thickened horizontal. > > For our verticals, then, I'll repeat this same exact process. So, I'll grab the scalar field of our verticals as our body. And for our thickness, I'll use the fluid 2 vertical diameter. I'm going then going to Boolean Union these 14 together, and this is going to give us the verticals that we were looking for connecting our regions. I'll make this a variable and I'm going to name this thickened vert. I'll collapse these two. And then, unsurprisingly, our next operation will just be Boolean Unioning these two together to give us a kind of raw fluid domain. I'll make this a variable and I'll name this F2 fluid raw, because again we need to trim out that other pipe that's actually going through here to give us our desired result. > > So, in our next step then, we're going to actually do that using a **Boolean Subtract** block. So, I'll use a **Boolean Subtract** and I'm going to take our F2 fluid raw as our primary body. And for our subtraction body here, I'm going to come back up to our volume section, our fluid one volumes, and I'm going to use that F1 solid pipe that we had created before but didn't really have a use for. Now this is actually going to trim out those regions. So, this is going to be our final fluid domain here. It will be final though after we intersect with two start and end planes. So, I'll use our **Plane From Normal** once again. And I'll come back up to our fluid 2 center line here, or excuse me, our polycurve. And for our start point, I'll choose that. And then our start tangent. And I'll repeat the same with our end point and our end tangent. So, this will be my start plane, start plane. And this will be my end plane. And I'll put two behind just to signal our fluid two here. So, if I add two more, excuse me, not that. > > The final step in this workflow, then, is going to be using our flange custom block in our next section to create these flanges. Then I'm simply going to use the **Flange Custom Block** that I already have loaded into my notebook. In this custom block, we can actually open it up and see what I've done inside. And really, what I do is I create a variety of profiles and extrude these, but using this custom block makes this process extremely fast and repeatable. So this will create a flange on the end of whatever frame that I choose, with whatever fluid radius, bolt hole count, bolt hole radius, flange width, and flange thickness that I desire as well. So in this case, I'm going to go ahead and make a plane list. > > And I'm going to throw our first two flanges on our start plane one and our start plane two, located in our fluid one volume section. I'll make a list of these, and then I'll drop this plane list into our frames here. I can see, when I do this, that we're not seeing anything perfect show up yet, but that's again because our values that we're using aren't correct for what we actually need for this to show up. So for our fluid radius here, for our first one, I'm going to actually use our actual F1 fluid diameter divided by two. So I'm going to take a multi, excuse me, a **Divide** block, and I'm going to divide our F1 fluid diameter by two. > > For our bolt hole count, I'll let that remain at four. For our radius for our bolt hole, I'll change that to five. For our flange width, I'll choose 18 mm. And for our thickness, I'll choose 10 mm. I'll then drop in our fluid radius here. And after this is done loading, I can see our flanges have now updated to the top of our body. I'm going to union these flanges together, and I'm going to name these to our F1 flanges. > > F1 flanges. I'll then copy and paste this block, and we can then repeat that same process with our fluid two volumes and fluid two radius. So I'll drop in our end plane and our start plane two. And for our fluid radius, I'm then going to take our fluid two vertical diameter, since that's what's on the top to use as our fluid radius. And then I'll choose something like a bolt hole count of seven and a flange width of 25, just so we can see a difference in our actual flange creation here. Once these update rendering, I'm going to change our variable name to F2 flanges. And now I can see everything properly located on the outside of our part. The final step for this entire workflow, then, is just going to be doing a Boolean union on our flanges and our final pipe. And then we have a completely final design, ready to actually be tested. > > [0:00](https://www.youtube.com/watch?v=MlDHMw0SUvc) Introduction to Double-Pipe Heat Exchanger > [1:25](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=85s) Setting Up Scalar and Integer Inputs > [6:25](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=385s) Creating Constant Variables > [8:50](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=530s) Constructing Fluid 1 Centerlines > [11:53](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=713s) Creating Left and Right Arcs > [23:40](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=1420s) Building Fluid 1 Pipe > [30:04](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=1804s) Constructing Fluid 2 Centerline > [31:45](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=1905s) Creating Vertical Connections > [37:04](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=2224s) Assembling Fluid 2 Volumetric Region > [49:18](https://www.youtube.com/watch?v=MlDHMw0SUvc\&t=2958s) Building Flanges Download the starter file below to follow along. * 0:00 Intro & Custom Blocks * 3:10 Input Variables * 8:50 Fluid 1 Centerlines * 23:38 Fluid 1 Volumes * 30:02 Fluid 2 Centerlines * 36:18 Fluid 2 Calculations * 42:05 Fluid 2 Volumes * 49:20 Flanges **Downloadable Files:** [Starter — Modeling a Cylinder Head with Curves and Profiles](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Modeling/Starter%20--%20Model%20a%20Double%20Pipe%20HEX.ntop) [Complete — Model a Double Pipe HEX](https://storage.googleapis.com/files-learn/Courses/Intro%20to%20Modeling/Complete%20--%20Model%20a%20Double%20Pipe%20HEX.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop 5.2* 3.2 # Introduction to Modeling Source: https://docs.ntop.com/lessons/intro-to-modeling/introduction-to-modeling Welcome to the “Intro to Modeling” course! In this course, you'll discover how nTop's approach to modeling enables engineers and designers to create complex geometries that would be difficult or impossible to achieve with traditional CAD software. More importantly, you'll learn how to harness the power of implicit modeling, field-driven design, and the latest curve and profile capabilities to solve real-world engineering challenges. The course is structured around follow-along tutorials that provide practical experience with nTop's modeling capabilities. Each lesson builds upon the previous one, gradually introducing more advanced concepts while reinforcing fundamental principles. You'll work with real-world examples and learn practical tips that will help you make the most of nTop's evolving feature set. # Overview Source: https://docs.ntop.com/lessons/intro-to-modeling/overview This course follows the nTop Foundations course to introduce users to the fundamental modeling tools and operations that engineers can use to create complex geometries by harnessing the power of implicit modeling, field-driven design, and the curve and profile capabilities. The course contains several hands-on tutorials to help you to learn by doing and get familiar with nTop's modeling capabilities. ### Basics > **[Introduction](/lessons/intro-to-modeling/introduction-to-modeling)** > **[Basic Modeling Operations](/lessons/intro-to-modeling/basic-modeling-operations)** > **[Basic Import Operations](/lessons/intro-to-modeling/basic-import-operations)** > **[Basic Curves and Profiles Operations](/lessons/intro-to-modeling/basic-curves-and-profiles-operations)** ### Tutorials > **[Follow Along: Model a Cylinder Head](/lessons/intro-to-modeling/follow-along-model-a-cylinder-head)** > **[Follow Along: Model a Double Pipe HEX](/lessons/intro-to-modeling/follow-along-model-a-double-pipe-hex)** # Answer to nTop Automate Test Problem Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/answer-to-ntop-automate-test-problem [https://www.youtube.com/embed/UQTTgEV3-XE](https://www.youtube.com/embed/UQTTgEV3-XE) > **Transcript** > > In this lesson, we will review the answer to the optional nTop CL test problem: to set up this nTop notebook for nTop CL and then run nTop CL to evaluate the mass properties of this LED bracket for a combination of different design variations. This completed file with descriptions, JSON files, Python script used, and the data generated will also be available for download below. > > In this file, we need to set up the inputs according to what will need to be changed during the nTop CL executions. These three things are, in order: lattice type, cell size, and thickness. These can be made into a variable from the starter file. Under the lattice part of the design, in the **Rectangular Volume Lattice** block, under unit cell, this is where you can find the lattice type. You can right-click and make that into a variable and put that in the input section. > > For the unit cell size, for it to all be equal, you will have to use a **Vector** block and put in the cell size variable for all XYZ components. This cell size variable also needs to be inputted into the input section. The beam thickness is also under this **Rectangular Volume Lattice** block as one of the parameters. This will also need to be a variable in the input section. Since we want the mass properties of this part, we will have to use the block called **Mass Properties From Body** and use the final part implicit body as its input body. The density of the material that's given is this value: 0.047, and you can use the relative error of 0.01. > > Additionally, we want to output a 3MF file, and this is a mesh-type file. So, you would first need to convert the implicit body of the final part into a mesh using this block and then create a path for the **Export Mesh** block by concatenating together based on the format of the naming that we want to choose for this. So, this is a **Concatenate Text** block where we input a list with four items. The first one being the word “bracket,” the second is the lattice type name, which is a property that you can get from the properties of this lattice type variable. This chip right here was used for this part, and it will output the name of the lattice instead of just the index. > > The next item in the list will have to be the cell size, which is the value that has to be converted to text, as well as the thickness. This also has to be converted into text. And because we are concatenating together four things in the list and using the same delimiter, we're going to get this text string with “bracket” and, since the current input is “Diamond,” we get that as our lattice type name, and then “-1” for the current cell size, “-0.2” for the current beam thickness. And then using the **Concatenate Text** block again, we are adding the 3MF extension file in the second part of the text, and the first part of the text is what was earlier created. Then using the dot as the delimiter, we will be able to get this file extension added to the name so that the file created will be a 3MF file. This exported mesh will go into the folder where this notebook is saved with each execution. > > So, now that we have the completed workflow for what we want to do, as well as the three inputs and the mass property output ready, we can start in Windows Powershell and run an nTop CL command for generating the template using this file. You first need to make sure that you are in the right folder, in the correct directory. I am already in this directory where I have this file saved, but you would just need to open up the folder where you have this file and then hold shift and right-click and choose “Open Powershell here” to be able to get there without having to access directory in command line. So, we'll press enter, and opening up that folder, we see that there's this file already generated of the 3MF file that was created just from the notebook itself, and the input template and the output template have just been added. > > Let's open up the input template. We have what we have inputted in the current notebook. So, lattice type of five for the diamond. This is index five on the list. We have the cell size, which is 10 mm, and the thickness, which is 0.2 mm. Let's also open up the output template and compare this mass with what we have in these properties. This mass is outputted in kilograms. We also get the center of gravity, inertia, and volume in here. So, what I can now do to test our file, or to test on the first nTop CL run, is change the input. I'm going to change it to type zero, simple cubic, and keep this to 10, keep this to 0.2. Save this in the input template, go back to Powershell, and run nTop CL with the verbose setting 2 to see the runtime information, and the input JSON file “input\_template.json,” output file I will name “output.json,” and the name of our nTop file. > > Let's run this. This will execute without the GUI, and we'll be able to see what happens when we look into the folder. And it's created the 3MF file. And if we look at the output file that was just generated, we have a different mass. It is as if we were to run this by changing this lattice type in the GUI and get the mass information in this block, as well as the exported file in 3MF format. So, it worked. I will close these two files. > > And since everything is running as expected, we can start scaling this up with a Python script. We have this Python script, which is really similar to what was used in the follow-along lattice example. We have the modules for the folder, data folder, and the time. And everything is similar except for the design variations now include three design variables, which are lattice type of diamond, octet, truncated octra, like described in the problem. And these are corresponding to the index of 5, 7, and 9. The cell sizes are 10, 15, and 20, and the thicknesses are 0.2 and 0.5. So, the count is also added here, starting at one, so that we can keep count of each execution. And all the data is like that follow-along example, stored in a data folder, and the CSV file is also created with the header being the count of the execution, the lattice type, the cell size, thickness, and then the mass. > > We have here three nested for loops for I, J, K representing each of the design variables, and accessing the input values in each of the arrays in this input JSON, and running nTop CL execution as always, and outputting this CSV summary table that has the data and all the runs combined into one file. You'll have to make sure that the script is in the same folder and all of the file paths are changed to the correct one, and the name of your notebook is correct. And then we'll run this code. It will execute for a total of 18 times, which is the number of combinations that you get with all of these variable inputs. We'll let it run. > > Now that it's finished running, we can open up our folder and see all of the files that came out as the result. So, we have these 3MF files exported and labeled with the lattice type and cell size and thickness, and we can look at what each of them looks like. We can go into the output file and see the summary of these runs. We've had 18 executions in total, and these are all the different combinations. 0.97 kg is the smallest mass we got out of all of these combinations, and that's for the lattice type 5, which is the diamond cell size of 20 mm, and 0.2 mm beam thickness. If we go into the data folder, we also will have the input and output JSON files containing the properties that are exported with the mass properties of our part. This video reviews the answer to the nTop Automate test problem to set up an nTop Notebook and run nTop Automate on a latticed part to evaluate its mass properties for a combination of different design variations. The completed files with descriptions, JSON files, Python script used, and data generated are available for download below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [330\_13\_2 Complete — nTopCL Optional Problem.zip](https://files.learn.ntop.com/Courses/330%20nTop%20Automate/Data%20Files/330_13_2%20Complete%20--%20nTopCL%20Optional%20Problem.zip) # Before We Begin: nTop Automate Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/before-we-begin-ntop-automate [https://www.youtube.com/embed/KKCKAsMsdVA](https://www.youtube.com/embed/KKCKAsMsdVA) In this course, we will: * Learn **what nTop Automate is**, what level of automation you can achieve, and how it can add value to your design and analysis projects * Walk through the entire process from **setting up** your nTop workflow for nTop Automate to **executing basic commands** * Provide recommendations on **best practices** and tips that will be helpful, especially as you are starting out For up-to-date documentation on nTop Automate, see *Documentation → Using nTop Automate*. # Best Practices and Troubleshooting Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/best-practices-and-troubleshooting Follow the steps below to check if your workflow is running correctly before scaling up to automate or integrate for your purposes. ## 1. Check your computer for nTop Automate You can do this by typing **ntopcl** in the command line. If it prints the command nTopCL command menu, then you are good to go. Otherwise, see our troubleshooting tip below. ## 2. Prepare nTop Notebook for nTop Automate Follow our recommendations in the “Preparing Your Notebook” lesson. ## 3. Generate JSON templates **> ntopcl** -t notebook.ntop ## 4. Modify input\_template.json and check if it runs correctly with the verbose setting **> ntopcl** -v2 -j input\_template.json -o output.json notebook.ntop ## 5. Check the output results and troubleshoot as needed Open up your output.json file and compare the values with the values of the output variable in the Notebook on the GUI with the same inputs. See our troubleshooting tips below on *Input Issue*. ## Troubleshooting Keep in mind that example scripts may not run depending on your environment. Here are some troubleshooting tips to help you work through some of the issues you could run into. ## License Issue If you are not logged in, not using a valid local license, and cannot make a new connection to our cloud license server, you may have trouble running nTop Automate. In such cases, try using this expression to test if you are successfully able to use nTop Automate: **> ntopcl** -v2 -u [id@email.com](mailto:id@email.com) -w yourpassword Check if the return messages are printed as follows: ``` 13:35:56 [I]: Login successful 13:36:00 [E]: No notebook provided. 13:36:09 [I]: nTop exited with errors. 13:36:10 [I]: Logout successful ``` ## Error Messages If you find that the error messages don't help you figure out what the problem is, turn on -v2 verbose setting by including it in your command: **> ntopcl**-v2 -j input.json -o output.json notebook.ntop This gives you the timing of the entire run in the sequence of how the CPU takes in and executes your Notebook and allows you to see when and around which blocks you are getting an error so you can go back to your Notebook and find the source of the problem. ## Input Issue If you suspect that your inputs are not passing through, try running the command with the GUI to see if the input variables load without an error. Alternatively, you can use **-s** to save the **ntopcl** results with cache in the Notebook and the file in the nTop GUI. To check in the GUI: **> ntop** -v2 -j input.json -o output.json notebook.ntop To save and cache: **> ntopcl** -v2 -s -j input.json -o output.json notebook.ntop # Download: Completed Box and Lattice nTop Automate Files Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/download-completed-box-and-lattice-ntop-automate-files Now that you have completed the follow along, feel free to download the completed files for the examples below. **Example File:** [330\_10\_1 BoxExample.zip](https://files.learn.ntop.com/Courses/330%20nTop%20Automate/Data%20Files/330_10_1%20BoxExample.zip) [330\_10\_2 LatticeExample.zip](https://files.learn.ntop.com/Courses/330%20nTop%20Automate/Data%20Files/330_10_2%20LatticeExample.zip) # Follow Along: Box and Lattice nTop Automate Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/follow-along-box-and-lattice-ntop-automate [https://www.youtube.com/embed/3NRsNaBw\_78](https://www.youtube.com/embed/3NRsNaBw_78) > **Transcript** > > In this lesson, we will go through how we can set up and run an nTop C using two simple examples that will each demonstrate the two methods of either putting your inputs directly in the command line or by using an input JSON file to do the same thing. We will start with this first simple box example, which will show that first method, and so let's create our box. > > I'm going to leave everything as is, and what we want to be able to do with this workflow is to have inputs and outputs here. Similarly to how we create our custom blocks, we want there to be three sections in our notebook: so inputs, the workflow itself, and the output. So we want to be able to change the length, width, and height of this box. So I will make each of these a variable by right-clicking on them and choosing Make Variable, and then putting these into the input section. We can also alternatively right-click and choose **Make Model Input**. > > And then this box itself, I'll also make into a variable. We want to export the information about its surface area, and so I'm going to click on this white line, press S to search for **Surface Area from Body**, and then bringing this implicit box into the body input, we can right away see the calculation based on these current inputs that we have. So I'll call this variable surface area. We can just drag and drop it or type it in to the output to choose it as our output. > > So now we do have that very short workflow and our three inputs and one output. What we can additionally do, if we want to go beyond this just one output, we can leave it as is and run nTop like this, or we can still, if we want a little bit more information out of this workflow, we want to export an STL file as well as another text file that prints the dimensions of the box and the corresponding surface area. We can do that using Export blocks. So I'll type S and search for Export. The first one I will do is **Export Mesh**, and then the second one is **Export Text** for our text file. > > And once we fill these in, each of them, we're going to generate those respective files into the path that we choose, and based on what inputs we give them here. So let's start with that mesh. To be able to output this mesh, we have to first convert it into a mesh from implicit body. So double click into this input and choose **Mesh from Implicit Body** and bring in our box. And let's collapse these so that we have a better view of the rest of the blocks. The tolerance, I will give 1 mm, and that should be fine. The path, I'll leave open for now because they'll be the same thing that we do for both of these two Export blocks. > > To export the text, we need to first think about what text we want to print, and what I want to have is the information about the dimensions. So in this case, it'll be 10 by 10 by 10, and then print the surface area value, which is this 598.22 mm squared. To do that, we need to convert scalar to text, and there's this block **Text from Scalar**. And we can bring in each value and give it a reference. Say if you want it to be in millimeters, you can put in 1 millimeter. So I'll bring in the length as my first value, and then 1 mm as reference, and then precision 3 is fine. And we can see here that it says 10, which is that same value as we see above for this input. I'll do the same for all other values. So duplicate, and instead of length, we'll do width. And then again, duplicating this for height. And we'll also want that same thing for surface area. So choose surface area. I'll actually make the reference 1 to the power 6 and e to the 6, and make this position eight digits. > > Now that we have the text form of these scalar values, we can concatenate them together to form our text that we want to print. So to do that, I'll grab the **Concatenate Text** block and bring in our length as the first item, our width as the second one, and the delimiter we can choose. In this case, I'll use X for 10×10. And then doing the same thing again, nesting this first concatenate text into another concatenate block, we can add the third item, which is the height, and then giving it that same X in the middle. So 10 by 10 x 10 is now what we have, which corresponds to our length \* width \* height. I'm going to make this a variable called length \* width \* height, and let's collapse this. > > Now we have these two information points: length with height, so the dimensions, and the surface area value. We can do that same concatenate text. The first item being this length with height, the second item, the scalar value converted into text for the surface area. But instead of that X, I'm going to this time add a few spaces and type in “surface area” and then maybe two more spaces and then click outside of that. > > If we go into the properties, we can see what this will look like. So that's what I want to print out, and I'm satisfied with that. So I'll make this into a variable called “text” and I'll put this into our **Text Export** block. > > Now we have the content for both of our **Mesh Export** and **Text Export** blocks. The only thing we need to do is generate a path, and to do this, we also need to give each of them the file extension type. So let's start with this first one, and we'll use that same **Concatenate Text** block in order to achieve this. It's grabbing that same block. > > This time, I'm going to go into my folder, which is this path right here, and I'll paste it over. This is where I want the files to be exported out to, and I also want to give this exported mesh file a name which is called “box” and then “STL” file extension. And then the delimiter will be the forward or backward slash, it doesn't matter. And this will be our output file path for the STL. > > I'm going to reuse the same path of the folder for the **Export Text** block as well. So I'll put “output directory” as its variable name and then make this the same path right here. Now because we didn't put in the file path, it's erroring, so we need to make sure we remember to do that. So let's X out of this and then do **Concatenate Text** here so that we can put in that directory and then name this file “surface area.txt” and the slash, and also just make this a variable so we can easily track this output file path text. > > Now we have these two export blocks with the designated file paths and extension type. And so I'm going to move this up and put this output directory variable into the input so that if we do want to change the path of this, everything that is included will also be in here. And now we see that there's an incomplete block. We forgot to put in the path for this one. But if we were to just run, try to run nTop like this, it's not going to work because we need to make sure that everything within the workflow that we're going to use for nTop CL is computed. So let's go ahead and put that in, and now it's computed. > > If we open up our folder where we designated the file, that's just the first run of that notebook. We see that it's printing what we want it to, and it's creating the STL file. And so we can start to run this on the command line. I'll open up Windows PowerShell, and we will have to go into the right folder structure where we have the file save. And if you have the folder open, what you can do is hold Shift and right-click and then choose “Open PowerShell window here,” and that will be already in the right correct directory. And so you don't have to go in and define your directory. But I will show how you can do that by going in using “CD” and then typing out your folder path. > > So I have this in nTop Basics and in the Box example folder. And we can check inside that folder by typing “dir” and pressing Enter. And so I have that nTop file and the STL and text that was generated just from running the nTop notebook from the GUI. And now if I want to go back into the folder structure, I can do “CD ..” and let's check what we have here. I have previously created this “box with a space example” just to show that if you are creating your folders and file names, it's good to not have any spaces in them because if we do want to go into those files…Now we have these two information points: length with height, so the dimensions, and the surface area value. We can do that same concatenate text. The first item being this length with height, the second item, the scalar value converted into text for the surface area. But instead of that X, I'm going to this time add a few spaces and type in “surface area” and then maybe two more spaces and then click outside of that. > > If we go into the properties, we can see what this will look like. So that's what I want to print out, and I'm satisfied with that. So I'll make this into a variable called “text” and I'll put this into our **Text Export** block. > > Now we have the content for both of our **Mesh Export** and **Text Export** blocks. The only thing we need to do is generate a path, and to do this, we also need to give each of them the file extension type. So let's start with this first one, and we'll use that same **Concatenate Text** block in order to achieve this. It's grabbing that same block. > > This time, I'm going to go into my folder, which is this path right here, and I'll paste it over. This is where I want the files to be exported out to, and I also want to give this exported mesh file a name which is called “box” and then “STL” file extension. And then the delimiter will be the forward or backward slash, it doesn't matter. And this will be our output file path for the STL. > > I'm going to reuse the same path of the folder for the **Export Text** block as well. So I'll put “output directory” as its variable name and then make this the same path right here. Now because we didn't put in the file path, it's erroring, so we need to make sure we remember to do that. So let's X out of this and then do **Concatenate Text** here so that we can put in that directory and then name this file “surface area.txt” and the slash, and also just make this a variable so we can easily track this output file path text. > > Now we have these two export blocks with the designated file paths and extension type. And so I'm going to move this up and put this output directory variable into the input so that if we do want to change the path of this, everything that is included will also be in here. And now we see that there's an incomplete block. We forgot to put in the path for this one. But if we were to just run, try to run nTop like this, it's not going to work because we need to make sure that everything within the workflow that we're going to use for nTop CL is computed. So let's go ahead and put that in, and now it's computed. > > If we open up our folder where we designated the file, that's just the first run of that notebook. We see that it's printing what we want it to, and it's creating the STL file. And so we can start to run this on the command line. I'll open up Windows PowerShell, and we will have to go into the right folder structure where we have the file save. And if you have the folder open, what you can do is hold Shift and right-click and then choose “Open PowerShell window here,” and that will be already in the right correct directory. And so you don't have to go in and define your directory. But I will show how you can do that by going in using “CD” and then typing out your folder path. > > So I have this in nTop Basics and in the Box example folder. And we can check inside that folder by typing “dir” and pressing Enter. And so I have that nTop file and the STL and text that was generated just from running the nTop notebook from the GUI. And now if I want to go back into the folder structure, I can do “CD ..” and let's check what we have here. I have previously created this “box with a space example” just to show that if you are creating your folders and file names, it's good to not have any spaces in them because if we do want to go into those files, let's type “box” and then tab. We'll need to add quotation marks around any kind of names or folders that have spaces in them, so this is just something to keep in mind. So, I'm tapping again just to get back to the Box example. > > Now we can start putting in our command for nTop. I can put in “nTop” and it will generate the menu of options of arguments that you can use to run nTop CL. For the first command, I'm going to just type “nTop” so that it runs and opens up a GUI so that we can more easily see what's happening. > > We'll need to input the variables that we have declared here as inputs, and the first one is the output directory. It has to be in the order of what shows up in the notebook, so I'm going to type in where I want this to be, which is in my nTop CL Basics folder. This is really convenient if you have something that you want to say, make another folder in the structure and then put the new files in there. You can do that with this input directory. For this, I'm going to do 2x2x2 and also save, then type the name of the nTop file and then press enter and it'll open up that GUI. > > So we do have an error, and it is related to the units. This is because we only typed into the command line “222” as just numbers with no units. If the units were embedded into this input, then you wouldn't have this problem. You can just put in “222” and then the notebook will recognize that it's that embedded unit, millimeters. But since we don't have this in our notebook, we can go back up. I just typed “up” and I'm going to go in and add millimeters into my input variables and then run this whole command again. > > It looks like this is working fine with no issues. The inputs are in there as 222, and then if we open up that folder, our text is now also saying 2x2x2 with that surface area value. > > Now I will run the nTop CL without the GUI this time and change that directory to our other folder that has the space in between. And let's do 7 mm by 2 m and save box on top and let's run that. So it's not going to open up nTop. > > I made the mistake in that folder structure name. Instead of putting a space, I put in an underscore, so it errored. But after correcting this, we can see that the output files are generated in this box example with the space in between. And the file, since we typed in the -s, if we open that up, we'll see that these numbers are saved in there as well. > > So that's the first method. For the second method, which uses an input Json file to pass through to nTop CL, we will work with this lattice example. We'll create a lattice that will be able to be changed based on the input lattice type and we'll just simply output the lattice porosity value, which we'll calculate within the workflow. > > So let's start by grabbing the **Rectangular Volume Lattice** block. We'll keep the volume relatively simple using a box, and the unit cell will be a unit a graph unit cell. And I'll just choose simple cubic for now. And we'll make this unit cell type into our variable called lattice type. We'll put this into our input section. I'll leave the unit c size to five and the thickness is, we'll use, 0.5 mm. So we've created just a very simple structure and I'll make this lattice variable called lattice. > > And we'll calculate the porosity value by first getting the mass of each body. So I'll get the **MH Properties from Body** block and duplicate it. The first one will do for the box. We'll also make this into a variable so that we can use it again here. And the second mass we want is for the lattice and the density. I'll keep to one for both because that's not important for the calculation. And then to get the porosity value, I will divide the volume of the lattice, which we can get from that properties tab, and divide that by the volume of the box. And then we'll subtract with this value. One minus this value will give us the porosity. And we'll make this a variable and then put it into our output section. > > So right now, we have a full workflow that gives us the porosity of the lattice according to the input with the lattice type. This means that since we have a full workflow with all three parts of sections filled, we can save this and start our nTop CL. I can go into the folder where I am working out of and hold shift, right click and open Window PowerShell from there. And the first command I'll do is to just generate our nTop input and output JSON template with the command -t and the name of the notebook. And that will run. We'll wait to see our templates in this folder. > > If we open up this input template, we can see that it has the variable that we have put in the input section. If they're more than one, then there will be an array of inputs in this same structure. And the name is lattice type. The type of the input is enum. If we try to do this type of input for the previous method, we won't be able to do that because it can only support either string or integer type input values. But here we can do that. And we have the value here which we can change. So if I want to modify this to five, which is the index of the diamond type, and then save this file into that input template and let's run nTop CL with velocity level two to see the runtime information. And I'm going to use the -dj for input and then use the input template as our input file and then create an output file called output.json and then type in our lattice nTop nTop file. Let's see what this does. > > So it's finished running, and if we look in the folder, we also see the output file here. This is the value if we change the input to Diamond, and let's compare this 95076, which is the rounded up eight. > > If you also want to have a list of values that you want it to run through, we can change this input template to values and make it a list of say, zero, one, two, three, four, for the first five items in this list of lattice types. And I'll save this as a new input file. > > \[Music] > > And if we run this again with a different input file, let's put output one. This will run five times, each with one of the inputs that we've put in. So you can see here, already with the runtime information, we're getting a lot more information than the previous run. > > And it's finished running. So if we open up that output one file, we are getting an array of values that correspond to our zero, one, two, three, and four input values for those lattice type indices. That's it for the nTop CL part. You can scale up and do anything you want with this. Integrate with other software using Python codes or other languages, or any kind of MDO software. > > We have an example template Python file that you can use to get started and write your own code for what you want to do with it. What it does is imports necessary modules and goes into the current directory and the execution file for nTop. If you have it in a different path, you will need to change this. Otherwise, you can leave it as is and then just change this nTop file path to the file name that you're working with, and save this script into that same folder. > > And you're going to also need to copy and paste content from the input template that we did together earlier into here as well. Put in a for loop, and you'll be able to run this through the nTop arguments that calls for nTop, creates input JSON file that will be added into that nTop call, and then returns an output file and prints the results. > > So I have a code for this example that has been modified from this template. So in addition, we're getting time as well as a folder structure where we'll put all the data of each execution into. With each execution of nTop, with this, we have the file name in here, and I've already copied and pasted our input template content into this input JSON variable and added the design variations of **Lattice Type** zero all the way to index four. > > It also creates a CSV file with a summary. So at the heading of the file, we'll have **Lattice Type** for this design variation, and we'll have porosity. And this for loop runs nTop CL for each of the inputs that we're giving it and creating that input and output files as well as an nTop notebook with those inputs into that designated data folder. > > And we'll also, with each run, get printed information on the screen of the **Lattice Type** and the porosity, as well as at the end, the total runtime. So let's go ahead and run this code, and it's starting the first iteration, already seeing the first results with this **Lattice Type** zero, simple cubic, and this is the value of the corresponding porosity. > > We have all the executions done, and let's open up the folder. We have the output summary file in CSV format, so we get all of this information in one file as well as the data in each folder with input and output JSON files, as well as the saved notebook with the cache input variables for each of the runs. This video walks through two examples from scratch, each using one of the two methods of passing inputs through in nTop Automate. Below are time stamps of when each is covered: 00:22 Method 1 – directly inputting into the command line demonstrated with the Box example 18:20 Method 2 – using a JSON file demonstrated with the Lattice example 25:53 A simple example of how you can use a Python script to scale up The starter template for the script mentioned in the video is available for download below. **Example File:** [330\_9\_1 Script\_JSON.py](https://files.learn.ntop.com/Courses/330%20nTop%20Automate/Data%20Files/330_9_1%20Script_JSON.py) # Knowledge Check: nTop Automate Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/knowledge-check-ntop-automate # Optional: nTop Automate Problem Statement Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/optional-ntop-automate-problem-statement Now that you have learned how to set up and run nTop Automate, feel free to try this optional problem to apply your knowledge on a more complex scenario. The answer will be reviewed in the next lesson. **Problem Statement:** Evaluate this latticed bracket's *mass properties* given the material density of 0.0047 mm-3g for 18 combinations of design variations with the following design inputs: * 3 Lattice Types (Diamond, Octet, Truncated octahedron) * 3 Cell Sizes (10mm, 15mm, 20mm) * 2 Beam Thicknesses (0.2mm, 0.5mm) Export *3mf mesh files* with the names formatted *'Bracket-Lattice Type-Cell Size-BeamThickness.3mf'* Download the starter file below and set up the Notebook to prepare for nTop Automate. After setting up the Notebook, you can save the nTop file as *'Bracket'* for better ease of use with nTop Automate. Execute a test run using the recommended best practices, then scale up with a Python script. You may use the code from the Lattice Example in the previous Follow Along lesson and modify it for this problem. ![](https://files.learn.ntop.com/lessons/optional-ntop-automate-problem-statement/330_12_1-testproblem.jpg) **Estimated Time to Complete:** 30 minutes **Example File:** [330\_12\_2 Starter — nTopCL Test Problem.ntop](https://files.learn.ntop.com/Courses/330%20nTop%20Automate/nTop%20Files/330_12_2%20Starter%20--%20nTopCL%20Test%20Problem.ntop) *This file was last updated in nTop 4.24.3* # Overview Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/overview ![Python script driving nTop via nTopCL with topology optimization results](https://storage.googleapis.com/files-learn/lessons/intro-to-ntop-automate/automate-doe-overview.png) This course walks you through the basics of nTop's Command Line interface (nTop Automate). You will learn how to set up and execute your reusable workflows to automate repetitive work and headlessly generate multiple design variations. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/before-we-begin-custom-blocks) **What will be covered:** * Understanding nTop Automate and how it can be applied to achieve automation and time savings * Preparing the nTop Notebook, setting up, and executing commands using different scripting languages * Our recommended best practices, as well as some tips and tricks to help kickstart your nTop Automate execution ### Introduction > **[Before We Begin](/lessons/intro-to-ntop-automate/before-we-begin-ntop-automate)** ### nTop Command Line (nTop Automate) > **[What is nTop Automate?](/lessons/intro-to-ntop-automate/what-is-ntop-automate)** > **[The Process](/lessons/intro-to-ntop-automate/the-process)** > **[What You Will Need](/lessons/intro-to-ntop-automate/what-you-will-need)** ### Setting Up And Running nTop Automate > **[Preparing Your Notebook](/lessons/intro-to-ntop-automate/preparing-your-notebook)** > **[Running a Command](/lessons/intro-to-ntop-automate/running-a-command)** > **[Best Practices and Troubleshooting](/lessons/intro-to-ntop-automate/best-practices-and-troubleshooting)** > **[Scaling Up Using Python Scripts](/lessons/intro-to-ntop-automate/scaling-up-using-python-scripts)** > **[Follow Along: Box and Lattice nTop Automate](/lessons/intro-to-ntop-automate/follow-along-box-and-lattice-ntop-automate)** > **[Download: Completed Box and Lattice nTop Automate Files](/lessons/intro-to-ntop-automate/download-completed-box-and-lattice-ntop-automate-files)** > **[Knowledge Check: nTop Automate](/lessons/intro-to-ntop-automate/knowledge-check-ntop-automate)** ### Optional nTop Automate Test Problem > **[Optional: nTop Automate Problem Statement](/lessons/intro-to-ntop-automate/optional-ntop-automate-problem-statement)** > **[Answer to nTop Automate Test Problem](/lessons/intro-to-ntop-automate/answer-to-ntop-automate-test-problem)** ### What's Next > **[Resources](/lessons/intro-to-ntop-automate/resources)** # Preparing Your Notebook Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/preparing-your-notebook To be able to communicate with your Notebook from outside of nTop, the Notebook must have input(s) and output(s). This works the same way as when creating a Custom Block. If you are unfamiliar with this concept, feel free to revisit the Custom Blocks section of our [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/) course for more details on the topic. > [!NOTE] > > **Note**: When naming your Notebook files and folders in your working directory, it is recommended to not add any spaces, otherwise you will need to add “quotation marks” around them in the command line. ## Inputs Section Make any design input that you want to be able to change with each execution of nTop Automate into variables and move them into the Inputs section at the top of Notebook. ![](https://files.learn.ntop.com/lessons/preparing-your-notebook/330_5_1-inputs-section.gif) You can also choose “Make Notebook Input” from the right-click menu of the chosen variable to do this without having to drag and drop. ![](https://files.learn.ntop.com/lessons/preparing-your-notebook/330_5_2-Make-Notebook-Input.png) ## Output Variable and Export Files As this follows the Custom Block mechanism, only *one* variable can be declared as output. You can do this by either dragging the desired variable or typing the variable name into the Output section at the bottom of the Notebook. ![](https://files.learn.ntop.com/lessons/preparing-your-notebook/330_5_3-output.gif) Export blocks will produce and place files into the specified directory path with each execution, so you can make use of them if you want to generate files in addition to the chosen output. > [!TIP] > > **Tip:** > You can use the **Export Text** and **Text from Scalar** blocks to print the output value and/or other values as a .txt file that will export with each nTop Automate execution. > With the help of one or multiple **Concatenate Text** blocks, you can use property chips to add important input values to your exported file name. Check out this [Help Center](https://support.ntopology.com/hc/en-us/articles/1500009183541-How-to-combine-scalar-lists-together-as-text) article to learn how to combine scalar lists together as text. > You can use the same method of concatenating texts together to form the desired output file path based on each level of your folder structure made into separate input variables. ![](https://files.learn.ntop.com/lessons/preparing-your-notebook/330_5_4-tips-1.png) ## Workflow Make sure that your workflow is able to run properly on a test part. Every block in the workflow needs to be computed, meaning there should be no blue question mark icons or error messages. ![](https://files.learn.ntop.com/lessons/preparing-your-notebook/330_5_5-workflow.jpg) # Resources Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/resources ### **Additional Resources on nTop Automate:** 1. **nTop Documentation:** Installed on your local drive with the software, under section “Using nTop Automate” 2. **Help Center:** [nTop Automate Support Articles](https://support.ntopology.com/hc/en-us/sections/360010614574-nTopCL) 3. **Article:** [nTop Automate in Python scripts](https://support.ntopology.com/hc/en-us/articles/360052703693-Running-nTop-Command-Line-in-Python-scripts) 4. **Article:** [nTop Automate in Matlab scripts](https://support.ntopology.com/hc/en-us/articles/360052729833-Running-nTop-Command-Line-in-Matlab-scripts) 5. **Article:** [How to use nTopCL in ModeFrontier DOE workflows](https://support.ntopology.com/hc/en-us/articles/360052078394-Using-the-nTopCL-in-ModeFrontier-DOE-workflows) 6. **Webinar:** [Develop, Automate, & Connect with ModeFRONTIER, Python, & MATLAB](https://ntopology.com/webinars/webinar/ntopcl-basics-develop-automate-connect-with-modefrontier-python-matlab/) (1 hr 3 min) 7. **Webinar:** [Advanced Design Automation with modeFRONTIER & nTop](https://ntopology.com/webinars/webinar/advanced-design-automation-with-modefrontier-ntopology/) (1hr 7min) 8. **Webinar:** [Lattice Design & Structural Optimization with nTop & 3DEXPERIENCE](https://ntopology.com/webinars/webinar/lattice-design-structural-optimization-with-ntop-vias3d/) (1hr 1min) 9. **nTop Live:**[Design Automation for Multidisciplinary Optimization & DoE](https://ntopology.com/videos/video/ntop-live-design-automation-for-multidisciplinary-optimization-doe/) (12min) 10. **nTop Live:** [Optimize Latice Structures for Lightweighting with Design Automation](https://ntopology.com/videos/video/ntop-live-optimize-lattice-structures-for-lightweighting-with-design-automation/) (15min) # Running a Command Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/running-a-command There are two ways of passing inputs for nTop Automate execution: directly in the command line or using a JSON file. While we recommend the latter for most cases, the first method can still be used for simple cases and helps to understand the basic elements of stringing together a command. To see the menu of possible command arguments, simply type **ntopcl** on the command line from any folder. ## Method 1: Input Directly in the Command Line The first method is to enter the input variables directly into the command line and is therefore limited to only *scalar* and *text* input types. This can be sufficient if you are working with a very simple Notebook. Once in the correct directory, you can use the following command to execute an nTop Notebook in that folder with desired input variables: ![](https://files.learn.ntop.com/lessons/running-a-command/330_6_1-method1.png) When entering the input with the **-i** flag, you may need to add units if they are not already embedded into the Notebook's input variables. The **-i** flag needs to be provided for each Notebook input in the order in which they appear in the Notebook. ## Method 2: Input From a JSON File (Recommended) The recommended method for more complex use is to work with a JSON file containing input values, which supports boolean, integer, scalar, text, file path, vector, point, and enum input types. You can find more information on each specific type under *Documentation → Using nTopCL → Input*. You can write all your input variables in a single JSON file. The template for this can be automatically generated in the command line using the **-t** flag with the **ntopcl** call, which will place one input and one output JSON template file in your directory. ![](https://files.learn.ntop.com/lessons/running-a-command/330_6_2-method2.png) The files will contain the current input and output values in your Notebook. You can keep modifying the values in the input template and run nTopCL each time with the JSON file as input, or keep a separate JSON file for each run. ![](https://files.learn.ntop.com/lessons/running-a-command/330_6_3-method2.1.png) With the example above, only one input value of 0 appears on the template based on what is currently in the input of the Notebook, Simple cubic, the first item in the drop-down enum type list with a starting index of 0. If you, for instance, want to run nTop Automate with multiple LatticeType values, change “value” to “values” and 0 to a list of index values for each desired lattice type. Using the list \[0, 2, 5, 6] in this case would mean having Simple cubic, Face centered cubic, Diamond, and Fluorite as inputs. After changing the input values in your template file and saving it, you can run nTopCL using this command: ![](https://files.learn.ntop.com/lessons/running-a-command/330_6_4-method2.2.png) The flags for input and output JSON files are **-j** and **-o** respectively. The input file should match the one you saved and you can name the output file that will be created and placed in the directory in this command. You also have the option to add the **-p** flag to your command. The output file generated will then additionally include data about the properties of the output variable. > [!TIP] > > **Tip:** > Shift + Right-click in your working directory folder and choose “Open Powershell window here” to access the command line without changing the directory. > Running a command with **ntop** instead of **ntopcl** opens up the GUI so that you can see the Notebook with the given inputs. Use the first to check if your workflow works properly and as intended. > Adding **-s** will save the Notebook and overwrite the existing one. > The default verbosity level, which defines how much information you get about the execution as printed messages on the command line screen, is 1 (shows errors and warnings). Add **-v2** to your command to change this to level 2 (shows errors, warnings, and run-time information) to see more detailed information. This can be helpful to see which part of the Notebook is causing the issue. To get these messages as a text file, add **–logfile LogFile.txt** to the command. # Scaling Up Using Python Scripts Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/scaling-up-using-python-scripts After reviewing the five steps in our best practices recommendations in the previous lesson to ensure everything is running properly, you can batch process your workflow or integrate with external software using Python scripts or other languages. You can start with our [Python example](https://support.ntopology.com/hc/en-us/articles/360052703693) or [Matlab example](https://support.ntopology.com/hc/en-us/articles/360052729833-Running-nTop-Command-Line-in-Matlab-scripts) to set up your script for calling nTop and modify them to pass your input lists in a For loop. ## nToPY The *'ntopcl.py'* file, available for download below, is a Python module our engineer created to make simple commands for the nTop Command Line interface without the text and shell submission. The examples in this course do not use this module, but an example script and files are included in the downloadable zip file to explore if you would like to use them. You can type in each of the three functions with the inputs, and it will run nTop. Here is how to use them: 1. Place the *'ntopcl.py'* file in your working directory 2. Put **import ntopcl** at the top of your Python script 3. Then you can use one of the functions with appropriate inputs, explained below: **Example File:** [330\_8\_1 nToPy.zip](https://files.learn.ntop.com/Courses/330%20nTop%20Automate/Data%20Files/330_8_1%20nToPy.zip) ## ntopcl.numtext(GUI, SAVE, INPUTS, NTOP FILE) Runs nTop with a series of inputs that are either scalar or text type using Method 1 explained in the “Running a Command” lesson. The inputs include: GUI: When set to 1, the nTop graphical user interface will open up. You can use this to check that all of the inputs are passing correctly into the nTop file, and it's running as you expect it. Otherwise, set to 0 to run headlessly. SAVE: When set to 1, the inputs passed into the nTop Notebook will be saved into the nTop file. Otherwise, set to 0. INPUTS: Array of inputs, as many as are in the Notebook Inputs section, that are either text strings or scalar numbers, defined in the following format. Numbers will maintain 6 decimal points. The input order should match what's in the nTop Notebook Input section. It's good practice to match the input names between Python and nTop, but not mandatory. For example: Inputs = \{ “Name” : Current\_Directory, “Length” : 4.000, “Width” : 5.000, “Height” : 3.000 } NTOP FILE: Name of nTop file including the '.ntop' file extension, in the same directory. ## ntopcl.jsontemplate (NTOP FILE) Creates input and output JSON files in the working directory, based on what is in the Inputs and Output section of the Notebook. Equivalent to typing the **-t** argument into the command line for Method 2 explained in the “Running a Command” lesson. The only input is: NTOP FILE: Name of nTop file including the '.ntop' file extension, in the same directory. ## ntopcl.json (GUI, SAVE, INPUT JSON FILE, OUTPUT JSON FILE, NTOP FILE) Runs nTop with inputs based on a JSON file using Method 2 explained in the “Running a Command” lesson. The inputs include: GUI: When set to 1, the nTop graphical user interface will open up. You can use this to check that all of the inputs are passing correctly into the nTop file, and it's running as you expect it. Otherwise, set to 0 to run headlessly. SAVE: When set to 1, the inputs passed into the nTop Notebook will be saved into the nTop file. Otherwise, set to 0. NPUT JSON FILE: Name of JSON file with inputs that control the inputs into the nTop Notebook. OUTPUT JSON FILE: JSON file name that will be made or overwritten when nTop runs. The file will contain information about the block in the Output section of your nTop Notebook. NTOP FILE: Name of nTop file including the '.ntop' file extension, in the same directory. # The Process Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/the-process The general nTop Automate process is shown below. The next section of this course will further demonstrate and clarify these steps using a simple example. ![](https://files.learn.ntop.com/lessons/the-process/330_3_1-process-1024x399.png) To run nTop Automate, you need one nTop workflow that solves your problems. nTop Automate uses the Custom Block mechanism to execute and run through the workflow, so your Notebook must be arranged to have the structure of a Custom Block. Then, with the help of automatic template generation, you can define the desired inputs and outputs fed to the workflow with each iteration. Finally, you can use scripts or apps to execute nTop Automate at scale. # What is nTop Automate? Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/what-is-ntop-automate **nTop Automate** executes nTop Notebooks without a graphical user interface (GUI). It allows you to automatically run nTop workflows using scripts, processing multiple parts without any manual intervention, thereby eliminating some of the work that you would otherwise have to do repetitively. nTop Automate also serves as an *integration mechanism* that provides a way of interfacing with external software packages such as simulation tools or other tools with Design of Experiments (DOE) and Multidisciplinary Design Optimization (MDO) capabilities. ![](https://files.learn.ntop.com/lessons/what-is-ntop-automate/330_2_1-Windows_Powershell-1.png) ## Key Capabilities Command Line Access Unlocks With a reusable nTop workflow as a starting point, you can build more intelligence into your workflow via scripting with Python or any other languages to control your parameters. Computationally heavy processes or generation of multiple design variations can be headlessly executed. Other processes in your workflow that require other software tools can also be coupled into the process. ![](https://files.learn.ntop.com/lessons/what-is-ntop-automate/330_2_2-unlock.png) ## Example Use Cases Essentially, the core of nTop Automate is the reusing of existing nTop workflows to process a series of inputs in the same way. Our customers have been seeing huge value in time-saving for their specific applications. Below are some examples of how we've seen our command line capabilities being utilized. ![](https://files.learn.ntop.com/lessons/what-is-ntop-automate/330_2_3-usecases-1024x413.png) # What You Will Need Source: https://docs.ntop.com/lessons/intro-to-ntop-automate/what-you-will-need If during the installation of nTop software, you have left “Add installation folder to system PATH” checked, you can call the nTop Automate executable file to run nTop Automate by typing **ntopcl** or **ntopcl.exe** in any folder using either Command Prompt or Windows Powershell. This will print the options of command arguments you can use with your nTop Automate execution. ![](https://files.learn.ntop.com/lessons/what-you-will-need/330_4_1-Windows_Powershell-2.png) ## Licensing You can run nTopCL without issues if logged in on the normal nTop GUI with your cloud license credential. In the case of local licenses, you will always need to add the argument **–license** your .lic to your regular command expression. Enter the server address following **–license** along with the Server Address similar to the step above, and it should log you in. Example: *ntopcl –license PORT\@HOSTNAME* ## For Writing Code in Python If you plan to follow along, download one of the following free softwares: * [Thonny](https://thonny.org/) (recommended for beginners) * [Spyder](https://www.spyder-ide.org/) * [Visual Studio Code](https://code.visualstudio.com/) Examples in this course are done using [Spyder](https://www.spyder-ide.org/). ## For Editing JSON Files Input values for the nTopCL execution can be processed with a JSON file, and Notebook outputs get printed to a specified file in JSON format. Download [Notepad++](https://notepad-plus-plus.org/downloads/) to read and edit these files. # Analysis Options Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/analysis-options Simulations in nTop are a powerful tool, enabling you to use the results directly in your design by utilizing fields. From simple to complex, simulations follow a basic format. The image below represents the minimum setup for a simulation to run. ![](https://files.learn.ntop.com/lessons/analysis-options/240_2_1-Minimum-Simulation-Setup.png) After setting up these elements, you can run an analysis. **Static**, **Buckling**, **Modal**, and **Thermal Analysis** are the analysis types. Each type utilizes these basic parts, with slight differences in addition. After running a simulation, you can utilize results in various ways. You can extract field results feed into the model. You can also export results to other platforms for further analysis. Our simulation options are linear static, but we can now run a nonlinear and transient thermal analysis in our *Beta* tab. If your simulation requires transient and/or nonlinear analysis, you can export nTop FE Models to external software. This course will focus on running a Static, Buckling, and Modal Analysis. See our [341: Intro to Thermal Analysis](https://learn.ntop.com/courses/341-intro-to-thermal-fea/) and [342: Lattice FEA](https://learn.ntop.com/courses/342-lattice-fea-2/) courses to explore your simulation options in nTop! # Analysis Workflow: Working Backwards Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/analysis-workflow-working-backwards A good strategy for running an analysis in nTop is to work backward. First, add the analysis block to your Notebook and double-click on the inputs to see the available blocks. ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/work%20backwards.gif) All of our analyses require a **Simulation Model**, and a Load case. For instance, the **Static Analysis** block requires an **Simulation Model** and Boundary Conditions to run, so to set up the Static Analysis, select the **Simulation Model** block for the first input. Then, we will continue to work backward to set up the Domain(s) and Boundary Conditions. ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/work%20backwards%20flowchart.png) # Answer to Simulation Test Problem Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/answer-to-simulation-test-problem [https://www.youtube.com/embed/RKDVMVPCWEM](https://www.youtube.com/embed/RKDVMVPCWEM) > **Transcript** > > In this lesson, we'll review a solution to our simulation test problem. Keep in mind that in nTop, users can build their notebooks slightly differently to achieve the same results. For this problem, your workflow should look something like this. We'll begin by importing our CAD part, then pulling our body out of the properties in the block details. > > Then we'll identify our faces of interest, starting with this loaded face and our two restrained faces. Now that we've defined our geometry of interest, we can move forward to creating our FE model. We'll begin with a **Mesh From CAD Body** to triangulate the surface of this CAD body. Then we'll use a **Remesh Surface** block to generate a more uniform mesh. Note that for our edge length, we created a variable with that 3 mm so that we can keep it consistent with our FE mesh later in our workflow. After remeshing the surface, we can use this **Volume Mesh** block so that our initial surface mesh with no mesh infill is now meshed all the way through. > > We'll then use an **FE Volume Mesh** block to convert it to an FE mesh, and then we can move on to creating our FE model. We'll use our bracket mesh as our mesh in our FE component and add an attribute list and a solid attribute block. For our material, we've created a material variable of aluminum 6061. Note that we didn't add any connectors as we're only working with this single body. After establishing our FE model, we can move on to creating our boundary conditions. First, we'll apply a bearing force to this lower face using the **FE Face Boundary** block and our loaded face variable that we created in our geometry section. We'll apply a force factor of -2 Newtons along the Y-axis to reflect the 2 Newton bearing force downwards in the Y direction that we see in our prompt. > > Next, we'll create our displacement restraint along these restrained faces in the top corners of our bracket, and again, we'll use this **FE Face Boundary Toolkit** block. We'll leave all inputs in this displacement restraint as zero so that these faces are fixed. Now that we've created our two boundary conditions, we can move on to running our static analysis using our **Static Analysis** block that can be found in the Design Analysis tab or our Simulation tab. If I isolate the static analysis, I can review the static analysis results in this heads-up display. I'll use the deformation scale to help visualize how our part would form under this loading. I can control my color palette and transition using this settings widget, and I can probe values using our probe mode. To view simulation results inside the FE model, I can section cut using the hotkey X, select show volume mesh elements, and probe over individual mesh elements. In addition to displacement, I can look at the strain, stress, and reaction forces of our loaded bracket. Hopefully, you achieved the same results, and feel free to download the solution file below as reference. This video reviews the answer to the simulation test problem to define the FE Model and Boundary Conditions for a CAD bracket and run a static analysis. We will be using this completed file later for running a modal analysis. **Example File:** [240\_20\_1 & 22\_1 Answer to Simulation Test Problem.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_20_1%20%26%2022_1%20Answer%20to%20Simulation%20Test%20Problem.ntop) *This file was last updated in nTop 4.2.3* # Before We Begin: Structural Analysis Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/before-we-begin-structural-analysis [https://www.youtube.com/embed/GeECvSeJdDo](https://www.youtube.com/embed/GeECvSeJdDo) In this course, we will: * Understand the key blocks for running a simulation in nTop * Learn how to set up a structural, buckling, or modal analysis * Explore how to import and export FE Meshes, FE Models, and simulation information. # Buckling and Modal Analysis Properties and Terminology Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/buckling-and-modal-analysis-properties-and-terminology Both the buckling and modal analyses in nTop require the Model, Boundary Conditions, and the number of modes. Currently, we can only run linear and nontransient buckling and modal analyses in nTop. Once you run an analysis, a Heads Up Display (HUD) will appear showing the results. The HUD allows you to explore several different types of results, edit the upper and lower bounds of each, and probe results at individual mesh elements. ## Buckling Analysis The **Buckling Analysis** block calculates the critical buckling loads and buckling mode shapes of an FE Model subject to prescribed boundary conditions. The resulting eigenvalues are factors by which the load must be multiplied to reach the critical buckling load for that mode. The key property to the **Buckling Analysis** block is the buckling load factor. The **Buckling Analysis** block ![](https://files.learn.ntop.com/lessons/buckling-and-modal-analysis-properties-and-terminology/240_21_1-Buckling-Analysis.jpg) Open the block's Properties to view the buckling load factor. Pull the property chip into the Notebook to use it. This property is shown in the HUD (heads up display) when working with this block. ![](https://files.learn.ntop.com/lessons/buckling-and-modal-analysis-properties-and-terminology/240_21_2-Buckling-Load-Factor.png) ## Modal Analysis The **Modal Analysis** block calculates the natural frequencies and mode shapes of an FE Model subject to prescribed boundary conditions. This block calculates a specified number of vibration modes. Providing minimum and maximum frequencies bounds the range of frequencies to be returned. The key property specific to the **Modal Analysis** block is the eigenfrequencies calculated. The **Modal Analysis** block ![](https://files.learn.ntop.com/lessons/buckling-and-modal-analysis-properties-and-terminology/240_21_3-Modal-Analysis.png) Open the block's Properties to view the eigenfrequencies. Pull the property chip into the Notebook to use it. This property is shown in the HUD (heads up display) when working with this block. ![](https://files.learn.ntop.com/lessons/buckling-and-modal-analysis-properties-and-terminology/240_21_4-Eigenfrequencies.png) > [!NOTE] > > **Note**: Only provide restrained regions into the boundary condition list. Removing the optional Restraints input leads to a free-free Modal Analysis. # Connectors Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/connectors You will need connectors if you are working with multiple domains in your **Simulation Model**. We have six types of connectors: **Tie Constraint**, **Structural Contact**, **Thermal Bonded Contact**, **Cyclic Symmetry**, **Spring**, and **Rigid Connector**. ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/connector%20list.png) ## Tie Constraint A **Tie Constraint** is a rigid connection that ties two nodes together. Tie constraints make the displacement of the selected nodes equivalent, effectively removing one degree of freedom from the system. Choose the Independent nodes and the Dependent nodes using a Boundary Selection block. The Independent boundary looks for the Dependent boundary within a specified tolerance. An error will occur if the tolerance is too low to find the boundary. This error can be fixed by increasing the tolerance or editing the boundary. The Rotation checkbox toggles the option to tie rotational degrees of freedom. You can see an example of this below. ![](https://files.learn.ntop.com/lessons/connectors/tie-constraint-1.gif) ## Structural Contact A **Structural Contact** is an elastic connection between the two models that allow relative motion with a defined stiffness. It's usually used if you have two surfaces glued together with some material that has a vastly different stiffness than the connected surfaces, which allows the connected surfaces to not move entirely in sync but have specific resistance between them. It's often used to calculate contact failure and to model connected/welded surfaces more accurately, but generally for any connection dictated by a finite stiffness. The *Type* input has two options: Bonded and No Separation * Bonded: Prohibits relative displacement in the normal and tangential direction * No Separation: Prohibits relative displacement in the normal direction and allows displacement in the tangential direction ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/structural%20contact.png) The setup of the Structural Contact is very similar to the setup of a Tie Constraint, but now we define the contact stiffness. > [!TIP] > > **Tip:** > We recommend a contact stiffness of 0.5 \* (Young's Modulus of Part 1 + Young's Modulus of Part 2). Another method of determining the contact stiffness is k = E \* A/d (where A is the contact area and d is the contact layer thickness). ## Thermal Bonded Contact The **Thermal Bonded Contact** block creates a bonded contact between two FE boundaries, allowing heat flux between the two components. Contact resistance can be defined to account for a thin membrane material at the boundary, such as thermal paste. The contact resistance between two materials is often calculated from experimental tests of contact conductance. ![](https://files.learn.ntop.com/lessons/connectors/240_7_4-Thermal-Bonded-Contact.png) ## Cyclic Symmetry (Beta) The **Cyclic Symmetry** block creates tie constraints between an FE Mesh's upper and lower boundaries. To reduce file size and drastically reduce the run time for parts exhibiting cyclic symmetry, a single sector can be used to assume consistent results for all identical segments of the revolved feature. Currently, the **Cyclic Symmetry** block only works with parts that do not contact the axis of revolution. ![](https://files.learn.ntop.com/lessons/connectors/240_7_3-Cyclic-Symmetry.jpg) > [!TIP] > > **Tip:** > Although it is unnecessary, you can create a conformal mesh between the upper and lower boundaries of the sector using the **Remesh Surface with Cyclic Symmetry (Beta)** block. In some cases, this will yield more accurate results. ## Spring The **Spring** block creates a spring element between two FE Points. The Spring force is calculated using the following formula: F = K\*(u2-u1) where: K = stiffness tensor constructed from the stiffness inputs Kx, Ky, Kz, Kxx, Kyy, and Kzz u = displacement at a point, which includes both translational and rotational components ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/spring%20block.png) ## Rigid Connector The **Rigid Connector** block can be used to define a connection between a point and the surface of a domain in a simulation or optimization study. This is typically used in multi-domain simulations where only the mass of the auxiliary domains affects the analysis, while the geometry of these domains can be neglected. These auxiliary domains are modeled as a **Solid Domains** of **FE Points** in nTop. This can be used to reduce the size of the finite element model, improving the simulation or optimization solver's performance without compromising the results' accuracy. ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/Rigid%20Connector%20block.png) The *Connector* input defines the behavior of the nodes on the boundary linked to the motion of the point. It has two options: Rigid: The rigid option constrains the nodes on the boundary to move with the point. It prevents relative motion between the nodes on the boundary and behaves like a rigid entity. This is popularly known as the RBE2 connector that connects an independent node (green) to a set of dependent nodes (yellow) ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/rigid%20connect.png) Flexible: This flexible option links the motion of the point to the nodes on the boundary and enables relative motion between these nodes. This distributes the mass between the nodes on the boundary and avoids locally stiffening the model (unlike the Rigid connector). This is popularly known as the RBE3 connector that connects a dependent node (yellow) to a set of independent nodes (green) ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/flex%20connect.png) # Creating a Simulation Model Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/creating-a-simulation-model A **Simulation Model** brings together all of the necessary elements for the part to be analyzed, whether in simulation, optimization, or further analysis. It is built up of **Domains** and **Connectors**. ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/Simulation%20Model%20block.png) Each Domain contains an **Implicit Body**/**FE Mesh**/**Lattice** and **Attributes**, while connectors are made up of **Tie Constraints**, **Structural Bonded Contacts**, **etc.** that allow the analysis of multiple Domains. A **Simulation Model** does not need a connector if only one Domain exists. If it has multiple Domains, there will always be one less connector than the total number of Domains. Later, we will also walk through creating an Simulation Model from scratch. The flowchart below explains how a Simulation Model is configured: ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/Sim%20Model%20Flow%20Chart.png) # Creating Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/creating-boundary-conditions You can think of Boundary Conditions (BCs) as your part's environment. They represent all the internal and external elements acting on your model, such as forces, displacement restraints, heat generation, and pressure. You need a minimum of two BCs to run a simulation. Depending on the BC, the inputs are usually a *Boundary*, a *Vector*, and a *Frame*. The image below shows the current options for BCs in nTop. ![](https://files.learn.ntop.com/lessons/creating-boundary-conditions/240_10_1-BCs-Tab.png) Each of these boundary conditions is applied to a user-defined FE Boundary. To learn more about the different ways to select the FE Boundary shown below, check out our [102: Guide to Meshing](/courses/102-guide-to-meshing/) course. In our Follow Along: Boundary Conditions lesson, we will also walk through this process from scratch. In the following few lessons, we will discuss the different FE forces and displacement restraints you can use for a **Static Analysis**. Glyphs are the markers that indicate boundary conditions in your simulation model. Yellow arrows represent the location and direction of the force applied, and red cones represent where the restraint is applied. ![](https://files.learn.ntop.com/lessons/creating-boundary-conditions/240_10_2-Glyphs.jpg) To adjust the glyph size to match the scale of your model better, open your Display Settings and change the *Glyph Size* for *Boundary conditions*. ![](https://files.learn.ntop.com/lessons/creating-boundary-conditions/240_10_3-Glyph-Size-Settings.gif) # Defining a Material Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/defining-a-material There are three options for materials in nTop: **Isotropic**,**Anisotropic**, and **Orthotropic**. Isotropic materials have the same properties in every direction. Anisotropic materials are the opposite, and have different properties in different directions. Orthotropic materials have properties that vary in three directions. An example of an isotropic material is steel, an anisotropic material is wood, and an orthotropic material is most crystals. ![](https://files.learn.ntop.com/lessons/defining-a-material/240_6_1-Materials.png) ## Material Properties For isotropic and orthotropic material blocks, you can add a **Linear Elastic Property**. The anisotropic and orthotropic materials have **Stiffness Tensor** blocks. For all of these materials, you can add **Coefficient of Thermal Expansion** and **Thermal Property** blocks. Add the Property blocks to the Isotropic Material Property List. Use the '+' to add more inputs to the list. All of these available blocks are shown in the image below. ![](https://files.learn.ntop.com/lessons/defining-a-material/240_6_2-Material-Properties.png) | Analysis | Material Property Required to Run | | - | - | | Static, Modal, Buckling, Topology Optimization | Linear Elastic Property | | Thermal | Linear Elastic Property, Thermal Property | | Thermoelastic | Linear Elastic Property, Thermal Property, Coefficient of Thermal Expansion | ## Frequently Used Materials nTop also has a selection of sample materials under the **Design Analysis** section in the Ribbon. If you plan to use these materials for Thermoelastic Analysis, you will need to add the additional property of the **Isotropic Coefficient of Thermal Expansion**. ![](https://files.learn.ntop.com/lessons/defining-a-material/240_6_4-Sample-Material.png) > [!TIP] > > **Tip:** > If you use a material often, we recommend creating it in a standalone Notebook and saving it as a Custom Block with no inputs. Check out our [230: Intro to Automation](/courses/230-intro-to-automation/) course to learn more about creating a Custom Block. # Displacement Restraint Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/displacement-restraint When running a static analysis, you will need a displacement restraint to fix a part in space. The **Displacement Restraint** is represented by red cones at the FE Boundary chosen. A Displacement Restraint is usually required when forces are involved to ensure the part is fixed in space. Without it, the simulation wouldn't be able to run. We have two blocks for displacement restraints: **Displacement Restraint** and **Point Restraint**. ### Displacement Restraint A **Displacement Restraint** restrains the selected boundary entities in up to six degrees of freedom. If an input is empty, the corresponding degree of freedom will be unrestrained. We also have Beta version of this block that takes CAD faces if you are working with a CAD body. ![](https://files.learn.ntop.com/lessons/displacement-restraint/240_12_1-Displacement-Restraint.jpg) ### Point Restraint A **Point Restraint** applies a displacement restraint to a remote point attached to selected boundary entities using rigid body elements. ![](https://files.learn.ntop.com/lessons/displacement-restraint/240_12_2-Point-Restraint.png) # Domains Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/domains A Domain requires two key components, material properties and a body or mesh to apply them to. The body input will be an Implicit Body, Lattice, FE Point, or FE Mesh, depending on the Domain type. The material properties are usually defined inside an Attribute block, with a few exceptions for the **Lattice Domain** and the **Parametric Domain** blocks. ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/Domains%20Flow%20Chart.png) There are 4 main types of Domains for running simulations, Fluid, Solid (Implicit Body), Solid (FE Mesh/Point), and Lattice. There are two **Solid Domain** blocks because they are used to run different analyses. We recommend adding the **Domain List** to you workflow first, as nTop will automatically provide the correct **Solid Domain** based on the parent **Domain List** block. The gif below demonstrates how to add a **Solid Domain** for both a **FE Domain List** and a **Virtual Domain List**. If you don't see **Virtual Domain List** as an option, you may need to change the **Simulation Model** block overload as shown below. ![](https://storage.googleapis.com/files-learn/Courses/240%20Intro%20to%20Simulation/Images/domain%20list.gif) The table below shows the Domain options for running a **Field Optimization**, if you would like to learn more about these Domains we recommend reviewing our [Parametric FE Domains](https://learn.ntop.com/courses/440-field-optimization/lessons/parametric-fe-domains/) lesson. | **Parametric Domain** | **Visual Representation** | **Design Parameters** | **Field Optimizable Design Parameters** | | - | - | - | - | | Parametric Lattice Domain | A Parametric Lattice Domain example | Unit Cell, Boundary Behaviour, Cell Size | - Min and Max Thickness | | Parametric Shell Domain | A Parametric Shell Domain example | | - Min and Max Shell Thickness | | Parametric Shell-Infill Domain | A Parametric Shell-Infill Domain example | Unit Cell, Cell Size | - Min and Max Infill Thickness - Min and Max Shell Thickness | | Parametric Voronoi Domain | A Parametric Voronoi Domain example | | - Min and Max Cell Size - Min and Max Thickness | # Download: Completed Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/download-completed-boundary-conditions Now that you have completed the follow along, feel free to download below the completed file with descriptions on how to define boundary conditions for running a simulation. We will use this file for future Follow Along exercises in this course. **Example File:** [240\_14\_1 & 17\_1 Completed–FE Model and Boundary Conditions.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_14_1%20%26%2017_1%20Completed--FE%20Model%20and%20Boundary%20Conditions.ntop) *This file was last updated in nTop 4.2.3* # Download: Completed FE Model Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/download-completed-fe-model Now that you have completed the follow along, feel free to download below the completed file with descriptions on how to create an FE Model for running a simulation. We will use this FE Model for the other Follow Along videos in this course. **Example File:** [240\_9\_1 & 13\_1 Completed–FE Model.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_9_1%20%26%2013_1%20Completed--FE%20Model.ntop) *This file was last updated in nTop 4.2.3* # Download: Completed Modal and Buckling Analysis Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/download-completed-modal-and-buckling-analysis Now that you have completed the Follow Along exercises, feel free to download below the completed files with descriptions on how to run a Buckling and Modal Analysis. **Example File:** [240\_24\_1 Completed–Modal Analysis.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_24_1%20Completed--Modal%20Analysis.ntop) *This file was last updated in nTop 4.2.3* **Example File:** [240\_24\_2 Completed–Buckling Analysis.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_24_2%20Completed--Buckling%20Analysis.ntop) *This file was last updated in nTop 4.2.3* # Download: Completed Static Analysis Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/download-completed-static-analysis Great job completing this training! Feel free to download the completed file with descriptions and the PDF version of our video example as a resource. **Example File:** [240\_18\_1 Completed–Static Analysis.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_18_1%20Completed--Static%20Analysis.ntop) *This file was last updated in nTop 4.2.3* # FE Forces Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/fe-forces Below, we discuss the different boundary condition options for a static analysis. You can find these forces in the *Simulation* tab under *Boundary Conditions*. We also have the **Rotational Force** block, which is currently in the *Beta* tab and is not discussed in this lesson. Information on our boundary conditions for thermal analysis is in our [341: Intro to Thermal FEA](/courses/341-intro-to-thermal-fea/) course. To see the nTop notebook using all of these blocks in nTop, download the FE Forces file below this lesson. > **Force** > > The **Force** block is a Boundary Condition for analysis that applies a force over a selected boundary. The force is evenly distributed over the selected entities. The Force block requires a Boundary to choose where to apply the force, and a Vector, to determine the magnitude and direction of the force. There is an optional input of a Frame, allowing for further definition of the orientation of the Force. > > The downward arrows in the image represent the -1000N of Force acting in the negative Z-direction over the box. If you want more control over the direction of the force, you can edit it using the 'Frame' input. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_1-Force.jpg) > **Point Force** > > The **Point Force** block applies a point force to a selected boundary by distributing the load through rigid body elements. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_2-Point-Force.jpg) > **Edge Force** > > The **Edge Force** block applies a force vector to selected boundary edge entities. The force will be distributed over the nodes on the selected edge. This block accepts a vector field for the force, so you can input a varying force across the selected edge entities, as shown below. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_3-Edge-Force.jpg) > **Surface Force** > > The **Surface Force** block applies a general force vector field to selected boundary face entities. The force will be distributed over the nodes of the selected faces. This block accepts a vector field for the force, so you can input a varying force across the selected face entities. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_4-Surface-Force.jpg) > **Acceleration Load** > > The **Acceleration Load** block applies an acceleration load to a selected region. The applied force is calculated by multiplying the acceleration vector by the element masses and distributing it over the nodes. You can use this block to add gravity as a load case. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_5-Acceleration-Load.jpg) > **Point Moment** > > The **Point Moment** block applies a point moment to a selected boundary by distributing the load through rigid body elements. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_6-Point-Moment.jpg) > **Pressure** > > The **Pressure** block applies pressure to selected boundary face entities. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_7-Pressure.jpg) > **Bearing Force** > > The **Bearing Force** block applies a bearing load on a cylindrical boundary based on a sinusoidal distribution. > > ![](https://files.learn.ntop.com/lessons/fe-forces/240_11_8-Bearing-Force.jpg) **Example File:** [240\_11\_1 FE Force Options.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_11_1%20FE%20Force%20Options.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop 4.2.3* # Follow Along: Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/follow-along-boundary-conditions [https://www.youtube.com/embed/FZtDtlEmsVs](https://www.youtube.com/embed/FZtDtlEmsVs) > **Transcript** > > In this lesson, we will apply boundary conditions to the FE model that we created in the last follow-along video. So, the first thing that I'll do is right-click and add a new section, which I will label “Boundary Conditions.” If you haven't followed along in the previous lesson and you don't have this file, that's okay. You can download this starter file in the link below this video. > > So we have this FE model that we already created, and we're going to apply our boundary conditions, which we have in our geometry section already labeled as our restrained face and also our loaded face. So we'll use these to locate our boundaries for those boundary conditions. I can choose my boundary conditions for my simulation tab. So we have those options here, as well as in our design analysis tab. We have them separated as restraints and also loads. > > And I'm going to begin by first picking a restraint. So I'll click on that boundary condition section and I'll go to my restraints and choose a **Displacement Restraint**. And we have to define our boundary. So if you want to review how to create your boundaries, you can go to our Guide to Meshing course, and that lesson is linked below this video. But we'll also briefly review this as well in this video. So what I'm going to do is right-click on this input and I'm going to use our **FE Boundary by Floodfill**. I could also use our **FE Face Boundary**, and I'll use that later, but just to show two different options. So I'll click on my **FE Boundary by Floodfill**, and we can see it'll take in my mesh. I can select nodes, for instance, for that entity, origin, angle, and direction. But another option that we can do to simplify this process is we can click on our FE mesh that we created before and then we'll just right-click on the location that we want and select that **FE Boundary by Floodfill**. So now we can see I already have that location. I have that entire hole, and I have all of the inputs in place. So that FE mesh we had visualized is in that input. I can change from nodes, edges, or faces, and for this example, I'm going to use nodes, but it doesn't really make a difference for the simulation. We also have our origin that's going to be where we clicked on our part, our model, our FE mesh, and then we have our angle. So I'm going to place in this completed **FE Boundary by Floodfill** block into our **Displacement Restraint**. And once I do that, we have our boundary restrained in the X, Y, and Z, and in rotation. And if I turn this on, we can see I have these red cones that are indicating I have a displacement restraint on all of the nodes. So if you can see, I don't see all of the red cones at the bottom, but that's okay. If I turn off that **nTop** model, we can see that every single node in that hole is selected. So what I'm going to do is right-click on that **Displacement Restraint**, make it a variable, and I'll label this our Fixed Restraint. > > So now I have my first boundary condition. And the second boundary condition that I'll do is going to be our loaded face here. So instead of using that **FE Boundary by Floodfill** this time, I will use our **FE Face Boundary**. But first, I'll go to our design analysis in loads and select a **Force**. So for our force and that boundary, I'll double-click and I'll choose our **FE Face Boundary**. We already have a CAD face to work with. I don't need to use that CAD face list. So what I can do is just delete that CAD face list. Bring in that loaded face for the mesh. We're going to use that same FE mesh that we have in our model and for our **Displacement Restraint** because that overlaps with where our loaded face is. And for entities, I'll also select nodes. And so every node that intersects with that loaded face is going to be selected like so. So now I have that **FE Face Boundary**. I'll decide I'll type in my factor for the force, which will be 0.0600 Newtons. So that's going down that Z direction. And we can see that I now have these yellow arrows indicating the location of that force on each of those nodes and the direction, which is down in that Z direction. So now that I have my force defined, I'll right-click and make this a variable and label it “Force.” And all of my boundary conditions are completed for this brake pedal. And the next step that we'll do is run our static analysis, which you can watch in the next follow-along lesson. In this video, we will add boundary conditions to the brake pedal used in the previous Follow Along Video. To review selecting boundaries, please revisit our [Guide to Meshing](/courses/102-guide-to-meshing/) course. Please use the completed FE Model from the previous lessons, attached below, to follow along with the tutorial. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [240\_9\_1 & 13\_1 Completed–FE Model.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_9_1%20%26%2013_1%20Completed--FE%20Model.ntop) *This file was last updated in nTop* 3.38.4 [240\_13\_1 Follow Along – Boundary Conditions.pdf](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/PDFs/240_13_1%20Follow%20Along%20-%20Boundary%20Conditions.pdf) # Follow Along: Buckling Analysis Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/follow-along-buckling-analysis [https://www.youtube.com/embed/xEEPOSWcrFA](https://www.youtube.com/embed/xEEPOSWcrFA) > **Transcript** > > In this lesson, we will run a buckling analysis. I already have the FE model and the boundary conditions completed in the starter file, so I'll walk through briefly what is occurring with that. If you haven't already done so, please download this starter file, which is below this video, to follow along. > > What I have is just this box, this column. In our analysis setup, I have that box created, and I'm going to set up my FE model. This has one component; it's a single body, so I won't be using connectors, and I'll just have one F component in there, which will be containing my F mesh and my material. For my FE mesh, I'm going to use our **Mesh from Implicit Body** block. I just convert it to a mesh, then I remesh it, and I have an edge length of 1 mm. Then I convert that to a volume mesh and an FE volume mesh. > > We also have to define our attributes and our material. In this section, I just have my material defined, which is general aluminum, and my F model is complete. Once I've created the FE model, I also have my boundary conditions, so let me show that as well. > > We're going to have a force at the top of this, and I created that using an **F Boundary by Flood Fill** block. So I just have my top boundary, and I'm also going to have a top restraint and a bottom restraint. At the top of this column, I have my top boundary in here, and it is going to be unrestrained in the Z-axis. You can see I left this as optional, but in all of the other axes and in rotation, it will be restrained. So I have this top restraint and then I have my bottom restraint, which is also using an **Fe Boundary by Flood Fill** block, and I have it restrained along all of the axes and all the rotations. > > So these are our boundary conditions, and we have our FE model. The next thing that we'll do is add this into a buckling analysis block. So I'll add a new section, and I'll label this buckling analysis. I can go to my Design Analysis or my Simulation tab and choose that buckling analysis for that model. > > I'll use our FE model in the analysis setup, and I can just write that directly in. For our load case, I have three load cases, so I'll add two more items in that list and choose our force, our top restraint, and our bottom restraint. For number of modes, I'll place two, so I'll type “i” so we only view this. If we go into our block details under properties, we can see that we have our buckling load factor, and there will be two of those because we defined our number of modes to be two. We can also define our minimum and maximum eigenvalue as well, so you can control that. > > If we look at our buckling analysis, we have those two load factors. If I turn on that displacement, I like to also view that force and that bottom restraint or top restraint, so we can see those forces are… and we can see that scale factor, how it's buckling, and we can look at that for both of these options. And again, you can put in a number of modes as well. So if I have four of these modes, we're going to have other options as well for those eigen values. And so this is our buckling analysis. In this lesson, we will run a Buckling Analysis using the nTop file that you can download below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [240\_23\_1 Starter–Buckling Analysis.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_23_1%20Starter--Buckling%20Analysis.ntop) *This file was last updated in nTop 3.38.4* # Follow Along: FE Model Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/follow-along-fe-model [https://www.youtube.com/embed/iPCWUtK3L4g](https://www.youtube.com/embed/iPCWUtK3L4g) > **Transcript** > > In this lesson, we will talk about how to set up our FE model for running a simulation, specifically a static analysis using a brake pedal. The first thing that I'm going to do is search my search bar for a static analysis, and I'm going to use this. You can see that the FE model is the first half of running our static analysis. You can also find our simulation through the Simulation tab and also in our Design Analysis tab as well. So, I'm going to double-click and choose that **FE Model**. We can also choose an **FE Solid Model**, which is going to be one of our toolkits. It's just going to skip a few steps, so a little bit more of a simpler model, but we'll just use the **FE Model**, the more broad option. > > In another lesson, we'll run through how to create those boundary conditions for our static analysis, but what I'll do is we'll create our FE model from scratch. So, I'll right-click, and I'll make this a variable labeled that **FE Model**, and I'm going to have a component. So, this is going to be a single body for our components. So, we can choose our **FE Component**. You can also work with our **Lattice Component** or **FE Solid Component**, but for the most broad option, we'll use that **FE Component**. If you're working with multiple components, then you will also need to use connectors for that. With one solid body, we won't need to use that, but we can do an **FE Connector List**, and we can choose an **FE Lattice Connector**, a **Structural Bonded Contact** or a **Thermal Bonded Contact** or **Tie Constraint** for those. But since we're running a single body simulation, we don't need to use that connector. > > First, what I'll do is create a new section for my geometry, and I will place that at the top. And I'll rename this section to be **FE Model**, and I'm going to drag and drop my brake pedal parasol file that you can get from downloading the files below, and we can see this here. So, this is a single body, and if I double-click, we can select that entire body that will run our analysis for. So, I'll create a CAD body variable by right-clicking on that, and I'll rename this to be **CAD Body**. I also want to select the faces for my boundary conditions. So, what I can do is a single click on this face, and then right-click to create **CAD Face Variable**, and this will be my loaded face. And I'll also select the face for my restrained face. So, I'll select that with a single click, and then we'll right-click, create **CAD Face Variable**, and I'll rename this restrained face. If I wanted to have a load on multiple faces, I could select those multiple faces by holding control, and then I could create a **CAD Face List**, but in this instance, we're only going to have one loaded face and one restrained face, and we can begin creating our FE model. > > So, I can double-click on that **FE Components** option, and our **FE Component** contains an FE mesh and our **FE Attribute List**. So, let's begin with that **FE Attribute List**, and we will double-click on that option, and we can choose an **FE Beam Shell** or **Solid Attribute**. And since this is a solid body, we'll use that **FE Solid Attribute**. The frame in that region is optional, so we'll only focus on this material, and I will right-click and make this a variable, and we can look at the different sample materials that we have in our Design Analysis tab. So, you could use these right off the bat, or in our Simulation tab, we have information on our isotropic materials or orthotropic materials if you wanted to create that from scratch, which is what we'll do today. > > So, let's use an isotropic material by double-clicking, and we can see our isotropic material, and our sample materials are here. And we have our **Isotropic Material Properties List**, and we can add more items if you want to define more options there. If we double-click, we have our **Isotropic Linear Elastic Property**, **Isotropic Thermal Expansion Property**, and **Isotropic Thermal Property**. So, we'll just use our **Isotropic Linear Elastic Property** today because we're running our static analysis. So, I'll click on that **Isotropic Linear Elastic Property**, and we'll put in for our Young's modulus, we'll put in 2.21e to the 13, and for our Poisson ratio, we'll do 0.3. And we don't need to define our density for this analysis, so our material is complete, and our solid attribute is defined. > > So, the next step that we would focus on is that **FE Mesh**. So, I can right-click and make that a variable, and to create this **FE Mesh**, we're going to see the different options that we have for a refresher on this information. You can look at our guide to meshing course to see how we can create the FE mesh, and we'll go through that as well as a review in this follow along. But I'll choose an **FE Volume Mesh**, and for our discretization, we're going to use a volume mesh and take a surface mesh from that. So, the first thing that I'll do is get a mesh from CAD body to convert our CAD body into a mesh for a simulation. And so, I'm going to right-click on this block and make this a variable and rename it as **Surface Mesh**. For more control over that edge length, that mesh recommend the **Remesh Surface** block. So, what we'll do is add that **Remesh Surface**, and let's place that into our FE model section. And for the surface, we can place in our surface mesh. > > For the edge length, now we can control that mesh element size, and I'll make this a variable so that we can easily change that, and I'll place in 2 mm for that edge length, and for the shape, we will choose triangle. And so, we can see that we have this mesh element, so we can control that edge length, and you can notice that we have the scalar field symbol next to the edge length, which means that we can have areas with smaller element size versus larger, and we can control that with **Ramp** or **Field Driven Design**. We can see that our free mesh surface is only going to have that mesh on the outside, so for our simulation, we're going to have to use a volume mesh so that we can have that volume mesh going throughout our entire part. > > So, I'll add a volume mesh to our notebook, and I'll place my **Remesh Surface** into that volume mesh. We'll use that same edge length; it'll go a bit faster if you have that same edge length for the **Remesh Surface** and the volume mesh, and we can see that those elements are created now throughout my entire body. Now that I have my volume mesh, I can place that into my **FE Volume Mesh**, and I'll rename this to **FE Mesh**, and for my geometric order, we can choose to have linear or quadratic. So, now that I have my FE mesh complete, I have basically everything done in my FE model. So, this is only a single body simulation to run. Otherwise, we would need to add multi-components, multiple connectors, but since this is one body, we don't need to add those connectors. So, our FE model is complete, as is half of our static analysis. So, in our next follow along, we'll talk about our boundary conditions, but otherwise, we have created our FE model. In this video, we will create an FE Model for a brake pedal. To review creating FE Meshes and Volume Meshes, please revisit our [Guide to Meshing](/courses/102-guide-to-meshing/) course. Please download the CAD brake pedal file below to follow along with the tutorial. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. [240\_8\_1 Solid Brake Pedal.x\_t](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/Models/240_8_1%20Solid%20Brake%20Pedal.x_t) [240\_8\_1 Follow Along – FE Model.pdf](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/PDFs/240_8_1%20Follow%20Along%20-%20FE%20Model.pdf) # Follow Along: Importing and Exporting Simulation Data Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/follow-along-importing-and-exporting-simulation-data [https://www.youtube.com/embed/XihQRSfXcfQ](https://www.youtube.com/embed/XihQRSfXcfQ) > **Transcript** > > In this lesson, we will walk through some of the options that we have available for importing and exporting simulations into nTop. So, in our Simulation tab, you can go to the top right and under Exchange, we can see the different blocks we have available for importing and exporting. > > So we can **Import an FE Mesh**, **Import a Static Analysis** for instance, as well as our modal, buckling, thermal, and topology optimization. And when we're importing something like this, if we click on that file path, we can see the different options that we can import as we've discussed in the previous lesson. And it will have all the same properties as an FE Mesh as if you had created it within nTop. > > Same situation for importing simulation results. So we'll still have all of those properties that we saw when creating our Static Analysis, this in our follow-along video. And all you have to do is place in that file path, whether it's an or Noran options. > > And then for the unit system, if I double click, we can see that I'll just define what is that unit system that we are importing. If we are exporting, so if we'll **Export an FE Mesh**, you can bring in that FE Mesh right into there, define the units of that mesh. And then we also have this Sets option. If we go into our information, you can learn a little bit more about this, but this is really, if I double click on this option, we can see that it's really just our different boundaries available. So I can get an **FE Set List** option, I can have those different locations where my boundary conditions are occurring and export that along with my FE Mesh. > > I can also **Export an FE Model**, so I have my model, we can just double click and choose that unit system. And same thing with our Set. So we could do an **FE Boundary List** for instance. If we are exporting something like our Static Analysis, modal, buckling, or thermal, then we'll just instead of exporting that **Static Analysis** block, we'll just take those inputs, that model we define in the boundary conditions. You'll just place them into those options and you would just define that unit system and we can see what those options are as well. So that's what we have available for our Import and Export Exchange. > > You can also look into our Beta tab. So we often are adding more options there as well when it comes to our simulation. So for instance, we can also **Export an FE Mesh to CFD**. If you want to define those CFD boundaries on FE Mesh, you can do that as well. And we can also bring in different point maps as well. So if you're working with a pressure point map from a CFD analysis for instance, we can bring that in. So how we would import and export. So if you are working on an analysis that for instance is nonlinear or transient, then you could export that FE Mesh or model and have that in your simulation software. In this lesson, we walk through the different importing and exporting options for simulations. # Follow Along: Modal Analysis Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/follow-along-modal-analysis [https://www.youtube.com/embed/SfpXaQxT47Y](https://www.youtube.com/embed/SfpXaQxT47Y) > **Transcript** > > This lesson will give an overview of how to run a modal analysis in nTop. For this lesson, we'll use the completed file from the optional simulation test problem in our last lesson. If you completed that lesson, you can continue in your current file, or you can download the nTop file below to get started. > > In addition to the static analysis we ran previously, we can also run a modal analysis in nTop. I'll come up here to our analysis section and choose the **Modal Analysis** block to drop into our notebook. I'll create a new section called “Modal Analysis,” and I can pull our block into the workflow. This block can also be found under “Design Analysis” in our analysis section. > > For our model, we can use the same FE model we created earlier. The only boundary conditions we need here are the displacement restraints at these upper two holes. For now, I'll input two for our number of modes, and we can run that analysis. > > I'll isolate using “I” to view our results. If we come over here to our heads-up display, we can toggle among different frequencies depending on the number of modes we've input. So if I input four modes, we've got our four resulting eigenvalues to view. We can view our results in terms of the total model or displacement in either the X, Y, or Z direction. We can also adjust our deformation scale slider to better visualize our results. We can also modify the upper and lower ends of our deformation gradient. > > Coming back to our **Modal Analysis** block, we have the option to add a minimum and maximum values for our returned frequencies. Finally, if we open up our block details under “Properties,” we have scalar values of our eigenfrequencies that we've generated from our analysis, and we have displacement fields for each of our modes, which can be used later for field-driven design. And that is an overview of our modal analysis in nTop. In this lesson, we will use the completed file from the previous *Optional Simulation Test Problem* to run a Modal Analysis. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [240\_20\_1 & 22\_1 Answer to Simulation Test Problem.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_20_1%20%26%2022_1%20Answer%20to%20Simulation%20Test%20Problem.ntop) *This file was last updated in nTop 4.2.3* # Follow Along: Static Analysis Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/follow-along-static-analysis [https://www.youtube.com/embed/sF\_KLjrLs\_8](https://www.youtube.com/embed/sF_KLjrLs_8) > **Transcript** > > We can drag our FE model straight into our input, and we'll add a second input in our boundary conditions list. We'll add our restraint and our force, and we'll let our **Static Analysis** run. I'll type “I” to isolate our **Static Analysis** block, and the initial result we see in our heads-up display is displacement. > > We can view displacement of the total model or view directional displacement along the three axes. We can use the slider to view how our part deforms, and we can change our units as needed. We can also adjust the max and the min of our range so we can view results given certain criteria we hope to meet. > > Opening our color options, we can edit our color palette, and we can toggle between a continuous and a banded color transition. We can also use our probe tool to view our simulation results at individual mesh element vertices. We can probe along the surface of the part, or we can section cut using X and select volume mesh elements in our section cut window so that we can probe over internal mesh elements as well. > > In addition to displacement, we can view our analysis results in terms of strain, stress, and reaction forces. We see here that if we go into our properties in the block details of our static analysis, we've generated these different fields that have our analysis information in them, so we can later use these for field-driven design. Now we've completed our static analysis. In this lesson, we will run the simulation of the brake pedal from the previous two Follow Along Videos. Please use the completed Boundary Conditions file to follow along with the tutorial. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [240\_14\_1 & 17\_1 Completed–FE Model and Boundary Conditions.ntop](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/nTop%20Files/240_14_1%20%26%2017_1%20Completed--FE%20Model%20and%20Boundary%20Conditions.ntop) *This file was last updated in nTop* 3.38.4 [240\_17\_1 Follow Along – Running a Static Analysis.pdf](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/PDFs/240_17_1%20Follow%20Along%20-%20Running%20a%20Static%20Analysis.pdf) # Importing and Exporting Simulation Data Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/importing-and-exporting-simulation-data Depending on your process, you may want to export a portion of your workflow to an external software to complete the simulation. Note that nTop can create tetrahedral volume meshes, but not hexahedral or other types of elements used in more complex simulation techniques. If non-tetrahedral elements are needed, we recommend exporting a surface mesh from nTop, and creating your desired mesh in external software. ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_1-Overall-Process.jpg) Overall Process for Exporting areas of a Simulation out of nTop ## Import and Export FE Meshes You can use the **Export FE Mesh** block for exporting your FE Mesh to external software and our **Import FE Mesh** block to import an external mesh. Named Selection Sets of nodes, edges, cells, etc. can be defined in nTop and preserved through exporting the FE Mesh file from nTop into FEA software. The named selections can be assigned to Boundary Conditions in the simulation software. Not all selection types are compatible with all file formats and software. ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_3-Import-FE-Mesh.png) ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_2-Export-FE-Mesh-1.png) ## FE Mesh Types Available for Import | **File Type** | **File Extension** | **Notes** | | - | - | - | | Abaqus | \*.inp | The format supports node, element, face, and edge sets | | ANSYS Mechanical | \*.cdb | Format only supports node and element sets | | ANSYS Fluent | \*.msh | Only mesh export is currently supported | | LS-DYNA | \*.k | – | | Nastran | \*.bdf, \*.dat and .\*nas | – | | Patran | \*.pat | – | | CGNS CFD Data File | \*.cgns | – | | Universal File Format | .unv | – | ## FE Mesh Types Available for Export | **File Type** | **Abaqus**\*\*(.inp)\*\* | **ANSYS**\*\*(.cdb)\*\* | **Nastran**\*\*(.bdf)\*\* | **LS-DYNA**\*\*(.k)\*\* | **Universal**\*\*(.unv)\*\* | **Patran**\*\*(.pat)\*\* | **Fluent**\*\*(.msh)\*\* | | - | - | - | - | - | - | - | - | | FE Volume Mesh | **X** | **X** | **X** | **X** | **X** | **X** | **X** | | FE Volume Mesh + Node Set | **X** | | | **X** | **X** | **X** | | | FE Volume Mesh + Edge Set | | | | | | | | | FE Volume Mesh + Face Set | **X** | | | | | | | | FE Volume Mesh + Element Set | **X** | **X** | | **X** | **X** | **X** | | > [!NOTE] > > **Note**: If running CFD, we can now export the CFD boundaries and FE mesh using the **CFD Boundary on FE Mesh** and **Export FE Mesh to CFD** blocks found in the Beta tab. ## Export FE Model To export the FE Model for external simulation software, input the FE Model, Unit System and FE Boundary List to the **Export FE Model** block. ## Export File Types | Abaqus | \*.inp | | - | - | | ANSYS Mechanical | \*.cdb | | ANSYS Fluent | \*.msh | | LS-DYNA | \*.k | | Nastran | \*.bdf, \*.dat and .\*nas | | Patran | \*.pat | | Universal File Format | .unv | ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_4-Export-FE-Model.jpg) ## Import and Export FE Results To run a simulation outside of nTop, you can export the FE Analysis which requires the FE Model, the Boundary conditions, and the unit system. | Abaqus | \*.inp | | - | - | | ANSYS Mechanical | \*.cdb | | ANSYS Fluent | \*.msh | | LS-DYNA | \*.k | | Nastran | \*.bdf, \*.dat and .\*nas | | Patran | \*.pat | | Universal File Format | .unv | ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_5-Export-Static-Analysis.jpg) As shown below, when you import analysis from an external simulation tool, the same properties are shown as in the native simulation blocks. You can use these properties to drive your design with the ramp block discussed in our Intro to Fields and Data-Driven Design Course. You can also complete the post-processing of a topology optimization that is imported into the Notebook. ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_6-Import-Result.png) ## FE Results Available for Import | FE Results Available for Import | | | | - | - | - | | **Result Type** | **File Type** | **File Extension** | | Static Structural Result, Modal Result, Buckling Result, and Time-Dependent Structural Result | Ansys Structural Result | \*.rst | | NASTRAN Output File | \*.op2 | | | Static Thermal Result, and Time-Dependent Thermal Result | Ansys Thermal Result | \*.rth | | NASTRAN Output File | \*.op2 | | | CFD Analysis Results | Fluent Case File | \*.cas and \*.cas.gz | | Fluent Data File | \*.dat and \*.dat.gz | | | CGNS CFD Data File | NASTRAN Output File | \*.op2 | ## Importing a Point Map If you are working with simulation files that are not supported in our export option, you can still bring in the results to nTop to drive designs using the **Import Scalar Point Map** or **Import Vector Point Map** block. If you are importing a **Scalar Point Map**, ensure your format is: X, Y, Z, S where S is the desired value at each point. If you are importing a **Vector Point Map**, ensure your format is: X, Y, Z, U, V, W where The U, V, W represent the vector at each point. These blocks use CSV files for creating the point maps. ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_7-Import-Scalar-Point-Map.png) ![](https://files.learn.ntop.com/lessons/importing-and-exporting-simulation-data/240_25_8-Import-Vector-Point-Map.png) # Knowledge Check: Static Analysis Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/knowledge-check-static-analysis # Optional: Simulation Problem Statement Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/optional-simulation-problem-statement Now that you have learned how to run a Static Analysis in nTop, feel free to try this optional problem with a review of the answer in the following lesson. We will use this completed file in running a Modal Analysis. ## Problem Statement Run a static analysis on the CAD bracket, shown and downloadable below. The loaded faces is shown in purple and has a 2N bearing force downwards in the y-direction, and the restrained faces are highlighted in green. When creating a mesh, use an edge length of 3mm, and assume the bracket material is AL 6061-T6. ![](https://files.learn.ntop.com/lessons/optional-simulation-problem-statement/240_19_1-Problem-Statement.jpg) [240\_19\_1 Bracket for Simulation.x\_t](https://files.learn.ntop.com/Courses/240%20Intro%20to%20Simulation/Models/240_19_1%20Bracket%20for%20Simulation.x_t) **Estimated Time to Complete:** 30 minutes # Overview Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/overview ![Bracket with FEA mesh and stress/strain color gradient](https://storage.googleapis.com/files-learn/lessons/intro-to-structural-analysis/bracket-fea-overview.png) This course will take you through the basics of running a simulation within nTop. After completing this course, you will have developed an understanding of the different inputs to run simulations within nTop and how to use these results to drive your designs. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview) **What will be covered:** * Setting up an FE Mesh, Model, and Boundary Conditions for a Simulation or Topology Optimization * Running a Structural, Buckling, and Modal Analysis in nTop * Importing and Exporting Simulation Results ### Introduction > **[Before We Begin](/lessons/intro-to-structural-analysis/before-we-begin-structural-analysis)** > **[Analysis Options](/lessons/intro-to-structural-analysis/analysis-options)** ### Setting Up A Simulation Model > **[Analysis Workflow: Working Backwards](/lessons/intro-to-structural-analysis/analysis-workflow-working-backwards)** > **[Creating a Simulation Model](/lessons/intro-to-structural-analysis/creating-a-simulation-model)** > **[Domains](/lessons/intro-to-structural-analysis/domains)** > **[Defining a Material](/lessons/intro-to-structural-analysis/defining-a-material)** > **[Connectors](/lessons/intro-to-structural-analysis/connectors)** > **[Follow Along: Simulation Model](/lessons/intro-to-structural-analysis/follow-along-fe-model)** > **[Download: Completed Simulation Model](/lessons/intro-to-structural-analysis/download-completed-fe-model)** ### Setting Up Boundary Conditions > **[Creating Boundary Conditions](/lessons/intro-to-structural-analysis/creating-boundary-conditions)** > **[FE Forces](/lessons/intro-to-structural-analysis/fe-forces)** > **[Displacement Restraint](/lessons/intro-to-structural-analysis/displacement-restraint)** > **[Follow Along: Boundary Conditions](/lessons/intro-to-structural-analysis/follow-along-boundary-conditions)** > **[Download: Completed Boundary Conditions](/lessons/intro-to-structural-analysis/download-completed-boundary-conditions)** ### Running An Analysis > **[Simulation Display](/lessons/intro-to-structural-analysis/simulation-display)** > **[Static Analysis Properties](/lessons/intro-to-structural-analysis/static-analysis-properties)** > **[Follow Along: Static Analysis](/lessons/intro-to-structural-analysis/follow-along-static-analysis)** > **[Download: Completed Static Analysis](/lessons/intro-to-structural-analysis/download-completed-static-analysis)** > **[Knowledge Check: Static Analysis](/lessons/intro-to-structural-analysis/knowledge-check-static-analysis)** ### Optional Simulation Test Problem > **[Optional: Simulation Problem Statement](/lessons/intro-to-structural-analysis/optional-simulation-problem-statement)** > **[Answer to Simulation Test Problem](/lessons/intro-to-structural-analysis/answer-to-simulation-test-problem)** ### Modal And Buckling Analysis > **[Buckling and Modal Analysis Properties and Terminology](/lessons/intro-to-structural-analysis/buckling-and-modal-analysis-properties-and-terminology)** > **[Follow Along: Modal Analysis](/lessons/intro-to-structural-analysis/follow-along-modal-analysis)** > **[Follow Along: Buckling Analysis](/lessons/intro-to-structural-analysis/follow-along-buckling-analysis)** > **[Download: Completed Modal and Buckling Analysis](/lessons/intro-to-structural-analysis/download-completed-modal-and-buckling-analysis)** ### Importing and Exporting > **[Importing and Exporting Simulation Data](/lessons/intro-to-structural-analysis/importing-and-exporting-simulation-data)** > **[Follow Along: Importing and Exporting Simulation Data](/lessons/intro-to-structural-analysis/follow-along-importing-and-exporting-simulation-data)** ### What's Next > **[Resources](/lessons/intro-to-structural-analysis/resources)** # Resources Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/resources In this course, we covered the steps to set up an FE Model, Boundary Conditions, and a Static Analysis. Whether running a Topology Optimization, Structural, Thermal, Modal, or Buckling Analysis, you will use these concepts to create the FE Mesh, Material, Model, and Boundary Conditions described in this course. ### **Additional Simulation Resources:** 1. Course: [341: Thermal FEA](https://learn.ntop.com/courses/341-intro-to-thermal-fea/) (\~1hr) 2. Course: [342: Lattice FEA](/courses/342-lattice-fea-2/) (\~55min) 3. Course: [340: Topology Optimization](/courses/340-topology-optimization/) (\~1hr) 4. Course: [440: Field Optimization](https://learn.ntop.com/courses/440-field-optimization/) (\~1hr) 5. Article: [FE Analysis FAQs](https://support.ntopology.com/hc/en-us/sections/360011734173-Design-Analysis) 6. Article: [Exporting to Ansys Fluent](https://support.ntopology.com/hc/en-us/articles/360062127673-How-to-export-your-design-to-Ansys-Fluent) # Simulation Display Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/simulation-display Once the **FE Model** and **Boundary Conditions** are defined, we can run the **Static Analysis** or any other simulation you choose to run. If you are running a static analysis, make sure you have at least a displacement restraint in the boundary conditions, otherwise you will have an error. ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_1-Static-Analysis.gif) Once you run an analysis, a heads up display (HUD) will appear showing the results. The HUD allows you to explore several different types of results, edit the upper and lower bounds of each, and probe results at individual mesh elements. ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_2-Sim-Displays.jpg) HUD Examples for Static Analysis, Thermal Analysis, Modal Analysis, and Buckling Analysis Below are examples of the different displays for the static analysis, and we will go into further detail into these and the display options for the modal and buckling analysis in the follow-along lessons at the end of this section. > **Displacement** > > The Displacement results show you how much your model moves under the given boundary conditions. View a scaled version of the displacement by sliding the Deformation scale up. You can view either the Total or Directional displacement by changing the second combo box from the top of the HUD. > > ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_3-Displacement.gif) > **Strain** > > With the Strain option, you can view the Principal Strain for Min, Mid, and Max, or the Strain of Components. > > ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_4-Strain.gif) > **Stress** > > With Stress, you can view the Von Mises Stress, the Principle Stress, or the Components Stress. For each option, you can choose to view the Min, Mid, or Max. > > ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_5-Stress.gif) > **Reaction Forces** > > With Reaction Forces, you can see the Total or Directional forces within the model. > > ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_6-Reaction-Forces.gif) > **Probe Values** > > Use the Probe Values tool to display the numerical values of element vertices. The Probe Values tool enables probing section cuts for volume simulation results by checking the “Show volume mesh elements” in the Section Cut dialog box. Note that the numerical value displayed correlates with the vertex of the full element at the section cut, which may not be directly on the section cut plane. > > ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_7-HUD-Probe.gif) > **Min/Max** > > Toggle the Min/Max to flag to quickly identify the location of minimum and maximum values in your simulation results. The location of the minimum value will be automatically identified with a blue tag, while the maximum value will be identified with a red tag. > > ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_8-HUD-Min-Max.gif) > **HUD Colors** > > Open the HUD Settings to choose between banded or continuous colors for contour plots. You can select the number of bands for the new banded option in the legend, allowing you to easily visualize stress and strain thresholds. > > ![](https://files.learn.ntop.com/lessons/simulation-display/240_15_9-HUD-Colors.gif) # Static Analysis Properties Source: https://docs.ntop.com/lessons/intro-to-structural-analysis/static-analysis-properties The **Static Analysis** block calculates displacements, strains, stresses, and reaction forces using static finite element analysis, for a given FE Model and set of Boundary Conditions. The loads are assumed to be applied slowly until the model reaches a state of equilibrium (static assumption), and the relationship between loads and displacements is assumed to be linear. All inertial and damping forces are neglected. In order to function, the boundary conditions must contain a displacement restraint for at least one node. Otherwise, the model will not be fixed in space, and the analysis cannot reach equilibrium. ![](https://files.learn.ntop.com/lessons/static-analysis-properties/240_16_1-Static-Analysis-Block.png) > [!NOTE] > > **Note**: Currently, we can only run linear and nontransient static analyses in nTop. ## Static Analysis Properties The key properties specific to the structural analysis block include many scalar fields containing information such as the part's Von Mises Stress, Displacement, etc. We will not use these properties in this course, but they can be used to drive parameters such as beam thickness, which you can learn in our [320: Data Driven Design](/courses/320-data-driven-design/) course. ![](https://files.learn.ntop.com/lessons/static-analysis-properties/240_16_2-Static-Analysis-Properties.png) # Before We Begin: Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/before-we-begin-thermal-analysis [https://www.youtube.com/embed/2yKmqaiNdsM](https://www.youtube.com/embed/2yKmqaiNdsM) In this course, we will… * Understand the fundamentals of thermal analysis * Learn how to define a thermal FE model * Perform thermal and thermal stress analyses * Perform advanced thermal analyses (non-linear and transient) * Post-process thermal FEA results # Download: Advanced Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/download-advanced-thermal-analysis Great job completing this training! Feel free to download the completed file with descriptions as a resource. **Downloadable Files:** [341\_22\_1 Completed – Advanced Thermal Analysis.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_22_1%20Completed%20-%20Advanced%20Thermal%20Analysis.ntop) *This file was last updated in nTop 4.23.2* # Download: Running a Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/download-running-a-thermal-analysis Great job completing this training! Feel free to download the completed file with descriptions as a resource. Note: **Radiation Boundary Loads** are not supported in linear **Thermal Analysis**–the file below has been updated accordingly. To apply a radiation load, use a **Nonlinear Thermal Analysis**. **Downloadable Files:** [341\_14\_1 Completed – Running a Thermal Analysis.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_14_1%20Completed%20-%20Running%20a%20Thermal%20Analysis.ntop) *This file was last updated in nTop 4.23.2* # Download: Running a Thermal Stress Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/download-running-a-thermal-stress-analysis Great job completing this training! Feel free to download the completed file with descriptions as a resource. See the Static Stress Analysis example to compare with the effects of the added thermal load in the Thermal Stress Analysis. **Downloadable Files:** [341\_18\_1 Completed – Running a Thermal Stress Analysis.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_18_1%20Completed%20-%20Running%20a%20Thermal%20Stress%20Analysis.ntop) *This file was last updated in nTop 4.23* # Example: Creating a Thermal Bonded Contact Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/example-creating-a-thermal-bonded-contact The Heat Sink FE Model below is made of two **FE Components**: the Heat Sink (gray) and the Base (red). It is assumed that the Base is the Independent mesh, while the Heat Sink is the Dependent mesh. ![](https://files.learn.ntop.com/lessons/example-creating-a-thermal-bonded-contact/341_8_1-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647696761_HS1.1647696761252.jpg) *** ![](https://files.learn.ntop.com/lessons/example-creating-a-thermal-bonded-contact/341_8_2-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647697518_Animation.1647697518011.gif) Select the top face of the Base (red) as the Independent part (green face entities) of the **Thermal Bonded Contact** using **FE Boundary by Flood Fill**. *** ![](https://files.learn.ntop.com/lessons/example-creating-a-thermal-bonded-contact/341_8_3-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647697690_Animation.1647697690434-1.gif) Select the mating face of the Heat Sink (gray) to the Base (red) as the Dependent part (green node entities) of the **Thermal Bonded Contact** using **FE Boundary by Flood Fill**. *** > [!NOTE] > > **Note**: the heat sink is presented upside down for viewing the mating surface. ![](https://files.learn.ntop.com/lessons/example-creating-a-thermal-bonded-contact/341_8_4-thermal-contact.gif) Finally, a **Thermal Bonded Contact**(red box) is created between the Heat Sink and the Base *** # FE Model Overview Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/fe-model-overview Before running a thermal (or any) analysis, we must create an **FE Model** and its **Boundary Conditions**. To review the detailed steps of creating an FE Model and common Boundary Conditions in nTop, please refer to the [240: Intro to Simulation](/courses/240-intro-to-simulation/) course. ![](https://files.learn.ntop.com/lessons/fe-model-overview/341_5_1-thermal-model.jpg) **Example:** an FE Model of a heat sink with Boundary Conditions applied A thermal **FE model** is similar in its formulation to a typical **FE Model** used in a **Static Analysis**, except that it includes specific thermal attributes like: ![](https://files.learn.ntop.com/lessons/fe-model-overview/341_5_2-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647685778_isotropic_thermal.1647685777091.png) **Thermal Material Properties** (specific heat, thermal conductivity, coefficient of thermal expansion, density) ![](https://files.learn.ntop.com/lessons/fe-model-overview/341_5_3-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647689347_Connector.1647689345917-1.jpg) **Thermal Connectors** (if there is more than one component, and you desire heat transfer between them) # Follow Along: Advanced Thermal Analyses Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/follow-along-advanced-thermal-analyses [https://www.youtube.com/embed/7KOtA5rhjW8](https://www.youtube.com/embed/7KOtA5rhjW8) > **Transcript** > > In this lesson, we'll explore two additional thermal analysis blocks that are currently in the beta tab. We'll begin with a transient thermal analysis of the brake disc we used in the previous lesson. Then, we'll cover a nonlinear thermal analysis of the same disk. > > Let's begin by adding the **Transient Thermal Analysis block** to our notebook. We'll open up the beta tab, and in the simulation section, we can add a block for transient thermal analysis. Notice that like the **Thermal Analysis block**, we have an input for a model and our boundary conditions. But since the transient analysis is time dependent, we have an end time input, an initial time step, and an output step. This output step is an integer that specifies how many iterations of the analysis are saved. An input of one will save every iteration; an input of two would save every other, and so on. For our FE model, we can use the same model that we used for our initial thermal analysis. I'll drag this model into our input, and I'll create a boundary conditions list to use as our load case. I'll make this into a variable called boundary conditions transient thermal analysis. > > I'll add four inputs, and our inputs will be the same as those from our original thermal analysis. I'll just copy and paste and pull these into our new variable for visibility. I'll input this into our **Transient Analysis block** and set our time inputs with an end time of 2 seconds, an initial time step of 0.1 second, and an output step of one. This block will automatically run, and I'll go ahead and make this a variable called transient thermal analysis. > > After the analysis runs, we can view the results in this window to the right, which will look similar to our thermal analysis results. We can view temperature, heat flux, and thermal reaction flux, and view the results at each solution step. Again, we can edit the color settings and use probe mode to view results at individual mesh elements. > > Now, let's run a nonlinear thermal analysis of this same disc. For the nonlinear analysis, we'll need two additional material properties: conductivity and specific heat of the stainless steel. Therefore, we'll need to create an entirely new FE model for this analysis. Let's begin by defining our material. We'll scroll up to our Brake Disc materials section, and we can add a block for an **Isotropic Material**. I'll make this a variable and call it stainless steel nonlinear. In our properties list, we'll add **Isotropic Thermal Properties**. Since our thermal properties are affected by temperature, we'll need to define both conductivity and specific heat using two **Dictionary blocks**. These blocks each have scalar lists comparing material temperature and the associated property. We'll drag these blocks in as our inputs, and now our variable is ready to be used in an FE model. > > Let's add a **Nonlinear Thermal Analysis block** to our notebook using the beta tab under simulation. We'll then add an **FE Model block** to our notebook, and we'll make this a variable called FE model nonlinear analysis. In our components list, we'll add an **FE Solid Component**, and we'll use our FE mesh of the brake disc as our solid mesh and our new stainless steel material with the conductivity and specific heat defined. We can use the same boundary conditions as we used in our transient thermal analysis, and I'll call this boundary conditions nonlinear analysis. > > I'll drop these boundary conditions in as our load case and pull in our FE model. I'll set a maximum of 10 iterations, and I'll choose an output step of one. We'll make this a variable called nonlinear thermal analysis. After the analysis runs, we can view the results in the right side of the screen, and we have our three thermal analysis options to choose from, as well as a solution step slider to view results at certain steps. > > Now we've completed our advanced thermal analyses, and you can download the completed file as an nTop reference. In this video, we will prepare and run a **Transient Thermal Analysis** and a **Nonlinear Thermal Analysis** on a brake disc. To follow along with the tutorial, download the starter file below. If you prefer to walk through this lesson in PDF format, you can download our PDF guide. For a faster or slower video speed, click on the settings in the bottom right of the video. **Downloadable Files:** [341\_21\_1 Starter – Advanced Thermal Analysis.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_21_1%20Starter%20-%20Advanced%20Thermal%20Analysis.ntop) *This file was last updated in nTop 4.* 23.2 [341\_21\_1 Follow Along – Advanced Thermal Analyses.pdf](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/PDFs/341_21_1%20Follow%20Along%20-%20Advanced%20Thermal%20Analyses.pdf) # Follow Along: Creating a Thermal FE Model Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/follow-along-creating-a-thermal-fe-model [https://www.youtube.com/embed/VDy1Q\_FrVi8](https://www.youtube.com/embed/VDy1Q_FrVi8) > **Transcript** > > Now that we've reviewed the fundamentals of thermal FEA and how to create a thermal FE model, follow along as we create a model for a heat sink and base plate. You can pause this video and download the starter file below to begin. > > Opening up the starter file under the geometry section, we see the implicit models of both the heat sink and the base plate. We'll use these as the bases of our two FE components for this thermal analysis. They'll both be modeled as FE solid components at this interface. Between them, we'll add a connector to model the heat transfer through a thermal paste or interface material. > > In the simulation tab under model, I'll go ahead and add a **Block** for our FE model to our new section. We'll begin by working on our two FE components. Like we've seen in creating FE models for past simulations, we'll need to convert these two implicit bodies to FE volume meshes to run any analyses. In this file, we've already meshed and remeshed the surfaces of both of our components. Then we've converted these surface meshes into volume meshes and finally into FE volume meshes. > > Note that this sample file has specified the two aluminum alloys used as materials for the heat sink and the base plate. These were pulled from the sample materials section underneath the design analysis tab. You can also create your own material for thermal analysis by using a **Material Block** and adding a thermal material property to the properties list of your material. If you plan to use a custom material regularly, you can use it as a **Custom Block** to save some effort down the road. > > Now that we've got our FE volume meshes and materials defined, I'll go ahead and add two **FE Solid Components Blocks** into our components list in our model. Notice that this is a toolkit block denoted by these two vertical lines on the left side. This block allows us to avoid having to use an **FE Solid Attribute Block** nested inside of an **FE Component Block** for our solid meshes and material inputs. I'll use our sink and base meshes and materials that have already been defined, and for visibility, I'll go ahead and make this components list into a variable. > > Now to model the heat transfer between the two bodies, I'll need to add a **Thermal Bonded Contact Block** as our connector. This is found in the model section under our simulation tab. Here we have an input for an independent and dependent boundary, and I'll want to start by selecting the base plate as our independent surface. I'll add the **FE Boundary By Flood Fill Block** and use the base plate as our mesh. We'll choose faces as our entity, and isolating the visibility of our base plate using “I,” I'll drag the gimbal to above this surface where it's going to contact the rest of the heat sink and leave the angle at 45 degrees to choose this entire upper surface. Viewing the visibility of this boundary, we see that we've selected this top surface. > > Similarly, I'll go into our dependent boundary input and add another **FE Boundary By Flood Fill** and use our sink mesh. We'll select faces again and to select our origin, we'll go up to our sink. Isolate that and drag our gimbal to below that surface that's going to contact the base. Again, we'll leave this angle at 45 degrees, and if we toggle the visibility on, we see that we've chosen the face that contacts the base plate. This resistance input defines the thermal resistance of contact elements, and I'll go ahead and add the contact resistance variable included in the starter file. I can make this variable and call it thermal connector. > > Now that we've created our FE components and our thermal connector, we can add them to our **FE Model Block**, and our FE model is complete. I'll make this a variable and call it Thermal FE Model. In this video, we will walk through creating an FE Model for a heat sink and base plate. To review creating FE Volume Meshes, please revisit our [Guide to Meshing](/courses/102-guide-to-meshing/) course. Please download the starter file below to follow along with the tutorial. If you prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower video speed, click on the settings in the bottom right of the video. **Downloadable Files:** [341\_9\_1 Starter – Creating a Thermal FE Model.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_9_1%20Starter%20-%20Creating%20a%20Thermal%20FE%20Model.ntop) *This file was last updated in nTop 4.23.2* [341\_9\_1 Follow Along – Creating a Thermal FE Model.pdf](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/PDFs/341_9_1%20Follow%20Along%20-%20Creating%20a%20Thermal%20FE%20Model.pdf) # Follow Along: Creating Thermal Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/follow-along-creating-thermal-boundary-conditions [https://www.youtube.com/embed/6RfV6JhYIoo](https://www.youtube.com/embed/6RfV6JhYIoo) > **Transcript** > > Now that we've created our FE model, we need to create the other input for our analysis: boundary conditions. You can continue working in the nTop file from our previous lesson. To this heat sink model, we'll apply three boundary conditions. First, a convection boundary load to the surface of the heat sink where heat transfers to the surrounding fluid. Second, a radiation boundary load where heat is transferred from the heat sink via radiation. And finally, we'll add a temperature restraint to the base where the temperature will remain at a constant 373 Kelvin. > > We can begin with this temperature restraint. We can either search **Temperature Restraint** in our search bar or find it under the simulation tab in boundary conditions. For our temperature, we'll want to apply our hot temperature from our inputs. For our boundary, we'll want to select the bottom of this base. We can add an FE boundary by flood fill. Choose the FE mesh of our base, select nodes as our entity, and drag the gimbal underneath this space to select our origin. We'll leave the angle at 45°, and now we've created a constant temperature at each of these nodes. I'll make this a variable and call it FE temperature. > > Now we can add our convection boundary load to the heat sink. I'll start by pulling in a **Convection Boundary Load** block, which can also be found under the simulation tab. I'll have to apply an ambient temperature of the surrounding fluid as well as a convection coefficient. We can pull both of these from our starter files' inputs. For our boundary, again we'll use the FE boundary by flood fill. We can use the FE sink as our mesh, we'll select faces, and we'll drag our origin to above our heat sink. We'll play with the angle a bit to select as much of the heat sink as possible and choose all of these faces. Viewing the convection boundary load, we can view the load applied to our surface. I'll make this into a variable and call it FE convection. > > Finally, we'll create our radiation boundary load. I'll go into our boundary conditions, pull in a **Radiation Boundary Load**, and I can copy and paste the boundary from our convection block into our new block here. I'll apply the ambient temperature and an emissivity value between 0 and 1. I'll make this third boundary condition into a variable called FE radiation. > > Finally, I'll drop all three of these boundary conditions into a boundary conditions list. I'll make that list into a variable called boundary conditions. And now we've finished creating our boundary condition and can move forward in running our thermal analysis. In this video, we will walk through creating Thermal Boundary Conditions for the heat sink and base plate. To follow along with the tutorial, continue working in your file from the previous *Creating a Thermal FE Model* lesson. If you prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower video speed, click on the settings in the bottom right of the video. **Downloadable Files:** [341\_11\_1 Follow Along – Creating Thermal Boundary Conditions.pdf](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/PDFs/341_11_1%20Follow%20Along%20-%20Creating%20Thermal%20Boundary%20Conditions.pdf) # Follow Along: Running a Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/follow-along-running-a-thermal-analysis [https://www.youtube.com/embed/j77ujIOhWks](https://www.youtube.com/embed/j77ujIOhWks) > **Transcript** > > After finalizing our FE model and our boundary conditions, we can move ahead to running our thermal analysis. In the simulation tab, we can expand our analysis dropdown and drop in a **Thermal Analysis** block to our notebook. We'll add our FE model and pull in our boundary conditions. > > The block will automatically run, and we can view our results in the window to the right. Using this dropdown list, we can see three sets of results: the temperature, heat flux, and thermal reaction flux of the model. > > Opening our color settings, we can select one of three color palettes, choose a continuous or banded color transition, and modify the number of bands that we want to see in our model. You can use the probe mode to probe over individual mesh elements and see results at specific points throughout the model. You can section cut using X, select show volume mesh elements, and probe over individual elements. > > Opening up the properties in the details of the **Thermal Analysis** block, we can pull the fields of these three analysis results into our notebook and we can view them using the **Field Viewer**. You can then use these fields to drive further design. > > Another option for driving design based on thermal analysis results is to create a temperature or heat flux point map. Then, making our thermal analysis results into a variable, we can pull it into either the **Temperature** or the **Heat Flux Point Map** block. We can use the point maps of these thermal FAA results for further data-driven design. Note: **Radiation Boundary Loads** are not supported in linear **Thermal Analysis**. To apply a radiation load, use a **Nonlinear Thermal Analysis.** In this video, we will walk through running the **Thermal Analysis** block for the heat sink and base plate and navigating and understanding the results. To follow along with the tutorial, continue working in your file from the previous *Creating Thermal Boundary Conditions* lesson. If you prefer to walk through this lesson in PDF format, you can download our PDF guide below. Once you complete the Follow-Along, feel free to download the completed file below. For a faster or slower video speed, click on the settings in the bottom right of the video. **Downloadable Files:** [341\_13\_1 Follow Along – Running a Thermal Analysis.pdf](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/PDFs/341_13_1%20Follow%20Along%20-%20Running%20a%20Thermal%20Analysis.pdf) # Follow Along: Running a Thermal Stress Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/follow-along-running-a-thermal-stress-analysis [https://www.youtube.com/embed/4PrnGt3li3w](https://www.youtube.com/embed/4PrnGt3li3w) > **Transcript** > > Now that we've discussed running a thermal analysis, let's move on to conducting a thermal stress analysis. In this lesson, I'll give an overview of a thermal analysis that's been run on this brake disc, and we'll use the resulting temperature field to apply in a thermal stress analysis of this same disc. You can download the starter file below to begin. > > First, let's take a look at the thermal analysis that's been conducted on the disc. In the input section of the notebook, we can view some of the parameters that will drive our results. We'll begin by building our FE model off of this brake disc implicit. We'll mesh the body, create a volume mesh, and convert to an FE volume mesh. The selected material will be stainless steel from our material catalog. > > Then we'll move on to creating our boundaries and setting the boundary conditions for our model. We'll start by creating temperature restraints on the outer faces of the disc, and those areas will be restrained to this breaking temperature of 150c. For the inner exposed surfaces of the disc, we'll apply these convection boundaries. At these boundaries, the ambient temperature and the convection coefficient are driven by our variables from above. > > We'll create an **Fe Solid** component for our FE model which consists of our meshed brake disc and our stainless steel material. We'll then add this **Fe Component List** to our model. We can add all of our boundary conditions that we created to a **Boundary Conditions List** and insert our model and our boundary conditions to this **Thermal Analysis** block. > > We'll view the results to the right and we can pull the resulting temperature field from the properties list of our **Block Details**. We'll use this temperature field as our applied temperature load in our thermal stress analysis. Under our thermal stress analysis section, we'll drop a **Static Analysis** block from our simulation tab. We can go ahead and make this a variable called thermal stress analysis. > > Note that we can't use the same model as we did in our thermal analysis because we haven't yet defined thermal properties of our material. We can drop a new **Fe Model** block into our new section. In our **Fe Components List**, we'll add an **Fe Solid** component, and for our mesh we'll use the same brake disc mesh as we used earlier. > > Now, we'll need to apply a material with properly defined thermal properties. I'll add an **Isotropic Material** to our materials input and I'll need to apply both the linear elastic and the thermal properties of stainless steel, as well as its coefficient of thermal expansion. I'll add two inputs to our isotropic material properties and I can pull the first two inputs from our stainless steel variable above. > > When running a thermal stress analysis, we'll also have to pull the density of the material into our solid component. Our coefficient of thermal expansion can be entered as an **Isotropic Thermal Expansion** block, and our alpha value will be 17.5e-6. I'll make this into a variable called “Stainless Steel Coefficient of Thermal Expansion”, and I can add this as our third isotropic material property. > > I'll drop this material into our material section above and I can make this new stainless steel material into a variable as well, calling it “Stainless Steel Thermal Stress Analysis”. I'll make this FE model block into a variable called “FE Model Thermal Stress Analysis”, and I can drop it in as our model input in our **Static Analysis** block. > > Now, we'll move on to creating our boundary conditions. I'll start by defining our initial temperature load. I can add an **Initial Temperature** block and I'll set our initial temperature as our ambient temperature variable above. I'll call this variable “FE Initial Temperature”. > > Next, I'll define our applied temperature using an **Applied Temperature** block. For our applied temperature, I'll pull in the temperature field that we created with our thermal analysis above. I'll make this a variable called “FE Applied Temperature”. > > Next, since this brake disc will be rotating, I'll apply a rotational force using a **Rotational Force** block. For our region, I'll use an **FE Region by Body** block to choose all the cells in the entire brake disc. I'll use the FE Mesh Brake Disc as our mesh, select the cells, and use the Brake Disc Implicit as our body. I'll create an axis at the center of the disc and I'll set our angular velocity using our disc rotation speed variable above. I'll make this a variable and call it “FE Body Force”. > > Next, I'll model the pressure from the brake pads on the outer faces of this disc by using two **Pressure** blocks. Our first boundary has already been defined earlier in our workflow as “FE Boundary TA1”, and our magnitude will be our brake pressure from our variables at the top. For our other pressure block, we'll use “FE Boundary TA2” and use the same magnitude. > > Now, we've created these two boundary conditions with pressure facing the inside of the disc. I'll call these variables “Pressure One” and “Pressure Two”. > > And finally, I'll create displacement restraints at each of the fixed faces in the model. I'll also create one right at this center hole. I'll add a **Displacement Restraint**, use an **FE Boundary by Flood Fill**, apply our disc mesh, select our faces, and move our origin to where we want it. The first will be at the center hole, and we'll make the following six at the six smaller holes. We can do this by copying and pasting our displacement restraint and moving the gimbal around to select these six faces. > > Now that I've created all of these boundary conditions, I'll add them all to a boundary condition list and add them to my static analysis. I'll make this boundary condition list into a variable and add it to the **Static Analysis** block. Viewing the results after this block runs, we see the displacement strain stress and reaction forces from our applied temperature and other boundary conditions. In this video, we will briefly walk through running a **Thermal Analysis** on a brake disc. We will then use the resulting thermal field and an initial, ambient temperature to perform a Thermal Stress Analysis. To follow along with the tutorial, download the starter file below. If you prefer to walk through this lesson in PDF format, you can download our PDF guide. For a faster or slower video speed, click on the settings in the bottom right of the video. **Downloadable Files:** [341\_17\_1 Starter – Running a Thermal Stress Analysis.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_17_1%20Starter%20-%20Running%20a%20Thermal%20Stress%20Analysis.ntop) *This file was last updated in nTop 4.23.2* [341\_17\_1 Follow Along – Running a Thermal Stress Analysis.pdf](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/PDFs/341_17_1%20Follow%20Along%20-%20Running%20a%20Thermal%20Stress%20Analysis.pdf) # Import/Export Options Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/import-export-options ## Import Options It is possible to import static thermal and time-dependent thermal results into nTop. Valid file types for import: 1. \*.rth (ANSYS Thermal Results File) 2. \*.op2 (Nastran Output File) With the **Import Static Thermal Result** block, it is possible to directly import a static thermal analysis result. The import's Path and the Unit System must be defined. ![](https://files.learn.ntop.com/lessons/import-export-options/341_25_1-import.jpg) With the **Import Time Dependent Thermal Result** block, it is possible to directly import a time-dependent (transient) thermal analysis result. The import's Path and the Unit System must be defined. ![](https://files.learn.ntop.com/lessons/import-export-options/341_25_2-time-dep.jpg) *** ## Export Options We can also export thermal analyses (FE Model + Load Case). With the **Export Thermal Analysis** block, it is possible to directly export a thermal analysis. The export *Path*, *Model*, *Load case* and a *Unit System* must be defined. Valid file types for export: 1. \*.inp (Abaqus Input File) 2. \*.cdb (ANSYS Mechanical Input File) 3. \*.bdf, \*.dat, \*.nas (Nastran Bulk Data File) 4. \*.k (LS-DYNA Input File) 5. \*.unv (Universal File Format) 6. \*.pat (Patran Neutral File) 7. \*.msh (ANSYS Fluent Mesh) ![](https://files.learn.ntop.com/lessons/import-export-options/341_25_3-export-them.jpg) # Knowledge Check: Advanced Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/knowledge-check-advanced-thermal-analysis # Knowledge Check: Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/knowledge-check-thermal-analysis # Intro to Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/overview ![Thermal analysis visualization of complex structure with temperature gradient](https://storage.googleapis.com/files-learn/lessons/intro-to-thermal-analysis/Featured_Image_Thermal_FEA.png) This course will take you through running thermal analysis within nTop. After completing this course, you will have developed an understanding of the different inputs to run thermal FEA within nTop and how to use these results to drive your designs. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/before-we-begin-meshing), [240: Intro to Simulation](/lessons/intro-to-structural-analysis/overview) **What will be covered:** * Setting up a Thermal FE Model * Running Thermal and Thermal Stress Analyses * Running Non-linear Thermal and Transient Thermal Analysis using BETA blocks * Understanding Thermal FEA results ### Before We Begin > **[Before We Begin](/lessons/intro-to-thermal-analysis/before-we-begin-thermal-analysis)** > **[Thermal Analysis – Basics](/lessons/intro-to-thermal-analysis/thermal-analysis-basics)** > **[Thermal Analysis – Simulation Types](/lessons/intro-to-thermal-analysis/thermal-analysis-simulation-types)** > **[Thermal Analysis – Current Capabilities](/lessons/intro-to-thermal-analysis/thermal-analysis-current-capabilities)** ### Thermal FE Model > **[FE Model Overview](/lessons/intro-to-thermal-analysis/fe-model-overview)** > **[Thermal Material Properties](/lessons/intro-to-thermal-analysis/thermal-material-properties)** > **[Thermal Connectors](/lessons/intro-to-thermal-analysis/thermal-connectors)** > **[Example: Creating a Thermal Bonded Contact](/lessons/intro-to-thermal-analysis/example-creating-a-thermal-bonded-contact)** > **[Follow Along: Creating a Thermal FE Model](/lessons/intro-to-thermal-analysis/follow-along-creating-a-thermal-fe-model)** ### Thermal Boundary Conditions > **[Thermal Boundary Conditions](/lessons/intro-to-thermal-analysis/thermal-boundary-conditions)** > **[Follow Along: Creating Thermal Boundary Conditions](/lessons/intro-to-thermal-analysis/follow-along-creating-thermal-boundary-conditions)** ### Thermal Analysis > **[Running a Thermal Analysis](/lessons/intro-to-thermal-analysis/running-a-thermal-analysis)** > **[Follow Along: Running a Thermal Analysis](/lessons/intro-to-thermal-analysis/follow-along-running-a-thermal-analysis)** > **[Download: Running a Thermal Analysis](/lessons/intro-to-thermal-analysis/download-running-a-thermal-analysis)** > **[Knowledge Check: Thermal Analysis](/lessons/intro-to-thermal-analysis/knowledge-check-thermal-analysis)** ### Thermal Stress Analysis > **[Running a Thermal Stress Analysis](/lessons/intro-to-thermal-analysis/running-a-thermal-stress-analysis)** > **[Follow Along: Running a Thermal Stress Analysis](/lessons/intro-to-thermal-analysis/follow-along-running-a-thermal-stress-analysis)** > **[Download: Running a Thermal Stress Analysis](/lessons/intro-to-thermal-analysis/download-running-a-thermal-stress-analysis)** ### Advanced Thermal Analysis (Beta) > **[Running a Transient Thermal Analysis \[BETA\]](/lessons/intro-to-thermal-analysis/running-a-transient-thermal-analysis-beta)** > **[Running a Nonlinear Thermal Analysis \[BETA\]](/lessons/intro-to-thermal-analysis/running-a-nonlinear-thermal-analysis-beta)** > **[Follow Along: Advanced Thermal Analyses](/lessons/intro-to-thermal-analysis/follow-along-advanced-thermal-analyses)** > **[Download: Advanced Thermal Analysis](/lessons/intro-to-thermal-analysis/download-advanced-thermal-analysis)** > **[Knowledge Check: Advanced Thermal Analysis](/lessons/intro-to-thermal-analysis/knowledge-check-advanced-thermal-analysis)** ### Thermal FEA Results > **[Thermal FEA Results](/lessons/intro-to-thermal-analysis/thermal-fea-results)** ### Import/Export Options > **[Import/Export Options](/lessons/intro-to-thermal-analysis/import-export-options)** ### What's Next > **[Resources](/lessons/intro-to-thermal-analysis/resources)** # Resources Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/resources ## Additional Resources on Thermal FEA: 1. Video Example: [Thermoelastic Analysis of an Exhaust Manifold](https://www.youtube.com/watch?v=fgTjA-9Im5M) (44 min) 2. Video Example: [Custom Material Properties for Mechanical & Thermal Simulation](https://www.youtube.com/watch?v=YOzMuYuWnR8\&t=875s) (16 min) 3. Article: [How to run a thermal analysis](https://support.ntopology.com/hc/en-us/articles/360052704313-How-to-run-a-thermal-analysis) 4. Article: [How to run a thermal analysis using a thermal bonded contact](https://support.ntopology.com/hc/en-us/articles/1500000253641-How-to-run-a-thermal-analysis-using-a-thermal-bonded-contact) 5. Article: [Can I perform convection and radiation analysis on beam elements?](https://support.ntopology.com/hc/en-us/articles/4406325479443-Can-I-perform-convection-and-radiation-analysis-on-beam-elements-) 6. Article: [How to determine heat flow on a specific part of your model](https://support.ntopology.com/hc/en-us/articles/4408138811539-How-to-determine-the-heat-flow-on-a-specific-part-of-your-model) 7. Article: [Methods for connecting multiple FE meshes in an FE model](https://support.ntopology.com/hc/en-us/articles/1500004967341-Methods-for-connecting-multiple-FE-meshes-in-an-FE-model) 8. Article: [What types of FE data I can export?](https://support.ntopology.com/hc/en-us/articles/360039792513-What-types-of-FE-data-can-I-export-) To explore leveraging thermal analysis-generated data into workflows, please refer to the [320: Data Driven Design](/courses/320-data-driven-design/) course! If you would like to explore more Thermal Analysis examples, download the example files below: **Downloadable Files:** [341\_26\_1 Lattice Thermal Analysis.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_26_1%20Lattice%20Thermal%20Analysis.ntop) [341\_26\_2 Frying Pan Thermal Analysis.ntop](https://files.learn.ntop.com/Courses/341%20Thermal%20FEA/nTop%20Files/341_26_2%20Frying%20Pan%20Thermal%20Analysis.ntop) *This file was last updated in nTop 5.27*.*2* # Running a Nonlinear Thermal Analysis [BETA] Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/running-a-nonlinear-thermal-analysis-beta > [!NOTE] > > **Note**: The **Nonlinear Thermal Analysis** block is a BETA block. ![](https://files.learn.ntop.com/lessons/running-a-nonlinear-thermal-analysis-beta/341_20_1-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647865109_rere.1647865109290.png) The inputs for the block include: * ***FE Model*** * ***Boundary Condition List*** with the restraints and applied thermal loads * ***Maximum iterations*** to run the analysis * ***Solution convergence*** as a tolerance value to stop the analysis where there is a converged result based on a comparison of the Euclidean norm of the solution updated vector of the temperature *(K)* with the specified tolerance value. The default value is 0.001 *K* * ***Reaction Convergence*** as a tolerance value to stop the analysis where there is a converged result based on a comparison of the Euclidean norm of the solution updated vector of the power *(W)* with the specified tolerance value. The default value is 5000 *mm2s-3kg* * ***Output step*** to output the results at every *nth* output step (optional input) The block automatically runs when the necessary inputs are complete. Before running the Nonlinear Thermal Analysis, you must correctly define the nonlinear material property as discussed in the lesson on Thermal Material Properties. After defining the material property correctly in the **FE Model** (as was shown for a Thermal Analysis), and defining the boundary conditions, a **Nonlinear Thermal Analysis** is run as shown below. ![](https://files.learn.ntop.com/lessons/running-a-nonlinear-thermal-analysis-beta/341_20_2-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647867908_Animation.1647867908033.gif) # Running a Thermal Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/running-a-thermal-analysis The **Thermal Analysis** block defines and runs a thermal analysis in nTop. The inputs for the block include the **FE Model** and a **Boundary Condition List**. The block automatically runs when the necessary inputs are complete. ![](https://files.learn.ntop.com/lessons/running-a-thermal-analysis/341_12_1-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647694534_Animation.1647694533384.gif) # Running a Thermal Stress Analysis Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/running-a-thermal-stress-analysis As discussed previously in this course, a *Thermal Stress Analysis* is essentially a static stress analysis with the added consideration of mechanical effects from thermal loads. Below are important steps for performing a Thermal Stress Analysis. > [!NOTE] > > **Note**: There is no dedicated block for Thermal Stress Analysis—a **Static Analysis** block is used to run Thermal Stress Analysis. *** ## 1. Define the Thermal Load (Applied Temperature) The thermal load is an **Applied Temperature Load** with the applied temperature set by the user or input as a field resulting from a **Thermal Analysis**. ![](https://files.learn.ntop.com/lessons/running-a-thermal-stress-analysis/341_16_1-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647692310_1.1647692309428.png) User-defined **Applied Temperature Load** ![](https://files.learn.ntop.com/lessons/running-a-thermal-stress-analysis/341_16_2-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647692702_Animation.1647692701104.gif) Define the **Applied Temperature Load** from an analysis-resultant Temperature Field. The temperature field may also be imported directly. > [!NOTE] > > **Note**: Users can define Applied Temperature Loads from both linear and nonlinear thermal analysis. ## 2. Define Initial Temperature ![](https://files.learn.ntop.com/lessons/running-a-thermal-stress-analysis/341_16_3-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647693552_intial_temp.1647693551322.png) The Initial Temperature can also be field-based. *** ## 3. Define Material Property for Thermal Expansion As explained in the lesson on Thermal Material Properties, apart from the linear elastic property of the material, you must define the coefficient of thermal expansion (CTE) in the **Material Property** list. ![](https://files.learn.ntop.com/lessons/running-a-thermal-stress-analysis/341_16_4-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647693098_Animation.1647693097328.gif) **Example:** for an Isotropic material (done similarly for an orthotropic material) *** After taking the above steps into consideration, run a thermal stress analysis by following the same steps as those for a **Static Analysis**. ![](https://files.learn.ntop.com/lessons/running-a-thermal-stress-analysis/341_16_5-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647693814_Animation.1647693813440.gif) # Running a Transient Thermal Analysis [BETA] Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/running-a-transient-thermal-analysis-beta > [!NOTE] > > **Note**: The **Transient Thermal Analysis** block is a BETA block. ![](https://files.learn.ntop.com/lessons/running-a-transient-thermal-analysis-beta/341_19_1-TransientThermal.jpg) The inputs for the block include: * ***FE Model*** * ***Boundary Condition List*** with the restraints and applied thermal loads * ***Initial* temperature** with the initial temperature of the components in the FE Model. * ***Duration*** to set the Duration of the simulation. * ***Initial time step*** for the transient analysis, with automatic control of subsequent time steps * ***Save increment*** input controls the amount of data stored and accessible after the simulation completes. The default value of 1 will save results for all increments, whereas 0 will save only the first and last increments. For any value N > 1, the block will save results for every N increment. * ***Fixed time step*** checkbox is to fix the initial time step for the entire analysis. If this option is unchecked, the solver uses an automatic time-stepping scheme that varies the initial time step based on the stability of the analysis. The block automatically runs when the necessary inputs are complete. Before running the analysis, it is necessary to correctly define the material property (esp. density) as explained in the lesson on Thermal Material Properties for a Transient Thermal Analysis. After defining the material property in the FE Model (as shown for a Thermal Analysis) and defining the Boundary Conditions, a **Transient Thermal Analysis** is run as shown below. ![](https://files.learn.ntop.com/lessons/running-a-transient-thermal-analysis-beta/341_19_2-TransientThermalAnalysis-1.png) # Thermal Analysis – Basics Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/thermal-analysis-basics ## Common Terms > **Heat** > > Heat is the form of energy transferred between systems or objects with different temperatures, flowing from the high-temperature system to the low-temperature system. > > ***SI unit: Joule (J)*** > **Heat Flux** > > Heat flux is the flow of energy per unit of area per unit of time. It has both a direction and a magnitude, so it is a vector quantity. > > ***SI unit: Watts per square meter (W/m2)*** > **Heat Generation** > > Heat generation, or “internal heat generation,” is the heat generated by the bulk matter (volume) of a body. It is typically used to model heat sources or sinks in an analysis. > > ***SI unit: Watts per cubic meter (W/m3)*** > **Temperature** > > Temperature is a physical quantity that expresses the degree of hotness or coldness. > > ***SI unit: Kelvin (K)*** ## Heat Transfer Modes There are three fundamental modes of heat transfer > **Thermal Conduction** > > Thermal conduction is the transfer of heat energy by microscopic collisions of particles and movement of electrons within a body. Conduction takes place in most phases: solid, liquid, and plasma. Thermal conduction can be represented by Fourier's Law: > > ***q= -k∇ T*** > > where: > > ***q*** is the local heat flux density, *W/m2* ***k*** is the material's thermal conductivity, *W/(m·K)* ***∇ T*** is the temperature gradient, *K/m* > **Thermal Convection** > > Convection is the transfer of heat energy from one place to another by the movement of fluid. The basic relationship for heat transfer by convection is: > > ***Q̇ = hA(T-Tf)*** > > where: > > ***Q̇*** is the heat transferred per unit time, *W **h*** is the heat transfer coefficient, *W/(m2K)**A*** is the area of the object, *m2**T*** is the object's surface temperature, *K **Tf*** is the fluid temperature, *K* > > The convective heat transfer coefficient relates the heat flux to the temperature difference between the boundary and the fluid medium. It is dependent on the physical properties of the fluid and the physical situation. > **Thermal Radiation** > > Thermal radiation is the transfer of heat energy via electromagnetic waves from an emitting body. Thermal radiation can be represented by the Stefan-Boltzmann's Law: > > ***q = εσT4*** > > where: > > ***q*** is the radiation heat flux density, *W/m2**ε*** is the emissivity (a measure of the effectiveness of the body to emit energy) and ranges between 0 and 1 ***σ*** is the Stefan-Boltzmann's constant, equal to *5.670374419×10-8 W/m2K4**T*** is the absolute temperature, *K* # Thermal Analysis – Current Capabilities Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/thermal-analysis-current-capabilities Three types of thermal analyses are currently available within nTop: Steady-state, linear **Thermal Analysis** in the *Simulation* tab ![](https://files.learn.ntop.com/lessons/thermal-analysis-current-capabilities/341_4_1-Simulation-Ribbon-2.jpg) **Nonlinear** and **Transient Thermal Analysis** in the *Beta* tab ![](https://files.learn.ntop.com/lessons/thermal-analysis-current-capabilities/341_4_2-Beta-Ribbon.jpg) ## Overview of Thermal FEA in nTop | Block Name | Solver | Transient / Steady-state | Linear / Nonlinear | Nonlinearity Type | Modeling of Lattices | Required Material Properties | | - | - | - | - | - | - | - | | Thermal Analysis | Implicit | Steady-state (static) | Linear | NA | Solids and/or Beams\*\* | Thermal Conductivity +Specific Heat | | Transient Thermal Analysis | Implicit | Transient (dynamic) | Linear | NA | Solids and/or Beams\*\* | Thermal Conductivity +Specific Heat+Density | | Nonlinear Thermal Analysis | Implicit | Steady-state (static) | Nonlinear | Material only\* | Solids and/or Beams\*\**\** | Thermal Conductivity \[Temperature Dependent]+Specific Heat \[Temperature Dependent] | *\*Temperature-dependent thermal conductivity and specific heat* *\*\*Beam-based lattices (Graphs) cannot be submitted to Convection or Radiation Boundary Loads (which are necessarily applied to face entities) as it is not possible to select faces in an FE Lattice Mesh. It is therefore necessary to mesh the beam lattices as solid elements in this case.* *\*\*\*For a Nonlinear Thermal Analysis, all FE components must be assigned with nonlinear properties* > [!NOTE] > > **Note**: It is possible to perform an uncoupled Thermal Stress Analysis by taking the result of a **Thermal Analysis** / **Transient Thermal Analysis** /**Nonlinear Thermal Analysis** and using it as a boundary condition in a **Static Analysis** to obtain the mechanical response of the thermal load due to expansion/contraction. Refer to the lesson on *[Thermal Stress Analysis](https://learn.ntop.com/lessons/running-a-thermal-stress-analysis/)*. # Thermal Analysis – Simulation Types Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/thermal-analysis-simulation-types The quality or 'correctness' of the results of a simulation depends on its assumptions. To enable the development of representative models, a brief overview of the different considerations relevant to a thermal analysis is presented below. ## Linear vs. Nonlinear Analysis A nonlinear thermal problem, as opposed to a linear one, typically involves: * Temperature-dependent material properties * Temperature-dependent boundary conditions ## Thermal vs. Thermal Stress Analysis A ***Thermal Analysis*** solves a thermal problem with only thermal quantities as results like temperatures and heat fluxes. A ***Thermal Stress Analysis*** (also called ***thermo-elastic analysis***) solves for the mechanical behavior of a model in terms of stress, strain, deformation, etc. induced due to thermal loads, in addition to calculating the response due to other mechanical loads and boundary conditions. → Therefore, a thermal stress analysis is essentially a static structural analysis. An additional thermal property, the ***coefficient of thermal expansion*** of the material, must be defined. The coefficient of thermal expansion (*SI units: 1/K*) describes how the size of an object changes with a change in temperature. > [!NOTE] > > **Note**: The thermal stress analysis capability in nTop is uncoupled, i.e., only mechanical effects driven by thermal loads are calculated and not vice versa. ## Steady-State vs. Transient Thermal Analysis A ***steady-state thermal analysis*** calculates the thermal response at thermal equilibrium, with all thermal loads and boundary conditions in steady-state, with all effects of time essentially neglected. This type of analysis is analogous to solving a static structural FEA problem. A ***transient thermal analysis*** calculates a model's thermal response over a period of time. Thermal inertia effects due to density and specific heat of the material, therefore, become relevant. Solving a transient thermal analysis is analogous to solving a dynamic structural FEA problem. > [!TIP] > > **Tip:** A steady-state thermal analysis applies when time behavior is irrelevant and only the results at equilibrium conditions are needed. A transient thermal analysis applies when thermal inertial effects are important or if there are extreme non-linearities in the model. # Thermal Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/thermal-boundary-conditions A thermal **FE Model** must contain a set of **Boundary Conditions**. The thermal analysis-related boundary conditions (in red box) can be accessed in the *Simulation* tab of the ribbon. ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_1-boundary.jpg) The relevant boundary conditions to a thermal analysis are defined in a **Boundary Condition List** block, as shown below. ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_2-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647695375_Animation.1647695373858.gif) **Example:** Defining a Boundary Condition List with three BCs (Temperature Restraint, Convection, and Radiation) *** The various thermal boundary conditions available in nTop are explained below. > **Surface Heat Flux** > > Applies a distributed heat flux normal to selected boundary face entities (either CAD or FE boundary) with the input of Magnitude (can be field-based). You can reverse the heat flux direction normal with a negative sign when defining its magnitude. > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_3-surface-heat-flux.jpg) > **Convection Boundary Load** > > Applies a convection load to selected boundary face entities (either CAD Face or FE Boundary) with inputs of Ambient temperature and Convection coefficient (can be field-based). > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_4-convection-load-1024x141.jpg) > **Radiation Boundary Load** > > Applies a radiation load to selected boundary face entities (either CAD Face or FE Boundary) with inputs: Ambient temperature and Emissivity (can be field-based). > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_-5-radiation-bounda.jpg) > **Heat Generation** > > Applies a total heat generation power to a selected Region. The quantity of heat generation is distributed across the nodes based on volume fraction. The Magnitude of heat generation input is mm2s-3kg (W). > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_6-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647688642_heat.1647688641320.png) > **Volumetric Heat Generation** > > Similar to the Heat Generation boundary condition, but additionally allows the magnitude of heat generation to be field-based. The magnitude of volumetric heat generation input is mm-1s-3kg (W/m3). > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_7-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647688483_vol.1647688482373.png) > **Temperature Restraint** > > Applies a temperature boundary restraint (can be field-based) to selected Boundary entities (either CAD Face or FE Boundary). > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_8-temp-restrINT-1.jpg) The following boundary conditions are specific to a ***Thermal Stress Analysis***: > **Initial Temperature** > > Defines a baseline temperature (can be field-based) to be used in a thermal stress analysis in order to calculate the stress due to expansion/contraction based on the difference between the **Initial Temperature** and the **Applied Temperature Load**. > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_9-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647688018_initial_temp.1647688017291-1.png) > **Applied Temperature Load** > > Defines an Applied Temperature (can be field-based) to be used in a thermal stress analysis to calculate the stress due to expansion/contraction based on the difference between the **Initial Temperature** and the **Applied Temperature Load**. > > ![](https://files.learn.ntop.com/lessons/thermal-boundary-conditions/341_10_10-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647688090_applied.1647688089609-1.png) # Thermal Connectors Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/thermal-connectors Thermal connectors are typically used to enable heat flux between separate meshes in a model by thermally linking them. These are analogous to structural bonded contacts and tie constraints commonly used in structural stress analyses. Thermal connectors are necessary if there are multiple **Components** in the **FE Model**. In heat sink applications, a thermal paste or an interface material fills microscopic imperfections and maximizes heat transfer between the mating surfaces of the heat source and heat sink. Thermal connectors conveniently model such interfaces. ![](https://files.learn.ntop.com/lessons/thermal-connectors/341_7_1-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647689493_re.1647689492262.png) **Example:** an FE Model with a Thermal connector defined between two FE Components *** ## Thermal Bonded Contact Thermal connectors are modeled with a **Thermal Bonded Contact** block which enables heat flux between two components. As in other FEA tools, the thermal bonded contact is based on a master-slave formulation. ![](https://files.learn.ntop.com/lessons/thermal-connectors/341_7_2-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647689347_Connector.1647689345917.jpg) The **Thermal Bonded Contact** block inputs are: * ***Independent:*** Independent (master) mesh, with entities as Faces only * ***Dependent:*** Dependent (slave) mesh * ***Resistance:*** Resistance of the thermal bonded contact * ***Tolerance:*** A suitable tolerance for the distance between the independent mesh and the dependent mesh to create the thermal bonded contact * **Note**: Independent and Dependent meshes can be selected via: * **FE Boundary by Flood Fill** * **FE Boundary by Body** * **FE Face Boundary** * **Boundary by Body** To learn more about meshing and selecting regions of a mesh, please refer to the [102: Guide to Meshing](/courses/102-guide-to-meshing/) course. > [!TIP] > > **Tip:** > Experimenting with different *Tolerance* values may help achieve optimal definition of the thermal bonded contact between two FE Meshes. > Generally, the dependent (slave) mesh should have a more refined mesh. ## Resistance *Resistance (K/W)* input in the **Thermal Bonded Contact** block is the reciprocal of thermal contact conductance (W/K), typically measured in experimental tests. # Thermal FEA Results Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/thermal-fea-results The results of all thermal analyses include fields such as Temperature, Heat Flux, and Thermal Reaction Flux which are available in the Properties of the relevant **Thermal Analysis** block. ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_1-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647690277_ta2.1647690276699.png) **Example:** Field results (Temperature, Heat Flux and Thermal Reaction Flux) for a Thermal Analysis *** These fields can be brought into the Notebook and visualized with the Field Viewer, as shown below. ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_2-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1648029700_Animation.1648029701467.gif) **Example:** Bringing resultant fields from the properties of a **Thermal Analysis** block in to the Notebook *** ## Field Results The following field results can be directly viewed by isolating the relevant analysis block for **Thermal Analysis**, **Transient Thermal Analysis** and **Nonlinear Thermal Analysis**: 1. Temperature *(K)* 2. Heat Flux *(W/m2)* 3. Thermal Reaction Flux *(W/m2)* ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_3-ThermalGIF.gif) For a **Transient Thermal Analysis** and **Nonlinear Thermal Analysis**, the field results can be visualized at various Solution Steps to see their temporal evolution as shown below. ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_4-TransientThermalGIF.gif) ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_5-NonlinearThermalGIF.gif) > [!NOTE] > > **Note**: For a Thermal Stress Analysis, the post-processing is the same as that for the Static Analysis, as covered in the [240: Intro to Simulation](/courses/240-intro-to-simulation/) course. ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_6-ThermalStressGIF.gif) **Example:** Brake-disk deformation due to thermal expansion ## Temperature Point Maps It could be interesting to create a **Temperature Point Map** from thermal analysis results, which could be used further in field-driven design. ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_7-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647704967_Animation.1647704967489.gif) ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_8-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1648038972_stdsfs.1648038972772-1.jpg) Temperature as a Field ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_9-1-1.png) Temperature as a Point Map > [!NOTE] > > **Note**: To learn more about how to leverage point maps for advanced engineering workflows, refer to the [320: Data Driven Design](/courses/320-data-driven-design/) course. ## Probe Mode to View Individual Values You can directly probe values of the simulation results (fields) and point maps using the Probe Mode tool as shown below. ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_10-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1648039327_wefsfff.1648039327814-1.gif) *Probe Mode tool used for the****exterior**\*\*of the model on a Temperature field* ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_11-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1648039370_fsgfgfdgd.1648039371344-1.gif) *Probe Mode tool used for its point map* ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_12-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1648040641_inter1.1648040642014-1.gif) *Probe Mode tool used for the****interior**\*\*of the model on a Temperature field* ![](https://files.learn.ntop.com/lessons/thermal-fea-results/341_24_13-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1648040656_inter2.1648040657106-1.gif) *Probe Mode tool used for its point map* # Thermal Material Properties Source: https://docs.ntop.com/lessons/intro-to-thermal-analysis/thermal-material-properties In this lesson, we will explore material properties and different types of thermal analysis offered in nTop. ## Thermal Analysis In the **Isotropic / Orthotropic Thermal Property** blocks, we specify values of *Conductivity* *(W/(m⋅K))* and *Specific Heat* *(J/(kg⋅K))*. ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_1-props.jpg) Next, we input the **Isotropic / Orthotropic Thermal Property** into the **Isotropic / Orthotropic Material Property List** block within an **Isotropic / Orthotropic Material** block as shown below. ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_2-materialprops.gif) *** ## Thermal Stress Analysis As mentioned before, a *thermal stress analysis* is essentially a static stress analysis which considers the expansion / contraction effects of a thermal load (thermal fields) from a thermal analysis. To run a thermal stress analysis, we must define an additional property (i.e. an **Isotropic / Orthotropic Thermal Expansion Property**) with a value of *coefficient of thermal expansion (CTE)* *(K-1)* specified, apart from the usual **Isotropic / Orthotropic Linear Elastic Property** in the **Isotropic / Orthotropic Material** block as shown below. ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_3-exp-prop-1024x148.jpg) ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_4-thermal-stress-analysis-gifs.gif) *** ## Transient Thermal Analysis \[Beta] We define material properties for a **Transient Thermal Analysis** the same way as we do a **Thermal Analysis**, with the addition of the material's *Density*. ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_5-new-gifs.gif) *** ## Nonlinear Thermal Analysis \[Beta] For a **Nonlinear Thermal Analysis**, we specify temperature-dependent thermal conductivity and temperature-dependent specific conductivity in **Dictionary** blocks as shown below. ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_6-nonlin-1024x411.jpg) Using the **Dictionary** block to define *Specific Heat* and *Conductivity* for an isotropic material (also possible in a similar way for an orthotropic material). We then input the dictionaries into the **Isotropic / Orthotropic Thermal Property** blocks. > [!NOTE] > > **Note**: The option to input Dictionaries must be activated by using the block overload of the **Isotropic/ Orthotropic Thermal Property** blocks. ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_7-instructor_5u3dqlmop2xik78c9dl5vykpg_public_1647700846_Animation.1647700846464-1.gif) **Example:** for an isotropic material (also possible in a similar way for an orthotropic material) *** ## Material Library In nTop, there are certain Sample Materials available in the *Design Analysis* tab in the ribbon. It should be noted that these materials do not have a defined thermal expansion (CTE) property, and must therefore be explicitly defined by the user before performing a thermal stress analysis. ![](https://files.learn.ntop.com/lessons/thermal-material-properties/341_6_8-Sample-Materials-1024x190.jpg) # Answer to TopOpt Test Problem Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/answer-to-topopt-test-problem [https://www.youtube.com/embed/PoMGJ\_kLwfA](https://www.youtube.com/embed/PoMGJ_kLwfA) > **Transcript** > > Let's walk through a solution of this topology optimization problem. You can use the controls in the bottom right corner of this video to speed up or slow down as needed. The starter file includes this initial geometry section containing the imported CAD bracket, which was first converted to an implicit design space. > > The four bolt holes were specified in this CAD face list called restrained faces. Here's where we'll create our displacement restraint. Then we'll do the same for the two loaded faces where we'll apply a loaded boundary condition. To specify all of the passive faces, or the faces we want to maintain geometrically throughout the process, we concatenate these two lists and call the variable passive faces. > > Then we'll move on to create our FE mesh where we'll first mesh the design space, remesh the surface, and create a volume mesh from our result. After this, we'll convert to an FE mesh and create our FE model with our FE mesh and a specified material. > > Next, we'll define our FE boundaries starting with the loaded faces. We'll use the **Boundary By Body** block to select the nodes we specify by thickening the load faces CAD list that we made earlier. We use an **Implicit Body From CAD** block followed by a **Thicken Body** Boolean. These two parts together then use the **Boundary By Body** block to select the nodes in the specified region. Then we'll use the same process to select our restrained faces. > > To specify the passive region, or the region around the interfaces that we wish to preserve, we'll use the same process for the passive faces list. Here, we want to preserve 3 mm of material around the faces, so we've created this variable called passive region offset and then multiplied it by two because our **Thicken Body** block works in both directions and we'll lose half the thickness in our post processing later on. > > After defining our boundaries, we'll move on to create our loading conditions starting with a displacement restraint at their strained faces. All of these inputs are left at zero to allow zero degrees of freedom at these four holes. We then create a boundary condition list where we combine this displacement restraint with a new force of 40,000 Newtons in the positive Z direction on the loaded bases. > > And now we can move on to specifying the optimization objective. In this case, we want to minimize structural compliance under this loading condition that we've created. Next, we'll apply constraints to our top op. We start with a passive region constraint to maintain the geometry at our specified passive regions and we'll add a volume fraction response so the top op result is at most 30% of the initial bracket volume. Now input all of our information into a **Topology Optimization** block and we'll get the results that we see here. > > To post process into an implicit body, we'll use an **Implicit Body From Topology Optimization** block followed by a **Smoothing Body** block with a cubic interpolation to make a smooth result from our optimization. Finally, we'll use the thickened implicits of the passive faces and Boolean union them with our smooth result. And finally, we'll use a Boolean intersect to ensure that all of the interfaces are the correct geometry and that our new part falls within the initial design region. > > Now we've completed our topology optimization and post-processing of this bracket. Feel free to download the completed nTop file below as a resource. Great job completing this problem! Follow along to see a solution. Feel free to download the completed file with descriptions as a resource. **Example File:** [340\_17\_1 Complete — Topology Optimization Test Problem.ntop](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/nTop%20Files/340_17_1%20Complete%20--%20Topology%20Optimization%20Test%20Problem.ntop) *This file was last updated in nTop 5.12.2* # Before We Begin: Topology Optimization Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/before-we-begin-topology-optimization [https://www.youtube.com/embed/tlBtz-YF5vg](https://www.youtube.com/embed/tlBtz-YF5vg) ***Why run Topology Optimization in nTop?*** * Consolidated workflow – edit your part in the same UI as your simulation and topology optimization results * Combine techniques – Easy post-processing (conversion, smoothening, shell, infill) of topology optimization results in suitable CAD components or manufacturable parts. * Automation of Topology Optimization by changing design parameters at any step in the process. * Swift output of results, including CAD file format * Go beyond Topology Optimization for design insight – build a complete workflow for manufacturing In this course, we will: 1. Review FE Models and Boundary Conditions 2. Understand the different input options for running a Topology Optimization 3. Explore the Constraints and optimization Objectives 4. Apply Topology Optimization to a part of nTop 5. Post-process an Optimized part # Defining Constraints Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/defining-constraints The user must also provide constraints for the **Topology Optimization** block. An underconstrained TopOpt process will fill in or remove all volume from the design region because those results lead to the minimization or maximization of the design response. Therefore, TopOpt procedures must be properly constrained to achieve meaningful results. ![](https://files.learn.ntop.com/lessons/defining-constraints/Constraints-1.png) > **Design Response Constraint** > > A defined design response drives the TopOpt result. The most commonly used constraint applies a minimum or maximum bound to a design response, such as compliance, volume fraction, displacement, or stress. > > Choose a design response that must be restricted/constrained in the topology optimization. > > You may choose any of the design responses to constrain, ensuring the solution meets and falls under or exceeds your quantitative restriction (dependent on your choice), for example: > > * Limiting the final volume of your part to 30% or less (with an input of 0.3) > > * Limiting the stress in a particular FE region to 30 MPa or less > > * Limiting the displacement of a node in a particular FE region to 2 mm or less > > > [!TIP] > > > > **Tips:** > > In cases where you want your solution to meet or exceed quantitative restrictions, you may want to include an upper and lower bound in the constraint.This tool ensures your optimization objective converges to an ideal solution. Rarely is structural compliance used as an optimization constraint, as it is often chosen as the objective. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/Design-Response-Constraint-1.png) > **Passive Region Constraint** > > The **Passive Regions Constraint** specifies a volume in which the topology will not be modified by the TopOpt process. The elements within a passive region (the three holes in the image below) will still be considered in the calculations throughout the TopOpt, but TopOpt density will remain 1. Specify any FE region. By default, the FE regions for the boundary conditions are passive. During post-processing with the **Smoothen Body** block, regions designated to be passive are also smoothened. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/passive-region-constraint.jpg) > **Extrusion Constraint** > > The **Extrusion Constraint** will produce a TopOpt part with a consistent profile along the direction of a specified curve. > > To accurately use this constraint, the user must create a curve (orthogonal to the full design space – starting at/before and ending at/after) through which all tet elements are fixed to a high-density threshold. > > A defined extrusion profile along the direction of a specified curve creates a TopOpt result to have a consistent profile for manufacturing. To best use this block with a fully extrudable part, set the boundary penalty of your TopOpt to 0 (Neumann criteria). This will help force tet elements to follow the extrusion curve more appropriately. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/extrusion-constraint.gif) > **Planar Symmetry Constraint** > > A **Planar Symmetry Constraint** can be added to the constraints list to ensure symmetry in the resulting TopOpt part. Using the **Mirror FE Mesh** block, it is recommended to use a symmetrical FE Mesh that matches the planar symmetry of the TopOpt constraint. Although the design space and TopOpt result will be symmetric when this constraint is used, the boundary conditions do not have to be symmetrical. A defined plane creates a symmetric TopOpt result with the same density on either side. > > The model should be inherently symmetric for this to work. Planes should be orthogonal to the model and placed through the centroid of the FE model. > > > [!NOTE] > > > > **Note:** A symmetric mesh about the plane splitting the part offers a more optimal solution. > > To create a symmetric mesh: > > * Cut the design space in half > * FE mesh this half > * Mirror the FE Mesh about your plane to create the second half of your design space. > * Merge the FE meshes to tie both halves back together > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/planar-symmetry-constraint.jpg) > **Overhang Constraint** > > An [**Overhang Constraint**](https://support.ntopology.com/hc/en-us/articles/360060738793-How-to-use-the-overhang-constraint-in-Topology-Optimization), typically used for additive manufacturability, controls the maximum overhang angle a Topology Optimization produces. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/overhang-constraint.gif) > **Min Feature Size Constraint** > > The Min Feature Size Constraint block can be used as a constraint in the Topology Optimization block to maintain the feature sizes of the optimized design space above a user-defined value. This block is typically used to correct feature disconnections in the optimization result and to enforce a minimum feature size limit to the design space based on requirements from a manufacturing process. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/Min_and_Max_Constraint-1024x663-1.png) > **Max Feature Size Constraint** > > The Max Feature Size Constraint block can be used as a constraint in the Topology Optimization block to maintain the feature sizes of the optimized design space below a user-defined value. This block can be used with the Min Feature Size Constraint to enforce an upper and lower limit to the feature sizes generated from Topology Optimization. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/Min_and_Max_Constraint-1024x663-2.png) > **Demold Constraint** > > The Demold Constraint block ensures the manufacturability of the final results for castings or plastic injection molding parts. The block prevents overhangs or undercuts based on a defined Demold Direction. You can use this block for a single draw, a split draw with a variable surface, or a split draw with a known surface. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/demold-constraint.jpg) > **Pattern Repetition Constraint** > > A Pattern Repetition Constraint ensures the TopOpt is consistent across a cell map, defining the repeated pattern. > > ![](https://learn.ntop.com/wp-content/uploads/2023/12/pattern-repetition-constraint.jpg) # Download: Post Processing Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/download-post-processing Great job completing this training! Feel free to download the completed file with descriptions as a resource. Next, if you would like to test your knowledge on post processing parts after TopOpt in nTop, feel free to try our optional Knowledge Check. **Example File:** [340\_14\_1 Complete — TopOpt & Post Processing.ntop](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/nTop%20Files/340_14_1%20Complete%20--%20TopOpt%20%26%20Post%20Processing.ntop) *This file was last updated in nTop 5.12.2* # Follow Along: Objectives and Constraints Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/follow-along-objectives-and-constraints [https://www.youtube.com/embed/nOFbvyNZPps](https://www.youtube.com/embed/nOFbvyNZPps) > **Transcript** > > Now that we've created an FE model and set boundary conditions, in this case, our load case and restraints, we can go ahead and start filling in our **Topology Optimization** block. To get started, you can continue working in the file used in the previous optional video, or you can download the starter file below. > > We'll begin by creating a section titled “Topology Optimization,” and we'll add the **Topology Optimization** block to our notebook. Now, we'll add the FE model that we've already created, and this would be the same model from any simulation we've already run in this workflow. Our objective input is where we define what we want to gain out of this optimization. Often, we'll assign multiple design responses to give multiple load cases. This is more realistic, as most parts aren't subjected to only one load case. > > To add an objective to our **Topology Optimization** block, we can double-click and choose **Optimization Objective**. When applying multiple objectives, we can use this weights input to assign different weightings to each of the inputs. If the weights input is left blank, all objectives will be assigned the same weighting. Our design responses for the optimization objectives can be found in the Topology Optimization ribbon underneath “Design Responses.” Here, we have four different responses: volume fraction, structural compliance, stress response, and displacement response. > > Additional design responses can be found in the beta tab underneath “Topology Optimization.” A commonly used response can be found in our design responses, and that would be this structural compliance response. We can pull this into our design response, and for its load case, we can assign our two boundary conditions we established earlier. We'll pull in this fixed restraint and our force. > > Taking a look at our FE model above, our two fixed holes will be these two outer holes, and our force will be applied downward on this middle hole. Scrolling back down to our objectives, I'll select that we want to minimize the structural compliance of this entire body. If you want to apply this objective to only one specific region, you can use this optional input. The constraints input in the **Topology Optimization** block will most commonly apply a minimum or bound to a design response. > > Like objectives, multiple constraints can be applied to a **Topology Optimization** block. Those constraints can be found here in our Topology Optimization ribbon in addition to our pattern repetition constraint, which can be found in our beta tab. For this example, I'll apply a volume fraction constraint as well as a planar symmetry constraint. I'll set the volume fraction constraint as 0.25, indicating that our nTop results will have a volume 25% or less of our original volume. > > I'll use the planar symmetry constraint to ensure that our nTop result is identical on either side of the bracket. To do this, I'll create a plane from normal and set our origin at the centroid of our design region. Now, we can see that this plane from normal splits this FE model down the middle. I'll add these two constraints to our **Topology Optimization** block, and now I've finished setting up my objectives and constraints. Follow along to establish Objectives and Constraints within the **Topology Optimization** block. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. You can continue working in the nTop file we created in the FE Model and Boundary Conditions review video earlier in the course. Or, download the starter file below. **Example File:** [340\_8\_1 Starter — Objectives and Constraints.ntop](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/nTop%20Files/340_8_1%20Starter%20--%20Objectives%20and%20Constraints.ntop) *This file was last updated in nTop 5.12.2* [340\_8\_1 Follow Along – Objectives and Constraints.pdf](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/PDFs/340_8_1%20Follow%20Along%20-%20Objectives%20and%20Constraints.pdf) # Follow Along: Post Processing Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/follow-along-post-processing [https://www.youtube.com/embed/rit9ehBGsls](https://www.youtube.com/embed/rit9ehBGsls) > **Transcript** > > Now that we've completed our topology optimization, we need to do some post-processing to finalize our part. We have topology optimization results, but no implicit body with the resulting geometry. We've also lost some of the interfaces of the bracket, which are essential to the functionality of the part. We'll create a new section called post-processing. > > We'll begin by adding an **Implicit Body from Topology Optimization** block to our notebook. Our topology optimization results in, and this will pull the resulting geometry from the topology optimization back into nTop form. Then we'll use this as an input in a **Smooth and Body** block. This will smooth the jagged resulting surfaces from the topology optimization. We can modify the grid size and the number of smooth iterations as needed. > > With this linear interpolation, we can see geometric artifacts on the surface of our part. A cubic interpolation type will typically produce a smoother, more continuous body than linear. Since I want to smooth the entire body rather than a section in a bounding box, I can leave this domain input blank. I'll right-click and make this a variable called Smooth Body. Now we have a nice smooth body with geometry driven by our topology optimization results. > > Next, we want to recreate our interfaces that we lost at the three holes. Previously, in our geometry section, we created this CAD facelist variable called Interfaces. I'll use an **Implicit Body from CAD Body** block and then a **Thicken Body** block to make these three holes into implicit bodies. I'll set the thickness here at 4 mm. Then I'll add this implicit body list to a **Boolean Union** block, so the three interfaces are now one implicit body. > > Isolating this with the hotkey “I”, we now have one implicit body for the interfaces and one implicit body for our topology optimization result. I'll add another **Boolean Union** block, and I'll merge these three holes with our smooth body to make one single part with our interfaces and topology optimization results. I'll apply a slight blend radius, and now we have one single part. > > Now if I scroll back up to our initial design region and turn the visibility on, I see that some of this part falls outside of our initial design region, and these holes have gotten a bit smaller because of the **Thicken Body**. So I'll add a **Boolean Intersect** block, and I'll add our new body and our initial design region to trim any excess material outside of our design region from our **Thicken Body** operation, and to ensure the holes in this interface are the same size as the initial region. Now if I isolate this final part using the hotkey “I”, I have a nice trimmed and topology optimized part that can be used in nTop or exported as needed. I'll right-click on this block to make it a variable and call that Final Part. Follow along and post-process this Topology Optimization. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. **Example File:** [340\_13\_1 Starter — Post Processing.ntop](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/nTop%20Files/340_13_1%20Starter%20--%20Post%20Processing.ntop) *This file was last updated in nTop 5.12.2* [340\_13\_1 Follow Along – Post Processing.pdf](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/PDFs/340_13_1%20Follow%20Along%20-%20Post%20Processing.pdf) # Follow Along: Topology Optimization Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/follow-along-topology-optimization [https://www.youtube.com/embed/yWZljie7jAs](https://www.youtube.com/embed/yWZljie7jAs) > **Transcript** > > After establishing the optimization objectives and constraints in our last lesson, the topology optimization has already run. Let's take a closer look at this block, all its inputs, and the information that we see in the results. For now, we'll collapse our optimization objective and our constraints and focus only on the **Topology Optimization** block. > > The input for Max iterations is pre-populated with a value of 200. Because topology optimization is iterative, we can set a limit for the number of iterations attempted for more complex optimizations that may take longer to run. This should help users to reduce computation time, with the trade-off of accuracy. > > Another way to reduce computation time, assuming the same trade-off, is by modifying this minimum objective change. Once the top op iterations converge to within this number, the process is considered complete. Therefore, the higher the minimum objective change, the faster the optimization will converge, and the lower this input, the longer it will take to run. Minimum density change is another convergence threshold, one that compares the optimized density between iterations. Again, we'll see a slight trade-off between accuracy and computation time. The boundary penalty affects density values at the edges of the design space. An input of one will lower the density at the edges, while an input of zero increases the density. Therefore, lesser inputs will remove more inner material from the part and greater inputs will remove more material at the edges. > > Save increment controls data storage and therefore affects file size. An input of zero will save only the first and last iterations. An input of one will produce the largest file size and save every iteration, and any input larger than one will be the increment by which iterations are saved. For example, an input of two would save every other iteration of the topology optimization. Filter size can be used to indirectly control the minimum feature size and remove the jagged checkerboard artifacts that we see in top op. If left blank, this will auto-generate based on the model size. Initial density can be any value between zero and one to give an initial guess at how the result will look before the process begins. If left blank, this will be set to 0.5. > > I'll go ahead and create a variable out of our deposit optimization, and I'll pull in a **Translate** block so we can view our results side by side with the original part. I'll right click, make a variable called top op, and I'll pull in our **Translate** block to translate our initial design space. > > Viewing these two parts beside one another, we see that a lot of this material from our original part has been removed during our top op process. Since topology optimization works by assigning a top op density value between 0 and one to each mesh element, we can use this topology optimization window to get a better understanding of how the calculated densities have affected our part and how the output contributes to our objective. The iso contour option shows the single surface with elements meeting the nominal threshold, which can be modified using this slider. The threshold equals zero, our initial part can be seen, and as it moves toward one, you see more and more removal of elements with lower top op densities. The iteration slider shows the evolution of the top op through each iteration. The thresholded elements option offers a similar visual representation but gives a more granular view of individual mesh elements and their top op densities. This can help us to visualize how and where material with different top op densities is removed throughout the optimization. > > Opening up the settings in the results window, we can control the color palette of our elements, whether the gradient is continuous or banded, and the preferred number of color bands. We've now completed our topology optimization. Next, we'll need to perform some post-processing of our results to generate useful geometric information in nTop. Follow along and run a Topology Optimization on the bracket described in the past sessions. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. **Example File:** [340\_10\_1 Starter — Topology Optimization.ntop](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/nTop%20Files/340_10_1%20Starter%20--%20Topology%20Optimization.ntop) *This file was last updated in nTop 5.12.2* [340\_10\_1 Follow Along – Topology Optimization.pdf](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/PDFs/340_10_1%20Follow%20Along%20-%20Topology%20Optimization.pdf) # Knowledge Check: Post Processing Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/knowledge-check-post-processing # Knowledge Check: Topology Optimization Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/knowledge-check-topology-optimization # Optimization Objectives Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/optimization-objectives The **Optimization Objective** is what property, or 'Design Response,' we hope to minimize or maximize within our part. nTop supports several design responses, including **Structural Compliance, Volume Fraction, Displacement, Stress, and Natural Frequency**. Use the **Optimization Objective** block to specify the design response(s). Below, the Objective is to minimize structural compliance. ![](https://files.learn.ntop.com/lessons/optimization-objectives/Optimization_Objective.png) Most optimization objectives aim to **minimize** the part's Structural Compliance (**maximizing** the stiffness). You may choose a different response (E.g., Stress, Displacement). However, remember that this solution will take longer to converge since a static structural analysis is conducted at each iteration (assigning new density and sensitivity values for each element). ## **Multiple Objectives** In Topology Optimization, you can apply multiple objectives by populating the **Design Response List** in your **Optimization Objective** block with more than one design response. ![](https://files.learn.ntop.com/lessons/optimization-objectives/Design_Response_List.png) We can use multiple Objectives to consider the response of a part to several different loading cases it may experience. We can also use multiple Objectives to balance an optimization based on displacement response and compliance, for example. The various **Boundary Condition Lists** must share the same **Displacement Restraint** ('Fix') block. The importance of each Objective can be given a weighting factor using the Weights input based on the following equation (the weighting factors are not normalized). If the Weighting input is blank, the multiple objectives will be weighted equally. ### ***w = w1\* f1+w2\* f2+ … + wn\*fn*** ![](https://files.learn.ntop.com/lessons/optimization-objectives/Multiple_Objectives.png) # Optional Follow Along: FE Model and Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/optional-follow-along-fe-model-and-boundary-conditions [https://www.youtube.com/embed/40C3h4gUuQc](https://www.youtube.com/embed/40C3h4gUuQc) > **Transcript** > > To begin setting up our FE model and boundary conditions for our topology optimization, I'll title this notebook and create organized sections. Section one I'll label “Geometry.” This is where we'll import our CAD file and how any variables we want to return to later on in our workflow. Our next section we'll call “FE Model,” and our third section will be “Boundary Conditions.” > > Moving our white line back up into our “Geometry” section, we'll import the part we want to optimize. We'll do this by dragging the part file from our File Explorer to the notebook to import. Then, opening our block details and under properties, we can pull this body into our notebook. We'll rename this CAD body variable “CAD design region.” We'll add an **Implicit Body from CAD Body** block and use this “CAD design region” as our CAD body. We can make this a variable by right-clicking and choosing “make variable,” and we'll call this “design region” as well, so now we have it in the implicit form. > > Next, we'll want to define the three interfaces that'll be either loaded or restrained. The outer two holes will be restrained, and this inner hole will be loaded, so we'll define those later. Holding my control key down on my keyboard, I can choose each of these three interfaces on our CAD body. I can right-click and create a CAD facelist variable. I'll rename this “interfaces,” and now I have all three interfaces in this CAD list. > > Now I want to specify the middle as the loaded face and the outer two as the restrained faces. So, using the same method, I will hold the control key down on my keyboard and select these outer two faces, right-click, and create a CAD face list variable labeled “restrain faces” and make this inner hole a CAD face variable and call that “loaded face.” Now that we've defined our design region and labeled our different interfaces, we can move on to creating our FE model. > > A good first step for making an FE model is to make an FE volume mesh. We'll start this by creating a mesh from our CAD body using a **Mesh from CAD Body** block. As our CAD body, we can use the “CAD design region” that we imported earlier. To the right, you can see that our resulting mesh has triangles that are relatively irregular in terms of size and shape. One way to combat this irregularity is to play with this “Max Edge length” input. It can help to decrease processing speed later on for more complex meshes, but since we're working with such a simple shape at the moment, we can use a **Remesh Surface** block and drop this mesh in as our surface. Our “Edge length” can be made into a variable because we'll need to use the same edge length a little bit down the road, and it's best practice to use consistent edge lengths when creating these FE meshes. I'll call this “Edge length 2 mm” for now and give this remeshed surface a triangular shape, as our FE mesh will be tetrahedral. Our resulting mesh is much more regular and will give us better results down the road. > > If I use the hotkey “X” to create a section cut on my keyboard, I can see that only the outer surface of this part has been meshed. So next, I'll need to create a volume mesh from this entire domain. I'll do this by adding a **Volume Mesh** block and pulling our remeshed surface in as our domain. I'll use this “2 mm Edge length” variable, and our resulting mesh is completely filled in. > > Finally, we can take this volume mesh and use it in our **FE Volume Mesh** block. Drop our **FE Volume Mesh** block into our notebook, and for the discretization, use this volume mesh. We'll select a linear geometric order and make a variable out of this “FE mesh,” and now we've successfully created our FE mesh to be used in our FE model. > > To create our model, we'll drop an **FE Model** block into our notebook, and in this pre-populated components list, I'll add an FE component. Under mesh, we can use this newly created “FE mesh,” and we can assign a material by double-clicking in our attributes and applying an FE solid attribute. Double-clicking in this material input, nTop offers a pre-loaded library of commonly used materials to choose from. Here, let's choose Aluminum 6061. And since this is one solid piece, we won't apply any connectors. We can right-click on this block and create a variable labeled “FE model,” and now we've successfully created our FE model for our topology optimization. > > I'll go through our notebook and collapse all of our blocks to clean it up a bit, and now we can move on to creating our boundary conditions. For these two outer holes, which we plan to restrain, we'll want to select all of the FE nodes along these inner surfaces. To do this, we'll use the **FE Face Boundary Toolkit** block, and we can delete this CAD face list out of here because we've already created a CAD face list earlier on in our “Geometry” section. We can pull these “restrained faces” into our “faces” input and our “FE mesh” into our “mesh.” This **FE Face Boundary** block will select all of the nodes at the intersection of the restrained faces CAD and the FE mesh. We choose “nodes” as our entity, and the selected nodes are those that we expected all along the insides of these restrained holes. We can make this block into a variable, call this “restrained nodes,” and then we can use a **Displacement Restraint** block to fix all of these nodes in every direction. > > We'll drop this **Displacement Restraint** block into our notebook and use these “restrained nodes” as our boundary. We can leave all other inputs as zero so that all of the nodes are fixed throughout the entire simulation and topology optimization process. We can make this displacement restraint into a variable called “fixed restraint,” and now we've set our first of two boundary conditions. > > Next, we'll want to apply a load to the nodes in this center hole. Instead of using the **FE Face Boundary**, which would work well here, let's try using an **FE Boundary by Flood Fill**. We'll drop this block into our notebook, input our “FE mesh,” select “nodes” as our entity, and for our origin, we can just drag this gimbal into the center of the hole. The first node to be selected will be that closest to this origin, and this 45° angle will drive all other nodes that are selected. So by keeping this angle at 45°, all of these inner nodes will be selected, but any nodes on the outside of this mesh will be left alone. If I hit enter, we can see that all of these nodes highlighted in blue are those that we were targeting. So we can make a variable here and call this “loaded nodes.” > > Finally, to apply that load to all of these nodes, we'll use a **Force** block that can be imported into our notebook and use our “loaded nodes” as our boundary. For our vector, we can input 0, 1000, and 0. This indicates a load of 1,000 Newtons in the negative Y direction that's distributed across all of these loaded nodes. If I hit enter and zoom in, we can see that this 1,000 Newton force has been distributed among all of those center nodes. We can right-click to make this force a variable, which we'll just call “Force.” We'll collapse these “loaded nodes” in this **Force** block, and we've successfully created our FE model and boundary conditions for our topology optimization. Before applying Topology Optimization, follow along to build an FE model and set boundary conditions. This lesson is optional, as it is a review from our [Intro to Simulation](/courses/240-intro-to-simulation/) course. You can download our PDF guide below to walk through this lesson in PDF format. Download the CAD file below to get started. **Example File:** [340\_4\_1 Complete — FE Model and Boundary Conditions.ntop](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/nTop%20Files/340_4_1%20Complete%20--%20FE%20Model%20and%20Boundary%20Conditions.ntop) *This file was last updated in nTop 5.12.2* [340\_4\_1 CAD Part TopOpt.x\_t](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/Models/340_4_1%20CAD%20Part%20TopOpt.x_t) [340\_4\_1 Follow Along – FE Model and Boundary Conditions.pdf](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/PDFs/340_4_1%20Follow%20Along%20-%20FE%20Model%20and%20Boundary%20Conditions.pdf) # Optional: TopOpt Problem Statement Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/optional-topopt-problem-statement Now that you're familiar with Topology Optimization and Post Processing, try completing the following problem on your own. After solving, advance to the next lesson and follow as we walk through a solution. Download the .ntop file below to get started. ## Problem Statement Perform Topology Optimization on the CAD bracket shown below. Our goal is to minimize structural compliance, and we want our final part to be 30% or less of our initial volume. The four pink faces should be fully restrained, and the green faces are to be loaded with 40,000N upward in the z-direction. After running the Topology Optimization, post-process the part to fit within the initial design space and maintain the original geometry at the six interfaces. ![](https://files.learn.ntop.com/lessons/optional-topopt-problem-statement/TopOpt_Problem_Statement.png) Note that the Geometry section and FE Mesh and Model are already competed in the starter file. Use the section headers to guide you through setup, TopOpt, and post-processing. ![](https://files.learn.ntop.com/lessons/optional-topopt-problem-statement/image-13.png) **Estimated Time to Complete:** 30 minutes **Example File:** [340\_16\_1 Starter — TopOpt Test Problem.ntop](https://files.learn.ntop.com/Courses/340%20Topology%20Optimization/nTop%20Files/340_16_1%20Starter%20--%20TopOpt%20Test%20Problem.ntop) *This file was last updated in nTop 5.12.2* # Overview Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/overview Learn how to set up and run topology optimization in nTop. This course will teach you the basics of running a topology optimization within nTop. After completing this course, you will have further developed your understanding of the FE mesh, FE model, and boundary conditions and how to use them in topology optimization. You will have also explored how to understand and post-process your optimization results. ![Optimized block with organic internal channel and three ports](https://storage.googleapis.com/files-learn/lessons/intro-to-topology-optimization/topo-opt-manifold-overview.png) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/before-we-begin-meshing), [240: Intro to Simulation](/lessons/intro-to-structural-analysis/overview) **What will be covered:** * Setting up an FE Mesh, Model, and Boundary Conditions for a Topology Optimization * Running a Topology Optimization * Post-processing an optimized part in nTop ### Introduction > **[Before We Begin](/lessons/intro-to-topology-optimization/before-we-begin-topology-optimization)** > **[Topology Optimization Properties and Terminology](/lessons/intro-to-topology-optimization/topology-optimization-properties-and-terminology)** ### Preparing for Topology Optimization > **[Review: FE/Simulation Model and Boundary Conditions](/lessons/intro-to-topology-optimization/review-fe-simulation-model-and-boundary-conditions)** > **[Optional Follow Along: FE Model and Boundary Conditions](/lessons/intro-to-topology-optimization/optional-follow-along-fe-model-and-boundary-conditions)** > **[Optimization Objectives](/lessons/intro-to-topology-optimization/optimization-objectives)** > **[Defining Constraints](/lessons/intro-to-topology-optimization/defining-constraints)** > **[Follow Along: Objectives and Constraints](/lessons/intro-to-topology-optimization/follow-along-objectives-and-constraints)** ### Running Topology Optimization > **[Running Topology Optimization](/lessons/intro-to-topology-optimization/running-topology-optimization)** > **[Follow Along: Topology Optimization](/lessons/intro-to-topology-optimization/follow-along-topology-optimization)** > **[Knowledge Check: Topology Optimization](/lessons/intro-to-topology-optimization/knowledge-check-topology-optimization)** ### Post Processing > **[Post Processing](/lessons/intro-to-topology-optimization/post-processing)** > **[Follow Along: Post Processing](/lessons/intro-to-topology-optimization/follow-along-post-processing)** > **[Download: Post Processing](/lessons/intro-to-topology-optimization/download-post-processing)** > **[Knowledge Check: Post Processing](/lessons/intro-to-topology-optimization/knowledge-check-post-processing)** ### Optional Topology Optimization Test Problem > **[Optional: TopOpt Problem Statement](/lessons/intro-to-topology-optimization/optional-topopt-problem-statement)** > **[Answer to TopOpt Test Problem](/lessons/intro-to-topology-optimization/answer-to-topopt-test-problem)** ### What's Next > **[Topology Optimization Tips and Best Practices](/lessons/intro-to-topology-optimization/topology-optimization-tips-and-best-practices)** > **[Resources](/lessons/intro-to-topology-optimization/resources)** # Post Processing Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/post-processing After running a Topology Optimization, the raw results must be post-processed to prepare a component for DfAM or further implicit modeling. ## Implicit Body from Topology Optimization Once we have inspected our results and found an acceptable threshold value, we can convert the results into an Implicit Body. Since most operations in nTop work with implicits, if you wish to apply any additional design changes to your final part (e.g., Boolean operations), converting the result to an implicit body using the **Implicit Body from Topology Optimization** block is imperative. ![](https://files.learn.ntop.com/lessons/post-processing/Implicit_Body_TopOpt.png) You may specify an element density threshold between 0 and 1 for the implicit body, which differs from the volume fraction (i.e., increasing the density threshold will increase the number of tetrahedral elements in select regions while keeping the volume fraction constant). A higher density threshold will remove more material, while a lower one will keep more material. Select your density threshold by comparing results at different thresholds, and use a smaller filter size to see the difference between various density thresholds. You may have the implicit body reflect a chosen iteration of the TopOpt, instead of the final solution (by default). You may also specify a component number (i.e., FE component in your part) that will apply this function to a component of your topology optimization (if you have multiple FE components connected by tie constraints). ## Smoothen Body The raw TopOpt output has artifacts on its surface from the mesh that can be removed using the **Smoothen Body** block. The surface artifacts are roughly the size of the FE mesh size, so to capture and remove them, a smoothening grid size of half the mesh size is used in the **Smoothen Body** block. This is done using a **Divide** block. ![](https://files.learn.ntop.com/lessons/post-processing/Smoothen_Body.png) > [!TIP] > > **Tip:** > For *Grid Size* input, start with 2x greater than the element feature size, then iterate down slightly as needed. > Choose an *Interpolation Type* between grids (Cubic offers the smoothest geometry). > Optionally, you may apply the smoothing operation to a single domain (e.g., Region by Bounding Box) if you wish to smoothen some areas of your design space differently from others. ## Consolidate the Part The topology-optimized volume is now ready to be recombined with the interfaces of the original CAD geometry. This step will look different depending on your part. If you are following along, do this: * Add an **Implicit Body from CAD Body** block * Insert the Interfaces (all three CAD faces from Step 1) * Add a **Thicken Body** block * Insert the **Implicit Body from CAD Body** block * Set the *Thickness* to 2 mm * Add a **Boolean Union** block * Delete the auto-generated list and input the **Thicken Body** block ![](https://files.learn.ntop.com/lessons/post-processing/340_12_Interface-Union.jpg) * Add a **Boolean Union** block * Input the Smoothened TopOpt and the Interface Bodies * Set the *Blend Radius* to 2 mm (to keep the transitions between bodies congruent) ![](https://files.learn.ntop.com/lessons/post-processing/340_12_TopOpt-Interfaces-Union.jpg) Lastly, perform a **Boolean Intersect** operation with your part and the original CAD body to ensure that the interfaces of the original design space are preserved. * Add a **Boolean Intersect** block * Input the TopOpt and Interfaces boolean union * Input an **Implicit Body from CAD Body** block * Input the Design Space ![](https://files.learn.ntop.com/lessons/post-processing/340_12_Final-Boolean-Intersect.jpg) # Resources Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/resources In this course we covered Design Responses, Objectives and Constraints, Topology Optimization, and Post Processing of optimizations results. For further information on these topics, see the resources below: ## Additional Resources on Topology Optimization 1. Article: [FE Analysis FAQs](https://support.ntopology.com/hc/en-us/sections/360011734173-Design-Analysis) 2. Article: [Topology Optimization FAQs](https://support.ntopology.com/hc/en-us/sections/360010614114-Topology-Optimization) 3. Training Video: [Advanced Topology Optimization](https://learn.ntop.com/lessons/advanced-topology-optimization/) (1 hr 15 min) # Review: FE/Simulation Model and Boundary Conditions Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/review-fe-simulation-model-and-boundary-conditions Similar to the Static Analysis created in the [240: Intro to Simulation](/courses/240-intro-to-simulation/) course, we will need an FE Model and Boundary Conditions to run a Topology Optimization. If you run a Static Analysis and then a topology optimization, the FE Model and Boundary Conditions will be the same for both. ## **FE Model** To create an FE Model, we will define the FE Mesh and the Material for the simulation. For information on how to define an FE Model, we recommend reviewing our section on *FE Meshes* in our [102: Guide to Meshing](/courses/102-guide-to-meshing/) course or the FE Model and *Material* lessons in our [240: Intro to Simulation](/courses/240-intro-to-simulation/) course. ![](https://files.learn.ntop.com/lessons/review-fe-simulation-model-and-boundary-conditions/TopOpt_Intital_Mesh.png) ## **Boundary Conditions** To define the boundary conditions of the part, we will define the boundaries and the type of condition. For information on selecting portions of an FE Mesh for Boundaries, we recommend reviewing our section on *Selecting a Portion of an FE Mesh* in the [102: Guide to Meshing](/courses/102-guide-to-meshing/) course and the *Boundary Conditions* lesson in the [240: Intro to Simulation](/courses/240-intro-to-simulation/) course. ![](https://files.learn.ntop.com/lessons/review-fe-simulation-model-and-boundary-conditions/TopOpt_BCs.png) # Running Topology Optimization Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/running-topology-optimization To run a TopOpt, add a **Topology Optimization** block and: * Insert the **FE Model** * Insert the **Optimization Objective** * Insert the **Optimization Constraints** The rest of the inputs can be left as default for this example. More information on these settings can be found in the [block's information panel](https://support.ntop.com/hc/en-us/articles/360048490154-Understanding-the-Topology-Optimization-settings) and the TopOpt Properties lesson earlier in this course. After completion of TopOpt processing, a window pops up in the Viewport with several options for visualizing the results. ![](https://files.learn.ntop.com/lessons/running-topology-optimization/TopOpt_Example.png) The Topology Optimization process assigns a value between 0 and 1 to all mesh elements. Higher values are assigned to elements that most effectively contribute to the optimization objective, referred to as the top opt density. As mentioned, this can be accessed as a density property chip in the Topology Optimization block. For example, an element in the bottom corner of the design space, far away from the applied load, is given a density value close to 0 because placing material here does not contribute to the goal of minimizing structural compliance. On the other hand, elements close to the loaded center hole are given a density value close to 1 because having material there is necessary to support the load. ![](https://files.learn.ntop.com/lessons/running-topology-optimization/Threshold_Slider-1-1024x488.gif) ## Viewing Results The *Thresholded elements* option in the Topology Optimization HUD lets you view density values assigned to all elements in the design space. Use the *Threshold* slider only to view elements with a value higher than the specified threshold. After the Topology Optimization is complete, you can also probe the density values of elements. The desired locations can be identified by moving the probe across the threshold plots and pinning them through a right-click selection menu. This feature can determine the best combination of the threshold parameter and iteration to output the final optimized part. ![](https://files.learn.ntop.com/lessons/running-topology-optimization/Probe_Mode-1024x533.png) The *Iso-contour* view shows a single surface interpolated from all elements with TopOpt density values close to the specified threshold. ![](https://files.learn.ntop.com/lessons/running-topology-optimization/Iso_Contour-1.gif) The Iteration slider allows you to see the evolution of the TopOpt throughout the optimization iterations in both view modes. # Topology Optimization Properties and Terminology Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/topology-optimization-properties-and-terminology The **Topology Optimization** block performs a numerical design operation that determines the optimal shape of a part within the bounds of a Design Space, based on a user-defined set of objectives and constraints. The block allows the user to design geometries that best achieve the desired objective(s) while considering complex and multivariate loading conditions and design constraints. nTop's TopOpt algorithm uses the Solid Isotropic Material with Penalization (SIMP) method. ![](https://files.learn.ntop.com/lessons/topology-optimization-properties-and-terminology/Topology_Optimzation_Block.png) ## Key Terminology > **Max Iterations** > > TopOpt is an iterative process that updates the topology until the objective is reached and the constraints are satisfied. If the process is taking a long time, the user can set a maximum limit to the number of iterations attempted. This input allows you to limit the maximum computation time expended on the TopOpt process. > **Min Objective Change** > > The objective function is a quantified measure of how well the topology is achieving its objective(s). When the relative change between iterations of the objective function falls below this number, the TopOpt will be considered complete (as long as the constraints are satisfied). Decreasing this number will result in a more accurate TopOpt, but longer computation time. > **Min Density Change** > > This input is a convergence threshold, like described above, but for the relative change of the elements TopOpt density from one iteration to the next. Decreasing this number will result in a more accurate TopOpt, but longer computation time. > **Boundary Penalty** > > This input controls how the TopOpt deals with setting density values at the edges of the design space. An input of 1 sets the TopOpt density to 0 along the edges of the design space. The material will be completely restricted on the boundary where no loads or constraints have been applied. This option works well if you set up your design space to have a buffer zone of nodes on the outside of the space where you know that no material will be filled in. In some cases, you may anticipate that your part will end up including elements on the outer edge of the design space. This is likely true if you are doing TopOpt on a coarse mesh. An input of 0 defines TopOpt densities at the design space edges such that the gradient (the spatial derivatives in x,y,z) will be zero. This allows you to have non-zero TopOpt densities at edges. No penalization is enforced on the boundary in this case. The overall recommendation is to use a small enough mesh size so that the 1 option can be used and density can be 0 at the edges, but if needed, option 0 provides an alternative. The image below shows how results can change between different Filter Boundary options. > > ![](https://files.learn.ntop.com/lessons/topology-optimization-properties-and-terminology/340_2_2-boundary-penalty.png) > **Save Increment** > > This input controls the amount of data stored and accessible after the topology optimization completes. The number can be increased to lower the file size of a completed TopOpt file. The default value of 1 will save results for all increments, whereas a result of 0 will save only the first and last increment. For any value, N, greater than 1, it will save results for every N increments. Note: The last iteration will always be saved. > **Filter Size** > > This optional input specifies a minimum feature size that will be present in your TopOpt result. Note that it can accept a field input, meaning you can choose a spatially-variant scalar field as your minimum feature size. If this optional input is left blank, we assume a default value of 2 times the average element size. > **Initial Density** > > This optional input can take in a scalar field of TopOpt density values (from 0 to 1), which will provide the initial guess at the TopOpt result before the process begins. When left blank, the TopOpt densities are set to 0.5 at all elements. ## Topology Optimization Properties and Information You can access the properties of the Topology Optimization in the Properties panel. *Density* property is a scalar field representing the topology optimization density results available in the Conversions section. This is useful when using the results for the field-driven design of other parameters. Additionally, there are other properties representing information about the process, including the FE Model and optimization iterations. ![](https://files.learn.ntop.com/lessons/topology-optimization-properties-and-terminology/Topology_Optimzation_Properties.png) In the Right Panel, under the Display tab, there are Plots showing how numerical measurements of the design's Objective and Constraint(s) changed over the process's iterations. ![](https://files.learn.ntop.com/lessons/topology-optimization-properties-and-terminology/Plots_1.png) ![](https://files.learn.ntop.com/lessons/topology-optimization-properties-and-terminology/Plots_2.png) # Topology Optimization Tips and Best Practices Source: https://docs.ntop.com/lessons/intro-to-topology-optimization/topology-optimization-tips-and-best-practices Follow this checklist to see whether you are prepared to run a Topology Optimization on your part: * An FE Volume Mesh of my part was created. * Material properties were assigned to the FE Volume Mesh to form an FE Model. * Selected all the necessary FE Boundaries/Regions to localize all my boundary conditions. Created any tie constraints and FE connectors, if necessary, and assigned these to the model. * My Forces, Restraints, and other boundary conditions were grouped into one or multiple boundary condition lists (ideally set as a variable(s) for easy reference in each design response). These boundary conditions were appropriately assigned to the chosen FE Boundaries/Regions. * Static Structural analysis was run so that I could validate the initial performance of my part under the tabulated loading conditions. The results from the analysis seem accurate enough to continue (e.g., stresses not surpassing the elastic modulus of your material). * Double-checked all the results by outputting a Displacement Point Map and a Von Mises Stress Point Map. Save these in a block, as they could be useful later on (for comparing the analysis results from the TopOpt). You may now proceed with Topology Optimization. Here are a few practices to follow when running a topology optimization. These tips will help you output a useful TopOpt result. * TopOpts with bending and torsional loads return a more unique and interesting result than TopOpts with simple tension/compression loads. * Always keep in mind the printability of your part – ensure there are no floating elements in your final smoothened body * You can mesh your part and then use **Filter Mesh** to identify and remove any floating elements (dependent on their volume) > [!TIP] > > **Tip:** > – Double-click on an input field to list all compatible input blocks > – Ensure units are appropriately appended to all values (e.g. Pa for stresses, mm for lengths, etc.) > – Start using variables when your blocks are stacked with 3+ levels > – Use descriptive variable names for easy referencing > – Use comments to section parts of your workflow (e.g. section for simulation blocks, section for topology optimization blocks) – better organization of your notebook # Answer to Lattice FEA Test Problem Source: https://docs.ntop.com/lessons/lattice-structural-analysis/answer-to-lattice-fea-test-problem [https://www.youtube.com/embed/ah8dUhrHfGs](https://www.youtube.com/embed/ah8dUhrHfGs) > **Transcript** > > In this lesson, we will review the answer to the optional lattice FEA test problem for each of the three methods. The completed files for these are available for download below. We will be reviewing these methods in order from solid elements, beam elements, to homogenization. I will start with a brief overview of what the starting model we have in the starter file looks like. Then, afterwards, you can feel free to skip ahead for the method that is of interest for you. The timestamp for each of the methods will be provided in the description below. > > Here, we have this brake pedal part that has been lested, starting with that initial CAD body that has been imported with the shell defined as one body and the inner part that is to be lattice defined as well. We also have the fixed face as a variable, as well as the face that we will need to load with a force. The lattice was created and then Booleaned together with the outer shell with a blend radius. We also have our material, titanium, already defined with its material properties. > > Let's take a look at what we would need to do in order to do that first method using solid elements to simulate this part. Our end goal is with all of these methods a static analysis of our part. So, if we take a look inside this, we know that we need an FE model as well as the load case, which contains the force on that pedal face and the fixed restrained on this part. Let's open up that **FE Model** block. This **FE Model** has just one component, which is a solid component of this whole lested pedal part that has been meshed and treated as one solid volume with titanium solid attribute. And the most involved part of this process will be to generate this FE volume mesh for this part with complex lattice structures. > > We always recommend starting with the standard workflows and then working your way from the innermost block, tweaking that in the process using the manual run mode in the next block to make sure that you are able to change inputs. Take a look at it before deciding if you want to move on to the next step and run that next block. This is a very useful tip for when you're working with workflows that take a little bit longer to compute, like meshing workflows. And so, if we take a look at this first block we have in this meshing workflow here, it is the **Mesh From Implicit Body** block with the second overload, which is a recommended one to use when you have things like lattice structures, which is a bit more complex. > > We have here the tolerance using a **Math** block to compute 30% of the smallest feature that we have within the part. So, in this case, the smallest feature we have here is this shell, which is 1.5 mm, and so 30% of that is 0.45 mm, which we used here as our tolerance. We also chose a sharpen iteration of one and added in that shell implicit body as our sharpen extend so that we only sharpen those areas. If we choose to leave this sharpen extend blank and add a sharpen iteration, it will compute to sharpen the entire structure. > > After we make sure that this mesh looks good and the properties are as we want, so closed, edge manifold true, and not self-intersecting, we can move on to the next step, which is remesh the surface. And to do this with any lattice structure, you need to have smaller element sizes in order to capture the detail of the lattice. Here we have 0.8, but you can even go a little bit smaller as well. This remesh is also not self-intersecting and closed and edge manifold. We can choose to add a minimum feature size to decrease the amount of small elements concentration as well. > > The only thing to note is if you increase this minimum feature size a bit too much, it can cause self-intersection and your **Volume Mesh** block, which is the next block, will fail to run. But you can play around with the different parameters, adding minimum feature size, choosing different sharpening iterations, to optimize your mesh, choosing different sharpen extents, as long as you keep in mind the effects of each of these parameters on your computation time and on the effects of your mesh as a whole. > > Once you have a satisfactory surface mesh with this remesh surface, you can move on to the volume mesh and then run this **FE Volume Mesh** block, which you can then put into your FE component mesh input. And that's it for the FE model creation of this part. This process of meshing will take the most time and will be the most challenging part of your process. But once you have that and that FE model defined, the rest is just defining your boundary conditions, which in this case is that fixed region. > > So, if we take a look at this, you can choose the boundary a few different ways. The way that it's been done in this example is by taking that face that we had defined as the fixed face, converting it into an implicit body, thickening it so that it can overlap a little bit with our mesh. And those nodes in the area of overlap will be picked up as the boundary where the displacement restraint is applied. We have here all 6 degrees of freedom fixed. And the next one is defined in a similar way, except with the **Force** block instead of that **Displacement Restraint** block. And the boundary is created by choosing that loaded face, converting it into an implicit body, thickening it to grab onto those nodes on that face, and then adding a vector for the force in the downward Z direction. > > With both of these boundary conditions defined and the model for our finite element analysis complete, we can run this block to get the final result. And that is it for the solid element method. > > Next, we will take a look at how to do this same simulation using the beam elements method. Let's take a look first at that final outcome block, which is our **Static Analysis** block. Again, it needs that model and the force defined as boundary condition, as well as our fixed region. > > With this method, we are treating the shell of the paddle and the lattice structure as two separate components and modeling them differently in our mesh input for those FE model components. So if we take a look at this FE model, we can see that within the components input, we have two items. The first one is the solid component, which has the shell mesh and defined material titanium. And then the second one is our FE lattice component. It is an FE component with the lattice beam attribute, with that same material as well. And here is where we can also input the thickness, which can be a field input for varying field thickness as well. > > Because we have two components in this model, it is also required that we put in some sort of connector to connect these two components together in one model, and this is our tie constraint. So let's take a look first at the mesh creation process of each of these two components, and then afterwards we'll take a look at how that tie constraint is created. > > For the shell mesh, it is the same process of generating this part as a solid. So starting directly from that CAD body that we have, converting it into an nTop part, and then remeshing that with a mesh size of 0.8 in this example. Then generating a volume mesh out of it, and then creating an FE volume mesh. So this is the standard approach to doing this, but we will be treating our mesh for the lattice as beams and then connecting these two meshes. So we might want to explore the more advanced option of meshing this shell so that we can have a more accurate model where the nodes at the interface between the lattice and the outer shell can be more easily modeled. > > And to do that, this method uses fields, so it's a field-driven design approach to creating your elements in the mesh. And how this works is instead of putting in a constant value for the edge length, you are putting in a ramp block, which is based in this case on the inner volume that is filled with the lattice. So if we take a look at the field of that block and then toggle off this visibility, let's put a contoured interval of one at that boundary. We have a value of zero, and we are saying that at zero, we want this 0.4 mm element size. And the farther we move away in the positive direction at 2 mm, we want the element size to be 1.6 mm instead. > > And how that would look like if we isolate this is we have outer parts of this shell that is larger in element size, and then if we look at the other side, there is a change in the size of the element where the elements are smallest at this space where there will be interface with the lattice mesh. So this is a way that you can have more control over your mesh and have more accuracy in your modeling as well. > > This ramp block here is the exact same block used here. It is created by holding control and dragging this one. So every single change reflected in this block is also happening in this second **Ramp** block as well. Alternatively, you can make this **Ramp** block into a variable and use that to input into both of the blocks here, um, for both **Remesh** block and **Volume Mesh** block. So that's an option for meshing the parts that will be surrounding or enclosing your lattice part. > > Now that we have that shell mesh, let's take a look at that lattice mesh as well. So using this **FE Lattice Mesh** block, you can put in the lattice body, and then what it will generate is this beam mesh. If you look into the properties under beams and properties, there are all sorts of information here, including start points, end points, uh, length, and line segment that you can use. > > And once we have both this lattice mesh and the shell mesh, we can connect those nodes together where they are touching by using this tie constraint. And we define the independent as well as the dependent nodes by choosing **FE Boundary By Body** and taking that whole shell and the whole lattice and choosing those nodes that are within those respective meshes. And then we can add a tolerance value, which in this case is 1.6, which is relatively large. And the reason we have this larger of a number is because in this file we have given you a part that has an upstream CAD issue. > > So what I mean by this is if we take a look at our CAD shell as well as that volume, and if I take a cross-section view of this, let's slowly try to see this part. I also turn off the visibility of these tie constraint nodes for now, and let's select that implicit so that it's highlighted. We can see that this volume to lattice has been created in CAD to go beyond where we actually want that lattice to be. And this is why the lattice structure that we have is not properly trimmed, meaning that we have parts here that are going into this area of the upper petal face, and therefore we need to be able to capture those lattice parts that are going into that upper part more. > > So if we decrease this number, for example, to just one, that is not capturing all of our nodes. And so this is something to be aware of with this method. You should make sure that you have a well-trimmed lattice and a clean upstream file or workflow that allows you to be able to eliminate this tolerance that will give you more accuracy. So I will change this back. But tolerance is a good way to quickly bypass those issues if you do have them. You just have to be aware that it affects accuracy. > > So once we have the shell mesh, the lattice mesh, as well as that connector component, those can be put into our solid component and the lattice component respectively within **FE Model**, and then the connector input as well. With that, the **FE Model** is complete, and you can go on to define your boundary conditions. And both of these need boundary selection, which in this case is done by using that fixed face and the loaded face CAD variable, which are both then converted into an implicit body and then thickened so it can grab on to those so that they can grab on to the nodes on those faces. Alternatively, if you want to do this differently, you can also right-click directly on the mesh and choose **FE Boundary By Flood Fill**. > > And our fixed region is fixed on all degrees of freedom here. The vector for our force is 0, 0, and 200 downwards in the Z direction. And with all of that information complete, we can run the static analysis and get those results. > > The last method is homogenization. We start in the first stage by creating a unit cell using this **Periodic Lattice Body** block and referencing all of those properties that the lattice has in our original lattice. So, making all of those parameters a variable that we can reuse, we create a unit cell that has the volume, the size of the original unit cell size in the XYZ direction, as well as that thickness. So, we have this box which our unit cell will have to fit into for homogenization, and so we use **Boolean Intersect** to trim this unit cell to that box. > > Once we have that unit cell, we can create a solid mesh out of it using this workflow with **Meshroom Implicit Body**. Depending on your unit cell and how the geometry is, you might also want to consider using the second overload and sharpening it so that it captures all the details of the geometry. For this particular unit cell, it is fine with that first overload. Then, you can remesh it and then generate the FE volume mesh out of this unit cell implicit that way. > > Once you have that mesh, all that's left to do is in this **Homogenized Unit Cell** block, you input the FE model the same way you would if you were to use a static analysis, for example. And this model just needs to be filled out with an FE solid component, so an FE component with solid attributes, with that material defined and our FE mesh of that unit cell that was created, as well as the unit cell design volume, which is that initial box that the unit cell fits into, and that would run once it's been filled. > > Once we have this result, we can move on to the second stage and create an FE model using this result as material and simulate it on that bulk volume. So, we have this shell mesh which is going to make up one component of the FE model. If you look at this FE model, since we have the outer shell of the brake pedal and the representative lattice volume inside, both of these are going to be solid components, and each of them are going to have to be meshed separately and then connected together with a tie constraint. > > So, with this in mind, each of these meshes that we would have to create is then using that same standard recommended workflow of converting either a CAD or implicit body into a mesh, remeshing it, and then converting that into an FE volume mesh. With the bulk volume mesh, depending on the geometry that you have, it can also have a bit of a larger element size. Since this geometry is quite simple, we kept this size of the element a little bit larger, and both of these solid meshes were generated with the same workflow. > > Then, to tie the nodes connecting the two bodies, get the two components together, we are using the **FE Boundary by Body** and selecting all of the nodes on that same body on that same mesh. So, all of these nodes are selected, and for the bulk volume, all of those nodes are selected, and the connection nodes can be visualized, and you would have to choose an appropriate tolerance. In this case, we chose 1.5. Again, with this method, the accuracy of this modeling is also affected by the upstream CAD issue that we have hidden in that process with the CAD model. > > So, if we take a look at our shell and this CAD volume to fill as well, I'm just going to show the implicit body, and if we take a look on the side, this CAD body was created so that it is going into that upper pedal part as well, which caused a problem while trimming the lattice in this workflow. And so the lattice that we created are not trimmed where we wanted them to be, and as a result, we have an issue where not all nodes are selected with a small tolerance. So, you can see here that that L structure is trimmed, but it is still going into that top body. > > So, that's something to keep in mind that for methods where you require connection between two components like this one with the homogenization or with the previous method using beam elements, that certain things like this untrimmed lattice could cause an accuracy issue when you are connecting those components together. But with this, we can kind of solve this issue by increasing that tolerance. > > And once we have that, all we need is to put all of those into the FE model solid components for each, define that material specifically for this bulk volume material that's going to be our homogenized result from stage one. And the material for the outer shell component will still be that titanium. Tie constraints put in as connector, as well as the boundary conditions that were defined using **Displacement Restraint** block for the fixed face, as well as the force for that loaded face. And the way that the boundaries of both of these were chosen was by taking each of those CAD faces, converting them to implicit bodies, thickening them so that we can say we want to select the nodes wherever these bodies intersect those meshes in those areas, and we applied the force of 200 Newtons in the negative Z direction and fixed this face on all six degrees of freedom. Then, we could run this block as our final static analysis in the second stage of this workflow and have those results. > [!NOTE] > > **Note: Before viewing this video, please review [the following updates](https://support.ntop.com/hc/en-us/articles/39936980909715-nTop-CFD-and-Simulation-Updates) that were made to nTop starting at nTop 5.23. Several block and property names have changed since this video was produced.** **We are in the process of updating this information.** This video reviews the answer to the simulation test problem to set up and run a simulation on a latticed brake pedal. The completed files with descriptions are available for download below. You can skip ahead to watch the review of each method separately: [01:27](https://www.youtube.com/watch?v=ah8dUhrHfGs\&t=87s) Method 1: Solid Elements [08:02](https://www.youtube.com/watch?v=ah8dUhrHfGs\&t=482s) Method 2: Beam Elements [18:31](https://www.youtube.com/watch?v=ah8dUhrHfGs\&t=1111s) Method 3: Homogenization **Example File:** [342\_12\_Complete — Lattice FEA Test Problem – Solid Elements.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_12_Complete%20--%20Lattice%20FEA%20Test%20Problem%20-%20Solid%20Elements.ntop) *This file was last updated in nTop *5.14.2** **Example File:** [342\_12\_Complete — Lattice FEA Test Problem – Beam Elements.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_12_Complete%20--%20Lattice%20FEA%20Test%20Problem%20-%20Beam%20Elements.ntop) *This file was last updated in nTop *5.14.2** **Example File:** [342\_12\_Complete — Lattice FEA Test Problem – Homogenization.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_12_Complete%20--%20Lattice%20FEA%20Test%20Problem%20-%20Homogenization.ntop) *This file was last updated in nTop *5.14.2** # Before We Begin: Lattice Simulation Source: https://docs.ntop.com/lessons/lattice-structural-analysis/before-we-begin-lattice-simulation [https://www.youtube.com/embed/jYPEXf092kQ](https://www.youtube.com/embed/jYPEXf092kQ) In this course, we will … * Learn the three processes for running a simulation on a lattice from scratch * Understand the key differences between the different methods, their advantages and limitations, and when to use each # Download: Completed Lattice Simulation nTop Files Source: https://docs.ntop.com/lessons/lattice-structural-analysis/download-completed-lattice-simulation-ntop-files Now that you have completed the follow-along, feel free to download the completed files below. These files are commented on with descriptions of how each step of the workflow for each of the three lattice simulation methods was created. > [!NOTE] > > **Note**: To reduce file size, some Geometry blocks have been put in *Manual Run Mode*. Use the orange *'Run'* buttons to run the workflows. **Example File:** [342\_9\_Complete — Lattice FEA Using Solid Elements.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_9_Complete%20--%20Lattice%20FEA%20Using%20Solid%20Elements.ntop) *This file was last updated in nTop 5.14.2* **Example File:** [342\_9\_Complete — Lattice FEA Using Beam Elements.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_9_Complete%20--%20Lattice%20FEA%20Using%20Beam%20Elements.ntop) *This file was last updated in nTop *5.14.2** **Example File:** [342\_9\_Complete — Lattice FEA Homogenization.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_9_Complete%20--%20Lattice%20FEA%20Homogenization.ntop) *This file was last updated in nTop *5.14.2** # Follow Along: Homogenized Lattice Simulation Source: https://docs.ntop.com/lessons/lattice-structural-analysis/follow-along-homogenized-lattice-simulation [https://www.youtube.com/embed/PNAiK8lsu6k](https://www.youtube.com/embed/PNAiK8lsu6k) > **Transcript** > > In this lesson, we will set up and run the two-step simulation process for homogenization using the same simple lattice example. Again, we'll apply compression loading to the top plate and fix the bottom plate. You can download the starter file below to follow along with this video. We'll start by creating sections in the notebook to help organize our thought process a little bit. The first section will be for the first stage of homogenization and the second one will be for the bulk lattice volume. > > For homogenization, we'll need the homogenized unit cell block, so I'll add it to that section and also add the **Static Analysis** block to the other section. These will be our end goal for each stage of the process. Let's fill everything out that we need for homogenization. This works very similarly to the **Static Analysis** block, except you don't define any boundary conditions and just give it the design volume that it needs. We'll see what this is in a little bit. So I'll double click and fill out the **FE Model**, choosing a solid component which needs a mesh. So we'll double click and choose this **FE Volume Mesh** as well, and make it a variable called Unit Cell Mesh. Then fill out the standard meshing workflow there, which is **Volume Mesh**, **Remesh Surface**, then **Mesh from Implicit Body**. > > It needs a body, so this is where we'll create our unit cell. We'll start by adding a box, which will be this design volume that will be repeated across the representative structure, and our unit cell will have to fit in this box. So let's also add a unit cell. We'll change the length, width, and height of this box to the size of our unit cell. To do that, I'll go back up to our lattice, open it up, and make the cell size a variable called Unit Cell Size. Then we can come back here to our box and type in the name of the variable, and then choose that length X component. Same thing for each of the other ones, Y component, and then press enter or click outside the box to choose it. Then Z, and then we'll call this the unit cell volume. > > For the unit cell, we'll want to make sure that all the parameters are the same as in our lattice structure. So I'll go back up and make into variables the type and call it unit cell type, the orientation as well. Bring that into our inputs. Then we'll need the **Periodic Lattice Body** block, and we'll put that unit cell inside, as well as add a **Rectangular Cell Map** that will need to be the size of the unit cell. We'll use the unit cell volume box we created earlier, as well as the unit size parameter that we've made into a variable. > > In here, we'll also grab the beam thickness variable for our unit cell parameter one, which is for thickness. If we click on this block, we can see the unit cell we've created highlighted on the screen. I'll make this variable called Unit Cell and collapse this. Now if we isolate this unit cell and turn on the visibility of the box as well, we can see that some parts of it are coming outside of the box, and we can get rid of all of this because the unit cells will be repeated across the structure and they'll have neighboring units. So these parts are negligible. So we'll trim it to the box using the Boolean intersect, and the unit cell will homogenize, will look like this. I'll name this appropriately so we know what is what: Unit Cell Trimmed. Then we'll drag this into the meshing workflow, and I'll use the second overload and the tolerance of 0.3 mm, which is 30% of my beam thickness. Then add a sharpen iteration of one. Let's take a look at what we have. That looks good. So I'll move on to the next block. I'll give it an edge length of 0.25 and triangle shape. That also looks good, and we have closed and manifold true and self-intersecting false. So we can keep going here. I want to use the same edge length. So let's make this a variable called Mesh Size to reuse it, and then I'll choose linear geometric order. Then if we isolate this and check our section cut, the mesh looks good. > > So we have that mesh complete, and so we can grab that material and fill that in as well. For the design volume, we'll use this unit cell volume that we created earlier. We'll call this homogenization result. It's already completed running very quickly. So we can go into the properties under material and linear elastic property to see the compliance and stiffness Matrix coefficients. If you open each of these, you'll find the constant value. To visualize the result, we can isolate this block and use the heads-up display here to the right. The directional option will give you the stiffness Matrix visualization, and we'll just have to zoom to fit here. If you want to export the result, you can either right click and choose Export to take this out as text or CSV file of the 6×6 elasticity matrix, or you can also use the **Export Material** block. Put in this whole block, choose your unit system that you want to export with, and be able to export into different file types for other external software as well. That's it for the first stage. All we have left to do now is use that result that we got as the material for this next static analysis. > > So let's fill in our **FE Model**, and we'll need two components for this. So I'll add another item to the list. Both of these will be solid components, one for the bulk lattice volume and one for the plate. So let's choose **FE Solid Component** for both. We will need the mesh for these, so choosing the **FE Volume Mesh** block, I'll make this into a variable calling this Lattice Volume Mesh. Then we'll fill it out with the **Volume Mesh** block, and for this, if we turn back on the visibility of our plates as well as for our lattice region here, they're both nTop geometry. So we can skip the **Remesh** block and go straight to using **Mesh from Implicit Body**. For the body, it will be that lattice region implicit, so I can type that in and choose that implicit body. I'll use 0.5 mm as tolerance. If we isolate this block, we can see some rounding happening. So I'll change the overload to the second one and add a sharpen iteration of one to sharpen the whole mesh. The edge length will be 0.25 mm, and if we isolate this as well and look at that cross-section, the volume mesh looks fine enough. So I'll choose linear here, and we have our lattice volume mesh for that first solid component, and I'll just go ahead and put in the material here really quickly and also label this component FE Lattice Volume, so that we know what we're working with. FE Plates component. Then we'll do the exact same process for the plates as well with the same input values, starting with that **FE Volume Mesh**, making it a variable called Plates Mesh, filling it out with **Volume Mesh**, and then **Mesh from Implicit Body**. Body will be those plates implicits. All the values I'll keep the same as in the previous step. Then I'll use that same material here as well. > > Then the next step is to create that connection using a connector. So we'll grab the **Tie Constrained** block and then fill this out with the independent and dependent boundaries. I'll use the **Boundary by Body** block, and this independent component will be the plates. So we'll use that plates mesh, as well as that implicit, to choose that whole region. The same thing for dependent, but this time with that lattice volume mesh. If we look at that, the nodes that were selected, it seems like it's not catching all the nodes that I want. So I'll try increasing the tolerance, and now it is getting all of those nodes. Then I'll make this a variable and then put that into the connector input. I'll also rename this analysis result. > > The last thing we'll have to do here is define our boundary conditions, and we'll need two, one for force and the other for the restraint. So I'm bringing this outside of that nested block and adding those, and adding those different blocks. We'll select the boundary on the mesh by right-clicking on that face and choosing Flood Fill. So the top phase for the force, we'll put that into our boundary, choose nodes, and the vector will be 0, 0, and 1,000 Newtons for that downward in the Z direction. Then we'll do the same for that bottom face, using right-click and choosing Flood Fill and putting that into our displacement restrained boundary. Then we can let the analysis run since everything is now complete. Once that's done, we can click on that block, isolate it to be able to see that result, and also be able to look inside the properties tab to get the analysis results. > [!NOTE] > > **Note: Before viewing this video, please review [the following updates](https://support.ntop.com/hc/en-us/articles/39936980909715-nTop-CFD-and-Simulation-Updates) that were made to nTop starting at nTop 5.23. Several block and property names have changed since this video was produced.** **We are in the process of updating this information.** This video walks through an example of how to set up and run a homogenization workflow to simulate a simple lattice structure. Please download the nTop file below to follow along with the tutorial. The completed file of this workflow will be available for download at the end of this course section. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [342\_8\_Starter — Homogenized Lattice FEA.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_8_Starter%20--%20Homogenized%20Lattice%20FEA.ntop) *This file was last updated in nTop 5.14.2* [342\_8\_Follow Along – Homogenized Lattice Simulation.pdf](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/PDFs/342_8_Follow%20Along%20-%20Homogenized%20Lattice%20Simulation.pdf) # Follow Along: Lattice Simulation Using Beam or Shell Elements Source: https://docs.ntop.com/lessons/lattice-structural-analysis/follow-along-lattice-simulation-using-beam-or-shell-elements [https://www.youtube.com/embed/Se0zB-ltRb0](https://www.youtube.com/embed/Se0zB-ltRb0) > **Transcript** > > In this lesson, we will go through the steps of setting up and running a static structural analysis on the same simple lattice example from the previous follow-along, but using the beam elements method instead. You can download this starter file below to follow along with this video. Again, we want to simulate this lattice with compressive load applied to the top plate and also fix the bottom plate. > > So we'll start the same way by creating a new section called analysis and adding the **Static Analysis** block from the search bar. We need to fill out the FE model and the boundary conditions. So we'll double-click to get the **FE Model** block. In this case, we need to have two components, so we'll add one item to the list. One of these items will represent the lattice structure with beam elements, and the other component will be the plates that have solid elements. Double-clicking into the first item on the list, we can select the **FE Lattice Component** block. For the second item, we will choose **FE Solid Component**. > > We'll need a mesh for each, each with the corresponding element type. So in this lattice mesh input, we'll double-click and choose the **FE Lattice Mesh** option. We'll make this a variable and rename this lattice mesh. For the **FE Solid Component** mesh, we'll double-click into it and choose the **FE Volume Mesh**, which is the standard block and approach that we do for any other solid element meshing, and I'll rename this to plates mesh. > > So let's start with the solid element meshing of the plates. First, we will fill it in with all of the steps that we use for the standard. But since this geometry is quite simple, we can skip the **Remesh Surface** block and go ahead and put in **Mesh From Implicit Body** block right away. For the body, we'll use the plate. I'll choose the initial tolerance of 0.5 and take a look at what that looks like. We have some rounding here, so I will need to sharpen it. So we can either do this by selecting that sharpen box, or I, in this case, will use the second overload of this block and add a sharpen iteration of one, and that looks better. Now I'll add an edge length in the **Volume Mesh** block of one to start, and let's take a look at the cross-section by pressing X and make sure it's the right block that we're viewing. > > The elements are a bit large, so we'll decrease this value to 0.25 mm. It's important to have a finer mesh for that interface with the lattice so that the connection nodes can be more easily established. Now, for the volume mesh, I will choose linear. So we can move on to fill the **Lattice Mesh** block using that lattice body. We can drag that into discretization and choose the geometric order of linear. If we isolate this, we can see the beams that have been meshed here. I will leave the subdivision at one. > > Now we need the lattice beam thickness parameter, which is already a variable, so we can drag that in for material. We can drag in the materials we already have for both components, and I'm holding Control here to copy that chip over to reuse in the second component. Next, we can go in and fill out our boundary conditions, which will be our load case. We need two items on this boundary conditions list: one will be the force, and the other the displacement restraint. And I will make this a variable to help with the organization of the notebook. Double-clicking in to choose the **Force** block and the **Displacement Restraint** block. > > For the boundaries, we can turn on that plate smash visibility and select that face using right-click menu and choosing the flood fill option. Then we can drag in the selected boundary and add in our force vector of 0, 0, and 1,000 Newtons in the negative Z direction. We'll do the same thing for the displacement restraint phase as well. And now we try to run the static analysis. With all of these inputs filled out, we will get an error because we have two separate FE components but haven't connected them. So to do this, we'll need to grab the **Tie Constraint** block, which will be a block that we use to establish independent and dependent nodes between the two components. For each of these independent and dependent inputs, we need to have boundary selected. So we can do that by double-clicking into that input, selecting **FE Boundary by Body** block, which will allow us to select the nodes on the mesh within that entire body of the component. So we'll do this for both the plates as well as the lattice. > > And if we turn on the visibility of the **Tie Constraint** block, we can see the nodes that are selected. Depending on your geometry, you will need to adjust your tolerance for this example. This tolerance is good enough. If you increase that tolerance, you'll be able to grab onto more nodes that are further away from that interface. But now that we have that tie constraint established, we can make that a variable, drag that into our connectors input, and let that static analysis run. > > I'm going to make this a variable and call it analysis results. You can also go into the properties of the **Static Analysis** block to see and find those results and use the heads-up display to visualize the results of your analysis. > [!NOTE] > > **Note: Before viewing this video, please review [the following updates](https://support.ntop.com/hc/en-us/articles/39936980909715-nTop-CFD-and-Simulation-Updates) that were made to nTop starting at nTop 5.23. Several block and property names have changed since this video was produced.** **We are in the process of updating this information.** This video walks through an example of how to set up and run a simulation on a simple lattice structure using the beam elements method, which also works on shell lattices. Please download the nTop file below to follow along with the tutorial. The completed file of this workflow will be available for download at the end of this course section. An example of working with shell elements, which uses the same method with one minor difference, is also included in that file. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [342\_6\_Starter — Lattice FEA Using Beam or Shell Elements.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_6_Starter%20--%20Lattice%20FEA%20Using%20Beam%20or%20Shell%20Elements.ntop) *This file was last updated in nTop 5.14.2* [342\_6\_Follow Along – Lattice Simulation Using Beam or Shell Elements.pdf](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/PDFs/342_6_Follow%20Along%20-%20Lattice%20Simulation%20Using%20Beam%20or%20Shell%20Elements.pdf) # Follow Along: Lattice Simulation Using Solid Elements Source: https://docs.ntop.com/lessons/lattice-structural-analysis/follow-along-lattice-simulation-using-solid-elements [https://www.youtube.com/embed/JMu6w7Gv-n4](https://www.youtube.com/embed/JMu6w7Gv-n4) > **Transcript** > > In this lesson, we will go through the process of setting up and running a static structural analysis on a simple lattice example using the solid elements method. You can download the starter file below to follow along with this video. Here we have the L structure that is sandwiched between two plates. The lattice and the plates were created as two separate bodies. We also have this material with defined properties, and we want to simulate this lattice with compression load applied to the top plate and fixed restrained on the bottom plate. > > Let's start by creating a new section called analysis and add the **Static Analysis** block. We'll need to fill out the FE model and the boundary condition list here. So let's double click into the first input and select **FE Model**. We'll only need one FE component, and we can choose the **FE Solid Component** here for this because we will be meshing this whole structure as one. This solid component needs a mesh, so we'll double click again here and choose **FE Volume Mesh** and make that into a variable so that we have everything well organized. I'll name it solid mesh, and we can start to fill this block out with the series of nested blocks for the standard meshing workflow we recommend. So, **Volume Mesh**, **Remesh Surface**, then **Mesh From Implicit Body**. > > Here for the body, I'll need to merge the lattice with the plates. So we'll grab the **Boolean Union** block from the search bar and drag in those two bodies: the lattice and the plates. Then I'll isolate this and see that it's all one body now. I'll make this a variable and name it lattice with plates, and then drag it into this body input. Before continuing, I want to make sure that I can freely tweak my inputs in the first block without having to run through the whole workflow. So I'll put the **Remesh Surface** block on manual run mode, as well as on the **Volume Mesh** block. Now I'll only run when I'm ready to move on to the next steps. I'll start with 0.5 mm for tolerance. Let's see what that looks like. We see here that the edges are getting rounded, so I will need to sharpen it. To do that, I will change the overload of this block to the second option and then add a sharpen iteration of one without specifying the sharpen extent, so that it sharpens the entire mesh. That looks better. > > I'll fill out the **Remesh** block now, and let's start with 0.5 mm for edge length and triangle elements. It looks okay, but I want smaller elements, so I'll decrease this number then click on the play button to run, and that looks good. If I check the properties, we have now closed and Edge manifold true and self-intersecting false, which is what we want. So, we can move on to fill the volume mesh block. I want to use the same edge length here. So, let's make it a variable called mesh size and drag this in here as well, and then run that. > > If I select this and press X to see the cross-section, we can see that we have the elements on the inside as well. All we have to do now is give the **F Volume Mesh** block its last input. I'll choose linear here, and then our solid mesh is complete. So, I will collapse this whole block, and then we can also assign that material and start to fill out our load case in the boundary conditions list. > > Since we know we want a force applied and a displacement restraint, we can have another item on the list. We'll double click to choose force, and then on the second one, we'll choose displacement restraint. To select the boundaries for both of these, we need to use the mesh that we've just created, so that solid mesh. We can right click on the face we want to select and choose that flood fill option and bring that into the boundary input. Change to nodes and the force vector. I will put 0, 0, and 1,000 Newtons for that force in the negative Z direction. We'll do the same for the bottom face boundary, right clicking on that mesh face and choosing flood fill, putting that into the boundary input for this displacement restraint as well. > > We can see that it's already starting to run the analysis because we have everything filled in. So, now I'll just start to clean up my workflow a bit by making this boundary conditions list a variable so that it pops outside of that whole nesting block. I'll also make that **FE Model** a variable and move that up in the order that makes sense for the process and rename this analysis results. Now, if we isolate this block, we can see the result of the analysis. We can take a look at the cross-section by typing X on the keyboard. We can go to the properties and display and toggle off that wireframe. Using the heads up display, we can choose to display the strain stress and then look at that deformation as well. > [!NOTE] > > **Note: Before viewing this video, please review [the following updates](https://support.ntop.com/hc/en-us/articles/39936980909715-nTop-CFD-and-Simulation-Updates) that were made to nTop starting at nTop 5.23. Several block and property names have changed since this video was produced.** **We are in the process of updating this information.** This video walks through an example of how to set up and run a simulation on a simple lattice structure using the Solid Elements method. Please download the nTop file below to follow along with the tutorial. The completed file of this workflow will be available for download at the end of this section. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [342\_4\_Starter — Lattice FEA Using Solid Elements.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_4_Starter%20--%20Lattice%20FEA%20Using%20Solid%20Elements.ntop) *This file was last updated in nTop 5.13.2* [342\_4\_Follow Along – Lattice Simulation Using Solid Elements.pdf](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/PDFs/342_4_Follow%20Along%20-%20Lattice%20Simulation%20Using%20Solid%20Elements.pdf) # Knowledge Check: Lattice FEA Source: https://docs.ntop.com/lessons/lattice-structural-analysis/knowledge-check-lattice-fea # Lattice Simulation Options and Comparison Source: https://docs.ntop.com/lessons/lattice-structural-analysis/lattice-simulation-options-and-comparison There are several ways to simulate the behavior of lattice structures, each with its own set of trade-offs. The table below provides an overview of the three different methods of simulating lattice structures in nTop. The next section will cover each of these methods as well as how to implement them so that you can better understand their differences and make informed decisions on the most suitable approach for your use cases and applications. ![](https://files.learn.ntop.com/lessons/lattice-simulation-options-and-comparison-2/342_2_Solid-Elements.png) **Solid Elements** **Pros:** * Accuracy * Edge effects considered * Locatable maximum stress point **Cons:** * Computationally expensive * Requires meshing of the lattice (challenging) * Dependent on mesh quality * Large file size **Applies To:** * Graph/beam-based lattices * TPMS structures ![](https://files.learn.ntop.com/lessons/lattice-simulation-options-and-comparison-2/342_2_Beam-Elements.png) **Beam / Shell Elements** **Pros:** * Fastest of the three methods * Accepts field-driven beam thickness **Cons:** * No edge effects * No stress concentrations * Ignores blend lattice-wall radius **Applies To:** * Graph lattices/beam- based lattices * Shell lattices ![](https://files.learn.ntop.com/lessons/lattice-simulation-options-and-comparison-2/342_2_Homogenization.png) **Homogenization** **Pros:** * Fast * Works for any type of lattice * Works on large and high-density lattice structures **Cons:** * More setup steps * Least accurate * No edge effects * No stress concentrations * Ignores blend lattice-wall radius * Lattice must be uniform and periodic **Applies To:** * Graph lattices/beam- based lattices * TPMS structures Check out [this article](https://support.ntopology.com/hc/en-us/articles/360051081633-What-are-the-options-for-simulating-lattices-) on our Help Center to see a Case Study, which compares how these different methods affect computation time, displacement, and stress for a Body-Centered Cubic lattice. # Method 1: Using Solid Elements Source: https://docs.ntop.com/lessons/lattice-structural-analysis/method-1-using-solid-elements This method treats your lattice structure as solid elements by creating a volumetric finite element mesh of the entire lattice structure. ![](https://files.learn.ntop.com/lessons/method-1-using-solid-elements-2/342_2_Solid-Elements-1.png) **Advantages:** * Best accuracy * Considers blend lattice-wall radius * Captures edge effects and stress concentrations **Limitations:** * Meshing challenges for complex lattice structures * Small mesh element size is needed to capture the detail of the lattice * Result is dependent on mesh quality * Takes a long time to compute * Generates large file size ## Setup The setup for this method is the same as for running static structural analysis on any other non-latticed parts. This includes creating an **FE Model** containing the **FE Solid Component** of your lattice structure and defining your load case in the **Boundary Conditions**. You can then put the completed **FE Model** and **Boundary Conditions** into the **Static Analysis** block and let it run. ![](https://files.learn.ntop.com/lessons/method-1-using-solid-elements-2/342_3_Setup.png) ## FE Solid Component You can use either the **FE Component** block and fill out the Attribute as **FE Solid Attribute** or the built-in toolkit block **FE Solid Component,** which lets you skip the step of defining the attribute type. ![](https://files.learn.ntop.com/lessons/method-1-using-solid-elements-2/fe_component.png) ## FE Volume Mesh for Lattices To create the **FE Volume Mesh** of your lattice structure, which you need as input for the FE Component, start with this recommended workflow. This combination of blocks converts your implicit body into a surface mesh, remeshes it to be suitable for FEA, then generates and discretizes a volumetric mesh with assigned nodes. The recommended tolerance for the **Mesh from Implicit Body** block is 30% of the smallest feature in your part. ![](https://files.learn.ntop.com/lessons/method-1-using-solid-elements-2/342_3_FE-Volume-Mesh.jpg) > [!TIP] > > **Tip:** > Turn on *Manual Run Mode* at the **Remesh Surface** block using the right-click menu so that you can try out different input values in the **Mesh from Implicit Body** block without having to run through the whole workflow. You can do the same for **Volume Mesh** as well. This is to ensure you have a good initial mesh with properties closed true, edge manifold true, and self-intersecting false before moving on to the next steps. > For complex geometries like lattices, we recommend using the second overload of the **Mesh from Implicit Body** block by clicking on the drop-down arrow to the right of the block name. This allows you to globally or locally sharpen your mesh, which can help to resolve areas with high element density. > For a deep dive into best practices for meshing complex designs, take a look at this video on [surface meshing techniques](https://learn.ntop.com/courses/surface-meshing-techniques/). > If **Volume Mesh** fails for your geometry, try using the **Robust Tetrahedral Mesh** block instead. It will take longer to compute but can is more robust in dealing with complex parts. # Method 2: Using Beam or Shell Elements Source: https://docs.ntop.com/lessons/lattice-structural-analysis/method-2-using-beam-or-shell-elements This method treats your lattice structure as beam elements or shell elements. Finite element nodes, connected by lattice beams or shells, are assigned along lattice vertices. ![](https://files.learn.ntop.com/lessons/method-2-using-beam-or-shell-elements-2/342_2_Beam-Elements-1.png) **Advantages:** * Fastest computation due to usage of beam elements * Greatly reduced number of elements * Works for field-driven or variable beam thickness **Limitations:** * Only works for beam-based or shell lattices * Ignores blend lattice-wall radius * Does not consider mechanical behavior such as edge effect and stress concentration in the lattice ## Setup The setup for this method is mostly the same as for running static structural analysis on non-latticed parts. The only difference is that the lattice meshes as beam elements instead of as solid volumetric elements. As with any static analysis, you create an **FE Model** containing your component(s) and define your load case in the **Boundary Conditions**. You can then put the completed FE Model and Boundary Conditions into the **Static Analysis** block and let it run. ![](https://files.learn.ntop.com/lessons/method-2-using-beam-or-shell-elements-2/static_analysis_lattice-1.png) ## FE Beam/Shell Component You can use either the **FE Component** block and fill out the Attribute as **FE Beam Attribute** or the built-in toolkit block called **FE Lattice Component,** which lets you skip the step of defining the attribute type. ![](https://files.learn.ntop.com/lessons/method-2-using-beam-or-shell-elements-2/fe_lattice_component.png) Use **FE Shell Attribute** in the **FE Component** block instead to create shell elements. ![](https://files.learn.ntop.com/lessons/method-2-using-beam-or-shell-elements-2/fe_shell.png) Since we use the Lattice directly, the lattice component will use the Thickness input from the Lattice blocks. ## FE Lattice Mesh Use the **FE Lattice Mesh** block to mesh your beam-based or shell lattice. It will take your lattice and assign finite element nodes along lattice vertices connected by beams. Make sure to correctly isolate and trim your lattice beforehand so that the lattice elements do not extend beyond the volume of the lattice structure or into the surrounding walls. > [!NOTE] > > **Note**: If you get a warning about short lattice beams, use **Collapse Lattice Vertices** with a threshold much lower than the unit cell size. ![](https://files.learn.ntop.com/lessons/modeling-an-empennage/image-1.png) The **FE Lattice Mesh** block places nodes at the endpoints of each beam, with node(s) along the subdivisions of the beam. *Linear* beam elements will have two nodes, whereas *Quadratic* beam elements will have three. You can choose the number of subdivisions as an input to this **FE Lattice Mesh** block, which will create an array, as demonstrated in the image below. For instance, a beam with length ***x*** and a subdivision of three splits into three elements of ***x/3*** length each. ![](https://files.learn.ntop.com/lessons/method-2-using-beam-or-shell-elements-2/342_5_Subdivisions.png) The block evaluates beam thickness ***t*** at each beam node. Linear beam elements have two thicknesses, and quadratic elements have three thicknesses. It also evaluates material properties at the element centroid; each element will have a single stiffness. > [!TIP] > > **Tip:** > For field-driven lattice thickness, higher beam subdivisions will give a more accurate representation of the lattice's changing diameter and varying stiffness. > In the properties of the FE Lattice Mesh block under beams → properties, you will find information such as start points, endpoints, lengths, and line segments of the beam mesh in list form. You can drag these into the notebook for visualization or further use. Useful blocks for visualizing each index and working with these properties are: > List Element lets you bring in a list from your lattice beam properties and choose the index. If the list items are points or line segments, you can visualize these normally with the visibility toggle with the block selected. Changing the display color of the different points/line segments lists can also be helpful. If the list items are values, you can see the items with the chosen index at the top right corner of the block. > Sort lets you rearrange the order of your list items based on a chosen proxy. For example, sort the line segment list by its axis direction x property. The result would be a new list of line segments with indices ordered based on the x-axis. ## FE Solid Mesh of Non-Lattice Surrounding Walls Non-lattice geometry, such as the surrounding walls, can be meshed as a normal **FE Volume Mesh** and used as input for an **FE Solid Component**, then joined with the lattice component via a connector. This combination of blocks converts your implicit body into a surface mesh, re-mesh it to be suitable for FEA, and then generates and discretizes a volumetric mesh with assigned nodes. If you have a CAD part, converting directly from it using the **Mesh from CAD Body** block is better to minimize tolerances. Sharpen the geometry in the **Mesh from Implicit Body** block if needed. If the geometry is very simple, skip the **Remesh Surface** block. The recommended tolerance for the **Mesh from Implicit Body** or **Mesh from CAD Body** block is 30% of the smallest feature in your part. Smaller element size or edge length in **Remesh Surface** and **Volume Mes\*\*\*\*h** is better here because there will be more nodes in proximity to the nodes of the lattice beams at the lattice-wall interface, which have to be joined together via a tie constraint. ![](https://files.learn.ntop.com/lessons/optional-follow-along-fe-model-and-boundary-conditions-2/image-2.png) > [!TIP] > > **Tip:** > To increase accuracy, you can also use fields to drive your element size along the thickness of your wall so that they are the smallest at the interface with the lattice. This can be done by adding a **Ramp** block to the edge length input in **Remesh Surface** and **Volume Mesh** blocks. > Note that the two **Ramp** blocks you see are two instances of the same block, and changes in one are reflected in the other. You can also achieve this by making **Ramp** a variable and using it in both locations. ![](https://files.learn.ntop.com/lessons/method-2-using-beam-or-shell-elements-2/image-4-1024x616.png) To see an example of how to apply this technique, see the completed file 'Lattice FEA Using Beam or Shell Elements', which is available for download at the end of this course section. ## Components Connector Use the **Tie Constraint** block to join the independent and dependent nodes of the solid and lattice components together. ![](https://files.learn.ntop.com/lessons/method-2-using-beam-or-shell-elements-2/342_5_Tie-Constraint.png) The right tolerance value to use depends on your geometry. Generally, the higher the tolerance, the more nodes you capture at the interface area. > [!TIP] > > **Tip:** > If your lattice beams are not well trimmed or there are upstream issues with the CAD part, increasing the tolerance can help you select desired nodes farther away from the interface area while sacrificing accuracy. # Method 3: Homogenization Source: https://docs.ntop.com/lessons/lattice-structural-analysis/method-3-homogenization This method uses homogenized material representation to define and simulate lattice structures. It is a two-step simulation process that breaks the problem down into micro and macro scales. This process evaluates a single unit cell of the lattice to generate its *effective material properties*, which are then used to simulate the bulk lattice volume. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_2_Homogenization-1.png) **Advantages:** * Faster computation * Simulates bulk large-scale behavior for large and high-density lattices * Works for any type of periodic lattice **Limitations:** * Works best with a large amount of unit cells * Does not consider mechanical behavior such as edge effect and stress concentration in the lattice * Lattices that must be entirely uniform and periodic, with alignment of the unit cell at boundaries with adjacent unit cells Homogenization takes a single unit cell and characterizes how it would behave in isolation. The result of the homogenization of a unit cell is its stiffness matrix, visualized as colorful blobs in the image below. You can read more about the block and the process [here](https://support.ntop.com/hc/en-us/articles/23019150935955-How-to-run-homogenization). This information is used as the material properties for simulating the bulk representative volume where the lattice is located, which simplifies the problem from a large number of unit cells to just one anisotropic or orthotropic material. | **Gyroid** | **Lidinoid** | **Neovius** | | - | - | - | | | | | | **Diamond** | **SplitP** | **Schwarz** | | | | | This method is an approximation, which makes it great for quickly predicting how and to which extent changes in the unit cell will impact the overall design. It is especially good for comparing different lattice types to help make design decisions by narrowing the number of geometry options to a few good candidates. It can also be a powerful tool to help understand the effects of modulating certain characteristics of an architected material. Homogenized simulation of lattices is, therefore, a great method for evaluating and comparing initial designs. However, it should not be utilized as a final design accuracy method. ## Setup A homogenized simulation requires a two-stage set up. The first stage is running a Solid FEA simulation on a single unit cell of the lattice using the **Homogenize Unit Cell** block. Creating the FE Model and FE Components is the same as running normal static analysis but without the need to define boundary conditions. Then, using the results from the first simulation as the material property, run a second Solid FEA simulation on the bulk lattice structure volume. You must create a new **FE Model** in new FE Components to do this. The homogenization result is the FE Solid Component's material input representing the lattice volume. This is where you define the boundary conditions. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/homogenize_setup.png) ## Stage 1: Homogenizing a Unit Cell Start by creating your unit cell volume **Box** and unit cell based on the cell size, type, orientation, and thickness of your lattice structure. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Homogenize-Unit-Cell.gif) Trim the unit cell to fit the box volume using **Boolean Intersect** with the volume. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Homogenize-Unit-Cell-Trim-1.gif) Create the **FE Volume Mesh** of your unit cell, which you need as input for the **FE Component**. Below is the recommended workflow. This combination of blocks converts your implicit body into a surface mesh, remeshes it to be suitable for FEA, then generates and discretizes a volumetric mesh with assigned nodes. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_FE-Vol-Stage-2.jpg) Depending on the type of Unit Cell you are using, you may have disconnected floating bits. Remove these after the first meshing step with **Mesh from Implicit Body** block by putting the mesh into the **Split Mesh** block. You can either go into the properties of the **Split Mesh** block and drag out the correct 'Mesh list' to use in the next meshing step or use a **Filter Mesh List** block with a volume threshold. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Filter-Mesh.gif) The **Homogenize Unit Cell** block also includes mechanical and thermal homogenization capability. The block can calculate a unit cell's elastic properties and equivalent thermal properties, such as conductivity and specific heat. A set of boolean inputs named 'Mechanical' and 'Thermal' enables users to choose the desired homogenization type. Not selecting both inputs will cause the block to calculate only the density of the unit cell. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Mech-Thermal-Inputs.png) After the result is computed, you can visualize the unit cell stiffness matrix by isolating the **Homogenize Unit Cell** block and changing the setting in the heads-up display to ***'Directional'*** ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Homogenize-Results.jpg) You can read the resulting matrix coefficients for compliance and stiffness in the block's properties tab under *material → linear elastic property*. Under each coefficient chip, you will find its constant value. You can export this result in various formats that can be opened in external software such as Ansys or Abaqus using the **Export Material** block. You can also do this by right-clicking on the **Homogenize Unit Cell** block and choosing 'Export'. This option exports file formats .txt or .csv. The exported result is a 6×6 elasticity matrix. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Export-Material.png) ## Stage 2: Analysis of Bulk Representative Volume Using Homogenization Results Using the homogenization result as the material for the **FE Solid Component** that contains an **FE Volume Mesh** of the bulk lattice region, create a new **FE Model** that joins that solid bulk component with the **FE Solid Component** of the surrounding walls via a tie constraint. Also, define your load case in the boundary conditions for the **Static Analysis** block. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Static-Analysis.png) Follow the same recommended meshing workflow to create an **FE Volume Mesh** for both of these solid components. Make sure that the mesh of the bulk lattice volume is somewhat uniform. ![](https://files.learn.ntop.com/lessons/optional-follow-along-fe-model-and-boundary-conditions-2/image-2.png) Use the **Tie Constraint** block to join the independent and dependent nodes of the two solid components. Then, use the FE Boundary by Body block to define the **FE boundary**. ![](https://files.learn.ntop.com/lessons/method-3-homogenization-2/342_7_Tie-Constraint.png) # Optional: Lattice FEA Problem Statement Source: https://docs.ntop.com/lessons/lattice-structural-analysis/optional-lattice-fea-problem-statement Now that you have learned the different ways to simulate lattice structures in nTop try this optional problem to apply your knowledge to a more complex model. The answer will be reviewed in the next lesson. **Problem Statement:** Run a structural static analysis on this latticed brake pedal, as shown below. The fixed face is marked with red cones, and the loaded face is marked with yellow downward arrows indicating an applied force of 200N in the negative z-direction. Choose one of the three lattice simulation methods and set up and run your simulation using the material in the starter file below. ![](https://files.learn.ntop.com/lessons/optional-lattice-fea-problem-statement-2/342_11_Test-Problem-1024x563.jpg) **Estimated Time to Complete:** 25 minutes **Example File:** [342\_11\_Starter — Lattice FEA Test Problem.ntop](https://files.learn.ntop.com/Courses/342%20Lattice%20FEA/nTop%20Files/342_11_Starter%20--%20Lattice%20FEA%20Test%20Problem.ntop) *This file was last updated in nTop *5.14.2** # Overview Source: https://docs.ntop.com/lessons/lattice-structural-analysis/overview This course demonstrates the different methods of setting up and running structural finite element analysis on lattice structures in nTop as well as the pros and cons of each approach. ![Lattice Structural Analysis](https://storage.googleapis.com/files-learn/lessons/lattice-structural-analysis/Featured_Image_Lattice_FEA-1.png) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-foundations/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [240: Intro to Simulation](/lessons/intro-to-structural-analysis/overview) **What will be covered:** * Three methods for simulating lattice structures in nTop * Learn the process for setting up and running a simulation using each of these methods from scratch * The key differences between these different methods, their advantages and limitations, and when to use each > **[Before We Begin](/lessons/lattice-structural-analysis/before-we-begin-lattice-simulation)** > **[Lattice Simulation Options and Comparison](/lessons/lattice-structural-analysis/lattice-simulation-options-and-comparison)** ### Methods for Simulating Lattices > **[Method 1: Using Solid Elements](/lessons/lattice-structural-analysis/method-1-using-solid-elements)** > **[Follow Along: Lattice Simulation Using Solid Elements](/lessons/lattice-structural-analysis/follow-along-lattice-simulation-using-solid-elements)** > **[Method 2: Using Beam or Shell Elements](/lessons/lattice-structural-analysis/method-2-using-beam-or-shell-elements)** > **[Follow Along: Lattice Simulation Using Beam or Shell Elements](/lessons/lattice-structural-analysis/follow-along-lattice-simulation-using-beam-or-shell-elements)** > **[Method 3: Homogenization](/lessons/lattice-structural-analysis/method-3-homogenization)** > **[Follow Along: Homogenized Lattice Simulation](/lessons/lattice-structural-analysis/follow-along-homogenized-lattice-simulation)** > **[Download: Completed Lattice Simulation nTop Files](/lessons/lattice-structural-analysis/download-completed-lattice-simulation-ntop-files)** > **[Knowledge Check: Lattice FEA](/lessons/lattice-structural-analysis/knowledge-check-lattice-fea)** ### Optional Lattice FEA Test Problem > **[Optional: Lattice FEA Problem Statement](/lessons/lattice-structural-analysis/optional-lattice-fea-problem-statement)** > **[Answer to Lattice FEA Test Problem](/lessons/lattice-structural-analysis/answer-to-lattice-fea-test-problem)** ### What's Next > **[Resources](/lessons/lattice-structural-analysis/resources)** # Resources Source: https://docs.ntop.com/lessons/lattice-structural-analysis/resources 1. Article: [Texturing for Additively Manufactured Products with nTop](https://ntopology.com/blog/texturing-for-additively-manufactured-products-with-ntop-platform/) 2. Article: [How to Create Procedural Textures for Design & Engineering](https://ntopology.com/blog/how-to-procedural-textures/) 3. Video: [Industrial Design DfAM Series: Tile-Free Texturing in nTop](https://ntopology.com/videos/video/industrial-dfam-series-tile-free-texturing-in-ntop/) (\~26min) # nTop Learn Live – Fundamentals: Part 1 Source: https://docs.ntop.com/lessons/learn-live-restricted-access/ntop-learn-live-fundamentals-part-1 # nTop Learn Live – Fundamentals: Part 2 Source: https://docs.ntop.com/lessons/learn-live-restricted-access/ntop-learn-live-fundamentals-part-2 # nTop Learn Live – Fundamentals: Part 3 Source: https://docs.ntop.com/lessons/learn-live-restricted-access/ntop-learn-live-fundamentals-part-3 # nTop Learn Live – Fundamentals: Part 4 Source: https://docs.ntop.com/lessons/learn-live-restricted-access/ntop-learn-live-fundamentals-part-4 # Distorting Signed Distance Fields Source: https://docs.ntop.com/lessons/modeling-foundations/distorting-signed-distance-fields ## Introduction In the previous lesson, you built fields directly from equations using the **Scalar Field Variable** block to represent the X, Y, and Z coordinates. You also learned to recognize a well-behaved signed distance field (SDF) in the Field Viewer: its isolines remain parallel to the surface and are evenly spaced because moving 1 mm through space changes the field value by exactly 1 mm. This lesson explains what can cause a field to lose these characteristics and how to address the resulting behavior. It focuses on one of the blocks most commonly associated with this change: **Remap Field**. ## When an Implicit Field is Not an SDF Any scalar field that is negative inside a shape and positive outside can correctly define the shape's boundary at the zero-value surface. However, accurately defining the boundary does not mean the field accurately represents distance everywhere else. For a field to be a signed distance field (SDF), the magnitude of its rate of change must equal 1. In other words, moving 1 mm through space in every direction should produce a 1 mm change in the field value—no more and no less. This rate of change is described by the field's gradient, and a true SDF has a unit gradient. Consider the sphere, with a radius of 3 and its center at the origin: *F(x, y, z) = √(x² + y² + z²) − 3* This equation produces an exact SDF because its gradient magnitude is 1 throughout the field. Now compare the sphere with an ellipsoid that is compressed along one axis. The ellipsoid's implicit equation remains negative inside the shape and positive outside, so its zero-value surface correctly defines the ellipsoid's boundary. However, the gradient magnitude varies with position and direction. As a result, field values away from the zero-value surface no longer represent true distances. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/sphere%20vs%20ellipse%20isolines.jpg) *A sphere's isolines are evenly spaced and parallel to its surface, while an ellipsoid's isolines crowd near the poles and spread out near the equator* Triply periodic minimal surface (TPMS) lattices provide another common example. Their zero-value surfaces are well defined, but the surrounding fields do not necessarily represent distance. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/SDF%20vs%20implicit%20field.jpg) *A Signed Distance Field (left) and three examples of implicit fields (right)* Therefore, implicit field and signed distance field are not interchangeable terms: every SDF is an implicit field, but not every implicit field is an SDF. ### When an Implicit Field is Not an SDF and Why it Matters A distorted field may still appear correct in the Viewport because the Viewport displays only the zero-value surface. Problems become apparent when the field is used for operations that depend on values beyond that surface, which includes many common implicit-modeling operations: * Offsets and shells locate a new surface at a specified field value rather than at a geometrically measured distance. If the field does not have a unit gradient, a 2 mm offset will not necessarily be positioned 2 mm from the original surface. The resulting wall thickness may differ from the specified value, becoming thinner where isolines are closely spaced and thicker where they are farther apart. * Blend Radii on boolean operations control how two fields transition near their shared zero-value surfaces. If either input field is distorted, the resulting blend may be inconsistent or unpredictable. Note: This lesson covers distortion caused by shapes and operations like **Remap** that produce a non-unit gradient. A different category of field problem — false zeros and discontinuities caused by coincident Booleans — is covered in the next lesson, Field Quality. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/sphere%20vs%20ellipse%20shell.jpg) *Shelling a sphere and an ellipsoid using the same offset value results in uniform wall thickness for the sphere and nonuniform wall thickness for the ellipsoid* ## Remap ### Why Use Remap? The following examples use the **Remap Field** block to translate or scale a simple geometry. Although these examples clearly demonstrate the block's behavior, its primary value is transforming geometry that cannot be easily described using standard X, Y, and Z coordinates. **Remap Field** is one of nTop's most powerful and versatile blocks. For example, a repeating pattern of holes can be created on a flat rectangular domain and then wrapped around a cylinder, much like a label around a can, without individually positioning each hole on the curved surface. The same principle can bend a beam along a curved centerline or project a bitmap image onto a part as a surface texture. In each case, the geometry or pattern is created once in a simple coordinate space, and **Remap Field** transforms that space to produce the more complex result. ### Coordinate Substitution with Remap Field You can think of transforming a field as changing the coordinates at which you evaluate it. For example, replacing x with (x−2) in a sphere equation shifts its zero-value surface by 2 units in the positive X direction. Rather than moving the geometry directly, the transformation changes how points in space are mapped to the source field. This coordinate substitution is the principle behind the **Remap Field** block. The **Remap Field** block is located under Fields > Remap. It accepts a *Scalar Field* input, which may also be an Implicit Body because an implicit body contains an underlying scalar field. The block also provides X, Y, and Z inputs, each of which accepts any scalar field. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20field%20block.jpg) *The **Remap Field** block* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20field%20block%20overload.jpg) *Overload of the **Remap Field** block* By default, these inputs represent their corresponding coordinates. Connecting a different field to an input replaces that coordinate wherever the source field is evaluated. For example, the field connected to X is evaluated in place of the default X coordinate, and the same principle applies to Y and Z. This allows the coordinate space to be transformed without modifying the source field or its original equation. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20field%20sphere%20to%20ellipse.jpg) *The **Sphere** is unmodified by the **Remap Field** block so it doesn't change (left) versus applying the **Remap Field** modifications to stretch the **Sphere** into an ellipsoid (right)* ### Translation: An SDF-Preserving Remap Take the same sphere, and set the **Remap Field** block's X input to x − 2 mm, leaving Y and Z as they are. The sphere shifts 2 mm in the positive X direction. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20sphere%20translate.gif) *An example of using the **Remap Field** block to translate a **Sphere** along the X-axis* Check the Field Viewer, and the isolines are still evenly spaced and parallel. A pure shift doesn't change how quickly the field changes as you move — it just relocates where that change happens. Translation through the Remap Field preserves the SDF. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/sphere%20field%20isolines.jpg) *The field of the translated **Sphere** along the x-axis* ### Mirroring Mirroring is another transformation that preserves the SDF when you perform it with a **Remap Field**. To reflect geometry across the YZ-plane at x=0, drag the *Negative* property of the X component block representing −x to the X input while leaving the Y and Z inputs unchanged. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20box%20mirror.gif) *An example of mirroring a box using the **Remap Field** block* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20field%20box%20from%20corners.jpg) *Another representation of this same Mirror operation without variables in the XYZ components* Like translation, mirroring does not stretch or compress the geometry. It is an isometric transformation, meaning distances are preserved, and the field values continue to change at the same rate throughout space. Therefore, the gradient magnitude remains equal to 1, and the remapped field remains a valid SDF. However, when viewing the fields of the original and mirrored bodies, you may notice a region where their boundaries coincide. This overlapping boundary can produce unintended results during Boolean operations. You will explore this behavior, an Implicit Artifact, in the next lesson. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/mirror%20box%20field.jpg) *Field view of the original and mirrored bodies, highlighting the region where their boundaries coincide.* For straightforward reflections of an entire body, use the dedicated **Mirror Body** block. Use **Remap Field** when the mirror must be applied directly to a field, combined with other coordinate substitutions, or defined relative to a plane that is not aligned with a global axis. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/mirror%20body%20block.jpg) *The **Mirror Body** block with a **Plane from Normal** block in its Plane input* ### Scaling: An SDF-Distorting Remap Set the X, Y, and Z inputs to their corresponding coordinate fields divided by 2. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20field%20sphere%20scaling.jpg) *Dividing each of the X, Y, Z inputs by two results in the **Sphere** doubling in size* The sphere doubles in size, but the **Field Viewer** reveals a different effect from the earlier translation. The isolines remain evenly spaced and parallel, but the distance between them doubles. The resulting field remains SDF-like throughout the domain; however, its gradient magnitude is now a constant 0.5 rather than 1. Moving 1 mm through space changes the field value by only 0.5 mm. Although the zero-value surface, and therefore the visible sphere, remains unchanged, the field values no longer represent true physical distance. As a result, downstream operations that rely on these values, such as offsetting or shelling, may produce incorrect dimensions. For example, a requested 1 mm offset will produce a 2 mm geometric offset. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/sphere%20scaled%20offset.jpg) *A 1 mm offset applied to the uncorrected scaled sphere produces a 2 mm shell thickness (left), while the same offset applied after restoring the signed distance field produces the intended 1 mm shell thickness (right)* Because this distortion is uniform, you can correct it by multiplying the output field by 2, restoring a gradient magnitude of 1 and ensuring dimensionally accurate downstream behavior. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/multiply%20remap%20sphere.jpg) *The scaled **Sphere**'s field is multiplied by 2 to restore the signed distance field.* ![](https://storage.googleapis.com/files-learn/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/scaled%20spheres%20field%20comparison.jpg) *Distance fields for the original sphere (left), the scaled sphere before correction (center), and the scaled sphere with its distance field restored (right)* Change only the X input to X/2 while leaving Y and Z unchanged. The sphere becomes an ellipsoid, and the resulting field distortion is no longer uniform. Its magnitude varies with direction and position, as demonstrated in the earlier ellipsoid example. Because the geometry is stretched differently across the field, no single multiplier can restore the signed distance property everywhere. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20field%20x2%20sphere%20field.jpg) *Changing X to X/2 changes the **Sphere** into an ellipsoid* For this reason, the **Remap Field** block is a common source of field distortion. Any coordinate substitution other than a simple translation alters the field gradient. Many useful transformations, including scaling and the cylindrical and spherical remaps introduced later in this lesson, therefore require careful evaluation of field quality. nTop also provides remapping blocks designed specifically for implicit bodies, such as **Remap Scale Body**. These blocks will attempt to compensate for distortion by scaling the field values to better preserve the signed distance property. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20scale%20body%20block.jpg) *The **Remap Scale Body** block* ### Arraying Repetition uses a different form of coordinate substitution. Rather than relocating a single copy, it creates an infinite sequence of copies. The **Mod** block, located in the Math tab, returns the remainder of a division. Inputting **Mod** (x, spacing) to the *X* input of **Remap Field** maps every interval of length spacing back to the same base interval. As a result, any geometry within that interval repeats every *n* spacing units along the X-axis. Because the resulting field extends infinitely, use **Set Bounding Box** to define a finite region in which to visualize it. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/mod%20rainbow%20field.jpg) *Field view of **Mod** applied to the X-axis with a spacing of 10 mm. The field spans from 0 to 10 mm and repeats infinitely along the X-axis.* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20array%20boxes.jpg) *An example of using the **Mod** and **Remap Field** blocks to array a **Box from Corners*** ### Cylindrical and Spherical Remap The **Remap Cylindrical Field** and **Remap Spherical Field** blocks, located under Fields > Remap, transform planar geometry by wrapping it around an axis or point—like wrapping a flat label around a cylinder. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20spherical%20cylindrical%20field%20blocks.jpg) *The **Remap Cylindrical Field** and **Remap Spherical Field** blocks* Both blocks evaluate the input field within a defined mapping region. For **Remap Cylindrical Field**, only values along the positive X-axis and within the Y-axis interval from −*Y Mapping Length*/2 to +*Y Mapping Length*/2 are mapped. The positive X-direction maps to the radial direction, while the *Y Mapping Length* maps to one complete revolution, from −180° to 180°. As a result, features at opposite ends of the defined Y-range appear on opposite sides of the remapped cylinder. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/cube%20with%20hole%20remap.jpg) *Original body with the green region indicating the portion to be remapped based on the specified Y Mapping Length of 1mm* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20cylindrical%20field%20target.jpg) *Resulting body after applying* ***Remap Cylindrical Field*** *to the Cube with Hole geometry shown above, using a Y Mapping Length of 1 mm.* **Remap Spherical Field** applies an additional angular transformation. Only values along the positive X- and Z-axes and within the Y-axis interval from −*Y Mapping Length*/2 to +*Y Mapping Length*/2 are mapped. *Y Mapping Length* controls the mapping around the sphere's longitude, while *Z Mapping Length* controls the mapping across its latitude. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/spherical_remap_with_block.gif) *Section view of the resulting geometry after applying* ***Remap Spherical Field*** *to the same Cube with Hole geometry shown above, using Y and Z mapping lengths of 1 mm.* Cylindrical and spherical remapping can distort a field more significantly and less predictably than uniform scaling. Geometry near the remapping axis is compressed into a smaller circumference, while geometry farther from the axis is stretched across a larger circumference. Because this scale factor varies continuously with radius, no single multiplier can restore a gradient magnitude of 1 throughout the field. The **Remap Cylindrical Field** and **Remap Spherical Field** blocks do not compensate for this distortion. After using either block, inspect the result in the Field Viewer and expect the isoline spacing to vary across the remapped field. When the remapped result must preserve the signed distance property—for example, before shelling a cylindrically wrapped body—use the **Remap Cylindrical Body** or **Remap Spherical Body** block, located under Modeling > Remap. Designed specifically for implicit bodies, these blocks will attempt to compensate for geometric distortion by scaling the field values to better preserve accurate distance measurements. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/remap%20cylindrical%20spherical%20body%20blocks.jpg) *The **Remap Cylindrical Body** and **Remap Spherical Body** blocks* ## What to Take Away * Every signed distance field (SDF) is an implicit field, but not every implicit field is an SDF. A true SDF has a gradient magnitude of 1, meaning its values represent physical distance from the zero-value surface. * A distorted field may appear correct in the Viewport because its zero-value surface remains valid. Use the Field Viewer to inspect isoline spacing and identify field distortion. * Operations such as offsetting, shelling, and blending depend on field values beyond the zero-value surface. Distorted fields can therefore produce inaccurate dimensions or inconsistent results. * **Remap Field** transforms geometry through coordinate substitution. Connecting a field to the X, Y, or Z input changes where the source field is evaluated without modifying its original equation. * Translation and mirroring preserve the SDF because they do not stretch or compress the field. Uniform scaling produces a constant distortion that you can correct with a constant multiplier, while nonuniform scaling cannot. * Combining **Mod** with **Remap Field** creates an infinitely repeating field. Use **Set Bounding Box** to define a finite visualization region. * **Remap Cylindrical Field** and **Remap Spherical Field** wrap planar geometry into cylindrical or spherical coordinate spaces, but their distortion varies throughout the field and cannot be corrected with a single multiplier. * When you must preserve accurate distance values, use body-specific remapping blocks—such as **Remap Scale Body**, **Remap Cylindrical Body**, or **Remap** **Spherical Body**—that attempt to compensate for field distortion. ## What's Next Now that you have learned the fundamentals of remapping and field distortion, you will apply your knowledge in the following knowledge check. # Field Quality Source: https://docs.ntop.com/lessons/modeling-foundations/field-quality ## Introduction In the previous lesson, you examined one source of unexpected field behavior. Operations such as **Remap Field**, as well as geometries such as ellipsoids and TPMS lattices, can produce fields with an accurate zero surface but a gradient magnitude that differs from one. As a result, offsets and blends may not appear at the intended distances. A second category of unexpected behavior arises from interactions between underlying fields rather than from the visible geometry itself. These outcomes, referred to here as implicit artifacts, may appear as unintended walls, unusual surfaces after a loft, or Boolean results that don't match the geometry displayed in the viewport. An implicit body may look correct but still contain coincident zero surfaces or other field behavior that affects downstream operations. In this lesson, you will create and debug examples of unexpected implicit geometry, identify coincident zero surfaces, use the Field Viewer to trace problems through a Notebook, and recognize when infinite fields provide a more robust modeling approach. ## Understanding Implicit Artifacts: False Zeros As discussed in previous lessons, a signed distance field assigns a value to every point in space. Values are negative inside an implicit body, positive outside it, and zero at its boundary. The surface displayed in the viewport represents this zero-value boundary. Modeling operations, including Booleans, offsets, and shells, operate on the underlying field rather than only on the visible surface. In most cases, the result matches the expected geometry. However, unexpected results can occur when the field contains unintended zero values. ### What is a False Zero? When two input bodies share the same face, end cap, or edge, their combined field may equal zero at locations that do not represent the intended boundary. nTop calls this condition a false zero. A false zero may not be apparent in the viewport because the rendered body can still appear correct. However, it can affect downstream operations that evaluate the field, producing an unintended wall, closing an expected opening, or causing an offset, shell, Boolean operation, mass-properties calculation, or slicing operation to return unexpected results. These outcomes are called implicit artifacts. Common causes include: * Creating coincident faces, edges, or end caps between bodies * Allowing bodies to touch without overlapping before a Boolean operation * Using infinite fields without restricting the region in which they are evaluated * Defining an unsuitable bounding box for an operation involving an infinite field This behavior differs from traditional B-rep modeling, where aligning two faces exactly is often desirable. In implicit modeling, coincident zero surfaces can introduce ambiguity into the resulting field. When geometry behaves unexpectedly, use the Field Viewer to inspect the underlying field rather than relying solely on the rendered body. ## Revealing False Zeros – Pipe Example A simple pipe demonstrates how a field-quality issue can remain hidden until a downstream operation evaluates the underlying field differently. ### Create the Pipe 1. Add a **Cylinder** block to create the outer cylinder. 2. Add a second **Cylinder** block with a smaller radius. 3. Assign both cylinders the same start and end points. This makes their end caps exactly coincident. 4. Use **Boolean Subtract** to subtract the smaller cylinder from the larger cylinder. 5. Display the resulting implicit body. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/pipe_falseZero.png) *Use the **Boolean Subtract** block to subtract the Inner Cylinder from the Outer Cylinder* The result appears to be a hollow pipe, and the viewport provides no visible indication of a problem. However, the coincident end caps introduce false zeros into the resulting field. ### Expose the Implicit Artifact 1. Add an **Offset Body** block. 2. Drag the created pipe to the block's *Body* input. 3. Apply a small positive offset. *Distance:* 0.5 mm ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/pipe_falseZero_offset.png) *Offsetting the pipe causes the ends to close* The openings at the ends of the pipe close unexpectedly. **Offset Body** did not create the problem; it revealed false zeros that were already present where the cylinders' end caps coincided. ### Diagnosing the False Zero with the Field Viewer As introduced in previous lessons, the **Field Viewer** provides insight into the underlying field and is an essential tool for diagnosing unexpected implicit geometry. 1. Return to the output of the **Boolean Subtract** block. 2. Open the **Field Viewer** for the resulting body. 3. Toggling Highlight Zero on identifies zero-valued regions, making unintended zero surfaces easier to locate. 4. Position the viewing plane near one end of the pipe, where the cylinders' end caps coincide. 5. Inspect the field for zero values that do not correspond to the intended boundary. In this example, a band of false-zero values appears along the end face. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/pipe_fieldviewer.png) *The Field Viewer reveals a false-zero wall across the inner radius of the pipe face* This example demonstrates a general debugging workflow for diagnosing unexpected implicit geometry: 1. Identify the region where the unexpected geometry appears. 2. Use the Field Viewer to inspect the output immediately before the operation that revealed the issue. 3. Examine the underlying field within the affected region. 4. If the field appears correct, move one block upstream in the Notebook and inspect its output. 5. Continue tracing the workflow backward until you locate the first block that introduces the unexpected field behavior. This approach distinguishes the operation that reveals an issue from the earlier operation that introduced it. ### Fix the Pipe The inner cylinder should extend completely through the outer cylinder rather than terminate at the same locations. 1. Extend the inner cylinder beyond both ends of the outer cylinder. 2. Where possible, define this extension parametrically so that the cutting cylinder continues to pass through the outer cylinder as the model dimensions change. 3. Repeat the **Boolean Subtract** operation using the extended cylinder as the cutting body. 4. Inspect the resulting field with the Field Viewer and confirm that the coincident zero surfaces are no longer present. 5. Reapply the **Offset Body** operation. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/fixed_pipe.png) *The Field Viewer view of the corrected pipe and field* The offset now preserves the openings at both ends of the pipe. This example demonstrates an important best practice for through-cuts: extend the cutting body beyond the target body to prevent coincident boundaries and create a more robust Boolean operation. ## Coincident Surfaces in Boolean Unions False zeros are not limited to subtraction operations. They can also occur when two implicit bodies meet at a coincident boundary before a Boolean Union. ### Create a Coincident Surface 1. Add two **Cube** blocks. 2. Position the cubes side by side. 3. Align the cubes so one face of each body occupies the same location without overlap. 4. Combine the cubes using **Boolean Union**. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/cubes_side_by_side.png) *A **Boolean Union** between two coincident **Cube*****s** The union may appear correct in the viewport. However, the **Field Viewer** reveals a false zero along the seam where the coincident faces meet. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/zero%20wall%20cubes.jpg) *The field of the two coincident cubes with a false zero along their shared surface* This hidden field behavior can affect downstream operations. ### Correct the Union Unlike the cylinder example, there is no cutting body to extend. Instead, create a deliberate overlap between the two bodies: 1. Move one cube slightly into the other so that the bodies share a region of volume rather than a single face. 2. Inspect the revised result with the **Field Viewer**. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/cubes%20fixed%20zero.jpg) *The corrected field with the false zero removed* The false zero should no longer appear at the original seam. For implicit Boolean operations, a deliberate intersection is generally more robust than exact surface alignment. Whether a cutting body terminates at its target or two bodies meet at a shared face, the underlying issue is the same: coincident zero surfaces can introduce unintended field behavior. A small, intentional overlap helps preserve a continuous and predictable result. ## Infinite Fields and When to Use Them You have already worked with an infinite field: a profile's **Distance to Extrusion** property. Because this field has no defined start or end, you need a **Set** **Bounding Box** or **Boolean Intersect** operation before you can use it as finite geometry. The same principle applies to the hollow-cylinder example. If the inner cylinder exists only to create a through-hole, its endpoints are not part of the design intent. A finite cutting cylinder introduces unnecessary end caps that may coincide with the outer cylinder and create false zeros. An infinite cylindrical field eliminates those boundaries entirely. ### Create an Infinite Cylindrical Field 1. Add an **Axis** block and place it along the outer cylinder's centerline. 2. From the Axis property menu, extract its **Scalar Field**. This field represents the distance from every point in space to the axis. 3. Create a variable for the desired hole radius. 4. Add a **Subtract** block and subtract the radius from the axis-distance field. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/infinite%20cylindrical%20field.jpg) *The blocks used to create the infinite cylindrical field* The resulting field is: *f = daxis – R* where: * daxis is the distance from the axis. * R is the desired hole radius. The field equals zero wherever the distance from the axis equals the radius. Because the axis has no endpoints, this zero surface forms an infinite cylinder without top or bottom surfaces. 5. Subtract the infinite cylindrical field from the outer cylinder. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/subract%20infinite%20cylinder.jpg) *Subtracting the infinite field from the Outer Cylinder creates this field result* The cutting field now passes completely through the outer cylinder, leaving no end caps that can coincide with its boundaries. ### Choosing Between Infinite Fields and Finite Bodies Use an infinite field when: * A feature must pass completely through a body. * The feature's endpoint is not part of the design intent. * The geometry depends only on distance from an axis or plane. * A finite cutting body would introduce unnecessary zero surfaces. * Another body determines the feature's final extent. Use a finite body when the design requires defined start and end locations, such as: * A blind hole * A finite cavity * A pocket with a specified depth * A feature with explicitly defined endpoints ## What to Take Away * An implicit body can appear correct in the viewport, but its underlying field may contain false zeros that affect downstream operations. * False zeros can occur when bodies share coincident faces, edges, or end caps. They may appear in both subtraction and union workflows. * The operation that exposes an implicit artifact isn't necessarily the one that created it. Use the Field Viewer to trace the field backward through the Notebook and identify where the issue first appears. * Use infinite fields when endpoints are not part of the design intent. Use finite bodies when a feature requires a defined depth or explicit start and end locations. * Apply a bounding box or intersection only when an infinite field must be restricted to a finite evaluation region. ## What's Next Now that you've learned about these implicit artifacts, you will test your knowledge with a knowledge check. # Modeling Foundations Survey Source: https://docs.ntop.com/lessons/modeling-foundations/modeling-foundations-survey Thank you for taking the Modeling Foundations course. We highly value your feedback, and would greatly appreciate you taking a second to fill out our Feedback Survey. Please click the link below to complete the survey. Please click this link to take the: [Modeling Foundations Feedback Survey](https://docs.google.com/forms/d/e/1FAIpQLSexPrbtkF9yr3V-Or-5v8lfJNHFJdv0VGanRSOPXR4PeUCWmA/viewform) After taking the survey, please make sure you click “Mark Complete” to complete this lesson and course. # Modeling Operations Source: https://docs.ntop.com/lessons/modeling-foundations/modeling-operations ## Profile Modeling The Profile type represents sets of coplanar curves that can be: * open or closed * simple or complex with multiple loops If closed, a Profile can have multiple loops (e.g., several circles inside a rectangle). Open profiles are infinite and can be used in the same blocks as closed profiles. An open profile will automatically extend and close with lines if the infinite extensions intersect. This flexibility enables you to create sophisticated 2D shapes that serve as the foundation for 3D geometry generation through extrusion, revolution, or sweeping operations. These operations function similarly to those in traditional CAD programs, but it's important to understand how they perform differently in nTop. ### Important Profile Field Properties The Profile system includes two important field properties that extend its utility beyond simple 2D shape definition: * Distance to Extrusion: is a signed distance field to the infinite extrusion relative to the profile's plane, which enables advanced geometric operations and field-driven modifications. * Distance to Region: is an unsigned distance field to the enclosed region, which is particularly useful for creating complex internal structures or for defining simulation boundaries. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/DTR%20vs%20DTE.png) *A visual comparison between the Distance to Extrusion (left) and the Distance to Region (right) properties* #### Using Distance to Region for Simulation Boundaries One of the most practical applications of using the Distance to Region property is for defining boundary conditions. The example below shows an inlet boundary definition for a **Flow Analysis**. This curved implicit body represents the fluid path for running the **Flow Analysis**. The end face that is highlighted by the red box is where we want to define the inlet boundary for the fluid. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/starting%20geometry.png) *An example fluid path for a **Flow Analysis** with the intended inlet highlighted* Start by creating a **Plane** parallel to the surface of the intended boundary. This **Plane** is used to define the profile that matches the inlet face. The **Rectangle** profile should be almost touching the inlet surface. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/rectangle%20profile.png) *A **Plane from Normal** created slightly offset of the inlet surface* Extract the Distance to Region property chip from the properties panel of the **Rectangle** block. We can then use the Field Viewer to see the resulting Signed Distance Field. This field perfectly captures the area that we want to define as our inlet boundary, so we can insert the DTR variable into the *Body* input of the **Virtual Boundary by Body** block. This boundary is now capable of defining an inlet **Velocity** or **Pressure** for a **Flow Analysis**. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/dtr%20field.gif) *Using the Distance to Region property of the **Rectangle** to define the inlet virtual boundary* #### Creating Geometry using Distance to Extrusion Considering the Distance to Extrusion property is an infinite field, we can use the **Set Bounding Box** block to visualize the geometry. This is the same concept that we learned in Lesson 1 with the infinite gyroid field example. The example below shows a hexagon profile with its Distance to Extrusion field extracted as a variable. By placing a **Bounding Box** around a section of the infinite field, we can visualize the resulting geometry. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Set%20Bounding%20Box%20infinite.gif) *Using a **Set Bounding Box** block on the Distance to Extrusion property of the Hexagon Profile* Using **Set Bounding Box** in this method is only for visualizing the field geometry. The field itself is still infinite beyond the extent of the **Bounding Box**. If we were to subtract this field from a long box, the hole goes through to the other side. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/box%20with%20hole.gif) *Using **Boolean Subtract** on a **Box** to showcase the infinite hexagon field* If we wanted to trim this infinite field and create an implicit body, the best method is to use **Boolean Intersect**. This block creates an implicit body where the geometry overlaps. In the example below, two planes are placed where we want to trim the infinite hexagon. Using **Boolean Intersect** with the two planes and the infinite field, the result is a solid implicit body, similar to performing an extrusion. If you perform this operation and the results are not as expected, check the normal direction of your planes to ensure they face away from each other, as shown below. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/trimming%20infinite%20field.gif) *Creating a solid body from the infinite hexagon field using **Boolean Intersect*** ### “CAD Operations” Now that we understand the underlying fields associated with profiles, we can see how these relate to native modeling blocks in nTop. In this section, we'll take a look at modeling functions that are common in traditional CAD software. #### Extrude Profile The **Extrude Profile** block function is essentially the same as trimming the infinite profile field. The *Distance* input defines the location of the two trimming planes, leaving only the desired implicit body between them. The *Draft Angle* input lets you taper the resulting extrusion from the starting profile to the specified distance. You can also apply the *Symmetric* bool option to create a mirrored result of the extruded profile. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Extrude.gif) *Using the **Extrude Profile** block and demonstrating the effects of its inputs* ### Revolve Profile The **Revolve Profile** block extrudes a profile around a specified *Axis*. The *Angle* input is similar to the *Distance* input in **Extrude Profile**, except that the distance is determined with respect to the **Axis**. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/revolve.gif) *An example of using the **Revolve Profile** block* ### Sweep Profile The **Sweep Profile** block extrudes a *Profile* along a specified *Curve*. The *Bind Point* is the point to translate to the starting point of the *Curve*. For best results, we recommend using a *Bind Point* that is on or near the profile. The *Starting Rotation* and *Ending Rotation* inputs control the degree of rotation of the *Profile* with respect to the *Bind Point*, and to the vector tangent to the *Curve*'s starting and ending points. You may experience longer computation times when using the **Sweep Profile** block. We are currently working on updates for our sweeping operations, users should expect performance upgrades in a future release of nTop. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/sweep%20profile.gif) *Using **Sweep Profile** to create a spring from a **Circle** profile* ## What to Take Away: * All Profiles have two important field properties. Knowing the difference between Distance to Extrusion and Distance to Region is important for profile modeling operations. * **Set Bounding Box** helps with visualizing fields. Applying bounds to scalar fields helps with visualizing infinite fields. * Profile Modeling Operations for creating implicit bodies. These blocks offer another way to create implicit bodies using profiles instead of **Boolean Intersect**. ### What's Next: You now have an understanding of how SDFs and Profiles are connected, as well as some insight into Profile Modeling Operations. The next lesson focuses on the opportunities of parameterizing your notebook with fields, rather than constant values. # Parametric Primitives & Math Blocks Source: https://docs.ntop.com/lessons/modeling-foundations/parametric-primitives-math-blocks ## Creating Geometry from Primitives Before we learn how to incorporate parameterization, we first need to understand how to create basic geometry in nTop. You can find standard 2D and 3D shapes in the nTop Ribbon under the Create tab. From the Create tab, you can select the drop-down menu under Primitives to see the available shapes. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Primitives%20Tab.png) *The Primitives tab is located in the Create tab of the Ribbon* Once you select a shape from the list, the block inserts into your notebook. Then you can modify the block's inputs to change the location, size, etc. of the shape. You can specify new input values by entering them in the box next to the input or by dragging the bidirectional arrow that appears next to the box. Please keep in mind that the bidirectional arrow will only appear for certain scalar input values, not for every input. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Inserting%20primitives.gif) *An example of adding Primitives to the Notebook using the Ribbon* Despite both the **Box** and **Circle** blocks being Primitives, they have different block types. The **Box** is an Implicit Body while the **Circle** is a Profile. You can determine a block's type by hovering over the icon next to its name. Now that we know how to insert Primitives, we need to understand how they can interact with each other. ## Variables and Properties Variables are the key to keeping a tidy Notebook. You can turn any block or input into a variable, allowing easy access, reference, and manipulation. Once you make it a variable, the block or input remains in your Notebook. The variable is represented as a simple chip when used in other blocks. Use variables to drive your workflow with key parameters and streamline your design process. As a best practice, we recommend using variables whenever possible to keep your notebook organized. ### Parameterization using Variables and Properties In nTop, parameterization means encoding your design intent as variables and parameters that drive geometry, rather than defining static shapes. Instead of modeling a fixed part, you build a workflow where inputs (dimensions, positions, etc.) are exposed as variables — so changing a single value automatically updates the entire design. This enables rapid iteration, optimization, and automation across many configurations without manually rebuilding geometry. The GIF below shows an example of creating a parameterized capsule. The **Cylinder** *Radius* input is converted to a variable so that it can be used to define the *Radius* of the **Sphere** blocks. Next, the Start and End Point property chips are extracted from the **Cylinder**, and are used to define the *Center Point* inputs of the **Sphere** blocks. Using a **Boolean Union**, we can combine the three implicit bodies into a single body. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Parametric%20Variables.gif) *An example using a **Cylinder** and **Spheres** to create a parametric Capsule body* The result is a parameterized capsule that is able to adapt its shape when we change the input values. ## Datum/Reference Geometry Another useful parameterization strategy is to build your geometry in reference to datums (Points, Planes, Axes, Frames, etc.). By creating one or more datums, you can parameterize your geometry without having to hard-code coordinate values. This lets the geometry adapt to any changes made to the datum. In the example below, a **Spline through Points** block is generated using the **Plane's** origin x-coordinate value. This ensures the **Spline** remains aligned with the plane even if the **Plane's** *Origin* location changes. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Reference%20Geometry.gif) *Using X coordinate property of the **Plane**'s origin to define a **Spline through Points*** ## Visualizing Implicit Bodies ### Bounding Boxes As discussed in previous sections, Implicit Bodies are equation models comprised of Signed Distance Fields. But how do we go from looking at a field in the field viewer to a 3D implicit body? Most times we can use what's called a **Bounding Box.** A **Bounding Box** is a 3D box that represents the overall dimensions of a scalar field or implicit body. It is defined by two corner points at the maximum and minimum of your geometry's span. The **Bounding Box** is the limit of the geometry, so anything that extends beyond the box will be removed from the output body/field. When working with fields and implicit bodies, nTop will attempt to automatically apply an appropriately sized **Bounding Box**. But there are situations (like working with infinite or unbounded fields) where users will need to manually apply a **Bounding Box** in order to properly define an output field/body. As an example, we can show how to create a solid body from a scalar field. The equation below represents a gyroid field: *sin(x)\*cos(y) + sin(y)\*cos(z) + sin(z)\*cos(x)* After entering this equation into nTop, we can use the Field Viewer to visualize the gyroid field. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/gyroid%20field.png) *An infinite gyroid field created using the gyroid equation* The Gyroid shape is created using Sin and Cos. These operations require the units to be in degrees, not length. Therefore, we can divide each value by 1mm to remove the length units; otherwise, the block will error out. ### Set Bounding Box Now that we have our field, we need to apply a **Bounding Box** to define the bounds of the geometry. By adding a **Bounding Box** and a **Set Bounding Box** block to our notebook, we can visualize the gyroid surface. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/set%20bounding%20box.gif) *Using the **Set Bounding Box** block to visualize the zero-thickness gyroid contained within the **Bounding Box*** This surface is not an implicit body yet, as we removed the units to generate the gyroid field. To fix this, we can multiply the gyroid surface by 1mm to reapply the units. Finally, we extract the implicit body from the properties panel. The result is a zero-thickness gyroid cube. The end of the gif below also shows how you can enable hatching to represent clipped regions of your design. Clipped regions are areas within your bounding box that lack physical geometry. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/applying%20units%20to%20gyroid.gif) *Applying units to the gyroid field using a **Multiply** block. The gyroid implicit is then extracted from the properties panel of the field* If we wanted to create a solid implicit body using the zero-thickness gyroid, the easiest method is to subtract the gyroid from an existing solid body. Using a **Boolean Subtract** block, we can subtract the gyroid from a **Cube** to create a thickened gyroid body. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/solid%20gyroid.gif) *Using a **Boolean Subtract** block, we can create a solid body Gyroid* ### Refine Bounding Box There are instances where nTop will attempt to apply an appropriately sized **Bounding Box**, but the result may be larger than the implicit body. This can lead to downstream issues if nTop thinks a body is much larger than it actually is. The solution for these scenarios is to use the **Refine Bounding Box** block. Using an input *Body* and *Grid Size*, nTop will recalculate the **Bounding Box** size. The gif below shows an example using a cube with a very oversized bounding box. After refining the bounding box, the result is very close to the geometry's surface. A smaller grid size will create a more conformal box, but may take longer to calculate. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/refine%20bounding%20box.gif) *Using the **Refine Bounding Box** block to create a more size accurate Bounding Box for the **Cube*** ## What to Take Away: * Boolean Operations are the core utility for implicit bodies. Most workflows utilize these blocks to modify implicits. * Block & Input variables help you stay organized in the notebook. nTop notebooks can get confusing when blocks are consistently nested inside one another. Variables reduce clutter by reducing nested blocks and using helpful names. * Parameterization keeps geometry connected and allows for quick iterations. Parameterizing your workflow lets you create unbreakable geometry connected through property and input variables. Modifying parameterized variable values lets the geometry quickly recalculate and generate new geometry. * Bounding Boxes are the key element in visualizing geometry. Bounding boxes define the maximum and minimum boundaries of a scalar field or implicit body. Anything outside of these bounds will not be visualized. ### What's Next You now have an understanding of how to create basic geometry, create block and property variables, parameterize your workflow, and visualize implicit bodies. The next lesson will broaden your understanding of nTop's modeling and creation tools using splines, curves, and profiles. # Splines, Curves, & Profiles Source: https://docs.ntop.com/lessons/modeling-foundations/splines-curves-profiles ## Introduction In the previous lesson, you created implicit geometry using mathematical functions and primitives, where each shape was defined by a function evaluated throughout space. Curves are represented differently. A curve defines a path through space using exact, explicit coordinates, similar to how traditional CAD systems represent curves. The Curves section in nTop includes many blocks for creating and modifying curves. Rather than covering every available block, this lesson focuses on several foundational curve-creation methods and demonstrates how to establish parametric relationships between them. These concepts will give you a framework to apply when working with other curve blocks. In this lesson, you will learn why curves are represented explicitly within an implicit modeling environment and how to create fully parametric curves. ## Explicit Yet Parametric: How nTop Represents Curves A curve also has a field. As introduced in *Course 1: Modeling with Signed Distance Fields*, every curve includes a *Scalar Field* property that represents the distance from any point in space to the nearest point on the curve. This field is useful and will be applied later in this lesson. However, the field describes only the distance to the curve. It does not define the curve's path, including where it begins, where it ends, or how it bends. A field is evaluated at a point in space; it does not store the path itself. To define this path, nTop uses explicit coordinates, similar to a boundary representation (B-rep) CAD system. For this reason, nTop provides several curve-creation blocks, including **Line**, **Line by Direction**, **Polyline**, **Polycurve from Curves**, **Spline by Control Points**, **Spline through Points**, and **Spline by Tangents**. Each block provides a different way to define a curve from explicit geometric information. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/curves_ribbon.png) *The Curves section of the Create tab in the nTop ribbon, showing a small subset of the available curve blocks.* Although curves are explicit, they can still be fully parametric. Their coordinates can be controlled by variables and mathematical expressions. This distinction separates explicit geometry from hard-coded geometry: a coordinate entered as a fixed value remains unchanged, while a coordinate calculated from a formula updates with the design intent. ## Building a Curve from Two Points: Line The **Line** block creates the simplest curve in nTop. Search for the block in the Ribbon and add it to your Notebook. The block has two inputs, *Point 1* and *Point 2*, with default coordinates. Modify either point to update the line. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/line.gif) *An example of creating a **Line** in nTop* ## Parameterizing a Curve: Line by Direction The **Line** block is useful when you know the exact coordinates of both endpoints. However, controlling the line's length or orientation through two independent points can make parameterization unnecessarily complex. For greater control, use the **Line by Direction** block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/line%20by%20direction%20block.jpg) *The **Line by Direction** block* **Line by Direction** defines a line using four inputs: * *Point* — Defines the line's origin. * *Direction* — Controls the line's orientation. * *Length* — Sets the total length of the line. * *Centered* — Determines whether the line extends from the origin in one direction or is centered about it. Rather than requiring you to calculate a second endpoint, nTop determines it from the specified direction and length. Assigning a variable to Length lets you control the line elsewhere in the Notebook, establishing the parametric relationship used in the next section. ## Encoding Design Intent with Trigonometry You don't need to define explicit geometry with manually entered coordinates. A curve remains explicit when its points are calculated from formulas; its coordinates simply update as the formula inputs change. Trigonometry provides a direct way to encode this behavior by converting an angle and a known length into precise dimensions. ### Creating a Right Triangle from One Angle and One Length Now we will create a right triangle controlled by two variables: the length of its hypotenuse and the angle between the hypotenuse and the X axis. If you parameterize it correctly, the adjacent and opposite leg lengths will update automatically. 1. Add a **Line by Direction** block. 2. Set *Point* to the *Origin* variable at *(0, 0, 0)*. 3. Set *Direction* to *(1, 0, 0)* to align the line with the X axis. 4. Create a variable named *Hypotenuse Length* and set its value to *120 mm*. Assign this variable to the line's *Length* input. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/LBD%20origin.jpg) *The **Line by Direction** block utilizing the Origin and Hypotenuse Length variables for its inputs* 5. Add a **Rotate Object** block, drag your created **Line by Direction** block to its *Object* input, and make the block a variable named *Hypotenuse*. 6. Set *Rotation Center* to the *Origin* variable. 7. Set *Axis* to *(0, 0, 1)* to rotate the line about the Z axis. 8. Create a variable named *Hypotenuse Angle* and set its value to *35 deg*. Assign this variable to the *Angle* input. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/hypotenuse.jpg) *Creating the Hypotenuse by rotating the original line* The resulting line represents the triangle's hypotenuse. You can now control its length and angle independently through the two variables. That single angle now determines the whole triangle. Using SOH-CAH-TOA: * *Adjacent leg length* = *hypotenuse length* × Cos(*hypotenuse angle*) * *Opposite leg length* = *hypotenuse length* × *Sin*(*hypotenuse angle*) We can build the *Adjacent leg length* and *Opposite leg length* using the math blocks: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/adj%20and%20opp%20leg%20length.jpg) *Calculating the lengths of the legs using trigonometry* Now let's create the Adjacent and Opposite Legs: 1. Add a **Line by Direction** block and make it a variable named the *Adjacent Leg.* 2. Set *Point* to the *Start Point* property of the *Hypotenuse*. 3. Set *Direction* to *(1, 0, 0)*. 4. Set *Length* to the calculated *Adjacent Leg Length*. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/adjacent%20leg.jpg) *Defining the Adjacent Leg using the new length calculation* 5. Add another **Line by Direction** block and make it a variable named the Opposite Leg. 6. Set *Point* to the adjacent leg's *End Point* property. 7. Set *Direction* to *(0, 1, 0)*. 8. Set *Length* to the calculated *Opposite Leg Length*. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/opposite%20leg.jpg) *Defining the Opposite Leg using the new length calculation* Because these lines reference property chips instead of manually entered coordinates, their endpoints remain connected when the *Hypotenuse Length* or *Hypotenuse Angle* changes. Now we can combine the segments into a closed curve: 1. Add a **Polycurve from Curves** block. 2. Add the following curves to its list: * *Adjacent Leg* * *Opposite Leg* * *Hypotenuse* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/polycurve%20from%20legs.jpg) *Creating the polycurve using the legs and Hypotenuse* The **Polycurve from Curves** block requires consecutive curves to share endpoints and reports an error if the segments don't align. Finally, change the *Hypotenuse Angle* from *35°* to *60°*. The triangle reshapes automatically while preserving the relationships encoded in the workflow. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/parametric%20right%20triangle.gif) *Adjusting the Hypotenuse Angle or Length variables cause the triangle to recalculate and rebuild* For the completed workflow, you can download the following nTop File: **Downloadable Files:** [Example File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/nTop%20Files/C2S1_Lesson2_MakingRightTriangle.ntop) *This file was last updated in nTop 6.03* ### An Equivalent Approach: Polyline from Explicit Points You can create the same triangle with a **Polyline** block. Instead of constructing three individual line segments, this approach calculates the triangle's vertices and connects them in sequence. Using the same variables and trigonometric relationships, define the vertices as follows by creating three **Point** blocks using the coordinates below. Use math expressions to calculate the required X and Y components. * **Point 1:** *(0, 0, 0)* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Point%201%20variable.jpg) *A **Point** block located at the origin* * **Point 2:** *(Hypotenuse Length × Cos(Hypotenuse Angle), 0, 0)* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Point%202%20variable.jpg) *Calculating the Point 2 X location using trigonometry* * **Point 3:** *(Hypotenuse Length × Cos(Hypotenuse Angle), Hypotenuse Length × Sin(Hypotenuse Angle), 0)* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Point%203%20variable.jpg) *Calculating the Point 3 X and Y locations using trigonometry* To construct the triangle: 1. Add a **Polyline** block. 2. Add the points to its list in the following order: * *Point 1* * *Point 2* * *Point 3* * *Point 1* 3. Repeat *Point 1* as the final entry to close the triangle. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/polyline%20from%20points.jpg) *Building the **Polyline** using the newly calculated points* The **Polyline** block connects each consecutive pair of points with a straight segment. Therefore, the point order determines the resulting shape. Both approaches produce the same parameterized triangle. **Polycurve from Curves** is generally more appropriate when the design consists of separate, reusable curve segments. **Polyline** is more direct when the design intent is defined by an ordered collection of positions. To create a profile from these curves, use the **Profile from Curves** block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/triangle%20profile%20from%20curves.jpg) *Creating the triangle profile using the **Profile from Curves** block and the **Polyline*** The resulting profile provides the foundation for generating 3D geometry from a 2D sketch. In the next lesson, you will explore profile creation in greater depth and learn how to use profiles with operations such as **Extrude**, **Revolve**, and **Sweep**. For the completed workflow, you can download the following nTop File: **Downloadable Files:** [Example File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/nTop%20Files/C2S1_Lesson2_MakingRightTrianglePoints.ntop) *This file was last updated in nTop 6.03* ## What to Take Away * Curves are represented by explicit coordinates that define their path through space, even though each curve also provides a *Scalar Field* representing distance to the curve. * Explicit geometry can still be fully parametric when coordinates, dimensions, and orientations are controlled by variables, expressions, and referenced properties. * Mathematical relationships, including trigonometric expressions, allow related curve dimensions to update automatically while preserving design intent. * Referencing curve properties, such as *Start Point* and *End Point*, keeps connected geometry aligned as input parameters change. * Use **Polycurve from Curves** to combine separate curve segments and **Polyline** to connect an ordered sequence of points. * Closed curves can be converted into profiles with **Profile from Curves**, providing the foundation for 3D operations such as **Extrude**, **Revolve**, and **Sweep**. ## What's Next You now understand how to create parametric curves in nTop. In the next lesson, you will learn how to create profiles and use them with common operations such as **Extrude**, **Revolve**, and **Sweep**. # What Is Field-Driven Design? Source: https://docs.ntop.com/lessons/modeling-foundations/what-is-field-driven-design In the previous lesson, every parameter you defined—such as a fillet radius, wall thickness, or extrusion distance—was a constant: a single value applied uniformly throughout the geometry. Field-driven design replaces that constant with a field, allowing the value to vary throughout space. In nTop, field-driven design is a modeling approach that uses mathematical fields, such as scalar or vector fields, to control geometry spatially. Rather than applying one value everywhere, a field can vary parameters such as lattice thickness, displacement, or pattern dimensions based on position, geometry, simulation results, or other spatial data. You have already encountered a field that behaves this way: a Signed Distance Field (SDF). An SDF assigns a value to every point in space based on its signed distance from a surface. Field-driven design extends this concept beyond distance: any compatible field can drive a parameter, allowing that parameter to vary spatially. In a Notebook, inputs that support field-driven values are identified by the Scalar Field Icon shown below. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/field_icon.png) *The Scalar Field icon in nTop* ## What is a Field? In Course 1, we learned that a field is a rule that assigns a value to every location in 3D space. When those values are numbers or scalars, the result is a scalar field. A scalar field can be described by a mathematical function, F(x,y,z), that returns a numerical value at each point P=(x,y,z). Fields are not limited to scalar values. A field can also assign a vector to each point in space, producing a vector field. Weather provides a familiar example of both. Temperature and humidity are scalar fields because each location is associated with a single numerical value. Wind velocity is a vector field because each location has both a wind speed and direction. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/weather%20point%20map%20example.png) *Weather reports provide some nice concrete examples of fields. For example, the temperature and humidity at various points in the atmosphere can both be regarded as scalar fields, and wind velocity as a vector field* ### Fields in nTop It can be helpful to think of fields as gradients for geometry. Just as a gradient controls how color varies across an image, a field in nTop controls how a design variable changes across space. The examples below illustrate this relationship using a signed distance field, field-driven geometry, and a color gradient. In the geometry example, the field controls the pattern and diameter of holes across a plate based on their spatial position. Similarly, the radial gradient controls how the grayscale value changes with distance from its center. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/field%20gradient%20comparison.png) *A visual comparison between the field viewer (left), field-driven geometry (center), and a color gradient (right)* In nTop, fields can control the spatial variation of many design variables, including lattice beam and wall thicknesses, fillet radii, pattern dimensions, and material properties. Any compatible parameter identified by the Field symbol can accept a scalar field instead of a fixed value, allowing that parameter to vary throughout the design. ## Why Use a Field Instead of a Constant? A constant applies a single value uniformly. In nTop, many parameters can instead be driven by a field, allowing their values to vary continuously across a design. This enables two important capabilities: driving geometry from spatial data and controlling how design parameters vary throughout space. ### Drive Design with Spatial Data Fields can be derived from more than geometry. They can also come from simulation results, physical measurements, or imported datasets, allowing design parameters to respond directly to spatial data. For example, a Von Mises stress field from a structural simulation can drive rib thickness and density—creating thicker, denser ribs in regions of higher stress and thinner, less dense ribs in regions of lower stress. Rather than manually defining these parameters, the geometry adapts continuously to the underlying stress data. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Ribbed_panel_GIF.gif) *A uniform lattice rib design that transitions to a field-driven design based on the simulation results* ### Control Spatial Variation Fields are also useful when no external dataset is involved. A field can define how a parameter varies smoothly across a part based on position or other geometric relationships. The next section explores different methods for creating and controlling these variations. For example, a field can gradually increase shell thickness toward an edge, vary a Boolean blend radius across a transition, or control the progression from one profile to another. Instead of dividing the design into regions with individually defined constants, a single field can describe the variation continuously. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/variable%20shell.gif) *Variably shelled bracket with increased material near the cylindrical interfaces and reduced material farther from the interfaces* ## Creating and Controlling Fields Now that you understand why fields are useful, the next step is learning how to create and control them. In this section, you will explore several approaches for defining fields in nTop and learn key tools for shaping their spatial variation. These techniques provide precise control over any compatible parameter identified by the Scalar Field symbol, enabling a wide range of field-driven design strategies. ### Extracting Distance Field of Implicit Bodies Imported CAD or Mesh bodies do not have associated fields. However, converting them into implicit bodies generates distance fields. This means you can use any implicit body's geometry to drive your designs. You can use the implicit body itself as the scalar field input or use the Scalar Field chip in its Properties panel if you want to manipulate this field further. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/implicit_bracket_field.gif) *Extracting the Scalar Field property* *from the implicit body's Properties Panel* ### Using Equations You can also manipulate and define fields with mathematical equations using the **Scalar Field Variable** block to create the x, y, or z variables. These represent the three axes and have fields that look like a plane set at the origin, with the normal direction in the positive direction of the axis. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/xyz%20scalar%20field.png) *Scalar Field variables configured for the three axes x, y, z* You can use mathematical operations such as multiplication and exponents with the x, y, and z fields, as well as math blocks from the Math tab, but be mindful of the units. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/x2%20math%20examples.png) *Examples of using math operations to modify the x field* Just as you create fields from implicit bodies, you can also build implicit bodies from equations. However, to represent a geometry, it is best to use an implicit formula for its signed distance function, which is often difficult to achieve for more complex shapes. For a simple geometry like the sphere, the standard form equation is: *x2 + y2 + z2 = r2* and the implicit form equation is: *sqrt(x2 + y2 + z2) – r = 0* The latter is the equation used to generate a sphere field. You can visualize the resulting implicit body with the visibility toggle and bring it into the Notebook from the Properties panel. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/sphere%20from%20field.png) *Creating a sphere implicit body using math blocks to create the equation for a sphere* **The Evaluate Expression (BETA)** block allows you to write mathematical expressions using familiar syntax instead of constructing complex calculations using multiple interconnected blocks. This makes creating, reading, and editing engineering expressions easier. More on how to use this block here: [How to use the Evaluate Expression block](https://docs.ntop.com/help-articles/knowledge-base/implicit-modeling/how-to-use-the-evaluate-expression-block) ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/sphere%20from%20EE.png) *Using the **Evaluate Expression** block to create an implicit sphere* ### Converting Data or Images Into Fields You can bring different types of data and even images into nTop, convert them into fields, and use them to drive your designs. #### Generating Fields from Data You can import any dataset as point maps in CSV format using the **Import Points**, **Import Table**, **Import Scalar Point Map**, or **Import Vector Point Map** block, then interpolate it with the **Field from Point Map** block to get values at other points and form a field. > **Import Scalar Point Map & Import Vector Point Map** > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/import%20point%20maps.png) > > Import external .csv data as a **Scalar Point Map** or **Vector Point Map**: > > * **Scalar Point Map:** Each row contains four values: x, y, z, s. The first three define the point location; the fourth defines the scalar value at that point. > * **Vector Point Map:** Each row contains six values: x, y, z, u, v, w. The first three define the point location; the last three define the vector at that point. > > You can generate CSV files from CAD or spreadsheet software, or from scripting tools such as MATLAB or Python. First, save other readable file formats as .csv. > > > [!TIP] > > > > **Tips:** > > * *Units* define the length units for point coordinates. > * *Scale* scales imported values and lets you assign units. > * Do not include units directly in the .csv file. > **Field from Point Map** > > The **Field from Point Map** block interpolates Point Map data to create a field. It produces a Scalar Field from a **Scalar Point Map** or a **Vector Field from a Vector Point Map**. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/field%20from%20point%20map.png) > > *The **Field from Point Map** block* > > A common use of this block is to convert simulation results into a field, allowing simulation data to drive geometry modifications directly. > > > [!TIP] > > > > **Tips** for using **Field from Point Map:** > > * Use the Field Viewer (F) to visualize the resulting field. > * Collinear or coplanar Point Map data cannot be interpolated; in these cases, the block extrapolates values. > * Choose an *interpolation* method based on the source data: > * Nearest: Assigns each location the value of its nearest Point Map point. > * Barycentric: Linearly interpolates values using surrounding points that form a tetrahedron. This method is recommended for Point Maps derived from tetrahedral meshes, such as Von Mises Stress Point Map or Temperature Point Map. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/interpolation%20types.png) > > *Comparison of Nearest and Barycentric interpolation applied to the same Point Map data, showing the discrete regions produced by Nearest interpolation and the smooth, continuous field produced by Barycentric interpolation.* > > Because the resulting field will drive geometry, smoothing can create more gradual transitions between field values. > **Smoothen Field** > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Smoothen%20Field.png) > > *An example of the **Smoothen Field** block* > > The **Smoothen Field** block applies Gaussian smoothing to a Scalar Field. Its inputs are: > > * ***Scalar Field*** — The field to smooth. > * ***Grid Size*** — The spacing between sample points used to discretize the field. Smaller values preserve finer detail but increase computation time. > * ***Smooth Iterations*** — The number of times the smoothing operation is applied. More iterations produce greater smoothing but increase computation time. > * ***Interpolation Type*** — The interpolation method used between sampled values: *Linear* or *Cubic*. > * ***Domain*** — An optional bounding box that defines the region to smooth. If you don't specify a domain, the block uses the input field's bounding box. Large domains may significantly increase computation time. > * ***Extrapolation*** — Controls smoothing relative to the specified *Domain*. Select *Inside* to constrain smoothing to the domain or *Outside* to extend smoothing beyond it. > > Tips for using **Smoothen Field**: > > * **The Smoothen Field** block requires a discretized field. The ***Grid Size*** controls the sampling resolution; smaller values capture finer detail but require more computation. > > * Increasing ***Smooth Iterations*** produces a smoother field but also increases computation time. > > * Balance ***Grid Size*** and ***Smooth Iterations*** to achieve the desired smoothness without unnecessary computational cost. > > > [!NOTE] > > > > **Note:** *The* ***Smoothen Field*** *block does not work on fields with infinite negative domains. You can remedy this by entering a Bounding Box in the optional Domain input or by first using* ***Set Field Bounding Box*** *on the field before inputting it into* ***Smoothen Field***\*.\* The image below illustrates each step of this workflow: importing a stress map using Import Scalar Point Map, converting the point map into a field with Field from Point Map, and smoothing the resulting field with Smoothen Field to prepare it for driving a geometry parameter. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Point%20map%20to%20field%20transform.png) *A visual comparison between a Point Map (top), an Interpolated Field (middle), and a Smoothened Field (bottom)* Simulation and simulation result import blocks generate relevant fields directly, which you can access through their Properties panels. If your simulation software does not support a native output file type, you can instead import the results as a CSV point map using the **Import Scalar Point Map** or **Import Vector Point Map** blocks discussed in the previous section. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/import%20result%20properties.png) *Block options for importing simulation results into nTop* Depending on the input point map, the **Field from Point Map** block may switch to an overload that outputs a non-field data type. In these cases, you can access the associated field through the output's Properties panel. #### Bitmapping Images Bitmapping uses image data to drive design features, such as surface textures or logos. Import an image using the **Import Bitmap** block, then visualize and position it with **Map Bitmap to Plane**. The original image dimensions are available in the imported bitmap's Properties panel. Use the *Length* and *Width* inputs to scale the image proportionally or independently to distort its proportions. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/bitmap%20blocks%20and%20properties.png) The **Map Bitmap to Plane** output provides six color fields in its Properties panel, each with values ranging from 0 to 1. Select the field that best fits the image and application. For example, the *Grayscale* field is well-suited for black-and-white images. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/bitmap%20texture.png) *An example of texturing an implicit body using the **Map Bitmap to Plane** block* Bitmap color fields can then drive geometry parameters, such as the offset distance of an implicit body using **Offset Body**. For additional guidance, see the [Training Guide: Texturing and Bitmapping](https://learn.ntop.com/courses/recorded-training-texturing-and-bitmapping/). ### Tools for Working with Fields When working with fields, three blocks are used most frequently. All are located in the Math tab under Utilities. Expand the sections below to learn about the fundamental **Ramp**, **Transfer Function**, and **Mix** blocks. > **Ramp Block** > > The **Ramp** block allows you to change a value based on a field. It can be applied to several types of scalar fields and allows you to rescale those existing fields to create new ones. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/ramp%20block.png) > > *The **Ramp** block* > > * **Scalar Field**: The field driving the Ramp. Define the *In Min/In Max* values based on this input. > * **In Min/In Max**: The values where the Ramp will begin (min) and end (max). These values are in relation to the Scalar field (with 0mm being the neutral edge of the field). Negative values go inside the Real Field, and positive values expand. > * **Out Min/Out Max**: The Ramp output values. *Out Min* is the output value at the *In Min* locations, and *Out Max* is the value reached at the *In Max* locations. They are the output field's values as a function of the *Scalar Field* input. > * **Continuity**: Represents how the values will Ramp (by continuity order). See the image below to view the differences. > > The values ramp between the *In Min* and *In Max* values. Before *In Min*, the value stays constant at the *Out Min* value, and after *In Max*, the value stays constant at the *Out Max* value. > > > [!NOTE] > > > > **Note:** Include units when defining the *Out Min/Out Max* values *.* > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/ramp%20diagram.png) > > *In this example, a plane was used for the Scalar Field input to create the gradual linear change seen between the start and end of the **Ramp**.* > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/ramp%20continuity.jpg) > > *Visualization of the three different continuity options: Geometric (C0), Tangential (C1), and Curvature (C2)* > > The change does not always have to be linear, depending on the field used. For example, if you use the field of x2 to drive the **Ramp** block, you would get a quadratic change. See [this article](https://support.ntop.com/hc/en-us/articles/360062746253-How-to-create-a-quadratic-ramp) on the Help Center for a walkthrough on creating a quadratic **Ramp**. > > > [!NOTE] > > > > **Note:** Use the Field Viewer to visualize the new field created by the **Ramp** block by selecting the block and using the hotkey '**F**'. The new field will represent the output values assigned based on the spatial variation of the input field, which can then be used to control different design parameters. > > ### Example Applications > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/ramp%20voronoi%20diagram.jpg) > > *Manipulating density and beam thickness of a Voronoi lattice based on the field of a plane* > > This image shows the ramped lattice structure overlaid on the modifying field. The field modifies the seed point spacing and lattice thickness parameters. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/ramp%20field%20lattice%20comparison.jpg) > > *Manipulating lattice beam thickness based on simulated stress data that has been converted into a field and smoothened* > > The lattice beams were assigned a larger thickness value at areas of higher stress and a smaller thickness value at areas of lower stress. > **Transfer Function Block** > > The **Transfer Function** block works very similarly to multiple mini ramps put together. This block gives you more control over the changes throughout the domain. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/transfer%20function%20block.png) > > *An example setup of the **Transfer Function** block* > > Instead of taking in minimum and maximum input and output values like the **Ramp** block, the **Transfer Function** requires lists of values as it uses piecewise interpolation to compute the output field value of a function approximated by a set of field data points. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/transfer%20function%20diagram.jpg) > > * **Value**: The field driving the Transfer Function, a reference for the input domain. > * **Input**: Pre-populated as a Scalar List for a user-defined set of values. > > You can use the **Sequence from Bounds**, **Sequence**, or **Random Sequence** blocks for incremented or random set of values. You can find these in the *Math* tab of the Ribbon under *Utilities*. To learn more about using these sequence blocks, visit our [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/) course. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/transfer%20function%20sequence%20blocks.jpg) > > * **Output**: A Scalar Field List of output values. The length of this list should match the length of the **Input** list. > > > [!NOTE] > > > > **Note:** When defining the Input and Output values, ***make sure to******include units**\*\*.* > > * **Extrapolation**: How the output values extend beyond the specified input domain. See the image below for a comparison of the two options. > * Clamped: Bounding output values remain constant beyond the specified domain > * Linear: Linear extrapolation of output values beyond the specified domain > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/transfer%20function%20extrapolation.jpg) > > *Example of the two extrapolation options* > > ### Example Application > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/transfer%20function%20example.jpg) > > *Advanced manipulation of beam thickness and density of a Voronoi lattice using a Transfer Function* > **Mix Block** > > The **Mix** block is a tool for blending two implicit geometries by mixing the values of their scalar fields based on a given factor. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Mix%20block.png) > > *An example setup of the **Mix** block to mix a **Box** and **Cone*** > > The Factor value can range between 0 and 1, with 0 being entirely Input A and 1 being entirely Input B. The image below shows the effect of mixing a **Box** (Scalar Field A) and a **Cone** (Scalar Field B) using varying mix factors. > > ![](https://storage.googleapis.com/files-learn/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/mix%20factor.jpg) > > *A comparison of the **Mix** block outcomes with varying Factor values* > > The *Factor* can also be ramped using the previously introduced **Ramp** block. See the example below with the same **Box** and **Cone** geometries. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/mix%20ramp%20block.png) > > *Applying a **Ramp** block to the Factor input of the **Mix** block* > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/mix%20ramp%20example.jpg) > > *A diagram of the **Mix** block results with the ramped Factor input* > > ### Best Practice > > Because the **Mix** block performs operations on two fields to represent a new geometry, it is always a good idea to perform a clean-up step afterward. This ensures that the resulting field does not have an infinite negative domain, which you cannot render into a geometry. > > Using the **Set Field Bounding Box** block, either manually set a bounding box using the **Bounding Box** block or go into the properties of the initial design body and grab its Bounding Box chip. The resulting field is within the specified bounding box. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Set%20field%20bounding%20box.png) > > *Applying a **Set Field Bounding Box** block to the **Mix** block* > > ### Example Application > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%202/Images/Mix%20lattice%20example.png) > > *Gradually blending two types of TPMS lattices* > > Starting with the Gyroid at the bottom, a Ramped Mix was applied to gradually blend the structure with the Neovius lattice. ## What to Take Away * Field-driven design replaces a uniform constant with a spatially varying field, enabling parameters such as thickness, displacement, blend radius, and pattern dimensions to change throughout a design. * Fields may assign either scalar values or vectors to locations in space. Inputs that accept field-driven values are identified by the Scalar Field icon. * Fields can be created from implicit-body distance fields, mathematical equations, simulation results, imported point maps, or bitmap images. * Use the Field Viewer to verify a field's values and spatial behavior before using it to drive geometry. * Carefully manage units, scale, interpolation, and field domains when importing or constructing fields to ensure predictable results. ## What's Next You have now learned the fundamentals of field-driven design, including how to import data, convert it into fields, and work with those fields. Next, test your understanding with a knowledge check. # nTopのコア機能と操作 Source: https://docs.ntop.com/lessons/ntop-core-features-ja/overview ![nTopのコア機能と操作](https://storage.googleapis.com/files-learn/lessons/ntop-core-features-ja/overview.png) このコースでは、nTopの基本を学び、ソフトウェアの探求の旅に出発するのに役立つ情報を提供します。 このコースを終了すると、nTopのコア技術の基礎であるインプリシットモデリングの概念について理解できます。 また、当社のソフトウェアでより速く、より効率的に作業できるようにするための主要な操作とベストプラクティスに精通できます。 **前提条件:** なし **対象範囲:** * nTopの紹介とインプリシットモデリングの基礎知識 * ワークフローを構築するためのブロックとノートブックとの連携 * 基本的な操作のポイント # A Tour of the nTop Instance Source: https://docs.ntop.com/lessons/ntop-essentials/a-tour-of-the-ntop-instance ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Tour-of-nTop.png) > **1. Notebook** > > The notebook on the left keeps a record of your modeling operations. You will work entirely within this notebook to build your workflow and manipulate the design parameters of your parts. The notebook allows you to: > > * Title your notebook > * Add a notebook description > * Create/Rename sections to organize your notebook > * Use the search bar to quickly find and add blocks > * Add comments to individual blocks > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Notebook-demo.gif) > **2. Ribbon** > > The ribbon contains blocks for performing different operations in nTop. You can navigate the ribbon by clicking on the tabs to change block menus. You can also use the arrows to reveal additional tabs. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Ribbon.gif) > > The ribbon tabs can be configured under: **Menu>Settings>Ribbon** > > Here you can toggle which tabs of the ribbon are visible in the nTop instance by turning on/off the checkboxes. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Ribbon-Settings.png) > **3. Viewport** > > The viewport is where you can see the visual rendering of the geometry you've created by working in the notebook. The main controls for operating in the viewport are: > > * **Right Click:** Press and hold right-click while moving your mouse to rotate > * **Middle Mouse:** Press and hold the middle mouse button to move > * **Block Highlighting:** Select a block from the notebook to highlight it in the notebook and viewport > * **Toggle Block View:** Toggle the white circle icon next to a block to turn on/off its visibility > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Viewport-controls.gif) > **4. View Cube** > > The view cube shows the XYZ axis indication and has different options for viewing your geometry: > > * **Camera Settings:** Choose to view your part in either Perspective or Orthographic. Note: The ruler is unavailable in Perspective view > * **Rotation Setting:** Choose between Turntable and Tumbler for how your part rotates in the viewport > * **Show Grid:** Toggle the grid on/off in the viewport > * **Show Ruler:** Toggle the ruler on/off in the viewport > * **Named Views:** Quickly jump between preset views or create your own view. To create your own, select “New Named View” when your part is oriented correctly and type in a name for the view. > * **Capture Image:** Use this tool to screenshot your geometry and save the image to your machine. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Viewcube-controls.gif) > **5. Resolution** > > Resolution settings are located at the bottom right corner. We recommend working in low or medium res, and using high or highest res only to check your geometry. Changing the resolution only affects the loading time and the quality of the rendered image on the screen, not the actual part. > > ![Resolution Settings](https://learn.ntop.com/wp-content/uploads/2025/10/resolution-settings-1.gif) > **6. Log Panel** > > The arrow to the right of the resolution settings expands and collapses the Log Panel, which shows timestamps of your operations, as well as how long processes are taking to complete. You can jump to the most recent operation using the “Last” button, or you can clear the log using the “Clear” button. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/log.gif) > **7. Status Bar** > > If a process is in progress, the Status Bar on the left side would appear. By hovering over it, you can see the related block's name, the process being executed, and the percentage completion. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/status-bar.gif) > **8. Menu** > > The Menu is located in the top left corner of the nTop window and can be opened by clicking the three horizontal lines button. This contains multiple operations that are divided into several sections: > > * **File**: Create/Open/Save files using the applicable options. The “Import” option is used to import custom blocks, and the “My Blocks Folder” opens the custom blocks folder. > * **Edit:** Undo/Redo/Cut/Copy/Paste/Paste with References are all available for operations performed in nTop. The “Select All Visible” option selects all geometry in a notebook. > * **View:** Contains options and settings for how geometry is presented in the viewport. This menu has some of the same options as the view cube, as well as some important additional controls. You can use [Precise Render](https://support.ntop.com/hc/en-us/articles/8288161848723-What-is-a-Precise-Render) to generate an accurate still frame of your geometry and to take screenshots. The other tools that aren't covered under view cube are explained in *View Tools*. > * **Settings:** Opens the nTop *Settings* menu. Here you can configure your nTop platform using the different settings tabs. This includes key settings like [Show Beta blocks](https://support.ntop.com/hc/en-us/articles/360062442113-What-are-beta-blocks), Enable GPU acceleration, and configuring the ribbon. You can also change the global units for your workflows and customize display options. > * **Home:** Returns you to the nTop home page. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Menu.gif) > **9. Left Side Panel** > > The Left Side Panel can be opened/closed by clicking the white/black rectangle icon next to the menu. This panel contains two tabs: Outline and Imports. > > * **Outline:** The *Outline* is a list of all top level blocks in your notebook (i.e. It does not include blocks nested inside another block) that are separated by your notebook sections. When you select a block from the list, it is highlighted in bright blue. If this block is used downstream in another block, the parent block will be highlighted in a darker blue. > * **Imports:** The *Imports* tab is used to manage custom blocks in your workflow. Any custom blocks that have been imported will appear at the top under the Custom Blocks drop-down. You also have the options to create a custom block, import a custom block, and remove unused custom blocks that are not being used in your notebook or are outdated. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Left-panel.gif) > **10. Right Side Panel** > > The Right Side Panel can be opened/closed by clicking the white/black rectangle icon in the top right corner of the nTop window. This panel contains three tabs: *Information*, *Display*, and *Tools*. > > * **Information:** Displays block information based on which block is selected. Here you can see the block description, input descriptions, and output information. There is also a *Learn More* button that will open the selected block's documentation file for more information. > * **Display:** Contains options for changing the selected body's appearance using color and transparency. > * **Tools:** This tab is covered under *View Tools*. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Right-Panel.gif) > **11. In-App Options** > > * **Update Button:** If you are not working in the latest version of nTop, you will see *Update Available* followed by a green download symbol. If you are on the latest version, the download symbol will appear gray. > > * **Information Button:** The question mark icon contains: > > * *About:* Information regarding your current software version. > > * *Documentation:* Opens the nTop internal documentation > > * *What's New:* Opens the most recent release notes for the current software version > > * *Support:* Opens the nTop Support site. This contains helpful articles, release notes, installation information, and more. > > * **User Icon**: Shows user information and a link to access *Account Settings*. This also contains a *Logout* option. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/In-App-Options.gif) > **12. View Tools** > > The View Tools sidebar contains several helpful tools for analyzing your geometry: > > * **Field Viewer:** The *Field Viewer* allows you to visualize a field. You can change the plane of visualization using the colored plane icons. The following options are available to analyze the field: > * *Opacity:* Changes the opacity of the visualized field > * *Isolines:* Option to turn on/off the isolines > * *Interval:* Changes the spacing between the isolines > * *Custom Range:* Option to manually specify the value range of the field > * *Min Value:* Minimum value when a Custom Range is applied > * *Max Value:* Maximum value when a Custom Range is applied > * *Colormap:* Option to change the color scheme of the field > * *Probe Values:* Toggles the ability to see field values when moving the mouse over the field > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Field-Viewer.gif) > > * **Section Cut:** This tool is used to cut geometry at a specified plane. You can change the plane of visualization using the colored plane icons. The following options are available when performing a section cut: > * *Mode:* Choose between performing a section cut on a specific body (*Selection*) or on all visualized bodies that intersect the plane (*Global*) > * *Display Style:* Changes the display style of the sectioned body > * *Show Volume Mesh Elements:* If the body is a volume mesh, you can toggle the visualization of the 3D internal volume elements > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Section-Cut.gif) > > * **Surface Analysis:** The Surface Analysis tool has three different modes you can use to analyze the surface of your geometry: > * *Overhang Angle:* This mode is used to identify regions in your model where angles may exceed the printable threshold, helping you inspect the design for additive manufacturability. It has the following options for inspection: > * *Angle:* The lower value of the angle analysis > * *Threshold:* The range between the lower and upper angle values being evaluated > * *Build Direction:* Specifies the build plane normal direction > * *Gradient:* Option to display the color scheme as gradient or not > * *Draft Angle:* This mode visualizes areas of your model based on a specified draft angle relative to a pull direction, helping you verify that your design meets manufacturability requirements. It has the following options for inspection: > * Angle: The specified angle to evaluate the geometry > * Pull Direction: The plane used to specify the angle relative to the geometry > * Gradient: Option to display the color scheme as gradient or discrete > * *Curvature:* This mode is used to analyze the curvature of a geometry's surface. > * *Metallic:* Renders the geometry with a shiny, reflective surface, which improves the clarity of curvature and surface quality. > * *Zebra:* Displays a series of alternating black and white stripes on a surface. The reflection patterns of these stripes help visualize the surface's curvature. You can select from three buttons to choose the orientation of the stripes and use a slider to adjust their spacing. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Surface-Analysis.gif) > > * **Measure:** The *Measure Tool* lets you directly measure distances between two points within your 3D model. This feature is ideal for quick inspections and supports interactive visualization of distances along global X, Y, and Z axes. The total distance and XYZ dimensions appear in the Right Side Panel, and you can check the “Show XYZ” checkbox to display dimension lines for X, Y, and Z in the 3D view. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Measure-Tool.gif) # Answer to nTop Essentials Challenge Problem Source: https://docs.ntop.com/lessons/ntop-essentials/answer-to-ntop-essentials-challenge-problem [https://www.youtube.com/embed/hhWKbSlEOgI](https://www.youtube.com/embed/hhWKbSlEOgI) > **Transcript** > > In this lesson, we will walk through the answer to the optional test problem for our nTop Essentials course. So, in the problem, we were asked to **Shell** a part, 3 mm thickness for the wall, add a hole for powder removal, and then export as a 3mf file. > > First, I have that part imported into nTop. You can either search in the search bar for that, drag it right in, or go into our Utilities Tab and **Import Part**. So, we have this here. Then we convert that part to an implicit body. When we're doing any type of modeling operations or Boolean operations, we'll need that to be an implicit. Then, in the modeling tab or in your search bar, you can search for our **Shell** feature. So, we put in that implicit bracket, that thickness is 3 mm, and we have that direction inwards. If I type I to isolate that and then type X to do a section cut, we can see I have the shelled part. > > This part does not yet have a hole, so our next section is dedicated to that hole creation for powder removal. You could follow a similar step as shown in the follow-along lesson on creating those holes. But to show a different technique, if you wanted an extra challenge, I am making a hole that looks like this bottom face here. So, the first thing I do is make a variable that is that face and I'll change that color so you can really see that. Then what I'll do is **Scale** the object. So, I don't want to have the entire face gone, I want it to just be a smaller shape that resembles that. So, I'll **Scale** that object about 0.5 and the scale point will be the centroid of that face. > > To get that scale point, you can go into **Block Details** under Properties, under Bounding Box, and then choose that centroid. And then if we look at that scaled object, we can see that it's scaled. Next, I'll convert this to an implicit body. So, let's view that, and it looks a little bit different, and it looks a bit more like a rectangle. The reason for this is when we have a surface that we are converting to an implicit for something so thin, sometimes that visualization looks a little different than you might expect. But when we do the **Thicken Body**, it would do exactly what we expect. It has that right shape that we're looking for, and this is a thickness of 12 mm. You could have chosen a different thickness. So, if I look at my shelled part again and I still have that section cut visible, we can see that this is going to go through that entire bottom surface. So, you could change how much you wanted for this thickened body to create this hole. The larger that thickness, the larger that hole will be, and you just want to make sure that it'll go through that entire surface. So, I chose 12 mm. You may have something a bit different. You might not have used this CAD technique at all. > > Last thing we'll do is a **Boolean Subtract**. So, I'll take that primary body, which is the shell part, and just subtract out that face to remove, which is our thickened body. And so now we have something like this. And let me go a little bit farther. We can see what this looks like. I also have a **Blend Radius** of 2 mm, so we can see that we have that rounding on that edge now. > > Once I have this final part, the last step is to export this if I wanted to print it, for instance. So, our last section, which is export, we'll use our **Mesh from Implicit Body**. You can search for that. You could also go into our Utility section. We have all of our conversions in here as well, where the body will be that final part. Tolerance I used as 1 mm, and I chose to keep this sharpened, and we get something like this. So, for a smaller tolerance, it would take a longer time to compute, but it would be a bit more precise. This is just an example, so I'm just going to have that 1 mm tolerance. You could have had something a little bit different. And then I'm using our **Export Mesh**, and for the path, all you have to do to make sure it's a 3mf is just choose that you are just exporting it as a 3mf file. And that's the answer to our optional test problem. This video reviews the answer to the nTop Essentials challenge problem to shell a part, add holes for powder removal, and then export it as a 3MF file. **Example File:** [101\_23\_AnswerChallenge.ntop](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/nTop%20Files/101_23_AnswerChallenge.ntop) *This file was last updated in nTop 5.15.2* # Answer to Optional Test Problem Source: https://docs.ntop.com/lessons/ntop-essentials/answer-to-optional-test-problem [https://www.youtube.com/embed/GevfDoX09Rc](https://www.youtube.com/embed/GevfDoX09Rc) > **Transcript** > > In this lesson, we will walk through the optional test problem for nTop Essentials, which asks you to create a Torus with a radius of 10 mm, a Torus radius of 4 mm, with its Center at 10 mm. Then, it asks you to translate the object 40 mm along the positive Y direction, convert that to a mesh with a tolerance of 1 mm, and export. > > So, step one, I went into the **Create** tab, chose the **Torus**. We have that Center at 0, 1, 0 mm axis at 0, 0, 1, that default radius of 10 mm and a Torus radius of four. > > Then, we are asked to translate that object and also change the color. So we can do that by just adding 40 into that Vector, so we have 0, 4 mm. And if I go into the **Block Details**, we can change the display color to anything you want. I chose pink. > > Lastly, we put that translate object into that **Mesh From Implicit Body** with that tolerance of one, so that we can prepare to export this as a 3mf. The last step is just putting that mesh into this **Export Mesh** and saving that as a 3mf file by just clicking on that path and saving it where you want it to be. You don't have to have variables for any of these; I just had that so we have them as their separate steps to better visualize the process. And that's the answer to our optional test problem. This video reviews the answer to the nTop Core test problem to create a torus, translate it and change the display color, and export it as a 3MF file. **Example File:** [101\_21\_Completed — nTop Core Optional Test Problem.ntop](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/nTop%20Files/101_21_Completed%20--%20nTop%20Core%20Optional%20Test%20Problem.ntop) *This file was last updated in nTop 5.15.2* # Automation Source: https://docs.ntop.com/lessons/ntop-essentials/automation [https://www.youtube.com/embed/2jjVJurepEQ](https://www.youtube.com/embed/2jjVJurepEQ) To learn how to automate your nTop Workflow, check out our [230: Intro to Automation](/courses/230-intro-to-automation/) Course! # Before We Begin: nTop Essentials Source: https://docs.ntop.com/lessons/ntop-essentials/before-we-begin-ntop-essentials [https://www.youtube.com/embed/\_LUwlw7BGtA](https://www.youtube.com/embed/_LUwlw7BGtA) In this course, we will: * Build up your understanding of implicit modeling, which influences how we interact with the software to create workflows and designs * Learn to manage your notebook and use blocks efficiently * Get comfortable with the controls and basic operations in nTop # Boolean Operations Source: https://docs.ntop.com/lessons/ntop-essentials/boolean-operations Boolean operations can easily be performed on any implicit body in nTop. Boolean blocks are in the *Modeling* tab. ![](https://files.learn.ntop.com/lessons/boolean-operations/Boolean.png) The table below shows the different Boolean operations performed on a cube and a sphere. ![](https://files.learn.ntop.com/lessons/building-blocks-of-design/101_16_Boolean-Chart.png) Boolean blocks contain prepopulated Implicit Body List. To bring in a List Type block as an input for one of these blocks, you would first have to delete the prepopulated list. ## Boolean Union The **Boolean Union** block allows you to join multiple Implicit bodies with an optional blend. ![](https://files.learn.ntop.com/lessons/boolean-operations/101_16_Boolean-Union.jpg) **Blend Radius:** Adds a fillet of a specified radius to the areas where the merged bodies meet. To merge more than two bodies, add items to the Implicit Body List by clicking the plus button at the top right. You can remove an item from the list by clicking the minus button next to it. ## Boolean Subtract The **Boolean Subtract** block allows you to subtract one (or multiple) Implicit bodies from another with an optional blend. ![](https://files.learn.ntop.com/lessons/boolean-operations/101_16_Boolean-Subtract.jpg) **Primary Body:** The implicit body you want to subtract from. ## Boolean Intersect The **Boolean Intersect** block allows you to keep the volume only where your Implicit bodies overlap, with an optional blend. ![](https://files.learn.ntop.com/lessons/boolean-operations/101_16_Boolean-Intersect.jpg) > [!TIP] > > **Tip:** > Splitting, cutting, or trimming an object in nTop is just a matter of Boolean subtracting. Subtract the body you wish to split with a plane, created with a **Plane** or **Plane from Normal** block. > The field associated with a plane has a value of 0 at the plane. The normal direction of the plane has a positive value, while the opposite direction is negative. Boolean subtracting keeps the part in the direction of the normal where field values are positive. # Controls and Keyboard Shortcuts Source: https://docs.ntop.com/lessons/ntop-essentials/controls-and-keyboard-shortcuts [https://www.youtube.com/embed/pIqm0rr6qXs](https://www.youtube.com/embed/pIqm0rr6qXs) > **Transcript** > > To help you get the most out of nTop, we will introduce the controls and tools for manipulating the model view, as well as useful keyboard shortcuts. In our software, you can zoom in and out using the mouse scroll, or by holding control and right-click. To orbit around the center of the object, right-click and hold. To pan, click on the scroll wheel and hold, or hold shift and right-click. > > You can also adjust your view using the view cube. The view cube is completely interactive, and you can orient your views with a click on a labeled face, edge, or corner and rotate your object either counterclockwise or clockwise by using these arrows. > > There are two different camera settings you can explore: orthographic, which is the default setting, and perspective. When you are in orthographic view, objects don't have depth. For example, from whichever view or angle we're in, these two tires will look to be about the same size no matter how close or far away we are from them. While you're in this view, you can use the ruler at the bottom to roughly measure any features of the part. If you're working on something like a small screw or bolt on this tire, you might experience something called the CAD goggles where you zoom in too far and lose sense of how big things are. But with perspective view, it gives the effect that the farther away the object is, the smaller it will look and vice versa, so it gives you a better sense of depth and helps you avoid CAD goggles. In this perspective, you can also zoom in, fly through these small holes, and work on small detailed areas of the model. > > There are also two different rotational styles: the turntable and tumbler. Right now we have the tumbler selected, and we can move and rotate the model to view it at an arbitrary angle. If you choose to use the turntable, the model's axes will always remain pointing up and down on the screen, and the camera will not be able to rotate all the way around the object. > > Let's move on to keyboard shortcuts. Useful hotkeys and keyboard shortcuts in nTop can be categorized into ones that are for views, blocks, or for working with files. Let's start with the keyboard shortcuts you can use when you're manipulating your views in nTop. You can find all your viewing tools on the menu bar at the top left under View and their keyboard shortcuts associated with them. While working with your model, there might be times when you lose sight of your part or while working zoomed in too far. You can reset the view by pressing Z on the keyboard to bring your part back into view at a reasonable distance. > > Make sure the Block's visibility is toggled on when using the zoom to select it. You can toggle the visibility of a Block on and off by pressing V on the keyboard while the Block is selected. To turn on the display grid, press Alt and G together on the keyboard. To do the same for the ruler that's located at the bottom, use Alt R. To see this section cut view of a part, select the part you want to cut, press X on the keyboard, then determine your location and orient the plane. To open up the field viewer, select the Block and press F on the keyboard. Toggle off the visibility of your Block, and you'll be able to see the field of the implicit body that you've selected. To see a precise high resolution render of the part or to do a high resolution image capture, use Control H. > > Next, we'll go over the shortcuts you can use while working with blocks. To be able to quickly search for blocks you need, use Control L as a shortcut to the search bar. When importing a part, rather than searching for an Import Block, you can also press Control I on the keyboard to open up your files from which you can choose what you'd like to import. To isolate the view of a Block, select the Block, press I on the keyboard, and this will turn off the visibility of all other blocks in the notebook. > > You can select multiple blocks at the same time by holding control and left-clicking. This will highlight them in blue. For any blocks that have their visibility toggled on, pressing Control and A will select all those blocks. To collapse or open any Block, instead of clicking on the dropdown, you can press space bar on the keyboard after selecting the Block. You can create a variable by either right-clicking and choosing make variable or just simply by pressing Control M with the Block selected. > > To copy a Block or blocks, you can select by left-clicking on it or by holding control and selecting multiple blocks. With those blocks selected, either right-click and choose copy selection or press Control + C on the keyboard, or under edit, select copy. You can paste both within the same or different instance of nTop. When you're pasting within the same instance, the pasting is much like duplicate. It'll create a copy of the Block, but with the pasting option, you can paste it anywhere in the root of the notebook or in the input of a Block. When pasting, you're given two options: paste and paste with references. If you're simply pasting a Block in another notebook, external references associated with that Block will not carry over. When pasting with references, however, any variables associated with that Block will be brought over as well. > > The last few shortcuts are for when you're working with your nTop file. All the file tools are under the File dropdown in the menu bar and these are labeled with their keyboard shortcuts. While working, don't forget to save your file by pressing Control S on the keyboard. If you want to create a new nTop file, use Control N. To open an existing nTop file, use Control O and select the nTop file you would like to open. You can change the name of a file or make a duplicate by using Control Shift S together to save as. And lastly, once you're done using nTop, press Control Q to quit. ![](https://files.learn.ntop.com/lessons/ntop-essentials/hotkeys-update.jpg) # Design Analysis and Topology Optimization Source: https://docs.ntop.com/lessons/ntop-essentials/design-analysis-and-topology-optimization [https://www.youtube.com/embed/hl3nu6gsUGc](https://www.youtube.com/embed/hl3nu6gsUGc) To learn how to run basic simulations, advance to further analysis, and prepare for topology optimization in nTop, check out our [240: Intro to Simulation](/courses/240-intro-to-simulation/) course! # Design for Additive Manufacturing (DfAM) Source: https://docs.ntop.com/lessons/ntop-essentials/design-for-additive-manufacturing-dfam [https://www.youtube.com/embed/r4hkyBFOrv8](https://www.youtube.com/embed/r4hkyBFOrv8) If you plan to 3D print your designs, check out our Preparing for Additive Manufacturing Courses, starting with our [250: Slicing and Print Layout](/courses/250-slicing-and-print-layout/) course. # Evaluating Mass, Volume and Weight Savings Source: https://docs.ntop.com/lessons/ntop-essentials/evaluating-mass-volume-and-weight-savings Tools to evaluate different properties of your part are available in the *Modeling* tab. ![](https://files.learn.ntop.com/lessons/evaluating-mass-volume-and-weight-savings/101_17_Evaluation-Tab-1.png) ## Mass and Volume The mass and volume of an implicit body can be evaluated with the **Mass Properties** block. This block can be found under *Modeling → Evaluation.* Typing the desired unit into the density input field with the value overrides the default unit seen on the right of the input field. ![](https://files.learn.ntop.com/lessons/evaluating-mass-volume-and-weight-savings/101_17_Mass-Properties-1.png) By going to the Properties tab in the information panel of the block, you can see the mass and volume information to the right of the property chips. You can drag these chips out of the Properties to use in other parts of the workflow. ![](https://files.learn.ntop.com/lessons/evaluating-mass-volume-and-weight-savings/101_17_Properties-of-Mass-Properties-1.gif) ## Weight Savings Calculations After extracting the mass properties of the original body and the lightweight body, you can use math blocks to calculate the percentage of the change in mass. The calculation result for each mathematical operation shows up at the top right corner of that block. ![](https://files.learn.ntop.com/lessons/evaluating-mass-volume-and-weight-savings/101_17_Percent-Change-1.jpg) For a quick check of the percentage weight change, a toolkit block called **Weight Savings** is available under *Lightweighting → Utilities.* ![](https://files.learn.ntop.com/lessons/evaluating-mass-volume-and-weight-savings/101_17_Weight-Savings-1.png) # Exporting Parts Source: https://docs.ntop.com/lessons/ntop-essentials/exporting-parts To export implicit bodies out of nTop, you must convert them into an exportable file type. We use different types of export blocks, where you assign the desired file location in the *Path* input. In most cases, you must first convert the implicit body into a mesh. This mesh will need to go through some refining processes. To learn more about different ways to create meshes and how to refine them, check out our [102: Guide to Meshing](https://learn.ntop.com/courses/102-guide-to-meshing/) course. Below are the steps for exporting a part as a different file type. ## Export Mesh For exporting your part as either an STL, OBJ, PLY, or 3MF file, there are **Export Mesh** and **Export 3MF** blocks. ![](https://files.learn.ntop.com/lessons/exporting-parts/101_18_MFIB1-1024x100.png) ![](https://files.learn.ntop.com/lessons/exporting-parts/101_18_Export-Mesh.png) ![](https://files.learn.ntop.com/lessons/exporting-parts/101_18_Export-3MF.png) ## Export CAD Part The **Export Part** block is used to export CAD parts. Implicit bodies must be converted to CAD bodies before exporting. This can be done in one of two ways: ![](https://files.learn.ntop.com/lessons/exporting-parts/101_18_ExportPart1-1024x95.png) You can also convert an implicit body to CAD using the **CAD Body from Implicit Body (Beta)** block. ![](https://files.learn.ntop.com/lessons/exporting-parts/101_18_ExportPart3-1024x105.png) > [!NOTE] > > **Note**: If you don't see the **CAD Body from Implicit Body (Beta)** block in nTop, you must enable Beta blocks in your settings. Review [this article](https://support.ntop.com/hc/en-us/articles/360062442113-What-are-beta-blocks) for more information on Beta blocks. When using the **Export Part** block, the overload must be changed to match the input type. ![](https://files.learn.ntop.com/lessons/exporting-parts/101_18_ExportPartOverload.gif) ## Export for Additive Manufacturing Tools for slicing are all found in the *Manufacturing* tab. There are multiple slice file formats you can export. To learn more about slicing for additive manufacturing, check out our course, [250: Slicing and Print Layout](/courses/250-slicing-and-print-layout/). ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/image.png) # Field Driven Design Source: https://docs.ntop.com/lessons/ntop-essentials/field-driven-design [https://www.youtube.com/embed/PwPZqZqBal4](https://www.youtube.com/embed/PwPZqZqBal4) Check out our Intro to [220: Field Driven Design](/courses/220-intro-to-field-driven-design/) course to learn how to use fields! # Follow Along: Organizing a Workflow Source: https://docs.ntop.com/lessons/ntop-essentials/follow-along-organizing-a-workflow [https://www.youtube.com/embed/u\_OLbSd\_lHY](https://www.youtube.com/embed/u_OLbSd_lHY) > **Transcript** > > In this lesson, we'll walk through organizing, managing, and navigating the nTop notebook. Begin by opening your downloaded starter file. In this notebook, we see an imported part to which we add a Lattice Intersection and merge it with the outer frame. If we view our notebook, we see that it doesn't have a title or description, and it has vague variable names and a lot of nested blocks. > > Let's break down this workflow and add descriptions to make it easier for you and others to follow. We'll begin by giving our notebook a name. We'll double-click and call this bracket latticing. Next, we'll add a description. We'll double-click in the description input and give a description of what this workflow does. This workflow adds a lattice to the inner body of a bracket and unions it to the outer body of the bracket. > > Next, we'll move along to our work. We see that all of our work is in one single section labeled section one. It's best practice to break your notebook up into sections to easily follow your process and to collapse anything you don't want to see. I'll double-click and call this section one bracket geometry. This is where I'll store my imported part and any initial body that I want to keep visible. > > Our first yellow variable is this CAD body zero. If I isolate using the hotkey I, I see that this is the inner portion of our imported part. I'll double-click to rename and I'll call this CAD inner. Next, I'll isolate our second CAD body using the hotkey I, and I see that this is the outer frame of our imported bracket. I'll double-click and I'll call this CAD outer. Notice that when we rename these variables, their variable names update wherever they're used throughout our workflow. > > Our next step is converting the CAD inner to an implicit body. I'll double-click and rename this body inner body. Note that we could have given either of these variables the same name and they would just be denoted with different symbols. However, it's good practice to keep descriptive variable names to make navigation easier down the road. > > If we move to our next block and isolate using the hotkey I, we see that this is our final part with our lattice intersection and our solid outer section. I'll right-click and I'll make this a variable called final body. We don't want our final body in this same bracket geometry section, so I can drop my white line here, right-click, and add a section. Now if I want to collapse any previous work, I can just use this arrow to close out of our bracket geometry. > > This final body block, we see a lot of nested blocks. It's best practice to keep three or less nested blocks throughout your workbook, so let's clean this up a bit. I'll start by isolating this **Trim Lattice** block using I, and I see that this is a lattice inside our inner body. For more information on how these lattice blocks work, you can view our intro to latticing course. In this **Trim Lattice** block, I'll right-click and make this a variable called lattice. Note that when I made this a variable, it moved it all the way to the left in our notebook, and we only have this variable chip remaining in our **Boolean Union**. > > If we scroll down in that **Boolean Union**, we see that we also have an **Implicit Body From CAD Body** where we convert our outer CAD to an implicit. I'll right-click and make this a variable as well. I'll call it outer body. I can move this back up into our bracket geometry section and collapse both our inner body and outer body variables. If I scroll back down to our other sections, I can make any of our other inputs variables as well. I might do this to promote visibility, or if I know that I'll use this workflow multiple times and come back to change any of these inputs, this can help to make them more accessible. > > I'll start with our unit cell size where I can right-click and make a variable. Maybe I also want to do this with our thickness as well as our unit cell type. Again, note that when you have these variables in your notebook, their names are updated in any block that they're used. If we want to keep these three variables in order, we can move this unit cell to the top so that we can change unit cell size and then thickness, just as we see it in these latticing blocks. > > It's good practice to add descriptive comments throughout your workflow. For our unit cell, I can hover and add a comment using this icon here. I'll type the type of lattice so that future users can understand what they're changing in this variable input. If I scroll up into our geometry section, I can add a comment to our inner body saying, “Convert the inner body of the bracket we will lattice to an implicit body.” I'll do the same for our outer body saying, “Convert the outer part of the bracket to an implicit body.” > > As you make your way through the learning center, you'll notice that a lot of our files have similar descriptions. If we scroll down to our final body, we can instruct users that this **Boolean Union** block merges the outer bracket body and the inner lattice structured together to form the final part. > > Finally, let's say we don't want this final body to be in the same section as our lattice. So we can right-click, add a section, and call this final body. We'll scroll up to our previous section and call it latticing. Now we can collapse all of our sections and easily follow each portion of our workflow. To help navigate our notebook, we can use the Notebook Outline by clicking this icon in the top left corner. You can click on any of the parent blocks, which are these blocks all the way to the left, and any dependent blocks containing those variables will become highlighted in this shaded blue color. If I click on our part zero, I see that both our CAD inner and CAD outer blocks depend on properties from this part. If I choose our CAD inner, I see that it's used in our inner body variable. > > Also note that if you choose any of the blocks within the notebook itself, you'll see a solid blue line around those blocks and a dotted blue line around any of its dependencies. Close out of your Notebook Outline by re-clicking on this icon. At this point, you can save your file and now you have a nice clean notebook that's easy for both you and others to understand and navigate. This is an exercise to help get you comfortable working in the Notebook. Please download the file below to follow along with the video and learn how to best organize a workflow. If you would prefer to walk through this lesson in PDF format, you can download our PDF guide below. ![](https://files.learn.ntop.com/lessons/follow-along-organizing-a-workflow/101_11_1-1-1011x1024.png) To explore how some of these blocks work and learn to create your own latticing workflows, take our [Intro to Lattices](https://learn.ntop.com/courses/210-intro-to-lattices/) course. **Example File:** [101\_11\_Starter — Organizing a Workflow.ntop](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/nTop%20Files/101_11_Starter%20--%20Organizing%20a%20Workflow.ntop) *This file was last updated in nTop 4.23* [101\_11\_ Follow Along — Organizing a Workflow.pdf](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/PDFs/101_11_%20Follow%20Along%20--%20Organizing%20a%20Workflow.pdf) # Follow Along: Spherecube and Gear Source: https://docs.ntop.com/lessons/ntop-essentials/follow-along-spherecube-and-gear [https://www.youtube.com/embed/ECNsyzVPYMU](https://www.youtube.com/embed/ECNsyzVPYMU) > **Transcript** > > In this video, we'll create two simple workflows in one notebook. The first one is the sphere cube, created from primitives in nTop. In the second workflow, we'll bring in a CAD file of a gear, shell it, and then add in some escape holes. > > For the sphere cube, as the name suggests, we'll need to grab a **Cube** block and a **Sphere** block from the Create tab. Let's rename this section “sphere cube.” We want to place the sphere at one corner of the cube, so we can do this by clicking into that center point input and moving the object to our desired location. We could also type in the location into the input to be more precise, but if we at any point in time change the size of the cube, the sphere will not come along with it because we haven't established any sort of dependence between the two objects. > > To do this, we have to go into the property panel of the cube and then select a property chip, such as the max point or the mpoint, and drag that into our center point input of the sphere. Now if we change the size of the cube and click out of it to compute, then the sphere will come along with it. We could also make sure that the ratio of the size between the two objects stays the same, for example, having the radius be half the size of the cube. To do this, we can type directly into that input, divide to grab the **Math** block, and then for the operand A, use the size of the cube. We'll rename it to “cube size” and then put it into operand A and divide by two. Now no matter what size we change it to, the ratio will stay the same. > > Let's now change the display color of the two objects, and then we'll merge them together using the **Boolean Union** block from the Modeling tab. We can just grab those two blocks and drag them into the bodies list in the **Boolean Union** block. Add a blend radius of two, and then we'll also make this a variable and call it “sphere cube.” > > If we isolate the cube that was the original primitive that we made, we can see that the color is pink. Isolating the sphere, the color that we just changed it to, a screen, is still there. This is because nTop doesn't delete anything that we've created, so with any new operations that we're doing with objects that we've created, we are adding another object to the notebook. We'll now collapse this sphere cube block and turn off its visibility, and then add a new section called “gear” to start our new workflow. > > The first step of this workflow is to import our part by dragging and dropping it into the instance. The part isn't visible on the screen right now, so we can press Z on the keyboard to bring it into view. We'll then double click on the part to select the whole body, then right click and choose Convert to Implicit Body. We'll rename this variable “gear,” and since we don't need to work with any of the parameters in these two blocks, we can collapse them now. > > To shell this part, we need to grab the **Shell** block from the Modeling tab. We'll drag in the gear implicit body as the input, and we'll use a thickness of 1 mm in the inward direction. If we isolate this shell by pressing I on the keyboard with the block selected, and then press X to see the section cut, we can see that we now have this gear part that is shelled out. So we can go to the block, right click, and make this a variable and name it “shelled gear.” > > Next, we'll add holes on this top surface of the shelled gear. To do this, we'll create a series of cylinders which we will then use to Boolean subtract from the shell we've just created. So we'll grab that **Cylinder** block from the Create tab, and we can play around and change the location of it by clicking into each input and then using this gimbal to drag the cylinder to the location that we want. Let's also change the radius to 2 mm, and we can keep adjusting Point 1 and Point 2, which are the start and end points of the cylinder, until it's at the position we want. Then clean up these numbers a little bit. > > Now to repeat the cylinder about the center of this gear, we will use the **Polar Array Body** block from the Modeling tab. I will put in 9 counts with 40° angular spacing between each body, then define the axis by double clicking into the axis input and select axis. We don't have to do anything here because if we turn on the visibility of that axis, we can see that it's already at the center where we want the cylinders to revolve around. So we can go ahead and right click on the **Polar Array Body** block, make it a variable, and call it “cylinders.” > > Then we'll grab that **Boolean Subtract** block and bring in our cylinders as the subtraction body that we will subtract from the shelled gear, the primary body. Now we've created those holes, but we also need to make sure that these cylinders aren't also subtracting away any other parts of the shell other than where we want those holes. So we can adjust the length of these cylinders to be a little bit shorter and maybe with a smaller radius. We can make this radius a variable as well if we want to be able to come back and easily change their size, and we can call this “radius of holes.” > > Since we now have our shelled part with the escape holes, we can go to that **Boolean Subtract** block, right click, make it a variable, and then call this “final part.” If we want to, we can quickly check the percentage weight savings achieved with this workflow by going to the Lightweighting tab and adding this **Weight Savings** block to the notebook. All we have to do is bring in our final part as the lightweighted body and grab the initial gear implicit body for the original body. This tells us that this workflow reduced the weight of our part by 58.8%. > > If I want to be able to see the before and after side by side, I can go to the Utilities tab to transform and bring in this **Translate Object** block. I'll right click on the final part block and choose Remove Variable Contents, drag that content into the **Translate** block, and give it a vector value. In this case, I'll move it 50 mm in the positive Y direction and then press enter to compute. Then drag all of this back into the final part variable. I can go back and find my initial gear body, turn on its visibility, and also collapse all these blocks to better be able to see the whole workflow. The two parts can now be seen together side by side. > > If we for some reason want to fill the holes back in on the final part or want to use the fillings of these holes in another workflow, we can Boolean intersect together the shelled gear and the cylinders. This will show up where we have the initial part. So to move these fillings to where the final part is, we can again use the **Translate Object** block, and we'll grab it from the search bar. This time we'll use the same translation vector as last time, so we can go into the final part block, make that vector into a variable which I'll call “translate vector.” We'll bring that into our new **Translate** block and also drag in that **Boolean Intersect**. Now we can right click and make this whole thing a variable and rename it “hole fillings.” I'll isolate this block to only see it at the new location, turn the final part's visibility back on to check, and the fillings are now where the holes are. Let's turn the visibility of the original gear back on, and pressing X on the keyboard, we can look at the cross-section of both bodies at the same time. This lesson walks through two basic workflows in one Notebook. The first workflow creates a simple Spherecube geometry using nTop primitives. The second workflow brings in a CAD file of a gear, shells it, and then adds escape holes. Please download the CAD file below to follow along with the second workflow. You can download our PDF guide below if you prefer to walk through this lesson in PDF format. [101\_19\_Gear.x\_t](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/Models/101_19_Gear.x_t) [101\_19\_ Follow Along — Spherecube and Gear.pdf](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/PDFs/101_19_%20Follow%20Along%20--%20Spherecube%20and%20Gear.pdf) # Implicits and Fields Source: https://docs.ntop.com/lessons/ntop-essentials/implicits-and-fields [https://www.youtube.com/embed/s\_OaJAQxXcY](https://www.youtube.com/embed/s_OaJAQxXcY) > **Transcript** > > nTopology's approach to modeling geometry is based on the implicit field technology, which makes it possible to reliably perform modeling operations without ever breaking the geometry. It enables increased design complexity and automation without adding much to the file size. To take advantage of this powerful technology, we need to understand the world of implicits and learn to work with them. > > Since implicit geometries are very closely tied with fields, let's start by understanding what a field is. If we think about weather information such as temperature, humidity, and wind speed, these are continuous and everywhere. If we probe the values at different locations, we can sample the temperature or humidity at those points. This is a field. Similarly, fields can also represent different types of data, such as stress, velocity, or distance. All this can be used alone or combined together to enhance our implicit geometry for optimal performance. > > What drives the geometry in nTopology is the distance field, where at every point in all directions in the infinite 3D space, there is a distance value that describes how far away that point is from the boundary of the geometry. These values are the outputs of the mathematical equation that describes that geometry, and we use the term implicit to mean that the values of this distance field are negative where it is inside a solid body and positive where it is outside of this body. So, an implicit field is defined as a scalar field that describes a shape by the non-positive value of a field, and an implicit body is simply defined as a three-dimensional geometry represented by an implicit field. > > There's a tool inside the software for visualizing and probing the values of the field of every implicit body. This is called the **Field Viewer**. It allows us to see the section view of the field at a plane, like a window that lets us look into what is continuous in the 3D space. The two different color gradients distinguish the positive and the negative areas. Simple elements like planes and points have simple fields associated with them as well. For example, along the plane, the value of the field is zero. To one side of the plane, the values are entirely positive, and to the other side, the values are entirely negative. Implicits are nTop's native format. We need to understand and learn to work with implicits and fields to be able to fully take advantage of nTop's core technology, which allows us to: * Reliably perform modeling operations without ever breaking the geometry * Achieve increased design complexity and automation * Reduce file size # Importing and Converting Parts to Implicits Source: https://docs.ntop.com/lessons/ntop-essentials/importing-and-converting-parts-to-implicits The typical first steps of building a workflow are importing a part, then converting it into an implicit body to be able to work with it. Blocks for importing and conversion can be found in the *Utilities* tab. ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Utilities-Tab-1024x84.jpg) ## Importing Parts There are three main methods for importing parts, data, and more. See the full list of files types that can be imported into and exported out of nTop [here](https://support.ntopology.com/hc/en-us/articles/360048249514). ## Method 1: Drag and Drop Open the folder on your computer that contains the part file. Drag and drop it into nTop. This will import your part and automatically create a block. ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Drag-and-Drop.gif) ## Method 2: File > Import Go up to *File > Import* (or use hot-key Ctrl + I) to open the Import Window. From there, choose your file and it will import your part. ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_File-Import.png) ## Method 3: Import Block Use the search bar and type in 'Import'. All of the import options will pop up, allowing you to choose the block you need. These blocks can also be found in the *Utilities* tab in the Ribbon. ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Import-Block-1.gif) > [!TIP] > > **Tip:** > If the part is not visible after importing, it may be because it is not at the location of the viewport. Use the hotkey 'Z' to bring the part into view. ## Converting to an Implicit Body Depending on your imported file type, different blocks are available for converting parts to an implicit body. Use the search bar to explore the possible block options. You can find these conversion blocks in the *Utilities* tab. ![](https://files.learn.ntop.com/lessons/importing-and-converting-parts-to-implicits/101_14_Convert-to-Implicit.png) # Introduction to nTop Essentials Source: https://docs.ntop.com/lessons/ntop-essentials/introduction-to-ntop-essentials [https://www.youtube.com/embed/3pmj\_MSw5fI](https://www.youtube.com/embed/3pmj_MSw5fI) > **Transcript** > > nTopology is meant to be used to complement and work with your current engineering tools. So we don't typically start from zero. Instead, we import into nTopology things like CAD or mesh files that we have already designed, or even in combination with other engineering data and test results. For example, from structural analysis and optimization or CFD data. > > We then use these inputs as references to create complex geometry and designs that are difficult or impossible to do elsewhere. We can export what we've done in nTopology into files or data for the next design iteration for manufacturing, or as files to be further analyzed or optimized in external analysis software and solvers, depending on your specific applications. > > Essentially, what we do in nTopology is not creating a specific part. We are building a process that can work on any part. This means that whatever we build can easily be reused and automated. This is possible because of the way that nTopology represents geometry. The legacy method of describing geometry is through boundary representation, or B-Rep for short, where faces are created and joined together by edges to separate the inside and outside of a solid part. > > nTopology works quite differently. It describes the same geometry or volume using a mathematical equation. This is a much more lightweight way of handling geometry data, and because we're only working with equations, we are able to very quickly generate complex structures without adding to the file size. nTopology stores these volume-defining equations behind the scenes, and with given input parameters, it computes these equations and then renders out a visual representation on the screen. This visual representation is called the implicit body, which is nTopology's native format. There is an implicit field associated with every implicit body, which allows us to visualize these behind-the-scene equations. In the next lesson, you'll learn more about these implicit geometries and implicit fields. nTop is meant to complement and work with your current engineering tools, so we do not typically start our workflows from zero. Instead, we import CAD or mesh files that we have already designed, possibly even in combination with other engineering data and test results. Using these imported files as references, we can create complex geometry and designs that are difficult or impossible to do elsewhere and then export the results for manufacturing or further analysis in external software. We are not creating a specific part in nTop, but we are building a process that can work on any part. This means that whatever we make can be reused, automated, and shared across your team. # Knowledge Check: Basic Operations Source: https://docs.ntop.com/lessons/ntop-essentials/knowledge-check-basic-operations # Knowledge Check: Implicit Modeling Source: https://docs.ntop.com/lessons/ntop-essentials/knowledge-check-implicit-modeling # Knowledge Check: The Notebook Source: https://docs.ntop.com/lessons/ntop-essentials/knowledge-check-the-notebook # Latticing Source: https://docs.ntop.com/lessons/ntop-essentials/latticing [https://www.youtube.com/embed/BsEpWo5OXb0](https://www.youtube.com/embed/BsEpWo5OXb0) To learn how to add lattice structures to your part, check out our [210: Intro to Lattices](/courses/210-intro-to-lattices/) course. # Meshing Source: https://docs.ntop.com/lessons/ntop-essentials/meshing [https://www.youtube.com/embed/Ea-CLLWKrvA](https://www.youtube.com/embed/Ea-CLLWKrvA) Working with meshes is a necessary step for importing and exporting geometry and for some latticing techniques and finite element analysis. Therefore, we recommend our [102: Guide to Meshing](/courses/102-guide-to-meshing/) course after nTop Essentials. # Notebook Management Source: https://docs.ntop.com/lessons/ntop-essentials/notebook-management In nTop, you add a series of different Blocks to the Notebook to create a workflow. Staying organized in the Notebook as you build your workflow will allow you to work more efficiently, especially after coming back to revisit the file after some time. Your Notebook serves as a documentation of your work. Keeping it organized and commented is helpful for future use and sharing it with others. ## Adding and Deleting Blocks Most workflows in nTop will begin with importing a CAD or mesh object and converting it to an Implicit body, which are all done through adding specific blocks to the Notebook. To perform operations in nTop, you can add Blocks to the Notebook via the Ribbon or the Search Bar: **Method 1:** Click on Block icons or select from the drop-down list in the *Ribbon*. Show/hide the ribbon with *Ctrl+D* ![](https://learn.ntop.com/wp-content/uploads/2025/05/add-ribbon.gif) **Method 2:** Type the block name in the *Search Bar.* Shortcut to go to *Search Bar* is *Ctrl+L* ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Add-or-Delete-M2.gif) To remove a block, select it then press the delete key or right-click and select delete from the menu: ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Delete-Block.jpg) To select multiple Blocks, hold *Ctrl* key. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Multiselect-Blocks.gif) ## Notebook Name, Description, Sections, and Comments A little housekeeping goes a long way when working in an nTop Notebook. If your engineering notebook is kept tidy, organized, and blocks are named well, it will be easy to navigate and reuse existing files. Giving your Notebook a proper name and description, as well as adding proper names to sections and adequate comments to blocks, will help to keep your Notebook files light and easy to read. A little housekeeping goes a long way. Here are some best practices for creating and organizing a Notebook: – Use clear and concise names, descriptions, and comments – Use Sections to organize blocks based on their purpose – Isolate inputs that the user might change frequently ## Name and Description It is good practice to give the Notebook a fitting name that matches the file name and to give a full description of what the workflow in the Notebook does. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Name-and-Description.png) ## Sections Use of sections to organize the different portions of your workflow and name them appropriately. This way you can stay organized by keeping sections you are not working on collapsed and be able to quickly find the part of the workflow you want to change. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Workflow-Sections.jpg) ## Inputs and Outputs Above and below the sections of your Notebook you will find areas where you can define one or more inputs and a single output. Variables are dragged into these areas to call out what will be the inputs and output of a custom block. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Inputs-and-Outputs.jpg) ## Comments Use comments to document the steps of your work, focusing on the purpose of the block. The comment can be made in the Notebook directly by hovering over the top left corner of a block and then clicking on the bubble symbol or through the Block Details panel of a block. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Comments-1.jpg) > [!NOTE] > > **Note**: The comment is attached to the block, so if the block is moved or deleted the comment will go with it. ## Variables You can make any block or parameter in the Notebook into a variable. By declaring a block a variable, all of its components can be changed quickly and parametrically. An entire Notebook of functions can automatically be computed and rebuilt by changing inputs in the variable. Variables allow for quick and easy organization and understanding of your Notebook since the variable blocks don't get nested within another block. A block variable looks different from a regular block. The block name moves to the left and sits on top of the block color. Below you can see a variable vs. a regular block. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Variables.png) Once a block is made into a variable, it remains in the Notebook. When the variable is used as an input for another block, the variable is represented by a chip. ## Notebook Outline Use the icon in the top left of the Notebook to expand and collapse the Notebook Outline. This Outline lets you view the Blocks in your Notebook from a high level and quickly select and navigate them. In addition to quickly navigating to blocks, the Outline visualizes where variables are used in your Notebook. When you select a block in the Outline, a bright blue highlight will appear around the block in the Notebook. If that block is a variable instanced within another block, a duller blue highlight will appear on the block that references it. ![](https://learn.ntop.com/wp-content/uploads/2024/03/Outline-navigation.gif) # nTop Tips Source: https://docs.ntop.com/lessons/ntop-essentials/ntop-tips Here are some tips to get faster and more efficient while working in the Notebook: ## 1. Finding Blocks Unsure which block you need? Use the **Search Bar** Try typing a relevant keyword into the intelligent search bar to explore your options. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Search-Bar.gif) Or, **Search in Place** Double-click on an empty space in your Notebook to see blocks. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Search-in-Place.gif) Activate **Context Search** by selecting a block and clicking on the “**+**” icon or pressing **S** on the keyboard. Any option selected will become the outer nested block of the initial block. If there is already an outer nested block, the list will show only blocks that are compatible with both the inputs of the outer nested block and the output of the inner nested block. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Context-Search.jpg) Search results include visual indicators with colors representing the block output type and, where applicable, icons that differentiate lists, variables, and imported blocks. ## 2. Adding Blocks from within a Block In addition to adding blocks from tabs in the ribbon and the search bar, there are two additional ways to add blocks to the Notebook. You can add a block directly into an input of an existing block in the Notebook using these methods. Only blocks with matching Types will be listed. **Double-click** in an input box. Blocks that are already in the Notebook will appear in the list first with an icon next to the name. This option is good for when you are not sure what block is needed next. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Double-Click-Input.png) ## 3. Copying and Duplicating Blocks Right-click on a block to see the three options for copying or duplicating it: **'Copy Selection'** or **Ctrl + C** allows you to create copies of one or multiple selected blocks, which you can paste at any location where the white line is placed within the same Notebook or in a different Notebook. To select multiple blocks, hold Ctrl. \*\*'\*\***Paste'** or **Ctrl + V** brings only the selected blocks to the new Notebook. **'Paste with References'** or **Ctrl + Alt + V** brings all associated variables to the new Notebook. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Copy-Selection.gif) **'Duplicate'** simply makes a new copy of the block and a new copy of all blocks referenced or nested in that block. Values are not linked between old and new. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Duplicate.gif) **'Duplicate with References'** makes a new copy of the block but uses the original referenced or nested block. Nested referenced blocks are not copied and will therefore update values when one of them is changed. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Duplicate-with-References.gif) **Ctrl + Drag** creates a new instance of the same block. Changes in either block are reflected in both. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_CTRL-Drag.gif) ## 4. Reusing Variable Chips Just as you can create a new instance of the same block using **Ctrl + Drag**, it is possible to create a new chip of the same variable to be used in a different part of the workflow. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Reuse-Variable-Chips.gif) ## 5. Pausing Automatic Block Computation You may have noticed that any blocks that you have completely filled in run automatically. This happens by default after you either press enter or click outside of the block after satisfying all inputs. You can stop block autorun for the entire Notebook or put breaks on specific blocks. Toggle off **Autorun** Mode using the button next to the search bar. This will stop all blocks in the notebook from automatically computing. After updating the inputs, you can run individual blocks by clicking on the green 'Rebuild Block' symbol that pops up next to the Info button at the block's top right corner. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Turn-off-Autorun.gif) Select **Manual Run Mode** in the right-click menu of a block. This will stop that specific block (and consequently any downstream workflow) from automatically computing. When changing inputs in preceding blocks or within the block, the 'Manual Run Mode' block will not run until you click the orange Run button at its top right-hand corner. ![](https://files.learn.ntop.com/lessons/ntop-tips/101_12_Manual-Run-Mode.gif) # Optional: Essentials Test Problem Source: https://docs.ntop.com/lessons/ntop-essentials/optional-essentials-test-problem Now that you have learned the basics of nTop, feel free to try this optional test problem with a review of the answer in the following lesson. Create a torus with a radius of 10mm, and a torus radius of 4mm with the center at (0,10,0) mm. Then, translate the object 40mm along the positive y-direction and change the color of the object. Lastly, export as a 3MF with a mesh tolerance of 1mm. **Estimated Time to Complete:** 15 minutes # Optional: nTop Essentials Challenge Problem Source: https://docs.ntop.com/lessons/ntop-essentials/optional-ntop-essentials-challenge-problem Feel free to try our nTop Essentials challenge problem after completing the optional test problem. Given the CAD file below, shell the part with a 3mm wall thickness inwards and add a hole for powder removal. Then, mesh the part with a 1mm tolerance and export it as a 3MF. For an added challenge, the hole for powder removal should resemble the shape highlighted below. Your final result should look something like the second image if you choose to create a hole resembling that CAD face. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_22_OptionalChallenge.jpg) **Estimated Time to Complete: 25 minutes** [101\_22\_bracket.x\_t](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/Models/101_22_bracket.x_t) [*Report File*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) # Overview Source: https://docs.ntop.com/lessons/ntop-essentials/overview ![Cube and sphere blended with a smooth implicit transition](https://storage.googleapis.com/files-learn/lessons/ntop-essentials/sphere-cube-blend.png) This course will take you through the basics of nTop to help get you started on your journey of exploration of the software. After completion of the course, you will have developed an understanding of the concept of implicit modeling, which is the basis of nTop's core technology. You will also gain familiarity with key operations and best practices that will enable you to work faster and more efficiently within our software. **Prerequisites:** None **What will be covered:** * Introduction to nTop and the fundamentals of implicit modeling * Working with blocks and notebooks to build workflows * Key basic operations ### Before We Begin > **[Before We Begin](/lessons/ntop-essentials/before-we-begin-ntop-essentials)** > > Introduction and course overview ### NTOP AND IMPLICIT MODELING > **[Introduction to nTop](/lessons/ntop-essentials/introduction-to-ntop-essentials)** > **[Implicits and Fields](/lessons/ntop-essentials/implicits-and-fields)** > **[A Tour of the nTop Instance](/lessons/ntop-essentials/a-tour-of-the-ntop-instance)** > **[Controls and Keyboard Shortcuts](/lessons/ntop-essentials/controls-and-keyboard-shortcuts)** > **[Knowledge Check: Implicit Modeling](/lessons/ntop-essentials/knowledge-check-implicit-modeling)** ### The Notebook > **[What is the Notebook?](/lessons/ntop-essentials/what-is-the-notebook)** > **[Working with Variables](/lessons/ntop-essentials/working-with-variables)** > **[Notebook Management](/lessons/ntop-essentials/notebook-management)** > **[Toolkit and Custom Blocks](/lessons/ntop-essentials/toolkit-and-custom-blocks)** > **[Follow Along: Organizing a Workflow](/lessons/ntop-essentials/follow-along-organizing-a-workflow)** > **[nTop Tips](/lessons/ntop-essentials/ntop-tips)** > **[Knowledge Check: The Notebook](/lessons/ntop-essentials/knowledge-check-the-notebook)** ### Basic Operations > **[Overview of Primitives, Transformations, and Modeling Operations](/lessons/ntop-essentials/overview-of-primitives-transformations-and-modeling-operations)** > **[Importing and Converting Parts to Implicits](/lessons/ntop-essentials/importing-and-converting-parts-to-implicits)** > **[Working with CAD Bodies](/lessons/ntop-essentials/working-with-cad-bodies)** > **[Boolean Operations](/lessons/ntop-essentials/boolean-operations)** > **[Evaluating Mass, Volume and Weight Savings](/lessons/ntop-essentials/evaluating-mass-volume-and-weight-savings)** > **[Exporting Parts](/lessons/ntop-essentials/exporting-parts)** > **[Follow Along: Spherecube and Gear](/lessons/ntop-essentials/follow-along-spherecube-and-gear)** > **[Knowledge Check: Basic Operations](/lessons/ntop-essentials/knowledge-check-basic-operations)** ### Optional: Essentials Test Problems > **[Optional: Essentials Test Problem](/lessons/ntop-essentials/optional-essentials-test-problem)** > **[Answer to Optional Test Problem](/lessons/ntop-essentials/answer-to-optional-test-problem)** > **[Optional: nTop Essentials Challenge Problem](/lessons/ntop-essentials/optional-ntop-essentials-challenge-problem)** > **[Answer to nTop Essentials Challenge Problem](/lessons/ntop-essentials/answer-to-ntop-essentials-challenge-problem)** ### Exploring nTop > **[Meshing](/lessons/ntop-essentials/meshing)** > **[Latticing](/lessons/ntop-essentials/latticing)** > **[Field Driven Design](/lessons/ntop-essentials/field-driven-design)** > **[Design Analysis and Topology Optimization](/lessons/ntop-essentials/design-analysis-and-topology-optimization)** > **[Automation](/lessons/ntop-essentials/automation)** > **[Design for Additive Manufacturing (DfAM)](/lessons/ntop-essentials/design-for-additive-manufacturing-dfam)** ### What's Next > **[Resources](/lessons/ntop-essentials/resources)** # Overview of Primitives, Transformations, and Modeling Operations Source: https://docs.ntop.com/lessons/ntop-essentials/overview-of-primitives-transformations-and-modeling-operations It is recommended that you create your part in CAD, do operations such as splitting the part into multiple bodies using planes or surfaces there, and bring them into nTop to be modified and optimized. There are, however, possibilities in nTop to create simple implicit geometries as well as perform simple transformations and modeling operations on your object. ## Primitives Primitives, found in the *Create* tab, are simple shapes that are generated as implicit bodies. ![](https://files.learn.ntop.com/lessons/overview-of-primitives-transformations-and-modeling-operations/Primitives.jpg) ## Transformations In the *Utilities* tab, you can find object Transformations such as: scaling, rotating, translating, and orienting. You can perform these operations on any type of geometry and in combination with each other. The block will output your transformed geometry while the original geometry remains as a prior block. ![](https://files.learn.ntop.com/lessons/overview-of-primitives-transformations-and-modeling-operations/Transforms.jpg) ## Modeling Operations In the *Modeling* tab, you can find common operations such as: offsetting, extruding, shelling, thickening, and revolving. These operations may perform differently than expected on Implicit Bodies compared to traditional CAD. ![](https://files.learn.ntop.com/lessons/overview-of-primitives-transformations-and-modeling-operations/Modeling-Operations.jpg) # Resources Source: https://docs.ntop.com/lessons/ntop-essentials/resources ### **Additional Resources on Implicit Modeling:** 1. Article: [Implicits and Fields for Beginners](https://ntopology.com/blog/implicits-and-fields-for-beginners/) 2. Article: [Understanding the Basics of B-Reps and Implicits](https://ntopology.com/blog/understanding-the-basics-of-b-reps-and-implicits/) 3. Article:[How Implicits Succeed Where B-Reps Fail](https://ntopology.com/blog/how-implicits-succeed-where-b-reps-fail/) To access helpful resources from within the software, navigate to the question mark symbol at the top right corner of the instance. ![](https://files.learn.ntop.com/lessons/resources/101_30_1-1.gif) **Documentation:** Installed on your local drive, the documentation contains basic information on the structure, interactions, and functionalities in nTop. **Support:** Our [Help Center](https://support.ntop.com/) contains short tutorials and tips, as well as FAQ articles. Use the search function by typing in relevant keywords. For additional questions or troubleshooting help, click the 'Contact Support' button to fill out a contact form. # Toolkit and Custom Blocks Source: https://docs.ntop.com/lessons/ntop-essentials/toolkit-and-custom-blocks With nTop, it is possible to package longer workflows into a block, given the determination of a set of inputs and the desired output. The two lines along the left side of the block denote a toolkit block or custom block. ![](https://files.learn.ntop.com/lessons/toolkit-and-custom-blocks/101_10_Block-vs-Toolkit.jpg) ## Toolkit Blocks Toolkits are pre-packaged, reusable workflows or utilities that come pre-installed with the software. Toolkit blocks are categorized by their specific applications in the last five tabs of the modeling ribbon: *Additive Manufacturing, Architected Materials, Design Analysis, Lightweighting, and Topology Optimization.* ![](https://files.learn.ntop.com/lessons/toolkit-and-custom-blocks/101_10_Additive-Manufacturing-Tab-1024x116.jpg) ## Custom Blocks If a workflow is packaged into a block by the user, we call it a Custom Block. Custom Blocks can be created by setting up the Notebook in a specific format. To accomplish this, define the important parameters as inputs and the desired outcome as the output. Custom Blocks are sharable, and we recommend saving them with a name that begins with CB, the acronym for Custom Block. Once you add them to your **My Blocks Folder**, they can be found by typing the custom block's name or CB into the search bar. To learn how to create and make changes to Custom Blocks, check out our [230: Intro to Automation](/courses/230-intro-to-automation/) course. # What is the Notebook? Source: https://docs.ntop.com/lessons/ntop-essentials/what-is-the-notebook The Notebook documents and represents an engineering workflow in nTop. It records all functions performed and captures a process that can work on any part, allowing users to reuse the workflow to generate new designs. ## The Concept Comparable to the model tree in traditional CAD software, the Notebook keeps a record of modeling operations. Unlike in traditional CAD, however, all operations in nTop are not performed on the geometry itself. Since the geometry on the screen is only a representation of the mathematical equations behind the scene, it is our choice of inputs or parameters within the Notebook that creates and manipulates the geometry. In a sense, users can think of nTop as a visual programming language. ![](https://files.learn.ntop.com/lessons/what-is-the-notebook/101_6_CAD-Tree-1024x473.png) ## The Block System nTop operates on a block system, where each block serves one specific function. When given a set of inputs, a block computes an output that can also be used as input for other blocks. ![](https://files.learn.ntop.com/lessons/what-is-the-notebook/101_6_Block-System.jpg) Because of the block system, there can be more than one starting point, and the order of these blocks does not have to be sequential in the order of their creation. This gives you more power to do multiple processes in parallel and create more complex geometry. # Working with CAD Bodies Source: https://docs.ntop.com/lessons/ntop-essentials/working-with-cad-bodies nTop supports both multi-body parts and assemblies and treats CAD imports as collections of Bodies; even if the import only contains a single body. Some operations require identifying the specific CAD Body or Face by creating a CAD Body or Face Variable. ## Extraction by Manual Selection on Screen The quickest way to convert an imported CAD part into an implicit body is to extract directly from the part shown on the screen. Both the CAD Body and Face can be converted into implicit bodies as well as made into CAD Body or Face Variables. **Double-Click** to select the whole body, then right-click to either “Create CAD Body Variable” or “Convert CAD Body to Implicit Body” ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Extract-Double-Click.gif) **Single-Click** to select a face, then right-click to either “Create CAD Face Variable” or “Convert CAD Face to Implicit Body” ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Single-Click-Extract.gif) **Hold Ctrl** to select more than one body or face, then “Create CAD Body List Variable” or “Convert CAD Body to Implicit Bodies”. A List is created if more than one item is selected. In this example, we choose 2 faces, so the block will have a (2) behind its name, with 2 being the size of the list. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_CTRL-Select-Extract.gif) Edges or vertices can also be extracted the same way, but they can only be made into CAD Vertex or CAD Edge Variables and not implicit bodies. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_CAD-Edge-Extract.gif) ## Extraction by Properties Open up the Properties Panel of the Imported part. Expand the Bodies Properties until you reach the desired element. Drag it into the Notebook to create a block from it. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Extract-Properties-Standard.gif) ## Extraction by Properties using CAD View When opening the properties panel of an imported CAD part or assembly, there are many property chips to choose from. To simplify extraction we added a CAD View filter, which hides all properties except for CAD bodies. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Extract-Properties-CAD-View.gif) ## Extraction by CAD Blocks In nTop 5.8, we released a series of new blocks that are designed to help users interact with CAD bodies more efficiently. **To extract CAD Faces:** Use the **Get CAD Faces** block: ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-Faces.jpg) **To extract CAD Bodies:** Use the **Get CAD Bodies** block: ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-Bodies.jpg) You can also use the **Get CAD Bodies by Name** or **Get CAD Faces by Name** block to further refine your selections: ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-Bodies-by-Name.jpg) ## Extraction by Color ou can extract CAD Faces and CAD Bodies using our two color based blocks: * **Get CAD Faces by Color** * **Get CAD Bodies by Color** In the gif below, the Color property chip is extracted from the face/body. We recommend this method as it directly links to color, as opposed to inputting the RGB values of an empty **Color** block. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Get-CAD-by-Color.gif) If you import your CAD part and it doesn't have any color, make sure you change the Display Mode to “CAD Color”. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/Toggle-CAD-Color.gif) ## Turning Multiple CAD Faces into a Single Surface Create a CAD Face List of faces you want to merge, then use the **Stitch CAD Surface Bodies** or the **Stitch Adjacent CAD Faces** block. These blocks merge multiple sheets within a tolerance range and output the results as a list. This block comes auto-populated with a list, however. ***You cannot input a list into a list.*** You need to delete the auto-populated list to input the CAD faces. ![](https://files.learn.ntop.com/lessons/working-with-imported-geometry/101_15_Single-Surface-1.gif) # Working with Variables Source: https://docs.ntop.com/lessons/ntop-essentials/working-with-variables Variables are the key to keeping a tidy Notebook. Any block or input can be turned into a variable, allowing for easy access, reference, and manipulation. Once made into a variable, the block or input will remain in your Notebook. The variable is represented as a simple chip when used in other blocks. Use variables to drive your workflow with key parameters and streamline your design process. ## Creating a Block Variable Select the block and right-click along the top of the block, then select “Make Variable” A block variable never “nests” inside another block. Instead, it creates a “chip” to show that the variable is in that block. All chip locations are highlighted in blue when you select the variable. ![](https://files.learn.ntop.com/lessons/working-with-variables/101_8_Creating-a-Block-Variable.gif) ## Creating a Parameter Variable Right-click over a parameter name and select “Make Variable” A parameter variable is a useful way to quickly change a specific aspect of a block. It makes it clear what input can change. ![](https://files.learn.ntop.com/lessons/working-with-variables/101_8_Parameter-Variable-1024x604.gif) ## Creating Property Variables Using the Block Details Go to the Properties tab in the Block Details panel by clicking on the question mark icon at the top right of the block. Drag any property into the Notebook to create a variable of that property. These properties are linked to the block they came from. You can also drag any chip directly into an input of another block instead of the Notebook. ![](https://files.learn.ntop.com/lessons/working-with-variables/101_8_Variables-with-Property-Chips-1.gif) ## Removing Variable Contents Right-click on the variable and select “Remove Contents”. Emptying a variable allows you to quickly change the contents of that variable while keeping the variable chip inserted as inputs in other blocks. In the example below, the contents of a **Cube** block variable are being removed. In order to allow any Implicit Body input, the variable block type icon needs to change from Cube to Implicit Body. To do this, click on the icon, and search for the desired input type. Changing the **Sphere** and **Cube** into variables allows you to quickly replace them without having to right-click and remove contents. ![](https://files.learn.ntop.com/lessons/working-with-variables/101_8_Remove-Variable-Contents-1024x589.gif) # Accessing the Software Source: https://docs.ntop.com/lessons/ntop-foundations/accessing-the-software Now that you understand what nTop is and its transformative approach to design, it's time to get you set up and ready to start using the software. In this lesson, we'll walk you through everything you need to know about accessing nTop including: * System requirements * Licensing the software * Setting up your account * Accessing help resources By the end of this video, you'll have a clear roadmap for getting nTop installed and configured so you can begin putting it to work on your design challenges. [https://www.youtube.com/embed/bHPoEuYI2bY](https://www.youtube.com/embed/bHPoEuYI2bY) > **Transcript** > > Now let's discuss how you can get started as a first-time user. If you don't have an nTop account, when you first get added to your organization, you'll have received an email with instructions to activate your account. This account is your passport for accessing the following areas: Your nTop user dashboard is where you can see the licenses assigned to you and download the nTop software. You can log directly into the nTop software if you're using our named user or our cloud floating license. If your organization is using FlexNet licenses, then you don't need to log into your account through nTop, and will instead be connecting to your on-prem Flexnet server provided by your IT administrator. You can visit nTopLearn to access all of nTop's structured training resources. These self-paced educational modules combine practical exercise video demonstrations and assessment modules to help you develop your software proficiency. Finally, you can access nTop support where you can explore our extensive knowledge base and submit support tickets to our team. Before we wrap up this lesson, let's touch on software updates. We're constantly evolving and adding new and exciting features and capabilities to our software. Currently, nTop is updated bi-weekly, and users receive notifications for available software updates right within the application where they can choose to download and install them when ready. We hope that by now you have a fairly good understanding of how the nTop software is licensed, installed, and updated, and how you can set your account up to get started. But if you have any questions, don't hesitate to browse our extensive knowledge base, submit a support ticket at nTop support, or send an email to [support@ntop.com](mailto:support@ntop.com). Now you're ready to dive into the exciting world of nTop. So without further ado, let's get into the basics of nTop in our next lesson. > > [0:00](https://www.youtube.com/watch?v=bHPoEuYI2bY) Setting Up and Accessing nTop > [0:12](https://www.youtube.com/watch?v=bHPoEuYI2bY\&t=12s) System Requirements > [0:35](https://www.youtube.com/watch?v=bHPoEuYI2bY\&t=35s) nTop Licensing and Distribution > [1:03](https://www.youtube.com/watch?v=bHPoEuYI2bY\&t=63s) Getting Started as a First-Time User > [1:32](https://www.youtube.com/watch?v=bHPoEuYI2bY\&t=92s) Understanding Your nTop Account Access > [2:03](https://www.youtube.com/watch?v=bHPoEuYI2bY\&t=123s) Software Update Information > [2:19](https://www.youtube.com/watch?v=bHPoEuYI2bY\&t=139s) Additional Support and Resources # Basics of nTop Source: https://docs.ntop.com/lessons/ntop-foundations/basics-of-ntop ## Understanding the nTop Notebook The Notebook documents and represents an engineering workflow in nTop. It records all functions performed and captures a process that can work on any part, allowing users to reuse the workflow to generate new designs. ### Notebook & Blocks Comparable to the model tree in traditional CAD software, the Notebook keeps a record of modeling operations. In nTop, you add a series of different Blocks to the Notebook to create a workflow, where each block serves one specific function. When given a set of inputs, a block computes an output that can also be used as input for other blocks. ![](https://files.learn.ntop.com/lessons/basics-of-ntop/function-diagram.jpg) Note that unlike in traditional CAD, all operations in nTop are not performed on the geometry itself. Since the geometry on the screen is only a representation of the mathematical equations behind the scene, it is our choice of inputs or parameters within the Notebook that creates and manipulates the geometry. ![](https://files.learn.ntop.com/lessons/basics-of-ntop/updated-CAD-tree-1024x486.png) ### Data types for Blocks **Every function (block) in nTop works with specific data types.** Some blocks create 3D geometry, others output numbers, points and more data types. **nTop prevents connections between mismatched types**. This is a useful paradigm that works similar to types in programming languages because it: * **Ensures Reliability**: Helps you build complex designs by ensuring you're always using the right data in the right place. * **Prevents Errors**: Catches mistakes immediately, preventing problems before they grow. * **Enhances Clarity**: Different colors and icons visually show expected data types, making workflows easy to understand. ![](https://files.learn.ntop.com/lessons/basics-of-ntop/image-12.png) ### Working with Variables Any block or input can be turned into a variable, allowing for easy access, reference, and manipulation. Variables are a convenient way to organize your workflow and streamline your design process. By declaring a block a variable, all of its components can be changed quickly and parametrically. An entire Notebook of functions can automatically be computed and rebuilt by changing inputs in the variable. Use variables to drive your workflow with key parameters and streamline your design process. A block variable looks different from a regular block. The block name moves to the left and sits on top of the block color. Below you can see a variable vs. a regular block. ![](https://files.learn.ntop.com/lessons/basics-of-ntop/image-6.png) When the variable is used as an input for another block, the variable is represented by a chip. You can also change an input parameter to a variable. Just right-click over a parameter name and select “Make Variable”. A parameter variable is a useful way to quickly change a specific aspect of a block. It makes it clear what input can change. Go to the Properties tab in the Block Details panel by clicking on the question mark icon at the top right of the block. Drag any property into the Notebook to create a variable of that property. These properties are linked to the block they came from. You can also drag any chip directly into an input of another block instead of the Notebook. ![](https://files.learn.ntop.com/lessons/working-with-variables/101_8_Parameter-Variable-1024x604.gif) ![](https://files.learn.ntop.com/lessons/working-with-variables/101_8_Variables-with-Property-Chips-1.gif) ## Notebook Management Tips Your Notebook serves as a documentation of your work, and a little housekeeping goes a long way. Keeping it organized and commented is helpful for future use and sharing it with others. Expand each item below for a helpful tip on how to build the perfect notebook. ### Notebook Title It is good practice to give the Notebook a fitting name that matches the file name and to give a full description of what the workflow in the Notebook does. ## Adding and Deleting Blocks Most workflows in nTop will begin with importing a CAD or mesh object and converting it to an Implicit body, which are all done through adding specific blocks to the Notebook. To perform operations in nTop, you can add Blocks to the Notebook via the Ribbon or the Search Bar: **Method 1:** Click on Block icons or select from the drop-down list in the *Ribbon*. Show/hide the ribbon with *Ctrl+D* ![](https://learn.ntop.com/wp-content/uploads/2025/05/add-ribbon.gif) **Method 2:** Type the block name in the *Search Bar.* Shortcut to go to *Search Bar* is *Ctrl+L* ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Add-or-Delete-M2.gif) To remove a block, select it then press the delete key or right-click and select delete from the menu: ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Delete-Block.jpg) To select multiple Blocks, hold *Ctrl* key. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Multiselect-Blocks.gif) ## Sections Use of sections to organize the different portions of your workflow and name them appropriately. This way you can stay organized by keeping sections you are not working on collapsed and be able to quickly find the part of the workflow you want to change. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Workflow-Sections.jpg) ## Inputs and Outputs Above and below the sections of your Notebook you will find areas where you can define one or more inputs and a single output. Variables are dragged into these areas to call out what will be the inputs and output of a custom block. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Inputs-and-Outputs.jpg) ## Comments Use comments to document the steps of your work, focusing on the purpose of the block. The comment can be made in the Notebook directly by hovering over the top left corner of a block and then clicking on the bubble symbol or through the Block Details panel of a block. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Comments-1.jpg) > [!NOTE] > > **Note**: The comment is attached to the block, so if the block is moved or deleted the comment will go with it. ## Variables You can make any block or parameter in the Notebook into a variable. By declaring a block a variable, all of its components can be changed quickly and parametrically. An entire Notebook of functions can automatically be computed and rebuilt by changing inputs in the variable. Variables allow for quick and easy organization and understanding of your Notebook since the variable blocks don't get nested within another block. A block variable looks different from a regular block. The block name moves to the left and sits on top of the block color. Below you can see a variable vs. a regular block. ![](https://files.learn.ntop.com/lessons/notebook-management/101_9_Variables.png) Once a block is made into a variable, it remains in the Notebook. When the variable is used as an input for another block, the variable is represented by a chip. ## Notebook Outline Use the icon in the top left of the Notebook to expand and collapse the Notebook Outline. This Outline lets you view the Blocks in your Notebook from a high level and quickly select and navigate them. In addition to quickly navigating to blocks, the Outline visualizes where variables are used in your Notebook. When you select a block in the Outline, a bright blue highlight will appear around the block in the Notebook. If that block is a variable instanced within another block, a duller blue highlight will appear on the block that references it. ![](https://learn.ntop.com/wp-content/uploads/2025/05/Outline-navigation.gif) ## Custom Blocks Custom blocks can be created by setting up the Notebook in a specific format. To accomplish this, define the important parameters as inputs and the desired outcome as the output. Custom blocks are shareable, and we recommend saving them with a name that begins with CB, the acronym for “custom block”. Once you add them to your **My Blocks** folder, you can search them in nTop, as you would any native block, by typing the block's name into the search bar. # Follow Along: Sphere-Cube and Gear Source: https://docs.ntop.com/lessons/ntop-foundations/follow-along-sphere-cube-and-gear This lesson walks through two basic workflows in one Notebook: * The first workflow creates a simple Sphere-Cube geometry using nTop primitives. * The second workflow brings in a CAD file of a gear, shells it, and then adds escape holes. Follow Along: Spherecube and Gear [https://www.youtube.com/embed/ECNsyzVPYMU](https://www.youtube.com/embed/ECNsyzVPYMU) > **Transcript** > > In this video, we'll create two simple workflows in one notebook. The first one is the sphere cube, created from primitives in nTop. In the second workflow, we'll bring in a CAD file of a gear, shell it, and then add in some escape holes. > > For the sphere cube, as the name suggests, we'll need to grab a **Cube** block and a **Sphere** block from the Create tab. Let's rename this section “sphere cube.” We want to place the sphere at one corner of the cube, so we can do this by clicking into that center point input and moving the object to our desired location. We could also type in the location into the input to be more precise, but if we at any point in time change the size of the cube, the sphere will not come along with it because we haven't established any sort of dependence between the two objects. > > To do this, we have to go into the property panel of the cube and then select a property chip, such as the max point or the mpoint, and drag that into our center point input of the sphere. Now if we change the size of the cube and click out of it to compute, then the sphere will come along with it. We could also make sure that the ratio of the size between the two objects stays the same, for example, having the radius be half the size of the cube. To do this, we can type directly into that input, divide to grab the **Math** block, and then for the operand A, use the size of the cube. We'll rename it to “cube size” and then put it into operand A and divide by two. Now no matter what size we change it to, the ratio will stay the same. > > Let's now change the display color of the two objects, and then we'll merge them together using the **Boolean Union** block from the Modeling tab. We can just grab those two blocks and drag them into the bodies list in the **Boolean Union** block. Add a blend radius of two, and then we'll also make this a variable and call it “sphere cube.” > > If we isolate the cube that was the original primitive that we made, we can see that the color is pink. Isolating the sphere, the color that we just changed it to, a screen, is still there. This is because nTop doesn't delete anything that we've created, so with any new operations that we're doing with objects that we've created, we are adding another object to the notebook. We'll now collapse this sphere cube block and turn off its visibility, and then add a new section called “gear” to start our new workflow. > > The first step of this workflow is to import our part by dragging and dropping it into the instance. The part isn't visible on the screen right now, so we can press Z on the keyboard to bring it into view. We'll then double click on the part to select the whole body, then right click and choose Convert to Implicit Body. We'll rename this variable “gear,” and since we don't need to work with any of the parameters in these two blocks, we can collapse them now. > > To shell this part, we need to grab the **Shell** block from the Modeling tab. We'll drag in the gear implicit body as the input, and we'll use a thickness of 1 mm in the inward direction. If we isolate this shell by pressing I on the keyboard with the block selected, and then press X to see the section cut, we can see that we now have this gear part that is shelled out. So we can go to the block, right click, and make this a variable and name it “shelled gear.” > > Next, we'll add holes on this top surface of the shelled gear. To do this, we'll create a series of cylinders which we will then use to Boolean subtract from the shell we've just created. So we'll grab that **Cylinder** block from the Create tab, and we can play around and change the location of it by clicking into each input and then using this gimbal to drag the cylinder to the location that we want. Let's also change the radius to 2 mm, and we can keep adjusting Point 1 and Point 2, which are the start and end points of the cylinder, until it's at the position we want. Then clean up these numbers a little bit. > > Now to repeat the cylinder about the center of this gear, we will use the **Polar Array Body** block from the Modeling tab. I will put in 9 counts with 40° angular spacing between each body, then define the axis by double clicking into the axis input and select axis. We don't have to do anything here because if we turn on the visibility of that axis, we can see that it's already at the center where we want the cylinders to revolve around. So we can go ahead and right click on the **Polar Array Body** block, make it a variable, and call it “cylinders.” > > Then we'll grab that **Boolean Subtract** block and bring in our cylinders as the subtraction body that we will subtract from the shelled gear, the primary body. Now we've created those holes, but we also need to make sure that these cylinders aren't also subtracting away any other parts of the shell other than where we want those holes. So we can adjust the length of these cylinders to be a little bit shorter and maybe with a smaller radius. We can make this radius a variable as well if we want to be able to come back and easily change their size, and we can call this “radius of holes.” > > Since we now have our shelled part with the escape holes, we can go to that **Boolean Subtract** block, right click, make it a variable, and then call this “final part.” If we want to, we can quickly check the percentage weight savings achieved with this workflow by going to the Lightweighting tab and adding this **Weight Savings** block to the notebook. All we have to do is bring in our final part as the lightweighted body and grab the initial gear implicit body for the original body. This tells us that this workflow reduced the weight of our part by 58.8%. > > If I want to be able to see the before and after side by side, I can go to the Utilities tab to transform and bring in this **Translate Object** block. I'll right click on the final part block and choose Remove Variable Contents, drag that content into the **Translate** block, and give it a vector value. In this case, I'll move it 50 mm in the positive Y direction and then press enter to compute. Then drag all of this back into the final part variable. I can go back and find my initial gear body, turn on its visibility, and also collapse all these blocks to better be able to see the whole workflow. The two parts can now be seen together side by side. > > If we for some reason want to fill the holes back in on the final part or want to use the fillings of these holes in another workflow, we can Boolean intersect together the shelled gear and the cylinders. This will show up where we have the initial part. So to move these fillings to where the final part is, we can again use the **Translate Object** block, and we'll grab it from the search bar. This time we'll use the same translation vector as last time, so we can go into the final part block, make that vector into a variable which I'll call “translate vector.” We'll bring that into our new **Translate** block and also drag in that **Boolean Intersect**. Now we can right click and make this whole thing a variable and rename it “hole fillings.” I'll isolate this block to only see it at the new location, turn the final part's visibility back on to check, and the fillings are now where the holes are. Let's turn the visibility of the original gear back on, and pressing X on the keyboard, we can look at the cross-section of both bodies at the same time. > > [0:00](https://www.youtube.com/watch?v=ECNsyzVPYMU) Introduction to the Spherecube Workflow > [0:50](https://www.youtube.com/watch?v=ECNsyzVPYMU\&t=50s) Establishing Object Dependence > [2:21](https://www.youtube.com/watch?v=ECNsyzVPYMU\&t=141s) Merging Objects with Boolean Union > [3:30](https://www.youtube.com/watch?v=ECNsyzVPYMU\&t=210s) Introduction to the the Gear Workflow > [3:40](https://www.youtube.com/watch?v=ECNsyzVPYMU\&t=220s) Importing and Converting CAD > [4:08](https://www.youtube.com/watch?v=ECNsyzVPYMU\&t=248s) Shelling the Gear Part > [4:45](https://www.youtube.com/watch?v=ECNsyzVPYMU\&t=285s) Creating and Polar Arraying Escape Holes > [7:35](https://www.youtube.com/watch?v=ECNsyzVPYMU\&t=455s) Comparing Weight Savings Please download the CAD file below to follow along with the second workflow. You can download our PDF guide below if you prefer to walk through this lesson in PDF format. [101\_19\_Gear.x\_t](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/Models/101_19_Gear.x_t) [101\_19\_ Follow Along — Spherecube and Gear.pdf](https://files.learn.ntop.com/Courses/101%20nTop%20Essentials/PDFs/101_19_%20Follow%20Along%20--%20Spherecube%20and%20Gear.pdf) # How does nTop work? Source: https://docs.ntop.com/lessons/ntop-foundations/how-does-ntop-work ## **The nTop Approach – Building Design Intelligence** When using nTop for conceptual design, you are **encoding your design logic** into a set of parameters and algorithms **that drive the design**, rather than defining the geometry of an object. In CAD, you use drawings to create geometry, whereas in nTop, you're using functions to construct a **design space that enables** **rapid iteration, analysis, and optimization**, ultimately leading to better solutions and faster development cycles. ### **From Requirements to Computational Logic** Your workflow in nTop follows a different pattern than traditional CAD: 1. **Start with Requirements:** Define what needs to be achieved, not how it looks 2. **Decompose into Logic:** Break the problem into relationships and rules 3. **Build Parametric Relationships:** Connect parameters to create flexible behavior 4. **Validate and Iterate:** Test the design space, not just individual designs ### **The Notebook as Your Program** Think of your nTop notebook as **source code for your design**. You use blocks to compose functions, and the structure you create determines how data flows through your model. Also, every piece of data has a type (Curve, Body, Field, Number, etc.), and types guide how blocks can connect. This system helps prevent errors and makes complex logic more manageable. If you've written code or built formulas in Excel, the mindset is similar: you're encoding logic and establishing relationships to make your model flexible and reusable. **Key Principles:** * Every element can be parametric * Logic flows through connected blocks * Documentation travels with the model * Changes propagate automatically and reliably *** ## **The Mathematical Foundation – Signed Distance Fields** **What Are Signed Distance Fields (SDFs)?** At the heart of everything in nTop are **Signed Distance Fields (SDFs)**. These are the mathematical representations of geometry that store the distance from any point in space to the nearest surface. **Distance values are “signed” to indicate position:** * **Negative values:** Inside the geometry * **Positive values:** Outside the geometry * **Zero:** Exactly on the surface boundary ![](https://files.learn.ntop.com/lessons/how-does-ntop-work/SDF-Sphere.gif) ### **Why SDFs Matter** This mathematical representation gives nTop its unique capabilities: * **Parametric Flexibility:** Unlike mesh-based or B-rep modeling, fields are mathematically defined functions. Your models can “flex” and adapt to significant parameter changes without topological errors. * **Complex Geometry Made Simple:** Operations that are difficult in traditional CAD, like smooth blending between disparate shapes, geometry-driven texturing, and variable-density lattices, become straightforward with fields. * **Computational Efficiency:** Field operations are evaluated on-demand, giving you precise control over computational resources while maintaining model responsiveness. ![](https://files.learn.ntop.com/lessons/how-does-ntop-work/parametric-blade-1024x518.gif) ### **Everything Has a Field** Different geometric types interact with fields in unique ways: * **Point:** Volumeless—only positive distances in all directions * **Curve:** One-dimensional path—distance to nearest point on curve * **Plane:** Divides space into positive/negative half-spaces * **Profile:** Closed 2D shape with interior/exterior regions * **Primitive Bodies:** Full volumetric shapes with well-defined interiors ### Implicit Modeling Now let's see how it comes together in nTop's implicit modeling approach. [https://www.youtube.com/embed/5DJnG5of9B0](https://www.youtube.com/embed/5DJnG5of9B0) > **Transcript** > > In nTop, we generate geometry with implicit modeling, a technique that defines shapes using mathematical functions rather than surface boundaries. Implicit bodies are represented by functions with Signed Distance Fields or SDFs. The function is evaluated at all points in space, and the SDF represents the number that's returned: negative inside the body, positive outside, and zero at the body's surface. Later modeling courses will dive deeper into the intricacies of SDFs and how we can manipulate them to adjust our implicit models. Unlike Boundary Represented or b-rep models that represent solids with discrete features like edges and fillets, implicit bodies define entire volumes with a single implicit function. As a result, the geometry is continuous and resolution-independent. So you get robust, watertight shapes with no faces to fail and no edges to break. This makes implicit bodies incredibly fast and stable to iterate upon. You can change inputs, dimensions, logic, relationships, and the implicit bodies intelligently update to match your design intent without fragile dependencies or cascading failures. Whether you're designing a feature, a full part, or an entire system, the speed of iteration stays the same. In addition to being geometrically adept, implicit bodies also couple seamlessly with simulation results because of their shared, field-based nature. This empowers engineers to achieve more optimal and higher performing designs faster. You may wonder when you should use implicit modeling and how it's different from other forms of geometry you might be more familiar with. Traditional CAD tools excel at creating precise geometry, but often fall short during the design process when there's a need to explore multiple design variations quickly, automate repetitive tasks, optimize designs based on performance data, create complex parameter-driven geometry, and document design intent and decision-making. > > Implicit modeling allows us to achieve rapid exploration of design alternatives, automation of repetitive design tasks, integration of analysis results into the design process, creation of reusable parametric components, and optimization via rapid iteration through the design space. Implicit modeling fundamentally changes what's possible in computational design. With nTop, you can focus on design intent over modeling constraints, explore more design iterations, and create geometry that was previously impossible. > > [0:00](https://www.youtube.com/watch?v=5DJnG5of9B0) Implicit Modeling in nTop > [0:35](https://www.youtube.com/watch?v=5DJnG5of9B0\&t=35s) Advantages of Implicit Bodies > [1:02](https://www.youtube.com/watch?v=5DJnG5of9B0\&t=62s) Implicit vs. Traditional CAD > [1:28](https://www.youtube.com/watch?v=5DJnG5of9B0\&t=88s) Benefits of Implicit Modeling ## **The nTop Advantage – Why This Approach Matters** ### **1. True Parametric Freedom** Traditional CAD systems often struggle with significant parameter changes. Change a hole diameter, and features might fail. Modify a fillet, and downstream operations break. **nTop's field-based approach eliminates these failures.** Since geometry is represented mathematically rather than as fixed topology, your models remain robust under dramatic parameter changes. ### **2. Design Space Exploration** Instead of creating individual design files, you build **design spaces**—parametric models that can generate many valid variations. **nTop Approach:** * Create one parametric notebook * Generate unlimited design variants * Systematic exploration of the design space * Automated optimization and analysis ### **3. Engineering Knowledge Preservation** Your nTop notebooks become **repositories of engineering knowledge**. The logic, constraints, and design rules are captured in executable form, not just as static documentation. **What Gets Preserved:** * Design rules and relationships * Manufacturing constraints * Validation logic * Performance requirements * Design rationale and decision history *** # Navigating the Interface Source: https://docs.ntop.com/lessons/ntop-foundations/navigating-the-interface ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Tour-of-nTop.png) The image above shows the nTop User Interface. Use the accordion folders below to learn about the different components of the UI. > **1. Notebook** > > The notebook on the left keeps a record of your modeling operations. You will work entirely within this notebook to build your workflow and manipulate the design parameters of your parts. The notebook allows you to: > > * Title your notebook > * Add a notebook description > * Create/Rename sections to organize your notebook > * Use the search bar to quickly find and add blocks > * Add comments to individual blocks > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Notebook-demo.gif) > **2. Ribbon** > > The ribbon contains blocks for performing different operations in nTop. You can navigate the ribbon by clicking on the tabs to change block menus. You can also use the arrows to reveal additional tabs. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Ribbon.gif) > > The ribbon tabs can be configured under: **Menu>Settings>Ribbon** > > Here you can toggle which tabs of the ribbon are visible in the nTop instance by turning on/off the checkboxes. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Ribbon-Settings.png) > **3. Viewport** > > The viewport is where you can see the visual rendering of the geometry you've created by working in the notebook. The main controls for operating in the viewport are: > > * **Right Click:** Press and hold right-click while moving your mouse to rotate > * **Middle Mouse:** Press and hold the middle mouse button to move > * **Block Highlighting:** Select a block from the notebook to highlight it in the notebook and viewport > * **Toggle Block View:** Toggle the white circle icon next to a block to turn on/off its visibility > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Viewport-controls.gif) > **4. View Cube** > > The view cube shows the XYZ axis indication and has different options for viewing your geometry: > > * **Camera Settings:** Choose to view your part in either Perspective or Orthographic. Note: The ruler is unavailable in Perspective view > * **Rotation Setting:** Choose between Turntable and Tumbler for how your part rotates in the viewport > * **Show Grid:** Toggle the grid on/off in the viewport > * **Show Ruler:** Toggle the ruler on/off in the viewport > * **Named Views:** Quickly jump between preset views or create your own view. To create your own, select “New Named View” when your part is oriented correctly and type in a name for the view. > * **Capture Image:** Use this tool to screenshot your geometry and save the image to your machine. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Viewcube-controls.gif) > **5. Resolution** > > Resolution settings are located at the bottom right corner. We recommend working in low or medium res, and using high or highest res only to check your geometry. Changing the resolution only affects the loading time and the quality of the rendered image on the screen, not the actual part. > > ![Resolution Settings](https://learn.ntop.com/wp-content/uploads/2025/10/resolution-settings-1.gif) > **6. Log Panel** > > The arrow to the right of the resolution settings expands and collapses the Log Panel, which shows timestamps of your operations, as well as how long processes are taking to complete. You can jump to the most recent operation using the “Last” button, or you can clear the log using the “Clear” button. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/log.gif) > **7. Status Bar** > > If a process is in progress, the Status Bar on the left side would appear. By hovering over it, you can see the related block's name, the process being executed, and the percentage completion. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/status-bar.gif) > **8. Menu** > > The Menu is located in the top left corner of the nTop window and can be opened by clicking the three horizontal lines button. This contains multiple operations that are divided into several sections: > > * **File**: Create/Open/Save files using the applicable options. The “Import” option is used to import custom blocks, and the “My Blocks Folder” opens the custom blocks folder. > * **Edit:** Undo/Redo/Cut/Copy/Paste/Paste with References are all available for operations performed in nTop. The “Select All Visible” option selects all geometry in a notebook. > * **View:** Contains options and settings for how geometry is presented in the viewport. This menu has some of the same options as the view cube, as well as some important additional controls. You can use [Precise Render](https://support.ntop.com/hc/en-us/articles/8288161848723-What-is-a-Precise-Render) to generate an accurate still frame of your geometry and to take screenshots. The other tools that aren't covered under view cube are explained in *View Tools*. > * **Settings:** Opens the nTop *Settings* menu. Here you can configure your nTop platform using the different settings tabs. This includes key settings like [Show Beta blocks](https://support.ntop.com/hc/en-us/articles/360062442113-What-are-beta-blocks), Enable GPU acceleration, and configuring the ribbon. You can also change the global units for your workflows and customize display options. > * **Home:** Returns you to the nTop home page. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Menu.gif) > **9. Left Side Panel** > > The Left Side Panel can be opened/closed by clicking the white/black rectangle icon next to the menu. This panel contains two tabs: Outline and Imports. > > * **Outline:** The *Outline* is a list of all top level blocks in your notebook (i.e. It does not include blocks nested inside another block) that are separated by your notebook sections. When you select a block from the list, it is highlighted in bright blue. If this block is used downstream in another block, the parent block will be highlighted in a darker blue. > * **Imports:** The *Imports* tab is used to manage custom blocks in your workflow. Any custom blocks that have been imported will appear at the top under the Custom Blocks drop-down. You also have the options to create a custom block, import a custom block, and remove unused custom blocks that are not being used in your notebook or are outdated. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Left-panel.gif) > **10. Right Side Panel** > > The Right Side Panel can be opened/closed by clicking the white/black rectangle icon in the top right corner of the nTop window. This panel contains three tabs: *Information*, *Display*, and *Tools*. > > * **Information:** Displays block information based on which block is selected. Here you can see the block description, input descriptions, and output information. There is also a *Learn More* button that will open the selected block's documentation file for more information. > * **Display:** Contains options for changing the selected body's appearance using color and transparency. > * **Tools:** This tab is covered under *View Tools*. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Right-Panel.gif) > **11. In-App Options** > > * **Update Button:** If you are not working in the latest version of nTop, you will see *Update Available* followed by a green download symbol. If you are on the latest version, the download symbol will appear gray. > * **Information Button:** The question mark icon contains: > * *About:* Information regarding your current software version. > * *Documentation:* Opens the nTop internal documentation > * *What's New:* Opens the most recent release notes for the current software version > * *Support:* Opens the nTop Support site. This contains helpful articles, release notes, installation information, and more. > * **User Icon**: Shows user information and a link to access *Account Settings*. This also contains a *Logout* option. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/In-App-Options.gif) > **12. View Tools** > > The View Tools sidebar contains several helpful tools for analyzing your geometry: > > * **Field Viewer:** The *Field Viewer* allows you to visualize a field. You can change the plane of visualization using the colored plane icons. The following options are available to analyze the field: > * *Opacity:* Changes the opacity of the visualized field > * *Isolines:* Option to turn on/off the isolines > * *Interval:* Changes the spacing between the isolines > * *Custom Range:* Option to manually specify the value range of the field > * *Min Value:* Minimum value when a Custom Range is applied > * *Max Value:* Maximum value when a Custom Range is applied > * *Colormap:* Option to change the color scheme of the field > * *Probe Values:* Toggles the ability to see field values when moving the mouse over the field > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Field-Viewer.gif) > > * **Section Cut:** This tool is used to cut geometry at a specified plane. You can change the plane of visualization using the colored plane icons. The following options are available when performing a section cut: > * *Mode:* Choose between performing a section cut on a specific body (*Selection*) or on all visualized bodies that intersect the plane (*Global*) > * *Display Style:* Changes the display style of the sectioned body > * *Show Volume Mesh Elements:* If the body is a volume mesh, you can toggle the visualization of the 3D internal volume elements > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Section-Cut.gif) > > * **Surface Analysis:** The Surface Analysis tool has three different modes you can use to analyze the surface of your geometry: > * *Overhang Angle:* This mode is used to identify regions in your model where angles may exceed the printable threshold, helping you inspect the design for additive manufacturability. It has the following options for inspection: > * *Angle:* The lower value of the angle analysis > * *Threshold:* The range between the lower and upper angle values being evaluated > * *Build Direction:* Specifies the build plane normal direction > * *Gradient:* Option to display the color scheme as gradient or not > * *Draft Angle:* This mode visualizes areas of your model based on a specified draft angle relative to a pull direction, helping you verify that your design meets manufacturability requirements. It has the following options for inspection: > * Angle: The specified angle to evaluate the geometry > * Pull Direction: The plane used to specify the angle relative to the geometry > * Gradient: Option to display the color scheme as gradient or discrete > * *Curvature:* This mode is used to analyze the curvature of a geometry's surface. > * *Metallic:* Renders the geometry with a shiny, reflective surface, which improves the clarity of curvature and surface quality. > * *Zebra:* Displays a series of alternating black and white stripes on a surface. The reflection patterns of these stripes help visualize the surface's curvature. You can select from three buttons to choose the orientation of the stripes and use a slider to adjust their spacing. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Surface-Analysis.gif) > > * **Measure:** The *Measure Tool* lets you directly measure distances between two points within your 3D model. This feature is ideal for quick inspections and supports interactive visualization of distances along global X, Y, and Z axes. The total distance and XYZ dimensions appear in the Right Side Panel, and you can check the “Show XYZ” checkbox to display dimension lines for X, Y, and Z in the 3D view. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Measure-Tool.gif) > **13. Controls and Shortcuts** > > [https://www.youtube.com/embed/pIqm0rr6qXs](https://www.youtube.com/embed/pIqm0rr6qXs) > > > **Transcript** > > > > To help you get the most out of nTop, we will introduce the controls and tools for manipulating the model view, as well as useful keyboard shortcuts. In our software, you can zoom in and out using the mouse scroll, or by holding control and right-click. To orbit around the center of the object, right-click and hold. To pan, click on the scroll wheel and hold, or hold shift and right-click. > > You can also adjust your view using the view cube. The view cube is completely interactive, and you can orient your views with a click on a labeled face, edge, or corner and rotate your object either counterclockwise or clockwise by using these arrows. > > There are two different camera settings you can explore: orthographic, which is the default setting, and perspective. When you are in orthographic view, objects don't have depth. For example, from whichever view or angle we're in, these two tires will look to be about the same size no matter how close or far away we are from them. While you're in this view, you can use the ruler at the bottom to roughly measure any features of the part. If you're working on something like a small screw or bolt on this tire, you might experience something called the CAD goggles where you zoom in too far and lose sense of how big things are. But with perspective view, it gives the effect that the farther away the object is, the smaller it will look and vice versa, so it gives you a better sense of depth and helps you avoid CAD goggles. In this perspective, you can also zoom in, fly through these small holes, and work on small detailed areas of the model. > > There are also two different rotational styles: the turntable and tumbler. Right now we have the tumbler selected, and we can move and rotate the model to view it at an arbitrary angle. If you choose to use the turntable, the model's axes will always remain pointing up and down on the screen, and the camera will not be able to rotate all the way around the object. > > Let's move on to keyboard shortcuts. Useful hotkeys and keyboard shortcuts in nTop can be categorized into ones that are for views, blocks, or for working with files. Let's start with the keyboard shortcuts you can use when you're manipulating your views in nTop. You can find all your viewing tools on the menu bar at the top left under View and their keyboard shortcuts associated with them. While working with your model, there might be times when you lose sight of your part or while working zoomed in too far. You can reset the view by pressing Z on the keyboard to bring your part back into view at a reasonable distance. > > Make sure the Block's visibility is toggled on when using the zoom to select it. You can toggle the visibility of a Block on and off by pressing V on the keyboard while the Block is selected. To turn on the display grid, press Alt and G together on the keyboard. To do the same for the ruler that's located at the bottom, use Alt R. To see this section cut view of a part, select the part you want to cut, press X on the keyboard, then determine your location and orient the plane. To open up the field viewer, select the Block and press F on the keyboard. Toggle off the visibility of your Block, and you'll be able to see the field of the implicit body that you've selected. To see a precise high resolution render of the part or to do a high resolution image capture, use Control H. > > Next, we'll go over the shortcuts you can use while working with blocks. To be able to quickly search for blocks you need, use Control L as a shortcut to the search bar. When importing a part, rather than searching for an Import Block, you can also press Control I on the keyboard to open up your files from which you can choose what you'd like to import. To isolate the view of a Block, select the Block, press I on the keyboard, and this will turn off the visibility of all other blocks in the notebook. > > You can select multiple blocks at the same time by holding control and left-clicking. This will highlight them in blue. For any blocks that have their visibility toggled on, pressing Control and A will select all those blocks. To collapse or open any Block, instead of clicking on the dropdown, you can press space bar on the keyboard after selecting the Block. You can create a variable by either right-clicking and choosing make variable or just simply by pressing Control M with the Block selected. > > To copy a Block or blocks, you can select by left-clicking on it or by holding control and selecting multiple blocks. With those blocks selected, either right-click and choose copy selection or press Control + C on the keyboard, or under edit, select copy. You can paste both within the same or different instance of nTop. When you're pasting within the same instance, the pasting is much like duplicate. It'll create a copy of the Block, but with the pasting option, you can paste it anywhere in the root of the notebook or in the input of a Block. When pasting, you're given two options: paste and paste with references. If you're simply pasting a Block in another notebook, external references associated with that Block will not carry over. When pasting with references, however, any variables associated with that Block will be brought over as well. > > The last few shortcuts are for when you're working with your nTop file. All the file tools are under the File dropdown in the menu bar and these are labeled with their keyboard shortcuts. While working, don't forget to save your file by pressing Control S on the keyboard. If you want to create a new nTop file, use Control N. To open an existing nTop file, use Control O and select the nTop file you would like to open. You can change the name of a file or make a duplicate by using Control Shift S together to save as. And lastly, once you're done using nTop, press Control Q to quit. > > ![](https://files.learn.ntop.com/lessons/ntop-essentials/hotkeys-update.jpg) # Overview Source: https://docs.ntop.com/lessons/ntop-foundations/overview Welcome to nTop Learn! This foundational course is designed to establish the essential knowledge and skills you need to begin developing your nTop expertise. By completing these lessons, you'll build a solid foundation that will support your continued growth and success with nTop. Here's what you'll accomplish in this course: 1. Learn **what nTop is** and how it empowers designers 2. Ensure **software access** and review your tracking, learning, and support resources 3. Dive into nTop and **build your first workflows** 4. Understand **implicit modeling** and how it unlocks faster design and better performance Upon completion of this course, you'll have the foundational understanding necessary to confidently advance through more specialized nTop training and begin applying these powerful tools to your own design challenges. > **[Why do engineers use nTop?](/lessons/ntop-foundations/why-do-engineers-use-ntop)** > **[How does nTop work?](/lessons/ntop-foundations/how-does-ntop-work)** > **[What can you do with nTop?](/lessons/ntop-foundations/what-can-you-do-with-ntop)** ### Getting Started with nTop > **[Accessing the Software](/lessons/ntop-foundations/accessing-the-software)** > **[Navigating the Interface](/lessons/ntop-foundations/navigating-the-interface)** > **[Basics of nTop](/lessons/ntop-foundations/basics-of-ntop)** > **[Follow Along: Sphere-Cube and Gear](/lessons/ntop-foundations/follow-along-sphere-cube-and-gear)** # What can you do with nTop? Source: https://docs.ntop.com/lessons/ntop-foundations/what-can-you-do-with-ntop ## ****Your nTop Mindset**** ### **Where nTop Excels** * **Compression of Design Timelines**: Organizations using nTop report dramatic reductions in design cycle time. * **Complex Geometry Made Practical**: nTop excels where traditional CAD struggles in creating cutting-edge complex geometries. * **Build reusable engineering components:** Define custom blocks for recurring design elements—airfoils, fuselage sections, turbine blades, ducting—that capture domain knowledge and parameterization patterns. These components become building blocks for rapid concept generation across multiple programs. * **Integration with Modern Workflows**: nTop notebooks integrate naturally with Optimization algorithms, AI and machine learning workflows, High-performance computing, and Automated manufacturing processes ![](https://files.learn.ntop.com/lessons/what-can-you-do-with-ntop/Aircraft.gif) ### **Essential Concepts to Remember** 1. You're building design spaces, not just shapes 2. Everything is parametric and connected 3. Fields are your new design primitive 4. The notebook is your engineering knowledge repository 5. Think in terms of logic and relationships, not just geometry ![](https://files.learn.ntop.com/lessons/what-can-you-do-with-ntop/wing-diagram-1024x581.gif) ### **What This Means for Your Work** * **Faster iteration** through parametric flexibility * **More exploration** of design possibilities * **Better optimization** through systematic approaches * **Knowledge preservation** that outlasts individual projects * **Integration readiness** for AI and automation workflows This helps you to use nTop anywhere you need conceptual design, iterative development, production optimization and you want to accelerate your engineering workflow. ## Preparing for the Journey You've now been introduced to nTop's fundamental paradigm shift from traditional CAD. As you progress through this course, remember that learning nTop isn't just about learning new tools, instead it's about **adopting a new way of thinking about design**. You understand that: * nTop captures design spaces as executable code, not individual designs * Signed Distance Fields (SDFs) provide the mathematical foundation * Field-based modeling enables unprecedented parametric flexibility * Your role is to encode engineering knowledge into computational models * This approach dramatically accelerates design iteration and exploration **Next Steps:** In the following lessons, you'll learn the practical skills to implement this philosophy, starting with nTop's interface and basic modeling operations. # Why do engineers use nTop? Source: https://docs.ntop.com/lessons/ntop-foundations/why-do-engineers-use-ntop nTop is an advanced design and simulation software that fundamentally changes how engineers generate, explore, and validate complex geometry. Following features differentiate nTop from traditional design tools: 1. **Unbreakable parametric models for accelerated iteration:** Unlike traditional Computer-Aided Design (CAD) tools, which rely on boundary representation (B-rep), nTop uses implicit modeling. This allows for broad parametric changes without the geometry breaking or failing to rebuild. By eliminating geometry fragility and meshing delays, nTop reduces the time required to generate and evaluate thousands of design variants. You can explore a vast design space of options systematically, leading to faster convergence on optimal designs. 2. **Integrated simulation for smarter prototyping:** nTop enables meshless analysis for integrated structural (FEA) and aerodynamic (CFD) analysis. This eliminates the time-consuming bottleneck associated with traditional meshing and simulation tools, allowing you to get physics insight instantly without lengthy meshing, setup and simulation steps. This simulation-in-the-loop exploration allows you to build a superior understanding of the design space and key tradeoffs (aerodynamic, structural, performance)and make design decisions with high confidence. 3. **Logic-driven workflow for scalable engineering:** nTop captures engineering intent as reusable design logic similar to an executable code with input parameters that can be varied to create various design configurations. This transforms manual iteration into systematic intelligence gathering, making workflows more efficient and repeatable for large-scale projects. ![](https://files.learn.ntop.com/lessons/why-do-engineers-use-ntop/image-3-890x1024.png) ![](https://files.learn.ntop.com/lessons/why-do-engineers-use-ntop/image-2-881x1024.png) To help you understand what makes nTop unique and how it enables rapid iteration for high-performance designs, let's hear directly from our founder who will explain the vision and principles behind the platform. [https://www.youtube.com/embed/ok7BSuSLh2U](https://www.youtube.com/embed/ok7BSuSLh2U) > **Transcript** > > nTop is a company. We're here, based in New York City. nTop is a software that we release for engineers to model some of their most complex designs, from, you know, systems-level aircraft models all the way down to like really detailed heat exchanger models. You know, when I started nTop, there was a mismatch in the tools that we as engineers use to design and iterate through a design and come up with what a design looks like, what a design should be, versus the tools that we use to like detail out and draw a design. And so when you look at the tools that we use, you know, traditional CAD software, traditional simulation finite element based simulation tools, you know, all those tools are incredible when you need to like detail out a design. Like, those are the best drafting tools ever. But like, if you're trying to figure out what the design is and iterate through a design and, you know, maybe you have an aircraft where you're parameterizing different sweeps of a wing, trying to actually vary those and calculate the performance for each design point is painful and slow. And so we built nTop to remove that bottleneck, and we did so on this really amazing new technology that you're going to learn about today called implicit modeling. > > One of the main problems that we've built nTop to solve is, you know, you have this like brilliant idea of how you would parameterize a design. You know, maybe it's an aircraft and you're trying to say, “Okay, I have this inlet duct design. I want to see what happens if the inlet duct is in a certain location with respect to the fuselage.” Or maybe it's like a heat exchanger and you're like, “Okay, I have these inlets to the heat exchanger. I have some set of tubes that are going through that are twisting around.” And, you know, there's hot fluid in one, cold fluid in another. But like, what is the size of the tubes? What's the orientation of the tubes? Where should the inlets go? Should they be together on the top? Should they be on the sides? And you want to explore all of that design space. nTop is like the best tool for constructing that model and very rapidly understanding the performance of each of those design points. And so that's like the core problem that we built nTop to solve is very quickly and easily building up parametric design spaces and then exploring those parametric design spaces to understand performance of each of those, you know, sets of design parameters that come together so that you can hone in on what those design parameters are and do all of your detailing out from there. > > The advice I would give for you as a new user to nTop is think of nTop like you're building a program, and the 3D geometric solid model that comes out is the result of that program. So you're building in a set of logical operations to construct that model, and the more you could lean into like the implicit modeling techniques of constructing those geometric objects, how you fillet and blend, you know, how you parameterize a two-panel wing, and how you generate a wing from a set of, you know, air foil profiles, how you use implicit modeling techniques to generate lofted surfaces, the more you lean into that, you're going to build up these superpowers of nTop knowledge which allow you to build these models that are rock solid, 100% robust, and really, really fast to iterate through. So I want to thank everybody for joining and picking up nTop for the first time. It's always amazing to see all the incredible things that you're going to build and your learning journey, and, you know, as usual, if you're stumped on anything, reach out. We're here to help and can't wait to see what you make. > > [0:00](https://www.youtube.com/watch?v=ok7BSuSLh2U) What is nTop? > [0:46](https://www.youtube.com/watch?v=ok7BSuSLh2U\&t=46s) Problems nTop Solves > [1:40](https://www.youtube.com/watch?v=ok7BSuSLh2U\&t=100s) Advice for New nTop Users # Automating workflows and AI applications Source: https://docs.ntop.com/lessons/ntop-implicit-foundations/automating-workflows-and-ai-applications A reusable workflow is a defined sequence of design steps that produces consistent results from a set of inputs. In nTop, that workflow lives in the Notebook: Inputs define what can change, blocks encode the design logic, and Outputs return results such as geometry, a mesh, mass, or pressure drop. Think of automation in two stages: 1. Build and prepare the workflow in the graphical user interface (GUI)**.** Create and validate the model, then define the Inputs and Outputs needed for automation. 2. Run the workflow headlessly\*\*.\*\* Supply new input values, execute the Notebook without the GUI, and collect the resulting outputs. A spreadsheet is a close everyday comparison. You write the formulas once, and from then on, changing a cell recalculates everything associated with that change. Nobody re-derives the math for each new set of numbers. An nTop Notebook works the same way, except it recalculates the geometry. Once you see the Notebook as a function — inputs in, geometry and numbers out — the next step is to move beyond a person manually supplying those inputs. A workflow that can reliably produce a design from a defined set of inputs can also be driven programmatically and scaled across many runs. This lesson introduces the two capabilities that make that possible: The nTop CLI (headless) interface enables nTop Notebooks to run without the GUI, while distributed compute enables those Notebooks to run on remote compute infrastructure. We will go deeper into the anatomy of the nTop Notebook and how to work within it in the next course. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/labeled_nTop_notebook.png) *nTop Notebook with labeled notebook components* ## nTop CLI The nTop CLI interface runs an nTop Notebook without the graphical user interface. It uses the same modeling engine as the nTop application but executes the workflow through a command-line interface. Notebooks can be launched from a terminal or scripting language such as Python, enabling workflows to run unattended, in parallel, and at scale across available compute resources. Headless execution communicates with the Notebook through JSON files—plain-text files that store named values in a format programs can read and write. Think of the JSON file as an order form: the Notebook's Inputs section defines the fields, and the JSON file supplies the value for each input. nTop Automate can generate this input template directly from the Notebook, so you do not have to build it from scratch. Results are returned the same way. The Notebook's Outputs—such as mass, pressure drop, or the path to an exported mesh—are written to an output JSON file. This “JSON in, JSON out” structure makes the workflow easy to scale: a 200-variant design study is essentially 200 sets of inputs passed through the same Notebook. Three things become possible once a script supplies the inputs: * Repetition stops costing time. Two hundred design variants take the same amount of your attention as one. Engineering effort shifts entirely to building the workflow well. * nTop becomes one node in a larger pipeline. Any tool that can write a file and start a process can drive a Notebook — Python, Matlab, a shell script, a commercial Design of Experiments (DOE), or Multidisciplinary Design Optimization (MDO) platform. nTop Automate is as much an integration mechanism as an automation one. * The workflow becomes callable by something other than a person. A script is the simplest example, but the same interface can also be driven by a design study, a cloud simulation service, or an AI agent — all of which you'll see later in this lesson. To make this possible, you need a parametric nTop Notebook with a defined set of inputs and outputs. A workflow that depends on a person to make decisions or manually intervene along the way cannot be reliably handed off to a script. We won't set up an Automate run in this lesson — that will be covered in a later course. For now, the important concept is understanding what becomes possible once a workflow can run without manual intervention. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/ntop%20automate%20simple%20diagram.png) *An example flow diagram of how to automate nTop* ### Running the other direction: Run Command Automation does not only run from outside nTop. The **Run Command** block, found in the Utilities tab under System, allows a Notebook to execute an external command and use the returned output. This means a workflow can call a solver, a sampling script, or a cloud API partway through a build, then use those results to drive the subsequent geometry. These two directions can work together. A script can drive nTop from the outside while **Run Command** connects to external tools from within the Notebook. This two-way exchange is the foundation of the pipelines you'll see later in this lesson — allowing an nTop Notebook to sit within a larger design loop, rather than simply at the beginning of one. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/run-command-external-tools-diagram.png) *This diagram shows how the **Run Command** block utilizes temporary files to transfer data between nTop and external tools* ## Scaling Out: Distributed Compute Automating a workflow removes the person from the loop. It does not, on its own, speed up the loop. Consider the arithmetic: if each design variant takes ten minutes to generate and simulate, a 500-point design study run sequentially takes about three and a half days. The workflow is not the problem—the wall-clock time comes from running each variant one after another. Distributed compute changes what that number depends on. Run 100 variants simultaneously, and the same study finishes in under an hour. The relevant question shifts from “how fast is one run?” to “how many can run at once?” Because nTop Automate is headless, it distributes cleanly. A few things make this practical: * nTop Distributed Computing Framework provides ready-to-use orchestration tooling that connects your laptop to scaled and distributed on-prem compute. * nTop Automate for Linux ships as a container image, so you can spin up an identical environment on any machine that runs Docker or Podman—a cluster node, a cloud VM, or a CI pipeline. Each running container requires its own nTop Automate for Linux license while it's active. * GPU-accelerated blocks work in the container, including Flow Analysis (LBM), given an NVIDIA GPU and the NVIDIA Container Toolkit. * Cloud hosting is available through Rescale, either as a virtual desktop or as batch cloud computing. This scale is not theoretical. Working with CoreWeave's GPU cloud, nTop generated 12,000 large-eddy simulation CFD runs across 2,400 distinct fixed-wing UAS planform geometries — 10,000 of them completed in 32.2 hours — in the context of NASA's CFD Vision 2030 Grand Challenge. Doing that serially was never an option; the whole result is a statement about parallelism. Keep one thing in view as you scale: throughput is only as good as your worst variant. A study that generates 500 designs but breaks on 100 of them has not produced 500 data points. It has produced 400 data points and 100 gaps, and someone has to go find out why. This property matters most for what comes next. ## nTop and AI Two distinct things get called “AI in engineering,” and they place very different demands on your geometry. It is worth separating them. ### 1. Generating data to train AI models A surrogate model is trained on data from a more expensive process — often simulation results — to predict performance without running that process from scratch. Once trained, it can make predictions in milliseconds that might otherwise take a solver hours. For simulation-trained surrogates, the challenge is generating those examples: thousands of designs may need to run successfully without human intervention. Traditional CAD can introduce geometry failures that interrupt automated sweeps. Implicit modeling changes that equation, making it possible to generate large numbers of valid design variants and the simulation data needed to train a surrogate model. Three examples of what this looks like in practice: Luminary Cloud — automated design space exploration. An nTop pipeline sampled five wing parameters (NACA airfoil series, sweep angle, taper ratio, winglet bend angle, and root chord to wingspan ratio) using Latin Hypercube Sampling. For each design point, nTop Automate generated the geometry and a CGNS volume mesh with boundary conditions applied, and **Run Command** dispatched the CFD to Luminary Cloud through its Python SDK. A 200-design sweep produced 3,400 individual CFD runs in under six hours — a dataset built specifically to be usable as surrogate training data. [https://www.youtube.com/embed/\_V6wFFukF0s](https://www.youtube.com/embed/_V6wFFukF0s) PhysicsX — a single pipeline from geometry to prediction. nTop and PhysicsX connect into a single pipeline that runs from parametric geometry through surrogate training to real-time prediction back inside nTop. Uncertainty quantification and active learning keep the trained models trustworthy as they are applied — a reminder that a surrogate is a prediction with error bars, not an oracle. Physics AI shifts the optimization bottleneck from simulation to geometry, which is why the robustness point above matters so much. [https://www.youtube.com/embed/NdOGBEujJn0](https://www.youtube.com/embed/NdOGBEujJn0) Lockheed Martin — heat exchanger optimization. Lockheed Martin set out to optimize a dual-fluid heat exchanger with a gyroid-based TPMS core: to maximize heat transfer and minimize pressure drop across varied inlet flow conditions and within additive manufacturing constraints. TPMS geometry is notoriously difficult to mesh, so the team used a parameterized implicit model with voxel-based CFD, skipping meshing entirely. A Latin Hypercube sampling strategy covered the design space, and the team simulated over 400 design points in eight hours with zero failures. That dataset was used to train two models: a neural network that predicts scalar quantities such as pressure drop and heat transfer, and a Fourier Neural Operator (FNO) that predicts full fields. Inference took about one second, compared with simulation times of 430 to 3,600 seconds — fast enough to demonstrate inverse design in seconds, compared with a starting point where setting up a single TPMS analysis could take weeks. [https://www.youtube.com/embed/Acf\_3l5xE0I](https://www.youtube.com/embed/Acf_3l5xE0I) All three examples follow the same pattern: robust parametric model → automated sweep → parallel simulation → trained surrogate. Executing nTop headlessly enables the automated sweep, while distributed compute makes it possible to run those simulations in parallel at scale. #### Bringing the model back into nTop A trained surrogate is not only useful outside nTop. The **Import Neural Network** block, in the Parameter Optimization \[Beta] tab under Surrogates, imports a neural network from an ONNX file for direct evaluation in the Notebook. Paired with the **Dependent Parameter** block under Composition, which evaluates a surrogate and updates whenever its inputs change, you can drive geometry from a model's prediction in real time rather than waiting on a solver. A later course will cover more on Parameter Optimization in nTop. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/import%20neural%20network.png) *The nTop Interface with the Parameter Optimization \[Beta] tab with the Surrogates section expanded, showing the **Import Neural Network** block* ### 2. AI agents running the workflow The second application is not a model that predicts physics. It is an agent that operates the tools — deciding what to change, running workflows, and routing results without a person managing every handoff. The distinction from automation is important. Automation follows a predefined process: a DOE sweep might run the same workflow 200 times with different inputs. An agent can respond to the results, decide what needs to change, and continue. JetZero provides an example. Its blended wing body (BWB) aircraft has deeply interconnected parameters, so one change can affect geometry and downstream analyses. A parametric nTop Notebook allows that geometry to regenerate reliably as parameters change. The nTop geometry engine can also operate as a native skill within agentic AI frameworks, as demonstrated with NVIDIA NemoClaw. In this type of workflow, an agent can: 1. Read the nTop Notebook schema to discover available parameters 2. Populate or modify those parameters 3. Dispatch geometry jobs across available cloud compute 4. Route the outputs to the appropriate analysis tools The key is that an nTop Notebook captures parameters and design logic, not just the resulting shape. That structure lets both scripts and agents run the workflow—the same property that makes a Notebook automatable in the first place. [https://www.youtube.com/embed/rUz6OlHbgfA](https://www.youtube.com/embed/rUz6OlHbgfA) ## What to Take Away * An nTop Notebook is a function: inputs in → geometry and numbers out. The nTop CLI interface is how something other than a person supplies the inputs. * Automating removes the person from the loop; distributed compute removes the serial execution bottleneck. Both are needed before scale means anything. * AI training data is a geometry problem first. Thousands of valid variants are required, and this is where traditional CAD fails. * Physics AI predicts performance. Agentic engineering operates the tools. They are different capabilities that happen to share a foundation. * That shared foundation is a robust, structured, parametric Notebook — the same thing that makes a workflow reusable by a colleague makes it usable by a machine. ## What's Next Next, you'll complete a summative knowledge check covering the concepts introduced across the first three lessons in this course section. The questions are designed to reinforce the key ideas you've learned so far and confirm your understanding before you continue to the next section. # Knowledge Check: Why Do Engineers Need nTop? Source: https://docs.ntop.com/lessons/ntop-implicit-foundations/knowledge-check-why-do-engineers-need-ntop # Modeling with Signed Distance Fields Source: https://docs.ntop.com/lessons/ntop-implicit-foundations/modeling-with-signed-distance-fields At the beginning of this learning pathway, you learned why nTop represents geometry as a signed distance field rather than as a set of faces and edges. This lesson looks at what that field actually is, how you look at it, and what you do with it. After completing this lesson, you will be able to: * Explain how a field contains more information than whether a point is inside or outside a body. * Describe how a field extends infinitely through space, beyond the implicit body it represents. * Distinguish between the field itself and its on-screen visualization. * Explain how union, subtract, and intersect combine multiple fields through arithmetic Boolean operations—and why they behave differently in nTop than in traditional CAD. ## Signed Distance Fields A signed distance field (SDF) is a function (i.e. f(x,y,z)) that assigns a value to every point in 3D space based on its distance from the nearest surface of a body and whether the point lies inside or outside that body. As introduced in Lesson 1, the sign indicates the point's position relative to the surface: * Negative — the point is inside the body * Positive — the point is outside the body * Zero — the point lies exactly on the surface The magnitude represents the distance to the nearest surface. For example, a point 4 mm outside the body has a value of 4 mm, while a point 4 mm inside the body has a value of −4 mm. Together, the sign and magnitude describe the relationship of every point in space to the body's surface. Importantly, the signed distance field exists throughout the surrounding 3D space—not only where the body itself exists. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/field_sphere_transparent.gif) *Field of a primitive sphere — Positive values outside the sphere, zero at the surface, and negative values inside the sphere.* Using the sphere from Lesson 1 as an example — radius 3, centered at the origin: *F(x, y, z) = √(x² + y² + z²) − 3* Evaluate it at the origin, and you get −3 mm. That is not an arbitrary number: it is the distance from the center of the sphere to its surface, negative because the origin is inside. Evaluate it 10 mm out along the x-axis, and you get 7 mm. The function returns a real, physical distance everywhere. ### Isosurfaces If the body's surface is defined by the points where the field value equals zero, then any other constant field value also defines a surface. For example, all points where the field equals −1 mm form one surface, while all points where it equals 2 mm form another. These constant-value surfaces are called isosurfaces. Together, they form nested surfaces inside and outside the body, like the layers of an onion. The lines shown in the GIF above represent these isosurfaces for the Field of a Primitive Sphere, with each line corresponding to a constant field value. This concept underpins many implicit modeling operations you will encounter later. Offsetting a body does not require constructing a new surface; instead, the operation shifts which field value defines the body's boundary. Shelling uses the region between two isosurfaces to define the shell. Similarly, applying a blend radius to a Boolean operation modifies how the underlying fields combine near the resulting surface. ### Why Distance Matters, Not Just Sign Any function that is negative inside a shape and positive outside will describe that shape correctly. It will not necessarily be a signed distance field. The distinction matters because the operations above depend on the magnitude being a true distance. If the field says −1 at a point that is actually 4 mm inside the body, an offset driven by that field will land in the wrong place. A well-behaved SDF has a recognizable signature in the Field Viewer: its isolines run parallel to the surface and are evenly spaced, because moving 1 mm through space changes the field value by 1 mm. Crowded or uneven isolines indicate the field has been distorted and no longer measures true distance. *You will use this signature as a diagnostic long before you need the underlying math. Course 2 covers what causes a field to stop being a true SDF, and what to do about it.* ### Fields Extend Beyond Solid Bodies Fields are not exclusive to closed bodies. Simple geometry carries simple fields: | **Element** | **Its field** | | - | - | | Point | Distance to that point — positive in every direction, since a point encloses no volume | | Curve | Distance to the nearest location on the curve | | Profile | A closed 2D region, negative inside its boundary and positive outside | | Plane | Zero on the plane, positive on the normal side, negative on the other side | ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/field_sample_geoemtry_sidebyside.png) *Three examples of simple geometries fields: Point field (left), Curve field (center), and a Profile field (right)* The plane is the key example to remember. Its field is equivalent to the scalar field *z*, dividing space into positive and negative half-spaces. This makes it a standard tool for cutting a body in two. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Plane_field_with_block.gif) *An example of a Plane's field. The normal direction of the plane determines the positive value side of the field* ### Fields are unbounded Consider the plane in the table again. Where does its field end? It does not. A plane's field is defined throughout all of space. Even a point one kilometer away still returns a value representing the signed distance to the plane. The same principle applies to the field of a point, a curve, or a sphere. Fields extend infinitely through space **.** The geometry itself may occupy a finite region, but the field that describes it does not. This behavior often goes unnoticed because many fields you encounter first contain an enclosed negative region. For a closed body such as a sphere, negative field values define a finite volume that nTop can render as solid geometry. The field continues infinitely beyond the body, but it does not display the positive region as material. Not all fields, however, contain an enclosed negative region: * Plane: Divides space into two infinite half-spaces; neither side is enclosed. * Triply Periodic Minimal Surface (TPMS) fields: Fields such as gyroid, Schwarz, and diamond repeat indefinitely in all three spatial directions. * Point and curve distance fields: Remain positive everywhere because a point or curve does not enclose a volume. The key distinction is that a field can be infinite even when the geometry it represents is finite, or when it does not define a finite solid at all. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/sphere%20field.png) *The field of a **Sphere** with a radius of 5* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/gyroid%20field.png) *An infinite* ***Gyroid Field*** ### Giving an Unbounded Field an Extent When you need to visualize or use an unbounded field as geometry, the **Set Bounding Box** block assigns it a finite region of interest. The underlying field does not change; the bounding box simply defines the portion of the field that nTop evaluates as a body. For example, applying a bounding box to an infinite gyroid field produces a finite gyroid body that you can visualize and use in downstream operations such as Booleans. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/set%20bounding%20box%20gyroid%20field.png) *Using the **Set Bounding Box** block to visualize a portion of the **Gyroid Field*** ### Bounding Boxes Are Estimates Every implicit body has a Bounding Box property that defines the region containing the body. This box may extend slightly beyond the body's actual boundaries, which is expected. Because an implicit surface is defined by a field rather than stored explicitly, nTop must determine its extent by searching the field. Computing a perfectly tight bounding box for an arbitrary field can be computationally expensive, so nTop uses a conservative estimate that safely contains the entire body. For a tighter bounding box, use **Refine** **Bounding Box** under Utilities in the Modeling tab, or manually use **Set Bounding Box** with the parameters that control your implicit body. **Refine Bounding Box** block recomputes the bounding box of an implicit body to a specified tolerance, producing a closer fit around the body's actual extent. It is particularly useful after operations such as Booleans, where the resulting body's bounding box may remain larger than the geometry itself. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/refine_bounding%20box.png) *The pink outline shows the original bounding box, while the green outline shows the tighter bounding box produced by **Refine Bounding Box*** > [!NOTE] > > **Note:** Using Bounding Boxes and the **Set Bounding Box** block will be covered in the next course ## How Fields Generate Geometry Earlier in this learning path, we introduced a fundamental distinction: CAD stores geometry as faces, edges, and vertices, while nTop stores the function that defines the geometry. The surface is generated where that function equals zero. This distinction has several important implications: * No faces are stored to select or reference, avoiding failures when topology changes or disappears. * Bodies are watertight by construction because the field continuously defines what is inside and outside. * Geometric complexity is inexpensive. Adding detail increases mathematical computation, which nTop's parallel architecture handles efficiently, without introducing the topology or file-size burden associated with the faces and edges of traditional CAD. ### The Field and Its Visualization Are Not the Same The SDF defines the geometry; the Viewport visualizes it. The field is a continuous function that returns a value at every point in space. The Viewport samples that function and renders the zero surface according to the selected display resolution. Increasing the resolution from Low to Highest improves the visualization, but it does not change the underlying geometry. This distinction has several important implications: 1. Viewport resolution affects visualization, not geometry. Increasing resolution improves visual fidelity at the cost of render time, but it does not change the underlying implicit body or the quality of geometry exported from it. Use Low or Medium resolution while working and increase it when a closer visual inspection is necessary. 2. Visual artifacts do not necessarily indicate incorrect geometry. Thin walls may appear to have holes, lattice beams may look disconnected, and fine repeating features may display artifacts when the Viewport cannot fully resolve their detail. Use Precise Render (Ctrl + H), increase the Viewport resolution, or enable Adaptive Resolution—introduced in the previous lesson—when you need a more accurate visualization. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/blades_lowRes_highestRes.png) *A turbine blade visualized using Low Resolution (left) and Highest Resolution (right)* 3. When in doubt, probe the field. If the visualization still appears incorrect, use the Field Viewer to inspect the underlying field directly. For example, if a wall appears missing, a negative field value where material is expected confirms the geometry exists—the Viewport is simply not resolving it clearly. The pattern is consistent: Viewport rendering, Precise Render, meshes, and slice data are all representations generated from the underlying field at a specified level of fidelity or tolerance. The field itself remains exact, and the Field Viewer lets you inspect its values directly. Fields can also do more than define geometry. They can drive parameters such as thickness, radius, and density, allowing these values to vary continuously through space. Course 2 introduces this concept, known as field-driven design. ## The Field Viewer: Looking at an SDF The field extends continuously throughout three-dimensional space, so you can't visualize it all at once. The Field Viewer addresses this by displaying a two-dimensional slice through the field—a window that can be positioned wherever you want to inspect its values. The previous lesson introduced how to access and use the Field Viewer. This section builds on that foundation by exploring its functionality in greater detail. ### Opening the Field Viewer With a block selected, press the shortcut key “F”. You can also right-click an object in the Viewport and choose Field Viewer, or open it from the Field Viewer button in the view toolbar. When you open it from a selected block, the *Object* input is filled in for you. If you open it with nothing selected, the input is empty — type the name of the block whose field you want to inspect. ### Positioning the window * Size — how large the plane is. Use the reset button beside the input to fit it to the current view. * Center and Normal — type values directly, or drag the gimbal in the 3D scene. * Orientation buttons — the YZ, XZ, and XY buttons snap the normal to a global axis. This is the fastest way to compare the same field from three directions. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/point_field_viewer.png) *The Field Viewer configuration options displayed under the Tools tab of the Right Panel* If the plane appears to have disappeared, check its normal direction. A plane viewed edge-on is not visible—for example, looking along the z-axis at a plane with a normal of \[1, 0, 0]. ### Reading what you see * Opacity — Controls the field's opacity. Drag the slider to adjust its transparency. * Isolines — white lines connecting points of equal field value, on by default. Leave Interval at 0 for adaptive spacing, or enter a value to fix it. Evenly spaced, surface-parallel isolines are the signature of a healthy SDF. You can toggle this functionality on or off. * Custom range — clamps the display to a minimum and maximum you choose, giving you fine color resolution in a narrow value band. * Colormap — Implicit is applied automatically to implicit bodies and is tuned to make the inside/outside boundary legible. Scalar fields default to Turbo; Distance Field is also available. * Probe Values — Hover anywhere on the plane to view the field value at that point. The corresponding isoline highlights, showing all other points in the slice with the same field value. You can toggle this functionality on or off. * Show Defects – Highlights field discontinuities as red regions—areas where the field value changes abruptly and may produce artifacts, such as unexpected walls or holes in toolpaths during slicing. You can toggle this functionality on or off. * Highlight Zero shows a yellow contour where field values equal zero. You can toggle this functionality on or off. To see the negative region of an implicit body's field, turn the body's visibility off with the shortcut key “V”. Otherwise, the solid sits in front of the part of the field you are trying to read. > [!NOTE] > > **Note:** The probe is for inspection. When you need a field value as a number your workflow can use, the **Evaluate Field** block returns the value at a point (or a list of points) as a property you can drive other blocks with. More on creating parametric geometry in a later lesson. ## Boolean Operations as a Core Capability In a B-rep system, Boolean operations are computationally intensive. The software must determine where two surfaces intersect, trim the intersecting surfaces, stitch the remaining regions into a new watertight boundary, and reconstruct the resulting topology. When surfaces are tangent, nearly coincident, or affected by numerical precision issues, this process can become unstable or fail—one reason Boolean operations often cause robustness challenges in traditional CAD workflows. On fields, Boolean operations are arithmetic. | **Operation** | **On fields** | **Why** | | - | - | - | | Union of A and B | min(F\_A, F\_B) | A point is inside the union if it is inside *either* body — so take whichever field is more negative | | Intersection of A and B | max(F\_A, F\_B) | A point is inside the intersection only if it is inside both, so take whichever field is less negative | | A subtract B and, in parallel structure, subtract B from A. | max(F\_A, −F\_B) | Flipping the sign of B's field turns it inside out; intersecting with that keeps the part of A outside B | Boolean operations are fundamental tools in implicit modeling that allow you to create complex geometry by combining, subtracting, or intersecting implicit bodies. Boolean blocks are located in the Modeling tab of the nTop Ribbon. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Booleans%20tab.png) *The Booleans section of the Modeling tab in the Ribbon* ### Boolean Blocks **Boolean Union** — Combines multiple Implicit Bodies into a single body, with an optional blend feature between the joining bodies. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/BU.jpg) An example of using ***Boolean Union** to combine two spheres into a single body* It natively has an empty **Implicit Body List** block in its Bodies input. You can either remove it and insert your own list or populate the empty list with your bodies. If you need to combine more than two bodies, you can use the plus sign to add more list items. If you add too many list body inputs, you can remove them using the minus sign next to the list item. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Boolean%20Union.gif) *Adding a Blend Radius to a **Boolean Union** smooths the transition between the merged bodies* **Boolean Subtract** — Removes the volume of one or more Implicit Bodies from a primary body. You can apply an optional blend to the resulting edge. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/BS.jpg) An example of using ***Boolean Subtract** to subtract one sphere from another* Similar to the **Boolean Union** block, if you need to subtract more than one body, you can use the plus sign to add more list items. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/boolean%20subtract.gif) *You can apply a Blend Radius to smoothen the edges where the subtraction occurred* **Boolean Intersect** — Creates a new body from the shared, overlapping volume of two or more Implicit Bodies. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/BI.jpg) An example of using ***Boolean Intersect** to create a new body where the sphere's intersect* If you need to intersect more than one body, you can use the plus sign to add more list items. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Boolean%20Intersect.gif) *You can apply a Blend Radius to smoothen the edges of the resulting intersection body* **Clearance** — Subtracts one implicit body from another with an added offset distance. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/clearance.gif) *An example of using the **Clearance** block to subtract a cylinder from a box with an added Clearance Distance* **Pipe Intersection** — Creates a blend body at the intersection of two implicit bodies. The radius input controls the size of the blend between the two bodies. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/pipe%20intersection.gif) *An example of using the **Pipe Intersection** block to create a blend body where the two cylinders* *meet* ### Blend Type A blend can be applied where the input bodies intersect to control the transition between their volumes. The available *Blend Types* are: * *Sharp* preserves the original intersection without smoothing. * *Rounded* creates a filleted transition. * *Continuous* creates a smooth, curvature-continuous transition. * *Chamfered* creates a beveled transition. You cannot adjust the transition angle for the *Rounded* or *Chamfered* blend types. For additional information and examples of the blend types available for each Boolean block, see nTop Documentation > Booleans. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/blend_types.png) *A visual comparison of the different blend types when using the **Boolean Union** block* The Blend radius input accepts a Scalar Field, not only a number. That means the fillet can be large in one region of the part and small in another. Course 2 covers driving parameters this way. ### Cutting with a Plane Splitting, cutting, and trimming are all accomplished the same way in nTop: by performing a **Boolean Subtract** or **Boolean Intersect** with a plane. This works because a plane defines more than a flat surface—it divides all of space into two infinite half-spaces. As established earlier in this lesson, the plane's field is: * Zero on the plane itself * Positive on the side toward which the normal points * Negative on the opposite side nTop treats the negative half-space as solid material. Therefore, when you subtract a plane from a body, the negative half-space is removed and the portion of the body on the positive side of the plane—the side toward which the normal points—remains. Procedure: 1. Add a **Plane** or **Plane from Normal** block, both located in the Create tab under Vectors. A Plane is defined by an origin point and two in-plane axis directions; a Plane from Normal is defined by an origin point and a normal vector. 2. Add a **Boolean Subtract** block from the Modeling tab. 3. Assign the body to be cut to the *Primary Body* input. 4. Assign the plane to input “*0”* of the Implicit Body List. You can use the plane directly here because the Plane type exposes a Body property that nTop reads as an implicit body. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/cut_plane.gif) *Using **Boolean Subtract** to cut a **Cone** in half using a **Plane from Normal**. The Plane's field is visualized to show how the negative side is subtracting* Because the normal determines which side remains, reversing the normal reverses the result. You can control this in several ways: * Reverse the normal vector. In the **Plane from Normal** block, negate the normal—for example, change \[0, 0, 1] to \[0, 0, −1]. * Use the plane's *Inverted* property within the Block Properties. This returns the same plane with its normal reversed. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/plane_cut_inverted.gif) *Using the **Plane from Normal**'s inverted property chip to subtract the other side of the cone from the previous example* ## What to Take Away * A signed distance field assigns every point in space a value whose sign indicates whether the point is inside or outside a body and whose magnitude represents the distance to its surface. * Fields extend infinitely through space. A bounding box defines the region that nTop evaluates and displays without changing the underlying field. * The Viewport displays a sampled visualization of the field's zero isosurface. Display resolution affects visual fidelity, not the underlying geometry. * The Field Viewer allows you to inspect field values, isosurfaces, and potential defects. Evenly spaced, surface-parallel isolines indicate a healthy signed distance field. * Boolean operations combine fields arithmetically, making unions, intersections, subtractions, and blends more robust than topology-based operations in traditional CAD. * A plane's field divides space into positive and negative half-spaces, allowing it to cut an implicit body through a Boolean Subtract or Intersect operation. ## What's Next You have now learned what a signed distance field is, how to visualize and interpret it, and how to perform Boolean operations. Next, you will apply your understanding in a knowledge check covering these concepts. # nTop Implicit Foundations Survey Source: https://docs.ntop.com/lessons/ntop-implicit-foundations/ntop-implicit-foundations-survey Thank you for taking the nTop Implicit Foundations course. We highly value your feedback, and would greatly appreciate you taking a second to fill out our Feedback Survey. Please click the link below to complete the survey. Please click this link to take the: [nTop Implicit Foundations Feedback Survey](https://docs.google.com/forms/d/e/1FAIpQLSdZhkFn4YgVzou1q_sHtdl_kRgaMxKgwzyFsm93zi9FMnHNug/viewform) After taking the survey, please make sure you click “Mark Complete” to complete this lesson and course. # The Notebook Anatomy + nTop Interface Source: https://docs.ntop.com/lessons/ntop-implicit-foundations/the-notebook-anatomy-ntop-interface ## Introduction ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/notebook%20image_ntopviewport.png) *An example of the nTop interface* Everything you do in nTop happens in the Notebook. This lesson takes it apart piece by piece — the interface that surrounds it, the sections and comments that organize it, and the blocks that fill it. Below is an example file that you can explore along with this lesson. **Downloadable Files:** [Example File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/nTop%20Files/C1S2_Lesson1_NotebookLesson.ntop) *This file was last updated in nTop* 5.54.2 ## The Notebook & The Block System A block is a function. It takes a set of inputs and computes an output. That output can then become an input to another block. The nTop Notebook is the collection of all the blocks in your file. The Notebook documents and represents an engineering workflow in nTop. It records all functions performed and captures a process that can be applied to any part, allowing users to reuse the workflow to generate new designs. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/sphere_function_block.png) *An example of how the **Sphere** block correlates to the original equation for a Sphere* Comparable to the model tree in traditional CAD software, the Notebook keeps a record of modeling operations. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/notebook_modeltree_sideByside.png) *An nTop Notebook (left) compared to a traditional CAD feature tree (right)* A feature tree records an ordered sequence of operations applied to a specific feature of geometry, while nTop Notebook defines a process that can be applied to any part. This distinction makes nTop workflows inherently reusable: the Notebook is what the engineer builds, and the geometry is what it produces for a given set of inputs. ### Inputs, outputs, and types Every block produces an output with a specific type — such as an Implicit Body, Mesh, or Scalar Field(see nTop Block Types Image below). Types determine which blocks can connect: for example, an input expecting an Implicit Body will not accept a Mesh. Like types in programming languages, nTop prevents incompatible data from being connected. This helps: * Ensure reliability: Use the right data in the right place. * Prevent errors: Catch type mismatches immediately before they propagate downstream. * Improve clarity\*\*:\*\* Colors and icons make data types easy to identify throughout the workflow. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/block%20types.png) *nTop block types* ## The nTop Interface ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Tour%20of%20nTop.png) *The numbered labels correspond to the nTop interface components below* The image above shows the nTop User Interface. Use the accordion folders below to learn about the different components of the UI. > **1. Notebook** > > The notebook on the left keeps a record of your modeling operations. You will work entirely within this notebook to build your workflow and manipulate the design parameters of your parts. The notebook allows you to: > > * Title your notebook > * Add a notebook description > * Create/Rename sections to organize your notebook > * Use the search bar to quickly find and add blocks > * Add comments to individual blocks > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Notebook-demo.gif) > **2. Ribbon** > > The ribbon contains blocks for performing different operations in nTop. You can navigate the ribbon by clicking on the tabs to change block menus. You can also use the arrows to reveal additional tabs. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Ribbon.gif) > > The ribbon tabs can be configured under: **Menu>Settings>Ribbon** > > Here you can toggle which tabs of the ribbon are visible in the nTop instance by turning on/off the checkboxes. > > Note: If you don't see \[Beta] Ribbon tabs, you need to enable Beta blocks in the General section of the Settings. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Ribbon-Settings.png) > **3. Viewport** > > The viewport is where you can see the visual rendering of the geometry you've created by working in the notebook. The main controls for operating in the viewport are: > > * **Right Click:** Press and hold right-click while moving your mouse to rotate > * **Middle Mouse:** Press and hold the middle mouse button to move > * **Block Highlighting:** Select a block from the notebook to highlight it in the notebook and viewport > * **Toggle Block View:** Toggle the white circle icon next to a block to turn on/off its visibility > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Viewport-controls.gif) > **4. View Cube** > > The view cube shows the XYZ axis indication and has different options for viewing your geometry: > > * **Camera Settings:** Choose to view your part in either Perspective or Orthographic. Note: The ruler is unavailable in Perspective view > * **Rotation Setting:** Choose between Turntable and Tumbler for how your part rotates in the viewport > * **Show Grid:** Toggle the grid on/off in the viewport > * **Show Ruler:** Toggle the ruler on/off in the viewport > * **Named Views:** Quickly jump between preset views or create your own view. To create your own, select “New Named View” when your part is oriented correctly and type in a name for the view. > * **Capture Image:** Use this tool to screenshot your geometry and save the image to your machine. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Viewcube-controls.gif) > **5. Resolution** > > Resolution settings are located at the bottom right corner. We recommend working in low or medium res, and using high or highest res only to check your geometry. Changing the resolution only affects the loading time and the quality of the rendered image on the screen, not the actual part. > > * Adaptive Resolution raises rendering quality for complex implicit models by adjusting local resolution based on your view. > * If you need to see the true geometry at the highest quality, use Precise Render (Ctrl + H), which produces a single high-resolution snapshot. Precise Render is only compatible with implicit bodies. > * If you increase the resolution and save the file, new instances of nTop inherit that setting. > > ![Resolution Settings](https://learn.ntop.com/wp-content/uploads/2025/10/resolution-settings-1.gif) > **6. Log Panel** > > The arrow to the right of the resolution settings expands and collapses the Log Panel. The Log Panel: > > * Records every operation with a date and time stamp, as well as a description of the operation > * Every operation has one of two types – 'I' for info, or 'E' for error > * Newest entries appear at the bottom > * The Last button jumps to the most recent operation and Clear empties the log > * Double-clicking an entry will expand it in its own window > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/log.gif) > **7. Status Bar** > > If a process is in progress, the Status Bar on the left side would appear. By hovering over it, you can see the related block's name, the process being executed, and the percentage completion. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/status-bar.gif) > **8. Menu** > > The Menu is located in the top left corner of the nTop window and can be opened by clicking the three horizontal lines button. This contains multiple operations that are divided into several sections: > > * **File**: Create/Open/Save files using the applicable options. The “Import” option is used to import custom blocks, and the “My Blocks Folder” opens the custom blocks folder. > * **Edit:** Undo/Redo/Cut/Copy/Paste/Paste with References are all available for operations performed in nTop. The “Select All Visible” option selects all geometry in a notebook. > * **View:** Contains options and settings for how geometry is presented in the viewport. This menu has some of the same options as the view cube, as well as some important additional controls. You can use [Precise Render](https://support.ntop.com/hc/en-us/articles/8288161848723-What-is-a-Precise-Render) to generate an accurate still frame of your geometry and to take screenshots. The other tools that aren't covered under view cube are explained in *View Tools*. > * **Settings:** Opens the nTop *Settings* menu. Here you can configure your nTop platform using the different settings tabs. This includes key settings like [Show Beta blocks](https://support.ntop.com/hc/en-us/articles/360062442113-What-are-beta-blocks), Enable GPU acceleration, and configuring the ribbon. You can also change the global units for your workflows and customize display options. > * **Home:** Returns you to the nTop home page. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Menu.gif) > **9. Left Side Panel** > > The Left Side Panel can be opened/closed by clicking the white/black rectangle icon next to the menu. This panel contains two tabs: Outline and Imports. > > * **Outline:** The *Outline* is a list of all top level blocks in your notebook (i.e. It does not include blocks nested inside another block) that are separated by your notebook sections. When you select a block from the list, it is highlighted in bright blue. If this block is used downstream in another block, the parent block will be highlighted in a darker blue. > * The Outline also contains Notebook Search, which you can use to quickly find blocks or comments in the notebook. You can search using: > * Block names > * Variable names > * Comment text > * Results show a number next to each entry, indicating how many instances of that block exist in the Notebook. Expand a result to see each instance individually. > * **Imports:** The *Imports* tab is used to manage custom blocks in your workflow. Any custom blocks that have been imported will appear at the top under the Custom Blocks drop-down. You also have the options to create a custom block, import a custom block, and remove unused custom blocks that are not being used in your notebook or are outdated. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Left-panel.gif) > **10. Right Side Panel** > > The Right Side Panel can be opened/closed by clicking the white/black rectangle icon in the top right corner of the nTop window. This panel contains three tabs: *Information*, *Display*, and *Tools*. > > * **Information:** Displays block information based on which block is selected. Here you can see the block description, input descriptions, and output information. There is also a *Learn More* button that will open the selected block's documentation file for more information. > * **Display:** Contains options for changing the selected body's appearance using color and transparency. > * **Tools:** This tab is covered under *View Tools*. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Right-Panel.gif) > **11. In-App Options** > > * **Update Button:** If you are not working in the latest version of nTop, you will see *Update Available* followed by a green download symbol. If you are on the latest version, the download symbol will appear gray. > * **Information Button:** The question mark icon contains: > * *About:* Information regarding your current software version. > * *Documentation:* Opens the nTop internal documentation > * *What's New:* Opens the most recent release notes for the current software version > * *Support:* Opens the nTop Support site. This contains helpful articles, release notes, installation information, and more. > * **User Icon**: Shows user information and a link to access *Account Settings*. This also contains a *Logout* option. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/In-App-Options.gif) > **12. View Tools** > > The View Tools sidebar contains several helpful tools for analyzing your geometry: > > * **Field Viewer:** The *Field Viewer* allows you to visualize a field. You can change the plane of visualization using the colored plane icons. The following options are available to analyze the field: > * *Opacity:* Changes the opacity of the visualized field > * *Isolines:* Option to turn on/off the isolines > * *Interval:* Changes the spacing between the isolines > * *Custom Range:* Option to manually specify the value range of the field > * *Min Value:* Minimum value when a Custom Range is applied > * *Max Value:* Maximum value when a Custom Range is applied > * *Colormap:* Option to change the color scheme of the field > * *Probe Values:* Toggles the ability to see field values when moving the mouse over the field > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Field-Viewer.gif) > > * **Section Cut:** This tool is used to cut geometry at a specified plane. You can change the plane of visualization using the colored plane icons. The following options are available when performing a section cut: > * *Mode:* Choose between performing a section cut on a specific body (*Selection*) or on all visualized bodies that intersect the plane (*Global*) > * *Display Style:* Changes the display style of the sectioned body > * *Show Volume Mesh Elements:* If the body is a volume mesh, you can toggle the visualization of the 3D internal volume elements > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Section-Cut.gif) > > * **Surface Analysis:** The Surface Analysis tool has three different modes you can use to analyze the surface of your geometry: > * *Overhang Angle:* This mode is used to identify regions in your model where angles may exceed the printable threshold, helping you inspect the design for additive manufacturability. It has the following options for inspection: > * *Angle:* The lower value of the angle analysis > * *Threshold:* The range between the lower and upper angle values being evaluated > * *Build Direction:* Specifies the build plane normal direction > * *Gradient:* Option to display the color scheme as gradient or not > * *Draft Angle:* This mode visualizes areas of your model based on a specified draft angle relative to a pull direction, helping you verify that your design meets manufacturability requirements. It has the following options for inspection: > * Angle: The specified angle to evaluate the geometry > * Pull Direction: The plane used to specify the angle relative to the geometry > * Gradient: Option to display the color scheme as gradient or discrete > * *Curvature:* This mode is used to analyze the curvature of a geometry's surface. > * *Metallic:* Renders the geometry with a shiny, reflective surface, which improves the clarity of curvature and surface quality. > * *Zebra:* Displays a series of alternating black and white stripes on a surface. The reflection patterns of these stripes help visualize the surface's curvature. You can select from three buttons to choose the orientation of the stripes and use a slider to adjust their spacing. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Surface-Analysis.gif) > > * **Measure:** The *Measure Tool* lets you directly measure distances between two points within your 3D model. This feature is ideal for quick inspections and supports interactive visualization of distances along global X, Y, and Z axes. The total distance and XYZ dimensions appear in the Right Side Panel, and you can check the “Show XYZ” checkbox to display dimension lines for X, Y, and Z in the 3D view. > > ![](https://files.learn.ntop.com/lessons/a-tour-of-the-ntop-instance-2/Measure-Tool.gif) ## Notebook Anatomy, Operations, & Best Practices Your Notebook documents your work, and a little housekeeping goes a long way. Keeping it organized and commented helps with future use and sharing. ### 1. Identifying the workflow 1. Notebook Name — Double-click 'Untitled Notebook' to name it. Use something unique and memorable, and match it to the file name. 2. Notebook Description — Double-click 'Add description' to write one. The description is what tells you, or a colleague, what the workflow accomplishes. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/notebook%20title%20and%20description%20labels.png) *The Notebook Name and Description are located at the top of the notebook* ### 2. Adding, Placing, and Deleting Blocks #### Search Bar As an alternative to using the ribbon, the search bar lets you quickly find a block when you know its name. Click it or press *Ctrl + L*, then start typing a block name. Results show the block color/type on the left and the block name beside it. Hovering provides the name, description, and Output type. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/screen%20recording.gif) *The search bar displays all blocks relevant to the input text* Alternatively, you can add blocks to the Notebook via the Ribbon. Click on block icons or select from the drop-down list in the Ribbon. Show/hide the Ribbon with *Ctrl+D*. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/ribbon%20search.gif) *You can navigate different sections of the Ribbon by clicking the tab names at the top bar* #### Placement Highlight The blue line indicates where you are in the Notebook. New blocks land at the Placement Highlight. Move this by hovering over blocks and selecting above or below them. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/placement%20highlight.gif) *Clicking between blocks changes the location of the Placement Highlight* #### Search in Place Right-click the dividing line between blocks to add a block, a section, or a comment at that exact spot. Double-clicking the line skips straight to the block search. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/search%20in%20place.gif) *Search in Place allows you to add a block at the Placement Highlight* #### Context Search Searches for blocks that are compatible with a block already in your Notebook, and nests your selection around it. Select a block and press *S*, or click the “+” icon on the block. In the GIF below, this functionality looks different when you make the block a Variable. We'll cover Variables later in the lesson. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/context%20search_block.gif) *Using Context Search on a non-variable block* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/context%20search_variable.gif) *Using Context Search on a block variable* #### Duplicating Blocks This can be done with two methods: Duplicate and Duplicate with References 1. Duplicate – Makes a copy of the block and a copy of all blocks nested within that block. In this case, think of Duplicate as “copy block and nested blocks”. This is useful when you want to copy a block and change all parameters without links back to the original. To Duplicate, right-click a block and select Duplicate. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/duplicate.gif) *An example of using the Duplicate function in the right-click menu* 2. Duplicate with References – Creates a copy of the top-level block while preserving references to its nested blocks. Changes to the referenced blocks update everywhere they are used. Use Duplicate with References when you want to modify the top-level block while keeping the same inputs. To Duplicate with References, right-click a block and select Duplicate with References. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/duplicate%20with%20references.gif) *An example of using the Duplicate with References function in the right-click menu* The image above shows Duplicate with References applied to the top-level **Extruded Cut** block. The original block's visibility is turned off, and changes to its referenced inputs automatically update the duplicated geometry. Both Duplicate and Duplicate with References create new blocks, so they should not be used as substitutes for Variables (more on variables to be covered later in this lesson). #### Cut, Copy, and Paste Cut, Copy, and Paste move a single block or a multi-block selection through the clipboard. From the clipboard, blocks can be pasted into: 1. The Notebook 2. A compatible block input 3. A separate instance of nTop – a different Notebook To select multiple blocks, hold the *Ctrl* key and select each block: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/multi_select%20blocks.gif) *You can multi-select blocks by holding the Ctrl key* If the blocks you copied reference other blocks, use 'Paste with References' or *Ctrl + Alt + V*. It pastes all dependencies along with your selection, so nothing arrives with a broken reference. 'Paste' or *Ctrl + V* brings only the blocks you selected. These options live in the Edit menu, in the right-click menu on a block 'Copy ', and on the hotkeys *Ctrl + X / Ctrl + C / Ctrl + V*. Right-clicking a dividing line between blocks also offers 'Paste' and 'Paste with References', which lets you place the blocks exactly where you want them. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/copy_paste_notebook.gif) *You can copy blocks from one notebook to another using Copy and Paste* > [!NOTE] > > **Note** **on using Duplicate/Duplicate with References:** Duplicate and Duplicate with References only work inside a single Notebook. Copy and Paste is how you move work between two Notebooks, and the only one of these options that can paste directly into a block input. Cut removes the original, which Duplicate never does—use it to relocate a block rather than copy it. #### Deleting Blocks To remove a block, select it and then press the *Delete* key or right-click and select 'Delete' from the menu: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/delete_block.gif) *An example of using the right-click menu to Delete a block* ### 3. Organizing #### Sections Sections are the chapters of your engineering Notebook. Use them to organize your workflow into logical groups and give each a clear, descriptive name. Collapse sections you're not working on to keep your Notebook organized and quickly navigate to the part of the workflow you want to modify. 1. Add a section with '+ New Section', located at the end of your Notebook ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/new_section.png) *The New Section button appears after the last section in your Notebook* 2. Collapse and expand a section using the chevron to the left of the section name ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/collapse_expand%20section.gif) *Collapse/Expand sections using the chevron icon next to their name* 3. Rename a section by double-clicking its name. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/rename_section.gif) *Double-clicking a section name allows yout to edit it* 4. Move a section by left-clicking on the right side of the section name and dragging. A blue line shows where it will land. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/dragging_placing_section.gif) *You can reorder sections by dragging them* 5. Hover over a Section Name and select the three vertical dots to open the Section Menu, which holds 'Add section', 'Move up', 'Move down', 'Rename section', and 'Delete' section. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Menu_selection_section.gif) *Open the Section Menu using the 3 dots icon* > [!NOTE] > > **Note:** Deleting a section deletes every block inside it. #### Variables You can make any block or parameter in the Notebook a Variable, making it easy to reuse and modify throughout your workflow. Variables remain visible in the Notebook rather than being nested within other blocks, helping keep workflows organized and easy to understand. A block made into a variable looks different from a regular block: its name appears on the left over the block color. To create one, right-click the block and select 'Make Variable'. Double-click the Variable name to rename it. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/make_block_variable.gif) *Creating a block variable and renaming it* To make a parameter a Variable, hover over it, right-click, and select 'Make Variable'. The new Variable appears above the block, while the original input is replaced by a Variable chip. A parameter Variable makes it easy to identify and quickly change a specific input within a block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/parameter%20variable.gif) *You can also create variables from parameters* Two additional operations that save time later: * Hold *Ctrl* and drag a variable chip that is already in an input to reuse it in another input. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/ctrl_drag_variable.gif) *Ctrl dragging a variable input chip allows you to reuse it without removing it from the original input* * Right-click a variable and choose 'Remove Variable Contents' to empty it while leaving every chip in place. This is how you swap what a variable holds without rewiring the blocks that use it. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/remove_variable_contents.gif) *Using Remove Variable Contents to change the variable profile* #### Input and Output Sections The Input and Output sections are located at the top and bottom of your Notebook. They are primarily used to create Custom Blocks and run nTop automation workflows, both covered in later courses. The Input section defines the inputs to the Custom Block or workflow, while the Output section defines what it returns. To add a block or parameter variable to the Input section, right-click it and select Make Notebook Input, or drag it directly into the section. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Input_section.gif) *A demo of making inputs by dragging or using the right-click menu* To define an output, drag the desired block into the Output section. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/drag_output_section.gif) *Drag and drop your desired Output block into the Output Section* #### Comments A comment is a note attached to a block or placed in the Notebook. Click the speech bubble icon that appears when you hover above a block, right-click a dividing line between blocks, or open the Comment tab in Block Details (more on block details later in this lesson) to add a comment. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Comments.gif) *You can attach comments directly to blocks or position them between blocks in the Notebook* A few behaviors worth knowing: * Block comments belong to the block. Move the block within the Notebook, and the comment moves with it. If a block is free standing in the notebook, it will not move unless dragged separately. * If the block gets nested inside another block, its comment is nested as well, and an icon appears to indicate this. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/nested_comment.png) *Nested blocks with comments will have a speech bubble icon next to their visibility toggle* * Comments are searchable. Notebook search *Ctrl + F* filters on comment text, so a well-commented Notebook is navigable. ### 4. Running and Checking #### Toggle Autorun + Manual Run Mode 1. Toggle Autorun – Controls whether blocks automatically rebuild when an input changes. When Autorun is on, a block rebuilds whenever one of its inputs or an upstream block changes. When Autorun is off, affected blocks wait until you run them manually or turn Autorun back on. Turn Autorun off when making a series of computationally expensive edits. Toggle Autorun is to the right of the search bar and can be toggled by clicking. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/toggle_autorun.gif) *Toggling Autorun will compute all built blocks* 2. Manual Run Mode – Controls whether blocks automatically rebuild when an input or any upstream block affecting them changes. With Manual Run Mode on, a run icon appears on affected blocks, letting you choose when to rebuild them. This is useful when testing a specific area or changing multiple inputs without spending computation time rebuilding downstream operations. To toggle Manual Run Mode for a block, right-click the block and select Manual Run Mode. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/manual_run_mode.gif) *Manual Run Mode is helpful when you need to change multiple input values before you want a block to compute* #### Rebuild Block Reruns a block that failed, was canceled, or did not run because Toggle Autorun was off. Select the icon shown on the block below to rebuild it. Select the Icon to rebuild the block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/rebuild_icon.png) *The Rebuild Block button will appear next to the question mark icon* #### Error Indicator and Error Log A red icon in the Notebook's top right corner means a block has an error. Select it to open the Error Log, which lists every error in the Notebook; clicking an entry navigates you to the block causing it. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Error_Log.gif) *You can view the full error message by selecting the error in the Error Log* ### Notebook Best Practices Your Notebook documents your work. Months from now, you or a colleague should be able to open it and quickly understand what the workflow does, how it is organized, and what can be changed. A few simple habits make your Notebook easier to understand, maintain, and reuse. * Name and describe your Notebook. Use a name that clearly communicates what the workflow does and matches the file name. Add a description that provides additional context. If the Notebook becomes a Custom Block, this description becomes the block description. * Organize your workflow into Sections. Name Sections after the steps in your process. This lets someone understand the workflow structure before inspecting individual blocks. * Comment where context is needed. You do not need to comment every block. Add comments where you made an important decision, assumption, or choice that may not be obvious later. * Make important inputs Variables. Turn parameters that you expect to change into clearly named Variables so they are easy to find and adjust. * Rename important blocks. Give key blocks meaningful Object Names that describe their role in the workflow. “outer\_shell” is much easier to understand later than “Implicit Body\_0”. * Collapse what you are not using. Collapse blocks whose parameters don't need to remain visible, and collapse completed Sections. This reduces clutter and makes the active parts of your workflow easier to scan. * Not everything needs to be a Variable. Too many Variables can make a Notebook as difficult to understand as too few. As a general guideline, create a Variable when a value represents a design decision, is used in multiple locations, or may need to be modified when you reuse the workflow. Assign each Variable a clear, descriptive name. If a value is only an intermediate result, leave it nested and collapse the block. * In Course 2, you will use Variables to parameterize relationships between geometry, allowing changes to automatically drive the rest of the workflow. ## Block Overview ### Output Types, Block Types, and Block Colors Every block has an Output type and a block type. The Output type defines what the block produces and is indicated by its color. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/block%20types%20with%20labels.png) *Block types are best distinguished by their colors and icons* Output Types fall into six categories: | **Category** | **What it covers** | | - | - | | CAD | Imported CAD geometry | | Data | Numbers and values — Scalar and Integer are both Data sub-categories | | Field | Scalar, vector, and other fields | | Implicit | Implicit bodies | | Lattice | Lattice and graph geometry | | Simulation | Analysis setup and results | Some categories contain subcategories, and each Output Type can include many block types. Because there are far more block types than Output types, color tells you what a block produces, while its icon identifies the block type. See the full list in block types in the nTop Product Documentation. Some blocks also support Overloads, meaning the same block can have multiple configurations and, in some cases, return different Output types. Blocks that support Overloads have a drop-down beside the Block Name for selecting a different configuration. For example, with the Add block, a user can select the following overloads for both inputs *Operand A* and *Operand B*. Below are the overloads for the **Add** block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Overload.gif) *Blocks that have one or several overloads available will have the chevron drop-down next to the block name* You may also encounter Variants. A Variant is a block whose type can change based on the block, Variable, or value provided in the input. This allows the same input to accept multiple compatible types. In this example below, the same Box is a valid input for both an implicit body variable and a box variable. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/variants.png) *A Box block can be both a Box type and an Implicit Body type* The Chevron Icon beside the Block Icon changes the Block Type. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Changing_block_type.gif) *Use the chevron drop-down menu on the block icon to change the block type* Together, Overloads and Variants let blocks adapt to different inputs and outputs, reducing the need for separate blocks that perform closely related operations. ### Block Anatomy ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Block%20Anatomy.png) *A labeled diagram of a block* > **1. Collapse** > > The chevron on the left expands or collapses the block. Hotkey: Spacebar > **2. Block Color** > > The bar down the left side. It is the Output Type. > **3. Block Icon** > > The Block Type. A list icon layered over it means the block is a list. > **4. Block Type Overload** > > The chevron beside the Block Icon, where a block's type can be changed. > **5. Block Name** > > The name of the function, e.g., Boolean Union. This is the name you type into the Search bar or look for in the Ribbon. > **6. Overload** > > The chevron to the right of the Block Name, which overloads the block's inputs. > **7. Visibility Icon** > > A solid circle means the output is visible in the Viewport; an empty circle means it is hidden. Toggle with V. > **8. Block Details** > > The question mark icon opens the Block Details panel. Its appearance indicates the block's current state: blue for an unbuilt block, grey for a successfully built block, and a different icon for a yellow warning or red error. > > * Error (red): Must be resolved before the block can run. The block is tinted red, an error indicator appears in the Notebook's upper-right corner, and Block Details explains the issue and how to resolve it. Some errors also include a Learn More button. > * Warning (yellow): Does not prevent the block from running, but may affect the output. > * Alert (blue): Must be resolved before the block can run. Typically indicates missing or incomplete information, such as an empty required input. > > Note: Only errors appear in the Error Log. If an error occurs inside a collapsed section, an error icon appears beside the section so you can locate it without expanding the Notebook. > **9. Rebuild Block Icon** > > Appears when the block needs to be rerun. Click it to rebuild. > **10. Input Icon** > > Each input carries an icon showing the Output Type it accepts. > **11. Input Name** > > What the input is for. > **12. Input** > > Click in it to type a value or a block name. Typing a name opens a search that lists blocks already in your Notebook first, then other blocks that satisfy the input type. You can also drag and drop a block into an input. An unacceptable input is outlined in red. > **13. Units** > > Shown to the right of the input where applicable. ### Three kinds of blocks look different from the rest: * Variables: Their name appears on the left over the block color. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/variable_block_box.png) *An example of a Box block variable* * List blocks carry a list icon over the Block Icon and show the list size in brackets after the name; add inputs with the '+' in the upper right, remove one with the '-' that appears when you hover. (More on working with Lists in Course 2) ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/list%20block.png) *An example of a block list* * Custom blocks have a double line down the left side, indicating a full workflow underneath. (More on working with Custom Blocks in Course 3) ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/sample_CB.png) *Custom blocks have a double line symbol* ### Block properties Blocks carry more information than what appears in their inputs. Click the question mark icon on a block to open Block Details, which contains Properties and Comment tabs. We already covered Comments, so here we will focus on Properties. The Properties tab contains values the block computes automatically, such as a body's bounding box or a mesh's element count. Properties appear as chips that you can drag into another block's input or expand to view nested properties. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/block_properties.gif) *Clicking the question mark icon opens a block's Properties Panel* Properties help create parametric relationships. For example, instead of entering a fixed offset distance, you can drive it with a dimension from the geometry's bounding box. As the geometry changes, the offset updates automatically. The simple example below shows a sphere's center point updating automatically because it is driven by the cube's *Max Point* property. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/block_propoerties_spherecube.gif) *Parameterizing blocks using block properties allows them to adapt as the design changes* Dragging a property into the Notebook creates a Variable linked to its source block. In Course 2, we will use Variables and Block Properties together to parameterize relationships between geometry. ## Keyboard Shortcuts > **Mouse Controls** > > | **Control** | **Mouse Action** | > | - | - | > | Left-click | Select | > | Right-click | Object context menu | > | Right-click + drag | Rotate camera | > | Right-click + drag + Shift, or middle mouse button + drag | Pan camera | > | Right-click + drag + Ctrl, or middle mouse button + scroll | Zoom camera | > | Ctrl + left-click | Select multiple blocks | > | Ctrl + drag | Create an identical, linked instance of a block | > > > [!NOTE] > > > > **Note:** Ctrl + drag is not the same as Duplicate. It creates an *identical instance*, so changing an input on one affects the other. Duplicate makes an independent copy. Use Ctrl + drag when you want the two to stay in step, and Duplicate when you don't. > > > [!NOTE] > > > > **Note:** nTop also supports a 3Dconnexion Space Mouse for navigating in 3D, though you can't map specific actions to its buttons. > **Notebook** > > | **Shortcut** | **Action** | > | - | - | > | Ctrl + L | Jump to the Search bar | > | S | Context Search on a selected block; Search in Place on a dividing line | > | Ctrl + F | Open the Left Side Panel and start a Notebook search | > | Ctrl + 1 | Open or close the Left Side Panel | > | Ctrl + 2 | Open or close the Right Side Panel | > | Ctrl + 3 | Open or close the bottom panel | > | Ctrl + D | Show or hide the Ribbon | > | Spacebar | Collapse or expand the selected block | > | Ctrl + Shift + Left Arrow | Collapse all sections | > | F2 | Rename the selected block | > | P | Open the properties panel for the selected block | > | Ctrl + M | Make the selected block a variable | > | Ctrl + A | Select all visible blocks | > | Delete | Delete the selected block | > | Esc | Exit the search | > **Viewing Your Model** > > | **Shortcut** | **Action** | > | - | - | > | Z | Zoom to the selected block's object | > | V | Toggle the selected block's visibility | > | T | Toggle the selected block's transparency | > | I | Isolate — hide everything except the selected block | > | F | Open the Field Viewer | > | X | Open Section Cut | > | M | Open the Measure tool | > | Alt + G | Toggle the grid | > | Alt + R | Toggle the ruler | > | Ctrl + H | Precise Render | > **Files & Editing** > > | **Shortcut** | **Action** | > | - | - | > | Ctrl + N / Ctrl + O / Ctrl + S | New / Open / Save | > | Ctrl + Shift + S | Save As | > | Ctrl + I | Import | > | Ctrl + Z / Ctrl + Shift + Z | Undo / Redo | > | Ctrl + X / Ctrl + C / Ctrl + V | Cut / Copy / Paste | > | Ctrl + Alt + V | Paste with References | > | Ctrl + Q | Exit nTop | > **Printable One Sheet** > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/keyboard_shortcuts_one%20pager.png) ## What to Take Away * Treat the Notebook as a reusable engineering workflow, not simply a record of geometry creation. * Give the Notebook a descriptive name that matches the file name, and add a brief description explaining its purpose. * Organize blocks into clearly named Sections that reflect the workflow's major stages. * Use meaningful names for key blocks and Variables so their roles are immediately clear. * Create Variables for important design inputs that will be reused or adjusted, while leaving intermediate values nested. * Add comments to document important decisions, assumptions, or non-obvious logic. Comments are searchable and make the Notebook easier to navigate. * Use Autorun and Manual Run Mode strategically to avoid unnecessary computation while making or testing expensive changes. * Choose duplication and copy-and-paste methods carefully to preserve references and dependencies where needed. ## What's Next Now that you know how to navigate the Notebook, work with blocks, and inspect their outputs, the next lesson will look at one of the core ideas behind how nTop creates geometry: signed distance fields, or SDFs. # The Procedural Implicit Geometry Engine Source: https://docs.ntop.com/lessons/ntop-implicit-foundations/the-procedural-implicit-geometry-engine ## Before we start: a thought experiment Imagine you've spent the last three weeks lofting the outer mold line (OML) of a new aircraft fuselage—the continuous aerodynamic skin that defines the aircraft's external shape. Every other component must either fit within it or blend seamlessly into it. The nose cone transitions smoothly into the center fuselage and tail cone, wing and empennage fairings are carefully integrated into the surface, duct cutouts are incorporated, and dozens of splines maintain the “Class A” surface continuity required for aerodynamic performance. Then the aerodynamics team walks over: “We need 12 configurations for tomorrow's trade study—different fineness ratios, three wing sweep angles, and a stretched variant with two additional fuselage sections. Can you update the OML for all of them?” In a traditional CAD system, that's a risky request. Stretch the fuselage too far or sweep the wing beyond the range the fairing was designed for, and the surface operations that built the original model may fail to regenerate, or worse, regenerate into an invalid or unusable geometry. What should be a simple design change can quickly turn into hours or days spent repairing broken geometry. This lesson introduces the geometry engine beneath nTop that changes that equation: implicit modeling. You'll learn how its mathematical representation makes complex geometry faster to generate, more reliable to modify, and easier to automate. ## So, What Is nTop? Before going further into how nTop works, it's worth pausing on what it actually is. nTop is computational engineering software built for exactly the kind of problem you just read: cases where geometry itself is the bottleneck. nTop is computational engineering software for workflows in which geometry becomes a bottleneck. It helps engineers create and iterate on complex, performance-driven geometry that would be difficult or inefficient to build using traditional CAD alone. You'll find it embedded in workflows across aerospace, defense, and automotive — anywhere teams are pushing toward designing faster. The common thread: geometry that is especially complex, highly iterative, or difficult to scale efficiently in traditional CAD. To help you understand what makes nTop unique and how it enables rapid iteration for high-performance designs, let's hear directly from our founder, who will explain the vision and principles behind the platform. [https://www.youtube.com/embed/ok7BSuSLh2U](https://www.youtube.com/embed/ok7BSuSLh2U) ## What Is Implicit Geometry? (And How Is It Different From B-Rep?) Nearly every traditional CAD system represents geometry as a boundary representation (B-rep): a watertight skin made up of faces connected by edges and vertices. When you select a rounded corner or planar surface, you're interacting with an actual face that has been explicitly created and stored by the CAD system. nTop takes a fundamentally different approach. Instead of storing faces, it represents geometry mathematically using a signed distance field (SDF)—also known as an implicit function or i-function. Rather than describing the boundary directly, this function can be evaluated at any point in 3D space and returns a single value: * Negative → the point is inside the body * Positive → the point is outside the body * Zero → the point lies exactly on the surface No matter how complex the geometry becomes, the representation follows the same principle: provide an (x,y,z) coordinate, and the function returns that point's relationship to the body. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/SDF-Sphere.gif) *The Sphere's implicit field showing how interior values are negative, the boundary of the sphere is 0, and exterior values are positive.* Mental model: a B-rep sphere is curved patches stitched at their edges. An implicit sphere of radius 3 centered at the origin is given by the equation F(x, y, z) = √(x² + y² + z²) − 3. Move the center, change the radius — same formula, different numbers. More complex bodies are built by combining and transforming functions using operations such as minimum, maximum, offsets, and spatial mappings. ## What implicit geometry is *not* New users often ask, “Why can't I click on a face?” The answer is simple: there isn't a persistent face to click. nTop doesn't store geometry as faces, edges, and vertices. Instead, what you see is a visualization generated from the underlying mathematical field. This is intentional. In traditional CAD, selecting a face creates a dependency on that specific piece of topology. If the geometry changes enough, that face may disappear, causing downstream features to fail. In nTop, workflows are built from mathematical relationships and parameters instead of face references, making them far more robust to large design changes. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/parametric-blade.gif) *Implicit Modeling allows for real time updates as you change parameter values in the notebook* ## The Programmatic Nature of Implicit Geometry Because geometry is represented mathematically, an nTop model is a graph of operations rather than a stored shape. The nTop Notebook is the workspace where you build and organize an nTop model as a sequence of connected operations. Each block acts like a function, taking typed inputs and producing an output that feeds downstream operations. Data flows through the notebook much like variables flow through a program, resulting in a 3D design. If you've worked with a CAD model tree, the nTop Notebook will feel familiar. Both record modeling operations and let you change earlier inputs to rebuild the model. The difference is what those operations depend on. A CAD feature may reference specific topology — a fillet on specific edges or an extrude from *a* specified sketch. An nTop block stores a function and its inputs, so it isn't tied to a particular face or edge. Change something upstream, and the block simply re-evaluates. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/cad_notebook_graph.png) *A traditional CAD modeling tree diagram (left) versus an nTop Notebook using a block system (right)* This supports a requirements-driven approach: define what the design must achieve, translate those requirements into rules and relationships, and connect them into a parametric workflow. In that sense, the notebook becomes the source code for the design, capturing both the geometry and the logic that generates it. For now, think of the notebook as where that design logic lives. Later courses will cover how to build, organize, and reuse these workflows. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/wing-diagram.gif) *The nTop notebook can be expanded to view smaller image details in comments* Because the workflow captures engineering logic rather than a single static shape, parameters and inputs can change while the same logic is reused. Changes propagate automatically, allowing teams to generate new configurations and explore larger design spaces with far less manual rebuilding. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/parametric%20input%20demo%20turbine.gif) *Parametric inputs allow for rapid design iterations* ## Why nTop Uses an Implicit Geometry Engine ### Speed of compute An implicit body is defined by mathematics, not topology. Instead of solving complex surface intersections, many geometric operations can be expressed as direct field evaluations rather than repeated surface-intersection and topology calculations. The efficiency gains can be dramatic. A gyroid lattice, for example, is described by a single equation: *F(x,y,z) = cos(x)sin(y) + cos(y)sin(z) + cos(z)sin(x)* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Real-time%20visualization%20-%20Gyroid%20heat%20sink.gif) *Gyroid Heat Sink with changing XY-Period* Whether that lattice contains 1,000 cells or 1,000,000, the underlying representation is still just the equation. On a 10,000-cell gyroid heat exchanger, this translated to 2 minutes to generate in nTop versus 6 days in a traditional B-rep workflow, while the model occupied 1.3 MB instead of 1.5 GB on disk. Because these operations are straightforward arithmetic rather than branch-heavy topology calculations, they also parallelize exceptionally well on modern GPUs, enabling fast computation and visualization of extremely complex models. ### Robustness across wide parameter variations Recall the “12 fuselage configurations by tomorrow” scenario. In a B-rep workflow, major parameter changes can invalidate downstream booleans, fillets, and blends because those features depend on maintaining valid faces, edges, and intersections. In an implicit model, the same operations are derived directly from field functions. For example, the union of bodies A and B is represented by min(F\_A, F\_B). Offsets, shells, and blends are likewise defined mathematically rather than by trimming and stitching new surface topology. Because downstream operations do not depend on persistent face or edge identities, large geometric changes are less likely to create broken references. This makes implicit workflows well-suited to design exploration and unattended parameter studies. ### Scalability and automation Speed and robustness make automation at scale practical. Instead of manually rebuilding 12 fuselage configurations, the same notebook can be evaluated using 12 parameter sets for wing sweep, fineness ratio, and fuselage length. The same approach extends to optimization and generative studies involving hundreds or thousands of variants because the workflow captures reusable computational logic rather than referencing specific faces and edges. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/Aircraft%20gif.gif) *An nTop notebook generating multiple airplane design iterations* using parametric design ## Using Implicit Geometry Downstream Eventually, the equation becomes something tangible: a machinable file, an analysis-ready mesh, or an assembly drawing ready for sign-off. ### Manufacturing Because the field can be evaluated at any point, nTop can generate a mesh at whatever resolution the process actually needs: coarse for a quick visual check, fine where the process resolves fine features. For additive processes, it can skip the mesh entirely and produce the layer-by-layer slice data that the machine consumes directly from the implicit body. That path matters most for exactly the geometry that gives conventional exporters trouble — a lattice fine enough to produce an unmanageable mesh is no harder to slice than a solid block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/wartsila%20cylinder%20head.png) *Wärtsilä's Engine Cylinder Head: A 270 kg Inconel component that achieved a 60% weight reduction from the original design while consolidating 10 assembled parts into a single component.* ### Simulation The same evaluation-on-demand applies to analysis. Engineers can generate a finite element model and export it to established CAE tools, or run analysis inside nTop. Bringing simulation results back into nTop opens the door to more advanced capabilities. Simulation results — stress, displacement, temperature — come back into the nTop workflow as fields, which can drive geometry parameters. For example, more material can be placed where the loads are, and the design responds to its own performance rather than to a designer's estimate of where the loads will be. Later in the course, we'll explore how simulation results can directly shape geometry through a concept called Field-Driven Design. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/CCAParametricChanges-crop.gif) *Comparing Aircraft Flow Analysis results across multiple wing angle models* ### CAD and the rest of the digital thread Here, the limit isn't nTop; it's what the receiving system can hold. Traditional CAD stores every face explicitly—precisely the cost implicit modeling avoids—so a part with millions of lattice faces may be too complex for a CAD system to represent efficiently. nTop addresses this by matching the representation to the downstream need. Simpler parts, such as topology optimization results, can be converted to full B-rep solids. More complex parts, such as those with intricate lattices, can be represented by a simplified envelope that preserves properties such as weight, center of gravity, and moments of inertia. These exports let designs move into CAD for clearance checks, assemblies, drawings, and other downstream activities without carrying unnecessary geometric detail. nTop also leverages precise curves (lines, arcs, conics, and splines) for implicit geometry construction, which can be exported downstream along with numerical parameters. This data can serve as a reference for automated or manual surface construction in CAD for parts that require highly tailored surfaces. From there, nTop can fit into the broader digital thread, with design outputs passing through CAD and into existing PLM systems for product data management and lifecycle processes. The goal is not to force maximum geometric fidelity into every system, but to provide the representation and data each stage of the product development process needs. | **Activity** | **Part Complexity** | | | | - | - | - | - | | [Low](#h-01g63d2sqyxf06dmz8gm3b4mz0) | [Medium](#h-01gxxm35ge8nwhgk3addz4p5bq) | [High](#h-01g63d375q1rey9jxz6nc8s67a) | | | A low complexity part | A medium complexity part. | A high complexity part. | | | Top Opt parts, Unfilled Shells | Graph Lattices with \< 10k beams TPMS Lattices with \< 1k cells | Graph Lattices with > 10k beams TPMS Lattices with > 1k cells | | | [Visualization](#h-01g63czhwh7eghbbcb0n3jt7hz) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | | [Clearances](#h-01g63czvvhym8c81b32h3z5vzk) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) or [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | | [Weight studies](#h-01g63d05j38x8s6t5de7ycx0z9) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) or [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | | [Assemblies](#h-01g63d0d6mn4z0v3eqftk0szv9) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | | [Part additions](#h-01g63d0p9chq8w6crq9wnbyt2y) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) (or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) in NX) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) or [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | | [Part mods](#h-01g63d0zs9bfw2t4yv6r9t30cj) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Quad Mesh](#h-01g6jx3rq35rkh8tffq3kc4q0p) | N/A (in lattice region) | N/A (in lattice region) | | [Drawings](#h-01g63d1a020vggsamddc0gns9q) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) or [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) or [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | | [FE modeling](#h-01g6bkcmckdjybpb6vwzkbmtxv) | [FE Data](#h-01g6bkcmckdjybpb6vwzkbmtxv) | [FE Data](#h-01g6bkcmckdjybpb6vwzkbmtxv) | [FE Data](#h-01g6bkcmckdjybpb6vwzkbmtxv) | | [Complex CAM](#h-01g63d21wveppknjmjg2vafa7t) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w), or very fine [Tri Mesh](#h-01g6jwyagh7ngdyz77htpxk37y) | N/A (in lattice region) | N/A (in lattice region) | | [Archiving](#h-01g63d2aa19b3pmgrt4k6zc44p) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) (native CAD format) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) (native CAD format) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | | [Delivery](#h-01g63d2hr40329x8kmf39mr6m4) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) (native CAD format) | [CAD](#h-01g6jww0z8cpkx3x1sefg60t1w) (native CAD format) | [Simplified Body Representation](#h-01g6jx17k05q0jhrt81wekwdk4) | ### Implicit interop: Handing over the function itself Every path described so far is a conversion, and every conversion has a trade-off. A mesh, voxel grid, or slice stack is an approximation with a tolerance difference at the time of export. Increasing accuracy increases file size—sometimes dramatically. The exported result is also inert: a collection of triangles or faces with no knowledge of the rules that produced it. There is a fourth path that avoids the conversion entirely. Rather than exporting an approximation of the body, nTop can export the implicit body itself — the function — in a compact file that a receiving application evaluates on demand. Nothing is tessellated, so nothing is lost. Files are typically generated in under a second and can be a small fraction of the size of the equivalent mesh. This works in two ways. Some partner applications read the format natively: EOS's build preparation software, for instance, can import an nTop implicit body and prepare it for printing without a mesh anywhere in the chain. Teams can also build their own integrations, calling a library that loads an implicit file and answers questions about it — the location of the surface, the overall volume, and the slice information at a given plane. The geometry stays exact all the way to the machine. There's a practical side benefit worth knowing. An implicit file carries the shape but not the notebook that generated it, allowing a supplier or partner to receive the buildable geometry without the engineering logic behind it The limitation is straightforward: this path only works where the receiving end knows how to evaluate a field. Most of the CAD and CAE world still expects boundaries, which is why the conversion routes described in earlier sections are frequently used. Implicit interop is the direction the ecosystem is moving in, but not yet the default. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/EOS%20Print%20Short%20Video.gif) *Scrolling the build layers of a model in EOSPRINT* ### The handoff runs one way Whatever path you take, note the direction. An exported mesh or CAD body is a snapshot of the design at one set of parameter values. Editing that snapshot in another tool does not update the notebook that produced it. When the design changes, you don't repair the export — you change the parameters and regenerate it. This is also why traditional CAD stays in the picture. It remains the better alternative for assemblies, mechanisms, drawings, and manufacturing documentation. nTop's strength is upstream of all of that: generating and iterating the geometry itself. ## What to Take Away * B-rep stores a surface; implicit stores a function. Instead of faces, edges, and vertices, nTop stores a signed distance field that can be evaluated at any point in space to determine whether that point is inside, outside, or on the body. * There's no face to click because no face is stored. What you see on screen is a visualization generated from the field, not the geometry itself. * A model is a graph of operations, not a shape. The notebook captures the engineering logic — rules, relationships, and parameters — and re-runs it whenever an input changes. * Complexity costs far less. A gyroid is one equation whether it has 1,000 cells or 1,000,000. On a 10,000-cell heat exchanger, that meant 2 minutes instead of 6 days, and 1.3 MB instead of 1.5 GB. * Large design changes don't break the model. Nothing downstream depends on a specific face or edge that a parameter change might destroy, so operations that would fail in a B-rep workflow simply re-evaluate. * Robustness is what makes automation practical. Twelve fuselage configurations become twelve parameter sets in one model, not twelve manual rebuilds — and the same logic scales to hundreds. * The implicit model is the source, and everything else is generated from it. Meshes, CAD bodies, and machine files are produced at the fidelity each downstream tool needs; when the design changes, you regenerate them rather than repair them. ## What's Next You now know why nTop represents geometry the way it does, and why that choice pays off in speed, robustness, and scale. That's the foundation on which everything else in this course builds. The next lesson places nTop within the broader product-development process through real engineering examples. After that, you'll move from theory into practice by opening nTop and building your first workflows. # Where Does nTop Fit in Product Development? Source: https://docs.ntop.com/lessons/ntop-implicit-foundations/where-does-ntop-fit-in-product-development ## Picking up where we left off In Lesson 1, you sat with the design engineer who was asked for 12 OML configurations by tomorrow — and you learned why nTop's implicit, field-based representation means that a request doesn't end in broken geometry. This lesson explores the following question: *If geometry can survive unlimited changes, what does that unlock for how a team builds a product — from the first sketch of a concept to a part coming off a manufacturing line?* The answer? It changes where and how design, analysis, and manufacturing interact. This lesson explores that shift and why nTop can play a role across multiple stages of product development, not just at a single step. ## One engine, many entry points Because an nTop model doesn't break under large parameter changes, the same underlying workflow can be pushed on from multiple directions at once: a systems engineer changing a performance requirement, a stress engineer tightening a load case, a manufacturing engineer adding a forming constraint. None of those changes requires rebuilding the geometry from scratch. That's the real answer to “where does nTop fit” — not at one stage, but as connective tissue across every stage **.** The four case studies later in this lesson each show that same engine showing up at a different point in the timeline: | **Case Study** | **Where they use nTop** | **Stage Requirements** | | - | - | - | | Specter Aerospace | Conceptual / preliminary vehicle design | Survive huge shape changes across a trade space | | Machina | Encoding manufacturing constraints | Bake process limits into the model itself | | Ocado | Detailed design optimization | Generate and validate hundreds of structural candidates fast | | Cobra Puma Golf | Detailed design optimization | Reuse workflow logic across entirely different products | ## Waterfall vs agile – why this distinction matters Most hardware programs still run on a waterfall model: requirements → concept → detailed design → analysis → manufacturing → test, each phase gated behind sign-off on the last. It works, but it's brittle; a problem found late is expensive to fix, and in a B-rep world, a late design change is exactly what breaks the model. Because nTop's geometry doesn't break, teams can run something closer to an agile/concurrent model—where design and analysis loop continuously, and where conceptual and detailed design can happen *at the same time* instead of waiting on each other. | | **Waterfall** | **Agile / Concurrent (nTop-enabled)** | | - | - | - | | Design Changes | Expensive late in the cycle | Cheap at any point | | Analysis | A validation gate at the end of a phase | A continuous loop inside the design process | | Manufacturing constraints | Discovered during DFM review, often too late | Encoded into the model from day one | | Best fit | Large, milestone-driven, regulated programs | Fast-moving teams, iterative sprints | nTop doesn't force a team into one model or the other — it shows up successfully in both. It removes the technical reason teams were historically forced into waterfall in the first place: fragile geometry. That's why you'll see nTop equally at home inside a defense prime's stage-gated program and a startup's weekly sprint. ## In-product analysis & external solver integration The second reason nTop shows up at so many points in a pipeline is that it doesn't force a choice between “design tool” and “simulation tool,” and it plays well with tools already in your stack. Inside of nTop, natively: * Linear static, thermal, modal, and global buckling structural analysis * Topology optimization and field optimization * Flow Analysis — a GPU-accelerated, meshless CFD solver for rapid internal-flow exploration Outside of nTop, when a validation-grade result or a specialized physics solver is needed, nTop exports clean geometry or meshes to the tools already in use — Ansys Fluent, Siemens Simcenter STAR-CCM+, SimScale, Luminary Cloud, Hexagon scSTREAM, and standard FE formats (Abaqus, Nastran, LS-DYNA, and more). A similar pattern runs through every case study below: use nTop's fast, built-in analysis to quickly explore the design space, then hand a clean, optimized geometry to a specialized external solver for final validation—without leaving the parametric model or rebuilding the geometry by hand. ## Case study 1 — Conceptual / Preliminary Vehicle Design: Specter Aerospace **Industry:** Aerospace & Defense (hypersonics) **Application:** Parametric hypersonic vehicle model ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%201/Images/specter%20aerospace.gif) *Demonstrating the parametric design of Specter Aerospace's hypersonic vehicle by adjusting the Fuselage Radius* Specter Aerospace designs hypersonic vehicles — a domain where a single change in sweep angle could historically break a CAD feature tree and cost a team weeks of repair. In a 3-day workshop with nTop's field engineering team, Specter built a fully parametric outer mold line (OML): fuselage, wing, inlet, combustor integration, and duct routing, all tied directly to performance parameters. Why this matters for waterfall vs. agile: Concept design and detailed component design normally happen in sequence — lock the outer shape, then start on the combustor months later. Because the geometry doesn't break when parameters change, Specter runs both tracks in parallel: while the OML is still being refined, component-level engineering is already underway. That's a structural shift toward concurrent engineering, not just a speed improvement. In-product analysis + external solvers: The parametric OML feeds directly into Specter's MDAO workflow with no geometry cleanup. On the combustor side, the team exports clean fluid volumes straight to their own custom heat-exchanger solver, compressing a thermal-analysis iteration from over a day to about 20 minutes. Headline numbers: A concept model that used to take about three weeks now takes about two days — and the team generated eight full airframe/engine/packaging variants, fully analyzed, in five days using the same model and analysis package. [https://www.youtube.com/embed/P0-VASNxaw0](https://www.youtube.com/embed/P0-VASNxaw0) ## Case study 2 — Encoding Manufacturing Constraints: Machina **Industry:** Advanced manufacturing (AI-driven robotic metal forming) **Application:** Dieless sheet-metal forming (“Roboforming”) for aerospace and defense structures Machina builds software-defined factories where pairs of industrial robots incrementally shape sheet metal — titanium, high-strength aluminum, and more — into finished parts with no dies, molds, or dedicated tooling. That only works if the digital design already respects the physics of the forming process: minimum bend radii, achievable draw depth, springback, wall-thickness limits. Machina's own team includes several engineers with an nTop background, and the two companies have publicly demonstrated joint projects, including a Class 3 UAV airframe built with zero hard tooling. Why this matters for waterfall vs. agile: In a stage-gated process, “design for manufacturability” is usually a *review* — a separate team checks a finished design against process limits, and a failure sends it back to square one. When manufacturing constraints are encoded directly as parameters inside the model, that review becomes continuous: every geometry the model can produce is already inside the manufacturable envelope. That's what enables reconfigurable, rapidly-iterated defense and aerospace programs, where a design has to change *and* still be buildable the same day. In-product analysis + external solvers: Because tooling isn't fixed, the constraint that matters shifts from “can this be die-cast” to “can this be formed within this robot cell's process window” — a rule nTop can encode directly in the model, then hand off to Machina's manufacturing execution system. [https://www.youtube.com/embed/2H1Pe5Qwc9M](https://www.youtube.com/embed/2H1Pe5Qwc9M) ## Case study 3 — Detailed Design Optimization: Ocado (Topology Optimization & Static Analysis) **Industry:** Robotics/grocery fulfillment automation **Application:** Lightweighting the chassis of Ocado's “600 Series” fulfillment robot Ocado's warehouse robots race across a 3D grid at up to 4 m/s, retrieving crates of groceries. Every gram matters — lighter bots need smaller motors and batteries, put less strain on the grid, and let Ocado build lighter, cheaper grids overall. Ocado's team used nTop's topology optimization and static structural analysis to rebuild the bot's chassis, generating hundreds of lightweight design candidates per sprint. Why this matters for waterfall vs. agile: Ocado's engineering culture runs on the same sprint-based methodology as its software teams — but that only works for hardware if the design tool can keep pace. Generating and structurally validating hundreds of candidate geometries within a single sprint isn't possible with feature-tree CAD, where every topology change risks breaking the model. This is what lets a hardware team run genuinely agile sprints instead of the multi-week CAD cycle waterfall development. In-product analysis + external solvers: Topology optimization and static analysis both run natively inside nTop, so the loop of “optimize → check stress and displacement → adjust load cases → re-optimize” never requires leaving the tool. The validated geometry then moves into Onshape for team collaboration and out to HP's additive manufacturing hardware for production. Headline numbers: The team cut chassis weight by roughly 50–70%, and public reporting on the resulting bot describes it as multiple times lighter than its predecessor. [https://www.youtube.com/embed/4HUcma6\_L2I](https://www.youtube.com/embed/4HUcma6_L2I) ## Case study 4 — Detailed Design Optimization: Cobra Puma Golf (Field Optimization) **Industry:** Sporting goods **Application:** LIMIT3D — the first commercially available 3D-printed golf irons Cobra wanted an iron with the look and feel of a pro-level forged blade, but the forgiveness of a game-improvement club for average golfers — a combination that depends on precisely controlling where mass sits inside the clubhead, and how the structure vibrates on impact. That's a job for field-driven design: instead of modeling a lattice as thousands of individual struts, nTop represents it as a continuously varying field, letting Cobra tune density, cell style, and orientation smoothly across the part. Why this matters for waterfall vs. agile: Cobra didn't start from a blank sheet — they reused a parametric workflow originally built for a 3D-printed putter and adapted it for an entirely different club. That's the payoff of building workflows rather than one-off models: each new product starts with institutional knowledge already encoded in a block, rather than restarting the design process from scratch. That's a very different, faster development rhythm than a waterfall process where every new SKU begins from a fresh CAD file. In-product analysis + external solvers: Field optimization inside nTop lets Cobra balance three requirements normally handled in separate, sequential steps — mass distribution, acoustic/vibration performance, and print manufacturability (build and lattice orientation) — all in the same parametric model, before exporting the finished implicit geometry into their existing CAD environment for production. Headline numbers: Cobra cut development time by roughly a year, redistributed about 33% of the clubhead's mass to the perimeter for better forgiveness, and eliminated the cost of hard tooling entirely by going straight to additive manufacturing. [https://www.youtube.com/embed/76ACLaWK8EE](https://www.youtube.com/embed/76ACLaWK8EE) ## Bringing it together | **Case Study** | **Development Stage** | **nTop capability emphasized** | **Waterfall -> Agile shift** | | - | - | - | - | | Specter Aerospace | Conceptual/preliminary design | Parametric OML tied to performance parameters | Concept & detail design run in parallel instead of sequentially | | Machina | Manufacturing constraint encoding | Forming-process limits built into the model | DFM review becomes continuous instead of a late-stage gate | | Ocado | Detailed design optimization | Topology optimization + static analysis | Hundreds of validated hardware candidates per software-style sprint | | Cobra Puma Golf | Detailed design optimization | Field/lattice optimization + reusable workflows | New products start from proven workflows, not blank CAD files | Whether a team is locked into a regulated, milestone-driven waterfall program (Specter, operating under defense export controls) or running fast software-style sprints (Ocado, Cobra), the same unbreakable, parametric engine from Lesson 1 removes the technical reason those teams would otherwise be forced to work sequentially around fragile geometry. ## What to Take Away * nTop's robust, implicit modeling engine supports workflows across conceptual design, detailed engineering, analysis, and manufacturing. * Because geometry remains stable through significant parameter changes, teams can explore more design variations without rebuilding models repeatedly. * Design, analysis, and manufacturing constraints can be integrated earlier and evaluated concurrently, enabling more iterative and agile development. * nTop provides built-in analysis tools to support rapid design exploration and integrates with external solvers for detailed analysis and final validation. ## What's Next You've now seen the implicit geometry engine (Lesson 1) and where it shows up across a real product development timeline (Lesson 2). Lesson 3 builds on the same idea one level further: if a workflow is reusable and unbreakable, what happens when you stop running it manually? # nTop Workshop Preparation Source: https://docs.ntop.com/lessons/ntop-workshop-preparation/overview ![nTop workshop preparation: solid and transparent structural view of aircraft design](https://storage.googleapis.com/files-learn/lessons/homepage/ntop-workshop-preparation.png) Welcome to nTop! This course is designed to establish the essential knowledge and skills you need to prepare for a successful workshop. By completing these lessons, you'll build a solid foundation that will help you follow along during the workshop, understand how to leverage the true power of nTop, and set you on a path of continued success with nTop. Here's what you'll accomplish in this course: 1. Learn **what nTop is** and how it empowers engineers 2. Dive into nTop and **build your first workflows** 3. Understand **implicit modeling** and how it unlocks faster design and better performance Upon completion of this course, you'll have the foundational understanding necessary to confidently advance through more specialized nTop training and begin applying these powerful tools to your own design challenges. # Conceptual Aircraft Design Webinar Source: https://docs.ntop.com/lessons/parametric-aircraft-design/conceptual-aircraft-design-webinar Explore how nTop is transforming conceptual aircraft design with robust, reusable parametric models and simulation-driven workflows. These two webinar recordings show how you nTop parametric implicit modeling creates robust, simulation-ready aircraft geometry that adapts instantly to major configuration changes to accelerate iteration, unlock greater design insight, and avoid costly downstream changes. [https://www.youtube.com/embed/5HSJ0Rr2Sho](https://www.youtube.com/embed/5HSJ0Rr2Sho) [https://www.youtube.com/embed/vMjWpSyUAh0](https://www.youtube.com/embed/vMjWpSyUAh0) # Modeling a Fuselage Source: https://docs.ntop.com/lessons/parametric-aircraft-design/modeling-a-fuselage In this lesson, we'll model a fuselage using splines and conics. Aircraft fuselage geometry can range from simple streamlined forms to highly complex shapes with intricate cross-sectional variations. We'll focus on a straightforward approach that demonstrates core modeling principles using spline curves to define the fuselage profile and conic sections to control cross-sectional shape transitions. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/image-35.png) ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/image-34.png) > [!TIP] > > **Tip:** > *There are various ways to approach fuselage modeling depending on your specific requirements. For more advanced control, consider exploring detailed parameterization schemes for design variants or cubic Bézier curves for precise curvature management.* We will create our fuselage through these steps: 1. Define **guide splines** for the top, bottom, and side profiles. 2. Establish a **central axis** and calculate **distance fields** from each spline. 3. Generate fuselage surfaces using **conic sections**. 4. Apply **bounding boxes** and **boolean operations** to create the final geometry. You can follow along using the example file. **Downloadable Files:** [Fuselage.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Fuselage.ntop) *This file was last updated in nTop 5.53.2* ## 1. Guide Splines We'll begin by creating the top, bottom, and side splines to guide our fuselage surfaces. These will define the fundamental shape and proportions of our aircraft body, establishing the overall silhouette from multiple viewing angles. Think of these splines as the wireframe skeleton of your fuselage—together, they create a three-dimensional cage that will guide your surface creation. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/Fuselage-Splines.gif) In this example, we use **Spline by Control Points**, but you can use any curve creation technique you choose (ensuring your individual splines are coplanar). The key is ensuring your guide curves maintain smooth, fair shapes without unwanted inflection points that could create surface irregularities in your final fuselage geometry. ## 2. Distance from Central Axis After creating our side, top, and bottom splines, we'll establish a *Central Axis* that represents the centerline of the fuselage. We'll use the x-axis as our longitudinal reference line. ![](https://files.learn.ntop.com/lessons/ramp-block/image-37.png) Next, we need to determine how far each of our guide curves deviates from this *Central Axis* using the **Distance to Curve from Axis** block. This block requires three inputs: our curves, our axis, and the perpendicular direction we want to measure. For the *Side* spline, we'll measure along the positive y-direction to capture the lateral displacement. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/distance-from-side.png) For the *Top* spline, we'll measure in the positive z-direction since it falls above our centerline. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/distane-from-top-1.png) For the *Bottom* spline, we measure in the negative z-direction since it falls below our centerline. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/distance-from-bottom.png) These distance fields will serve as the foundation for blending our guide curves into smooth fuselage surfaces, with each field representing how the surface should bulge outward from the central axis in its respective direction. Feel free to follow the video below to set these fields up. [https://www.youtube.com/embed/43wP95Uy3XE](https://www.youtube.com/embed/43wP95Uy3XE) > **Transcript** > > After creating our side, top, and bottom splines, we'll want to set a central axis that represents the centerline of the fuselage. We'll use the x-axis as the vector that'll drive this. > > Next, we want to determine the difference from the axis that each of our curves are. We'll use the **Distance to Curve from Axis** block where we input our curves, our central axis, and the perpendicular direction we want to measure. So for our side spline, we'll measure along the y direction, which will give us a distance that looks something like this. I'll change my colormap on my Field Viewer to implicit and add our isolines, and I get this field as my result. > > I'll do the same thing for my distance to top and my distance to bottom spline, making sure to adjust my direction for each of them. Note that for the top curve, we'll measure our direction in the positive Z. And for the bottom, we'll measure in the negative since the bottom curve will fall underneath our central axis. ## 3. Conic Sections Now that we've established the distance fields from our *Central Axis*, we can feed them into **Conic Distance Field** blocks to generate the top and bottom surfaces of our fuselage. The conic surface creates smooth, controlled blending among three defining points, making it ideal for aircraft fuselage geometry. > [!NOTE] > > **Note:** > *This block was named* **Conic** *in nTop versions prior to 5.31. Since 5.31, it takes* **2D Vector Field** *inputs rather than 3D vector fields.* We'll use **2D Vector Field** blocks to define *Points 1*, *2*, and *3* of our conic. * *Point 1*: X is our *Dist to Side* field's *Negative* property, Y is zero * *Point 2*: X is zero, Y is our *Dist to Bottom* field's *Negative* property, positioning the surface below the XY plane * *Point 3*: X is our *Dist to Side* field (no negation), Y is zero. Setting the *Rho* parameter to 1 creates a circular arc between these points * *Coordinate Space*: X is our *Frame*'s *yz plane* property, Y is our *Frame*'s *xz plane* property ![](https://storage.googleapis.com/files-learn/lessons/modeling-a-fuselage/bottom-conic-distance-field.png) > [!NOTE] > > **Note:** > *The* **Distance to Curve from Axis** *block always returns an unsigned (positive) distance relative to the direction you measure along, so we use each field's* **Negative** *property wherever a point needs to fall on the opposite side of the Central Axis: flipping* **Dist to Bottom** *below the XY plane for Point 2, and mirroring* **Dist to Side** *for Point 1.* The *Top* surface follows the same setup, with one difference: *Point 2* uses the positive *Dist to Top* field directly (no *Negative* property needed, since the top surface already sits on the positive side of the axis). This gives us a *Bottom* field like this… ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/image-39.png) …and a top field like this. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/image-40.png) This approach ensures both the top and bottom surfaces blend smoothly from the centerline outward to the side curves, creating the bulbous cross-section of the fuselage while maintaining precise control over the shape progression along the longitudinal axis. Feel free to watch the video below for a more in-depth walkthrough of this setup. [https://www.youtube.com/embed/Frlh7bqfjaE](https://www.youtube.com/embed/Frlh7bqfjaE) > **Transcript** > > Now that we've established our distance fields from our central axis, we can feed them into **Conic** blocks to generate the top and bottom surfaces of our fuselage. To do this, we'll drive *Points 1*, *2*, and *3* with the **Vector Field from Components** blocks. For the bottom surface of our fuselage, Point 1 will be a vector field whose X component is the distance to side field we evaluated in the previous section. Our Y and Z will remain at zero. > > For *Point 2*, our X and Z will be zero, and our Y will be the distance to bottom field multiplied by -1. This will ensure that our surface falls underneath the XY plane in the negative Z direction. And for *Point 3*, we'll use the mirrored version of our distance to side. So for our X, we'll use a **Multiply** block with our distance to side and -1. We'll again leave our Y and Z at zero. Our row can be any value between 0 and 1, so we'll set it at 1 in this case. Finally, add a coordinate space for our X, Y, and Z. We'll just pull planes from our frame variable that looks like this. > > Viewing the field of this bottom surface and adjusting the field viewer size and center, we can view our resulting distance field. This is going to establish the bottom surface of our fuselage. We'll follow a similar setup for our top surface, again pulling in our positive and negative distance to side. Instead of our distance to bottom in our *Point 2*, we'll use our positive distance to top. We'll use the same coordinate space and see this resulting field. ## **4. Bounds** Now we've established conics to represent the top and bottom surfaces of our fuselage. To convert these distance fields into implicit geometry, we'll establish bounds and use a series of booleans to isolate and union our fields. We begin by generating a bounding box that isolates our fuselage geometry. We will do this by combining the 2D bounding boxes from our *Side* and *Top* or *Side* and *Bottom* splines using the **Bounding Box Union** custom block below. This outputs a *Quarter Bounding Box* whose properties we then use in a **Box from Corners** block to generate a *Full Bounding Box*. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/quarter-bb.gif) **Downloadable Files:** [Bounding Box Union.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Bounding%20Box%20Union.ntop) *This file was last updated in nTop 5.30.2* Since our guide splines may have different spans in the positive and negative z-directions, we need an intelligent approach to capture the full extent of our design. Using **If-Else** blocks, we compare the z-span of our top and bottom splines through their bounding box span properties, then conditionally output either a top or bottom quadrant bounding box depending on which spline extends further from the centerline. This ensures our final bounding box always encompasses the largest extent of our fuselage geometry. We then feed similar logic into the *Full Bounding Box* creation to generate the full bounds. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/image-41.png) The final step combines our conic fields through boolean operations. We **Boolean Intersect** our *Top* and *Bottom* implicit bodies, with our *Full Bounding Box*. ![](https://files.learn.ntop.com/lessons/modeling-a-fuselage/final-bounding.gif) Take a look at the walkthrough below to understand the logic for bounding box creation and the boolean operations to generate the final implicit body. [https://www.youtube.com/embed/L7fALIFzqsM](https://www.youtube.com/embed/L7fALIFzqsM) > **Transcript** > > Now we've established conics to represent the top and bottom surfaces of our fuselage. To convert these distance fields into implicit geometry, we'll establish bounds and use a series of boolean operations to isolate and union our fields. We begin by generating a bounding box that isolates a certain portion of our fuselage. > > We'll isolate these portions one quarter at a time. Since each of our splines lies on the XY and the XZ planes, the side and the top, and the side and the bottom splines, will generate 3D bounding boxes with each of their 2D bounding boxes connected to one another. If we were to take this quarter bounding box and repeat it in each of our four quadrants to make a full bounding box, we could take that bounding box and feed it into our final body to generate our fuselage. > > But say the span of our bottom spline is actually larger than the span of our top spline. In that case, our full bounding box wouldn't actually capture the entire geometry we want to create. Therefore, we can use an **If-Else** block to create our ideal bounding box. To do this, we can drag the span in the Z direction from the top and the bottom splines that we created. These will exist in our properties under **Bounding Box Span** and Y and Z. > > We make these into variables for visibility and we can feed them into a **Greater Than** block to output a true or false for our span condition. We feed that boolean output into our condition in an **If-Else** block. Then if our top spline has a larger span in the Z direction, we output a bounding box in our top quadrant. And if our bottom spline has a larger Z-span, we output a bounding box in our negative Z quadrant. Since right now our top spline is larger, this **If-Else** block will output our top quadrant. > > We'll use another **If-Else** block with that same span condition to then output our fully mirrored box. Our top spline being bigger, and we'll take that quarter **Bounding Box Max Point** and generate a second point that outputs this box from corners. > > If instead of our top spline having the larger Z, our bottom Z were larger, giving us a false span condition, our quarter bounding box will output our bottom quadrant, and our full bounding box will look like this. We set that full bounding box by taking this point from our quarter bounding box and generating a second point using math blocks and our quarter bounding box properties. > > Then in our final fuselage variable with our conic field set as well as our bounding box, we can use a **Boolean Intersect** block to intersect the fields of our top conic and the negative of our bottom conic. Scrolling up in our workflow, we can do these fields. The top from the side. > > I'll turn my transparency on so we can view our fields. Scrolling up, we can see the field of our top conic. I'll adjust its size and view it from the side. And the bottom conic will look like this. > > Viewing the negative of its scalar field, we see a field that looks like this. So if we intersect these two fields, we end up with this. Outside of our design space, we see these overlapping fields. So our last step is intersecting this field with our full bounding box that we created above. That generates this geometry which is a fully enclosed negative field that gives us our final fuselage. # Modeling a Single Panel Wing Source: https://docs.ntop.com/lessons/parametric-aircraft-design/modeling-a-single-panel-wing Let's begin by modeling the wings. We will set this up as a custom block so we can use it both now and in future workflows. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/Wing-Custom-Block-Screenshot-1.png) ![](https://files.learn.ntop.com/lessons/modeling-a-wing/white-background-wing.png) This workflow will demonstrate how parametric design allows you to quickly explore different wing configurations by simply adjusting the input parameters, while maintaining all the complex geometric relationships that make a wing aerodynamically functional. We will model the wings in seven major steps: 1. Define the wing's leading and trailing **edges** to set up the planform. 2. Assign an airfoil using a **profile**. 3. **Parameterize** the edges to stretch and position the airfoil profile along the wingspan. 4. **Mirror** the wing setup to generate symmetric wings. 5. Generate solid, **planar** wings using a bounding box to trim the wing to the planform shape. 6. **Twist** the wings from root to tip. 7. **Rotate** the wings to account for the dihedral angle. Feel free to use the starter file containing only the initial inputs to follow along. **Downloadable Files:** [Single Panel Wing (Starter).ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Single%20Panel%20Wing%20\(Starter\).ntop) [Single Panel Wing.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Single%20Panel%20Wing.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/viewform) *This file was last updated in nTop 5.29.2* ## 1. Edges *Define the wing's leading and trailing edges to set up the planform.* Let's begin by defining the general shape of our wings by creating two curves: one for the **leading edge** and one for the **trailing edge**. We will keep our modeling operations as simple as possible. Since wings are symmetric, we can begin by modeling the edges of only one wing. We'll mirror this initial geometry later on. The diagram below shows the curves we want to generate to define the highlighted in **blue**. This is a good opportunity to [make a custom block](https://support.ntop.com/hc/en-us/articles/7042784039443-How-to-create-a-custom-block), as many of the parameters that go into this can be used in other aircraft workflows. We will set up the block using the five parameters laid out in the diagram. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/single-panel-wing.png) * **Root Point:** The frontmost point where the wing attaches to the fuselage. * **Root Chord Length:** Wing length from front to back at the root. * **Wing Span:** Full span of both wings. * **Quarter Chord Angle:** Sweep angle measured at 25% chord line; positive values sweep back, negative sweep forward. * **Taper Ratio:** How much the wing narrows from root to tip. The video below walks through setting up a CB to generate the leading and trailing edges of the wing as curves. Follow along via this video, or download the CB and reference the step-by-step walkthrough below. [https://www.youtube.com/embed/wR5oqv3ZqJ8](https://www.youtube.com/embed/wR5oqv3ZqJ8) > **Transcript** > > Let's walk through making this custom block to generate the leading and trailing edges of this single panel wing. Note that the output of this block is the leading edge and the trailing edge of only one of the wings, and later on we'll mirror the wing across the fuselage. > > We'll start with the inputs laid out in this diagram. Run a couple of calculations to help us parameterize our model and then generate our quarter chord, then building our leading and trailing edges around that. Since we're beginning by modeling only half of our platform, we'll start by dividing our full wingspan by two, generating a half wingspan variable. And we've input our root cord length, but we'll need a tip cord length by multiplying that root cord by the taper ratio. Now, we have all the inputs and calculations that we need to generate our quarter cord and our leading and trailing edges. > > To make a quarter cord or the cord that's 1/4 away from the leading to the trailing edge, we'll create two points: QC point and QC point 2. We want to orient this platform on the XY plane so that the fuselage runs along the X-axis. So what we can do to create the first quarter cord point is translate our root point some distance along the X-axis. In this case, that would be 25% of our root chord length. So, all we have to do is translate our object by this vector where we multiply the root cord length by 0.25. So, now if we look at our root point, which is at 0 0, we see our translated point some distance along our x-axis. > > To make our second quarter cord point, we'll want to translate that initial QC point, half the wingspan in the Y direction, and some distance further in the X direction. To determine that X, we'll multiply the half wingspan by the tangent of the quarter cord angle. We'll keep our Z component at 0 mm to ensure our result is all co-planar. We'll check the visibility of that chord. And now if we feed our QC1 and QC2 into a **Line** block, we've generated our quarter cord. > > Now moving forward to the leading edge, we'll do something similar. We already have our root point, which will feed into the first point of the line that creates our leading edge. To generate the second point, all we'll do is translate that second quarter cord point a quarter of our tip cord length in the X direction. That generates this point, which we can feed into our **Line** block to generate that leading edge. > > For the trailing edge, we'll again do something similar. First translating our root point by our root cord length to make our initial point and then translating our QC point 2 by 3/4 our tip cord length that'll generate this second point which we can feed into our **Line** block to generate our trailing edge. > > Now viewing this from the top, we can imagine our fuselage here on the left side of these lines, and we can feed our leading and trailing edges into a **Curve List**. Set those as our output. And now we finished creating this custom block. And because we set this up parametrically, we can now go into our inputs and change any of these around. Maybe adjusting our wingspan or our quarter cord angle to test out different variations of our leading and trailing edges. **Downloadable Files:** [Single Panel Wing Edges.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Single%20Panel%20Wing%20Edges.ntop) *This file was last updated in nTop 5.28.4* ## 2. Profile *Assign an airfoil using a profile.* ![](https://files.learn.ntop.com/lessons/modeling-a-wing/Airfoil-Profile-Screenshot.png) Now, let's generate a wing profile like the one pictured in **blue**. Our goal in this step is to output a closed profile with an SDF that we can use for field driven design later in our modeling. You can take different approaches when it comes generating your airfoil: * **Freehand approach**: Manually define control points and splines for complete creative control * **Parametric approach**: Use mathematical equations and predefined airfoil generators This lesson will use a freehand approach, but feel free to plug in your own equations to generate splines or explore creating industry-standard airfoil generators like the NACA version at the bottom of this section. Our approach will mirror our top spline to the bottom, so feel free to use the custom block below if you plan to follow along. [https://www.youtube.com/embed/7gamYx3oq-c](https://www.youtube.com/embed/7gamYx3oq-c) > **Transcript** > > Now, let's walk through two different scenarios of setting up your airfoil profiles. In the first option, we'll use a freehand approach where we create one spline, mirror it, and then generate a profile from it. In the other, we'll explore a parameterized custom block that allows you to enter a four-digit NACA code and outputs an airfoil profile on its own. > > Something to keep in mind here is that we're modeling with implicit bodies and scalar fields. So the result of this section needs to be a profile with its own sign distance field. That means that later on when we want to remap or apply other field operations to it, we won't run into any issues. > > Let's start with our more freehand approach where we create a spline by control points and then mirror that spline to our notebook. We can add a **Spline by Control Points** block. Then we can add any number of points that we want. I'll add a **Point List** and we'll include five input points. > > Let's make our leading edge fall right where our root point was in the beginning. We can take that root point and drop it in as control point number one. Then maybe for our next control point, we can drag it up in the Z direction a bit. Next, maybe we'll adjust the X and the Z. We'll do the same for the next point. And then maybe our final point or our trailing edge can take into account our root cord length. So, we can right-click and maybe convert this to a **Point** block and use our root chord length as our X. That'll place this final point here at the end. Viewing this from the side, we'll have a point list that looks something like this and a spline that turns out like this. > > Now, say we want to take that spline and mirror it. We can build that out together or we can just use the custom block that we've provided. I'll pull in the **Mirror Spline** custom block and add it to my notebook. And if we right click and open this up, we can see what's going on in here. So, we have a spline that we input and the plane that we mirror it across. And what this block is going to do is take those control points out of your spline and translate each of them by some distance. To define that distance, we use the **Evaluate Field** block where we take the field of the plane and evaluate that field of each of those points. > > Since the field is just an SDF of the plane itself, each of those evaluated values just represents the distance of the points from that plane. So then when we translate those points, we can just take the unit vector of that plane's normal and drag each point in the negative direction. Here we use a multiplier of two. The first instance pulling the points back to the plane surface and the second instance pulling them that same distance opposite the plane. Finally, we take those translated points and feed them into a new **Spline by Control Points** block to generate our mirrored spline. Keep in mind here that will also retain the degree of our initial spline. > > So if we come back here into our original notebook, we can make that **Spline by Control Points** into a variable called top spline, drag it into our mirror block and generate some plane. So viewing this from the side, we see that we have our initial top spline that gets mirrored. > > I'll take this mirrored spline, right click to make it into a bottom spline variable. And then if we view the field of each of those splines, we see that we have these unbounded curve fields on the bottom and the top. So our last step here to create one cohesive profile with assigned distance field is to add the **Profile from Curves** block. Drag our splines into our curve list and view our resulting field. Now we have this fully enclosed profile with that negative on the inside, positive on the outside, and this infinite field in the Y direction. I'll right click and make this into a variable called airfoil profile. > > So you can go about making your own airfoils, creating your own splines, and making your own profiles, or feel free to explore or create your own parameterized custom blocks to generate profiles on your own. One example you can download in the example files is this NACA four-digit airfoil creator that generates these NACA profiles depending on a four-digit code that you input. You can play around with this and see the types of airfoils you can create. I'll right-click and make this into a variable called NACA profile. And now we're familiar with these two different approaches. > [!TIP] > > **Tip:** > You can explore building and using pre-defined airfoil profiles like we see in the [NACA airfoil](https://en.wikipedia.org/wiki/NACA_airfoil) profile generator below. Use 4-digit NACA codes to generate the profile, and plug into your own wing generators in the future! **Downloadable Files:** [Mirror Spline.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Mirror%20Spline.ntop) [NACA 4-Digit Approx SDF.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/NACA%204-Digit%20Approx%20SDF.ntop) *This file was last updated in nTop* 5.28.4 ## 3. Parameterization *Parameterize the edges to stretch and position the airfoil profile along the wingspan.* Now, we have defined our leading and trailing edges and the airfoil profile that will follow them. At the wing's root, the airfoil profile perfectly represents the surface. However, the profile will need to vary from root to tip to accommodate for the wing's taper. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-4.png) Let's examine the field of the profile we created in the previous section. It is constant along the y-direction. If we were to bound the negative (red) space at this point, we would generate a constant extrusion of the airfoil profile. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-5.png) Rather than remain constant along the y-direction, the x- and z- components of our field must respond as the y-component changes. We will capture this spatial variation using [beginner](https://learn.ntop.com/courses/220-intro-to-field-driven-design/) and [intermediate](https://learn.ntop.com/courses/321-intermediate-field-driven-design/) field driven design concepts to help us create a realistic wing shape like we see below. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/remap-1024x323.gif) In the **x-direction**, this means we'll want to generate a field that matches, respectively, the fore and aft points of the airfoil profile to the leading and trailing edges we defined earlier. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-9.png) In the **z-direction**, this means we will need to scale the z-height of the wing based on the ratio of the cross-sectional profile proportional to the profile at the wing's root. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-6.png) Finally, we can remap the airfoil profile, assigning it the new x and z components but maintaining the original y. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-3.png) You can download the custom blocks below and watch the video to build your *X* and *Y* inputs for the remap. [https://www.youtube.com/embed/NyTsxoD7Hkw](https://www.youtube.com/embed/NyTsxoD7Hkw) > **Transcript** > > By this point, we've defined our leading and trailing edges, and we have the airfoil profile that we want to extrude along these edges. If we look at the field of this airfoil profile, change our color map to an implicit, and add our isolines in, we see that we've got this constant field that follows the Y-axis. Now we want to take this field and morph it so that it falls between the leading and the trailing edges. > > To do this, we'll have to take that profile and remap its X and Z components to scale that profile as it moves along the Y direction. The results of our **Remap Field** block should look something like this. Note that our new isolines would remap so that they're conformal between the leading and trailing edges. And we have a new X and Z component while our Y is going to stay the same. So in this parameterization section, we'll see our new X, our new Z, and the same Y that we had in our original airfoil profile. Let's start with the new X. Here we'll use the custom block provided called **Single Panel Wing Parameterization**. Our inputs here will be the leading and trailing edges and our root chord length. > > Right-clicking and opening this custom block, we can see the underlying operations. We start with two fields, one for our leading edge and one for our trailing edge. And these are just going to be sign distance fields radiating from either of those two curves. We then use the **Distance To Curve From Axis** block to measure each curve's distance from the Y-axis along the X direction. This will output two separate scalar fields, one for the distance to the leading edge and one for the distance to the trailing edge. We then feed these into scalar fields A and B where in A we would subtract X from the distance to the leading edge and multiply that by -1. And in B we would just subtract X from the distance to the trailing edge. > > Let's look at an example of what this might look like. I'll scroll to the top just to test this out, double click and add my single panel wing edges just to create a test case. And from my list elements, I'll want to pull in my leading edge and my trailing edge. I'll pull these into my notebook and pull them in to test. > > Now, if I look at my distance to leading edge, I'll see a field that looks like this. Starting at zero and moving to 800 or half of my wingspan, my distance to trailing edge field will look like this. My A field will look like this and my B will look like this. Now I take that A and B and feed them into this **Two Body Field** block that essentially finds the midsurface between those two A and B input fields. To look further into that **Two Body Field** block, you can always right-click and open your custom block. > > Now from that field, I see that I'm at zero at my center, -1 at that trailing edge and positive one at the leading edge. To pull that zero to one of my edges, then all I have to do is subtract one from the field we're viewing. And now I see that my zero falls along this leading edge. Now my field ranges from 0 down to -2. And if I take my root chord length and divide it by -2, then multiply by the field we're viewing, I'll see this result. My field now spans from zero at my leading edge to about 1,200 at my trailing edge. This is going to be my new parameterized X field. So going back into my notebook, I can take that new X and drop it into our remapped field. > > For my new Z, I can expand this block and I can again use this **Distance To Curve From Axis** block. We'll now measure our distance in the X direction to the Y axis from our trailing edge and from our leading edge. We'll subtract the leading from the trailing then divide by our root chord length. > > Now we see the field equal to one at our original profile and 0.5 at the tip of our wing. Note that this is going to match our taper ratio of 0.5. We then take the reciprocal by dividing that by 1. And now we go from 1 to two at our tip. We can multiply that by Z. And if we take that new Z and drop it into our remap block, that'll mean that the Z height scales in this case by 0.5. > > Now, viewing the results of our remapped field, I can use the **Field Viewer** and see how my X and my Z have scaled along this Y direction. **Downloadable Files:** [Single Panel Wing Parameterization.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Single%20Panel%20Wing%20Parameterization.ntop) [Two Body Field.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Two%20Body%20Field.ntop) *This file was last updated in nTop 5.29*.2 ## 4. Symmetric Mirror *Mirror the wing setup to generate symmetric wings.* Remember, the Remap field only applies to one half of our full wing setup. For the rest of our modeling operations, we want to use both halves of the wing. To do this, we need to mirror our Remap field. A standard **Mirror Body** block won't work because it reflects the entire field and would return only the opposite wing, leaving us with the same issue as we see to the right: ![](https://files.learn.ntop.com/lessons/modeling-a-wing/mirror-body-comparison-1024x301.gif) Instead, we'll use a custom block called **Mirror Body Symmetrically** to achieve the result here: ![](https://files.learn.ntop.com/lessons/modeling-a-wing/mirror-symmetric-comparieson.gif) Feel free to download the CB below and watch the clip to see how it works. [https://www.youtube.com/embed/oInBCW7DeJw](https://www.youtube.com/embed/oInBCW7DeJw) > **Transcript** > > By now, in our platform setup, we've set up our leading and trailing edges, created our airfoil profile, and then remapped our initial implicit field to a newly parameterized field in the X and Z directions. Up to this point, we've only been working with half of our platform, or one of our wings, for our aircraft. Now, we've come to the point in our setup where we want to mirror that wing and work with both wings. > > From now on, if I were to take this remapped field and drop it into a **Mirror** block, I could assign some plane for it to mirror across, and the result would represent our opposite wing, and we would be faced with the same problem. What we'll actually need to do is set one side of that remapped field to its actual values and the side opposite the plane to zero. From there, we can mirror the field, and we'll get an accurate representation of what our platform's field should look like. > > You can build this on your own, or we can use this **Mirror Body Symmetrically** custom block. We'll open our custom block to see how it looks. We have our body input, or the implicit body or scalar field that we want to mirror, and the plane about which we want to mirror it. Let's test this custom block out with a simple example. I'll add a box to our notebook and drag our plane and our body into our notebook to test it out. > > I'll drag our box to one side of our plane and make it our body input for now. Viewing its field and adjusting that size, I see that we've got this one implicit field, and we want to mirror it across our plane. We'll have to do a couple of setup steps first. We'll start by representing the coordinate system, or the field that we want to mirror, using this **Vector Field From Components** block and simply inputting X, Y, and Z. > > Now, we'll want to calculate the signed distance from any point to our plane, but clamp our negative values to zero. What we can do is subtract our plane origin from this P field, then find the dot product between that difference and the negative normal of our plane. That outputs a flipped version of our plane that we can then feed into a **Max** block. So now we've set the underside of our plane to have positive values and the top side of our plane to be clamped to zero. > > Next, we can multiply this field by -2 to adjust its scale, multiply by the negative normal of our mirror plane, and add that initial P vector field. Finally, we can take that body and remap it to the X, Y, and Z components of our P field. And now we have our mirrored result: our original field on the top side of our plane, and the symmetrically mirrored field on the bottom side. > > Jumping back into our original notebook, we see that we can take our original remap, feed it into that **Mirror Body Symmetrically** block, include our mirror plane, and now we have that symmetrical planform. **Downloadable Files:** [Mirror Body Symmetrically.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Mirror%20Body%20Symmetrically.ntop) *This file was last updated in nTop 5.29* ## 5. Planar *Generate solid, planar wings using a bounding box to trim the wing to the planform shape.* Up to this point, we have only been working with unbounded scalar fields and have not yet created enclosed, implicit geometry. Let's generate an enclosed profile, then use its properties to make a bounding box to intersect with our scalar field from above. Feel free to take a look at the video and custom block below. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-10.png) [https://www.youtube.com/embed/D0S4-\_6j\_Ao](https://www.youtube.com/embed/D0S4-_6j_Ao) > **Transcript** > > Now we have the underlying scalar field for our wings, but our field is unbounded. So we don't actually have an implicit body yet. Let's take this field and some of the data that we already have to generate an implicit body representing our wings. > > We'll start by generating our wing plan form as a profile. This profile will be made up of six curves: two each for the leading and trailing edges and one each for the wing tips. We'll start with a line for our first wing tip, which just extends from the end point of our leading edge to the end point of our trailing edge. We can then mirror that line using this simple **Mirror Line** block that just mirrors our start and end points across a plane and generates a new line from the result. > > Then we'll add in our leading edge and our trailing edge and then rotate each of those using the **Rotate Object** blocks. We'll rotate those 180° around our x-axis or our fuselage. Our result will be a platform that looks like this. And we can use that profile's dimensions to generate some implicit body that we can then intersect with our scalar field that we created in our previous section, resulting in a solid body. > > We'll take the minimum and the maximum x components of our points from that profile. Assign our Y components as the positive and negative halves of our wingspan and use the maximum and minimum Z components of our air foil profile to create this box from corners. From there, we can just intersect our box with that mirrored wings field that we created before. > > Viewing our box in transparent mode, we now see where the intersection will happen. We'll use our **Boolean Intersect** block to generate those wings. > > And then we'll translate that object by our root point vector. Since we've set our root point to the global origin, this won't actually move our intersect, but it's good practice for parameterization and generalizing our custom blocks. **Downloadable Files:** [Mirror Line.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Mirror%20Line.ntop) *This file was last updated in nTop 5.29.2* ## 6. Twist *Twist the wings from root to tip.* To drive lift distribution, we want to twist the wing. The result should look something like this, where the wing twists about the mid-curve from root to tip. Use the custom blocks and watch the videos below to identify the mid-curve and twist the wing. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-13.png) [https://www.youtube.com/embed/0cEsKXrdA6s](https://www.youtube.com/embed/0cEsKXrdA6s) **Downloadable Files:** [Mid-curve.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Mid-curve.ntop) *This file was last updated in nTop 5.29.2* Now, you can feed your mid-curve into the **Twist Wing** custom block below. **Downloadable Files:** [Twist Wing.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Twist%20Wing.ntop) *This file was last updated in nTop 5.29.2* ## 7. Rotate *Rotate the wings to account for the dihedral angle.* ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-56.png) To account for this angle, we use the Rotate Object block to rotate the twisted wings about the fuselage. Since our result is once again asymmetric, we can use the **Mirror Body Symmetrically** custom block to mirror our body and achieve our final result. ![](https://files.learn.ntop.com/lessons/modeling-a-wing/image-11.png) # Modeling Aircraft Ducts Source: https://docs.ntop.com/lessons/parametric-aircraft-design/modeling-aircraft-ducts Let's now establish a workflow that generates our ducting geometry. In this example, our output will be an implicit field that defines the duct's interior volume, a representation we can use to offset into solid duct walls or subtract from our fuselage to carve out the airflow passages. ![](https://files.learn.ntop.com/lessons/simulation-model/image-14.png) ![](https://files.learn.ntop.com/lessons/noise-fields/image-15.png) Following the approach from our [Modeling a Single Panel Wing](https://learn.ntop.com/lessons/modeling-a-wing/) lesson, we'll create a unilateral duct first, then apply the **Mirror Body Symmetrically** custom block to generate matching ducts on both sides of the fuselage. This workflow will demonstrate how parametric design allows you to quickly explore different duct configurations by simply adjusting the input parameters, while maintaining all the complex geometric relationships that ensure intended airflow transitions. We will accomplish this through the following major steps: 1. Set a **planar path** to define the duct centerline and flow direction. 2. Generate a **ramped profile** to control the cross-sectional shape transition. 3. Make a **planar duct** along the profile using field-based operations. 4. Remap duct in the z direction to implement **3D spatial positioning**. Feel free to use the starter file containing only the initial inputs to follow along. **Downloadable Files:** [Side Duct Body (Starter).ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Side%20Duct%20Body%20\(Starter\).ntop) [Side Duct Body.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Side%20Duct%20Body.ntop) *This file was last updated in nTop 5.30.2* ## 1. Planar Profile *Set a planar path to define the duct centerline and flow direction.* Ultimately, our ducting will exist in all 3 dimensions of our coordinate system. Let's simplify this, beginning with only the x and y coordinates, and saving z for later. In this step, we will establish the path in the xy plane that one side of our ducting will follow. Again, we will begin by modeling the ducting unilaterally, then mirroring later on for simplicity. Some additional parameters we'll use to control the path are * *Butt Line Zero* to establish the aircraft's centerline symmetry plane. * *Path Start/End Tension* to control how “stiff” the spline curve is at its endpoints * *Transition Continuity* to set the mathematical smoothness level for all transitions in the workflow For the spline geometry, we'll extract the x and y coordinates from our inlet and outlet locations, but deliberately force the z-coordinate to zero. This flattens our 3D routing problem into a manageable 2D “top view” path that we can easily control and visualize. ![](https://files.learn.ntop.com/lessons/periodic-fields/image-16.png) For directional control, we assign start and end tangent vectors pointing in opposite x-directions, positive at the inlet, and negative at the outlet. These opposing tangents naturally create an S-curve that flows smoothly from inlet to outlet along the aircraft's longitudinal axis. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-17.png) For the spline construction, we use a four-point system where the middle control points are calculated by translating each endpoint along its respective tangent vector, scaled by the tension value. This gives us precise control over entry and exit curvature while allowing natural flow in between. Finally, we convert this 2D spline into a profile object with a z-direction extrusion vector, preparing it for the 3D operations that will follow in subsequent steps. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-18.png) From the resulting spline, we see a fully positive SDF radiating from the spline. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-19.png) We generate a profile from the top view using **Profile from Curves** to generate an implicit SDF, where one side of the open curve is positive and the other is negative. We'll use this resulting field later on when we generate and mirror the duct. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-20.png) Feel free to follow along and create the planar profile using the video below. [https://www.youtube.com/embed/vQcRbNBFHO4](https://www.youtube.com/embed/vQcRbNBFHO4) ## 2. Ramped Profile *Generate a ramped profile to control the cross-sectional shape transition.* Now, let's generate a ramped parallelogram profile like the one that will form our duct cross-section. We'll use a custom block to help simplify our overall workflow. Our goal in this step is to create a parametric shape that transitions smoothly from the inlet's rectangular geometry to the outlet's circular geometry along our spline path. You can take different approaches when creating your duct cross-section: * **Simple geometric approach**: Use basic rectangles or circles that change size along the path * **Parametric parallelogram approach**: Create angled, blended shapes that optimize airflow characteristics * **Custom profile approach**: Import or manually define complex cross-sectional shapes This custom block uses the parametric parallelogram approach because it provides the aerodynamic benefits of angled sides while maintaining smooth geometric transitions. At the inlet, we generate the cross-sections of the duct, assigning parallelogram cross-section. For the outlet, we assign a circular cross-section. We define these geometries with the parameters shown below. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-33-1024x506.png) **For the basic width setup**, the workflow takes the bottom width input and divides it by two to create a “Half Width” value. This establishes the symmetric foundation needed for the parallelogram construction. To adjust our coordinate system for the angled geometry, we use the custom block **X Rotation** to modify the scalar field *y* (interchangeable with the *xz* plane). We perform a 3D rotation around the X-axis by applying trigonometric transformations to remap Y and Z coordinates while preserving the X coordinate. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-22.png) **Downloadable Files:** [X Rotation.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/X%20Rotation.ntop) *This file was last updated in nTop 5.30.2* We then displace the resulting scalar field by shifting its coordinate system a *Half Width* in the y-direction to align it with our intended inlet. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-23.png) We displace the negative of this result by the negative of the bottom width to create a displaced and opposite field. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-24.png) We intersect the two resulting fields to generate the angled sides of the parallelogram. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-25.png) We then intersect this field with the *z* field (offset by the height) and the *-z* field to create the horizontal boundaries of the parallelogram. In this step, we can also pull in the *Blend Radius*. The result is a single implicit field representing the complete parallelogram cross-section. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/extruded-parallelogram.gif) You can download the resulting custom block below to use in your own workflow. **Downloadable Files:** [Parametric Extruded Parallelogram.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Parametric%20Extruded%20Parallelogram.ntop) *This file was last updated in nTop 5.30.2* Now we can implement the gradual change from a parallelogram to a circular cross section as we move from the inlet location to the outlet location. To do this, we will use **Ramps** instead of scalars as inputs in the CB above. Each ramp will output a scalar field that varies from along the length field of *Path Top View*, so we will see a transition from the inlet location, zero, to the outlet location, *Total Path Length*. We can assign our pre-defined transition continuity to each of these ramps. ![](https://files.learn.ntop.com/lessons/slicing-a-body/image-27.png) ![](https://files.learn.ntop.com/lessons/slicing-a-body/image-28.png) ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-29.png) ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-30.png) The output of this is an infinite duct that ramps from a parallelogram at its inlet to a circle at its outlet. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-31-1024x480.png) Feel free to walk through the custom block and underlying fields in the video below. [https://www.youtube.com/embed/tvV979E5aBg](https://www.youtube.com/embed/tvV979E5aBg) ## 3. Planar Duct *Make a planar duct along the profile using field-based operations.* Now let's modify the geometry we created above to: 1. Follow our planar path 2. Mirror the result to generate bilateral ducts 3. Align with our inlet location (we'll handle outlet alignment in the final step to compensate for any z-coordinate mismatches) To make the ramped parallelogram follow the planar path, we'll use a **Remap Field** block to reassign the coordinates: * **x:** Spline length field * **y:** Distance to extrusion (the SDF representing distance from any point to the infinite extrusion of the profile) * **z:** Negative z-coordinate After remapping, we apply the **Mirror Body Symmetrically** custom block (used earlier in the course) to mirror the duct across the butt line, creating the bilateral duct configuration. **Downloadable Files:** [Mirror Body Symmetrically.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Mirror%20Body%20Symmetrically.ntop) *This file was last updated in nTop 5.* 30.2 Finally, we translate the resulting field in the z-direction by the inlet z-coordinate plus half of the inlet height. This positions the entire planar duct system at the correct inlet elevation. See the video below to follow along. [https://www.youtube.com/embed/tABJUOFFDiY](https://www.youtube.com/embed/tABJUOFFDiY) ## 4. 3D Duct *Remap duct in the z direction to implement 3D spatial positioning.* In these final steps, we'll apply displacement fields in the z-direction to compensate for elevation differences between the inlet and outlet locations. To handle this vertical offset, we'll use the **Displace** block. We can set the x and y displacements to zero, since we've already accounted for the top-view duct profile in our earlier sketching. To achieve a smooth z-direction transition we will: 1. Use the **Two Body Field** between planes positioned at the inlet and outlet locations 2. Feed this field into a **Ramp** function 3. Apply linear z-displacement from inlet to outlet elevation (this can be adjusted for non-linear displacement if preferred) ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/image-32.png) At this point, we have an infinite, bilateral duct that properly accounts for changes in all three directions (x, y, and z). We'll add bounds to limit the duct geometry to the specific region between inlet and outlet, preventing the infinite field from extending beyond the intended duct length. ![](https://files.learn.ntop.com/lessons/modeling-aircraft-ducts/bounding-box-.gif) Feel free to take a look at this process in the video below. [https://www.youtube.com/embed/iwZg9JDPOqc](https://www.youtube.com/embed/iwZg9JDPOqc) # Modeling an Empennage Source: https://docs.ntop.com/lessons/parametric-aircraft-design/modeling-an-empennage In this lesson, we'll complete our collection of conceptual aircraft design blocks by modeling the empennage, the tail assembly that provides stability and control. We'll create a custom block that generates both symmetric horizontal stabilizers and a vertical stabilizer as a unified tail assembly. ![](https://files.learn.ntop.com/lessons/ui-and-blocks-2/image.png) ![](https://files.learn.ntop.com/lessons/modeling-an-empennage/image-48-1024x539.png) The empennage components, particularly the horizontal stabilizers, share fundamental design principles with wings, allowing us to leverage the parametric workflows we've already established. This approach demonstrates how nTop's modular design philosophy enables efficient reuse of techniques across similar applications. We will achieve this by the following major steps: 1. Generate the **horizontal stabilizers**. 2. Model the **vertical stabilizer** using existing knowledge. 3. **Finalize** the empennage. You can follow along using the example file. **Downloadable Files:** [Empennage.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Empennage.ntop) *This file was last updated in nTop 5.31.2* ## 1. Horizontal Stabilizers *Modify an existing custom block for a new goal.* The horizontal stabilizers form the primary pitch control surfaces of our empennage and share many geometric characteristics with wings. However, unlike main wings, horizontal stabilizers typically maintain a consistent angle of attack along their span and don't require the twist like we see on the wings. We'll leverage the **Single Panel Wing** custom block from our earlier lesson as our starting point, modifying it for stabilizer use. You can download that CB below to follow along. **Downloadable Files:** [Single Panel Wing.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Single%20Panel%20Wing.ntop) *This file was last updated in nTop* 5.31.2 The key change when modifying this wing-creation notebook involves removing the twist parameter to yield the untwisted planform characteristic of most horizontal stabilizer designs. ![](https://files.learn.ntop.com/lessons/modeling-an-empennage/adjust-single-panel-wing.gif) Once we've configured the geometry appropriately, we'll package this modified workflow into a new custom block called **Horizontal Stabilizers**. ![](https://files.learn.ntop.com/lessons/modeling-an-empennage/save-as-horiz-stab-cb-1.gif) It's good practice to update the notebook's description and input names to reflect the new design intent—generating horizontal stabilizers rather than main wings. This ensures clear documentation and maintains the parametric clarity that makes custom blocks effective and reusable. ![](https://files.learn.ntop.com/lessons/modeling-an-empennage/Screenshot-2025-09-25-140652.png) Feel free to follow along below to set up the **Horizontal Stabilizers** block. [https://www.youtube.com/embed/V4JAXOUnj5k](https://www.youtube.com/embed/V4JAXOUnj5k) Now we've finalized the **Horizontal Stabilizers** custom block which we can later nest in an **Empennage** block. This approach demonstrates how nTop's modular design philosophy allows us to efficiently adapt existing solutions for new applications while maintaining the parametric control that makes our aircraft models flexible and reusable. **Downloadable Files:** [Horizontal Stabilizers.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Horizontal%20Stabilizers.ntop) *This file was last updated in nTop 5.31.2* ## 2. Vertical Stabilizer *Leverage existing knowledge to create a custom block.* Now, we'll create the vertical stabilizer as a single fin for our empennage. Like we did in the previous step, we will modify our **Single Panel Wings** custom block, removing unnecessary steps for vertical stabilizer modeling. In this case, we will remove the: * Twist operation from root to tip * Dihedral Angle and wing rotation * Mirror across the fuselage Now we've successfully generated the **Vertical Stabilizer** custom block we can then feed into our final empennage assembly. **Downloadable Files:** [Vertical Stabilizer.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Vertical%20Stabilizer.ntop) *This file was last updated in nTop 5.31.3* ## 3. Finalize *Combine the horizontal and vertical elements into a final custom block.* Now that we've created dedicated custom blocks for both the horizontal and vertical stabilizers, we can integrate them into a unified empennage assembly. In a new notebook instance, we'll add both stabilizer blocks and promote key parameters to notebook-level inputs, giving us centralized control over the complete tail geometry. We'll then make variables of the parameters we want to expose in our **Empennage** custom block. We can assign these as inputs. ![](https://files.learn.ntop.com/lessons/modeling-an-empennage/image-1.png) A **Boolean Union** operation will combine the horizontal and vertical stabilizer bodies into a single cohesive empennage body, which we'll assign as our output. Once configured, we'll package this workflow as the **Empennage** custom block—providing a complete, parametric tail assembly ready for integration into our aircraft model. ![](https://files.learn.ntop.com/lessons/optional-follow-along-fe-model-and-boundary-conditions-2/image-2.png) **Downloadable Files:** [Empennage.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Empennage.ntop) *This file was last updated in nTop 5.31.3* # Parametric Aircraft Design Source: https://docs.ntop.com/lessons/parametric-aircraft-design/overview This course guides you through the complete process of building a parametric aircraft model in nTop using field-based modeling techniques. You'll start by creating **Wing** structures, learning to control critical parameters like taper ratio, dihedral angle, and quarter chord angle. From there, you'll develop a **Fuselage** using spline-based cross-sections and boolean operations to merge components seamlessly. The course then covers internal **Ducting** geometry that demonstrates how to model functional pathways through your aircraft geometry. Then, we'll cover **Empennage** assembly, where you'll model horizontal and vertical stabilizers with proper geometric relationships. Each of these four major components—wing, fuselage, ducting, and empennage—will be modularized and saved as separate custom blocks with strategically exposed parameters, allowing you to build a reusable library of aircraft components that can be rapidly configured and assembled. Finally, we have included a recording of a webinar on conceptual aircraft design that ties it all together. ![parametric aircraft design](https://storage.googleapis.com/files-learn/lessons/parametric-aircraft-design/parametric-aircraft-design.png) > **[Parametric Aircraft Modeling Intro](/lessons/parametric-aircraft-design/parametric-aircraft-modeling-intro)** > **[Modeling a Single Panel Wing](/lessons/parametric-aircraft-design/modeling-a-single-panel-wing)** > **[Modeling a Fuselage](lessons/parametric-aircraft-design/modeling-a-fuselage)** > **[Modeling Aircraft Ducts](/lessons/parametric-aircraft-design/modeling-aircraft-ducts)** > **[Modeling an Empennage](/lessons/parametric-aircraft-design/modeling-an-empennage)** > **[Conceptual Aircraft Design Webinar](/lessons/parametric-aircraft-design/conceptual-aircraft-design-webinar)** # Parametric Aircraft Modeling Intro Source: https://docs.ntop.com/lessons/parametric-aircraft-design/parametric-aircraft-modeling-intro Let's explore how to model a simple parametric aircraft. Throughout these lessons, we will use a modular, parametric approach that will break down the way you think about aerospace design in nTop. [https://www.youtube.com/embed/AowvZMqXmgA](https://www.youtube.com/embed/AowvZMqXmgA) > **Transcript** > > Let's explore how to model a simple parametric aircraft. Throughout these lessons, we'll use a modular parametric approach that'll break down the way you think about aerospace design and nTop. What you're seeing here isn't just a simple airplane model, but a fully parametric system built from three intelligent custom blocks that can adapt to infinite aircraft configurations. > > Let's start with a fundamental question. Why use custom blocks instead of building everything in one massive notebook? You'd need to hunt through hundreds of blocks to identify what to change, hoping you don't break something downstream. Now, watch what happens in our modular system. One parameter change yields instant results. But the benefits go much deeper than that. In that creating custom blocks rather than a massive workflow introduces simplicity and reusability to your work, and you can begin to build out your own personal aerospace library. > > Throughout these lessons, you'll notice that within these aircraft-specific blocks, you'll discover more generalized modeling blocks: mirroring, twisting, blending, and surface manipulation tools that are useful far beyond aircraft design. As we build out these aircraft blocks together, I also encourage you to save these generalized blocks to your own custom block folders. This will mean that today's wing twist operation can become tomorrow's turbine blade design tool. Today's fuselage mirroring can become your next product enclosure workflow. > > Think of this course as building out two custom block repositories simultaneously: one for aerospace-specific blocks and two for general purpose modeling techniques for any of your future design challenges. This workflow will center around three specialized custom blocks. > > The **Wing** block that's not just about creating wing shapes, but capturing the aerodynamic intent via built-in airfoil profiles. Modeling features like sweep, twist, and taper will all be parametrically controlled. > > The **Fuselage** block will start to explore how we can handle the complex geometry transitions that make or break aircraft designs: cross-sectional morphing, nose shaping, tail integration, all parametric and all intelligent. We'll also make a **Ducting** block to represent engine intakes. We can expose parameters like intake angle and exhaust size and make it all blend seamlessly with the fuselage. > > As we build out this workflow, you should keep a couple of key nTop design philosophies in mind. We'll package general modeling techniques into their own custom blocks which will nest inside our aircraft specific CVS. This abstraction will allow for future reuse of these general modeling techniques. We'll use fields as a modeling primitive rather than a background effect of implicit bodies so we can define complex geometries that respond intelligently to multiple design criteria simultaneously. > > Finally, we'll explicitly define every design decision in our aircraft. From NACA airfoil generation to twist distribution to dihedral angle, all design intent will be defined in transparent and inspectable blocks that you can examine, modify, and understand fully. These lessons walk through specific custom block setups, but feel free to modify workflows to fit your specific needs, encode your own design intent, and expose the parameters of your choosing. > > Before we dive into our next lesson, take a moment to download the example file and open the complete aircraft workflow. Play with the parameters, break things, and see how the system responds. Remember, the best way to understand this modular design is to experience it firsthand. Now, let's break down how to model each of these aircraft features. **Downloadable Files:** [Intro to Aircraft Modeling.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/Intro%20to%20Aircraft%20Modeling.ntop) *This file was last updated in nTop 5.28.4* # Parametric Flying Wing Demo Source: https://docs.ntop.com/lessons/parametric-aircraft-design/parametric-flying-wing-demo This demo walks through one approach to creating a two panel flying wing geometry from scratch in nTop using some custom blocks. [https://www.youtube.com/embed/h0-VtWs-B-c](https://www.youtube.com/embed/h0-VtWs-B-c) > **Transcript** > > Hello. This is a quick example of how you might go about making a simple shape for a flying wing. I'll start by adding some variables for my key parameters. We'll start with **root chord** and set it to one meter. I'll rename my section “Key Parameters.” Then, I'll duplicate this for the **span**. I'll specify the span as a ratio to my root chord, so I'm going to remove the units here; everything will be a ratio. > > Next, we'll define a **panel break**. We'll do a simple two-panel flying wing and start with half of the span. Then, we'll set the **panel one leading edge angle** to 30° and the **panel two leading edge angle** to 15°. We'll do the same for the trailing edge: **panel one trailing edge angle** and **panel two trailing edge angle**. > > All right, let's start there. We'll add a new section labeled **Point Calcs** and create a bunch of points to define the planform shape. It will be pointed in the negative Z direction. This first one will be **panel zero**, representing the root chord leading edge. Then, we'll create the **panel zero trailing edge**, where the X-coordinate will be the root chord distance. Zooming out, we can see our leading and trailing edges. > > Now, we'll create our **P1 leading edge** with a little math. To find our actual span, we'll multiply our root chord by the span percentage. I'll make this a variable called **half span** (dividing the span percentage by two), as that's what we'll actually need for our point calculations. For the P1 leading edge point, the Y-coordinate will be the half span multiplied by our panel break percentage. For the X-coordinate, we'll use trigonometry: multiplying that Y value by the tangent of our panel one leading edge angle. If I change my angle, it looks like it's working. > > Let's duplicate this to create our **trailing edge**. The Y-coordinate will be the same, but we'll start from the root chord, so we need to subtract the root chord distance from the X-coordinate and update the angle to the **P1 trailing edge angle**. > > Now, let's create our final **panel two points**. For the **P2 leading edge**, the Y-coordinate will just be the half span. For the X-coordinate, we'll take the X-coordinate from P1 and add some math. Let's clean this up: we'll take the P1 leading edge X and add the result of the half span minus the panel break, multiplied by the tangent of the **panel two leading edge angle**. If I set that angle to zero, it should be totally straight—and it is. > > We'll do the same for the **trailing edge**. The Y-coordinate is the same, but we'll subtract the P2 trailing edge X-coordinate using the **P2 trailing edge angle**. For cleanliness, I'll label this **P2 trailing edge Y**, even though it's the same as P1. > > Now that we have our points, I'll collapse these sections. We have full parametric control. The next step is to create the **splines** for our planform. First, I'll create a point list for the **leading edge** with five points total. I'll go left to right for my sanity. I'll use a point block to mirror the leading edge points, using the same X value but a negative Y value. I'll make this a variable called **leading edge points** and repeat the process for the **trailing edge**. > > To keep it simple, we'll start by making a couple of lines: **P0 to P1** and **P1 to P2** for both the leading and trailing edges. While there are many ways to create splines, I'm going with **spline by tangents** for ease and control. We'll need a tangent vector for all five points along the leading edge. I'll take the tangents from my lines and add a “tension multiplier” variable (**P2 tension** and **P1 tension**). For the center point, I'll add a **center leading edge tension**. > > Once the leading edge spline is set, I'll do the same for the **trailing edge spline**. We'll use the trailing edge point list and create corresponding tension variables. We can change our root chord or span, and everything updates accordingly. > > The next step is to create our **airfoils**. For this demo, we'll use two different profiles. For the center, a **NACA 5-digit (2312)** with the root chord as the length. For the outer airfoil, a **NACA 4-digit (0010)** symmetrical profile. > > Now, we'll create a **lofted section** that blends these two. I'll use a **mix block**, which works well for airfoils with zero camber at the tip and tail. I'll use a **ramp block** to control the transition, using the absolute value of Y as the input. We'll define an **airfoil transition length** variable to smooth the blend between the two profiles. By setting a bounding box, we can see the transition. > > Now that we have our mixed airfoils, we'll **loft** them into our planform. In nTop, we use a **remap field block** to map the coordinate space of one signed distance field to another. For the leading edge, we want to translate the field by the distance to the leading edge. I'll use the **distance to curve from axis** block for the leading edge spline. > > We also need to scale it appropriately. I'll create a field for the **trailing edge distance to curve**. By subtracting the leading edge distance from the trailing edge distance, we get a **chord field** representing the chord length across the wing. I'll normalize this by the root chord to create a **taper ratio field**. > > Finally, I'll take our X and Z coordinates and divide them by this taper ratio field. This remaps the airfoil so it fits perfectly between the leading and trailing edges while scaling the height uniformly. > > The last step is to **add twist** to the wing. I'll use a **twist wing** block. I'll specify a **twist chord ratio** and create a **twist field** using a ramp block. Typically, a flying wing needs a little downwash on the outer panels, so I'll set a **wing tip downwash angle** (e.g., 3 degrees). Applying a bounding box allows us to see the wing tip deflect appropriately. > > This gives us the basic parametric shape of a flying wing in nTop. From here, you could package this into a custom block for detailed design. While simplistic, I hope this shows how easy it is to model real aircraft geometry. **Downloadable Files:** [2 Panel Flying Wing.ntop](https://storage.googleapis.com/files-learn/Courses/Aircraft%20Modeling/2%20Panel%20Flying%20Wing.ntop) *This file was last updated in nTop 5.44.* 2 # Combustion Chamber Source: https://docs.ntop.com/lessons/parametric-turbomachinery-design/combustion-chamber This lesson demonstrates how to use parametrized polylines and profiles in nTop to design a combustion chamber. You will learn best practices for creating complex arrays of holes and leveraging field modeling to ensure high-performance geometry. ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-18-220201-1024x567.png) **Downloadable File:** [Parametric Combustor.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Parametric%20Combustor.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop 5.37.3* ## 1. Generate the Main Body Building a clean signed distance field (SDF) for an axisymmetric part starts with a well-defined profile. **Define the Profile:** Create a side profile of the combustor using a Polyline block. Use input parameters to drive the coordinates of each point. *You can use similar techniques to parametrize control points for splines.* ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-18-220623-1024x513.png) Apply a fillet to the polyline using the **Polyline Fillet** custom block and convert the curve into a Profile. Using an open profile ensures a clean field that projects predictably beyond the open ends. ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-18-230134-1024x329.png) Use the **Revolve Profile** block around the Z-axis to create solid geometry. Apply a **Shell** block to establish the specified wall thickness. Because the start and end lines of the profile are parallel, the resulting implicit body extends to infinity. Perform a **Boolean Intersect** with a box representing the design domain to trim the body to its final size. ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-18-230431-1-1024x538.png) ## 2. Generate the Cutout Tools Create the geometry used to “drill” the cooling and intake holes through the chamber walls. Generate “infinite” **Cylinder** blocks based on your input parameters. Combine these using **Boolean Union** and then use the **Polar Array Body** block to position them around the chamber. ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-19-132424-1024x561.png) ***Tip:** Rendering highly complex or “infinite” fields can be computationally taxing. Utilize the **Field Viewer** (Hotkey: **F**) or the **Precise Render** (Ctrl + H) feature to validate the geometry and see an accurate snapshot of the design.* ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-19-135230.png) 1. Generate an array of points along the Z-axis where the cutouts are required. 2. Create an array two elements longer than necessary, then remove the first and last elements to ensure correct spacing. 3. Create a corresponding array of radii for the cutouts based on your minimum and maximum specifications. ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-19-140945-1024x469.png) > [!TIP] > > **Tip:** *You can input a list of values to a block that typically produces one implicit body to produce a list of implicit bodies.* Learn more about [working with lists here](https://support.ntop.com/hc/en-us/articles/360046264933-How-to-work-with-lists)*.* Use a **Polar Array Body** block to create the final collection of cutout tools. ## 3. Final Assembly and Output Perform a **Boolean Subtract** to remove the cutout tools from the solid combustion chamber body. To use this notebook in other workflows, drag the final implicit body variable into the **Output** section at the bottom of the notebook and move design parameters to the **Inputs** section at the top. ![](https://files.learn.ntop.com/lessons/combustion-chamber/Screenshot-2025-12-19-142208-1024x578.png) # Overview Source: https://docs.ntop.com/lessons/parametric-turbomachinery-design/overview This course introduces parametric turbomachinery design using signed distance functions in nTop. By building a micro turbojet, you will learn to create robust, reusable workflows for impellers, combustion chambers, and blisks. We focus on high-fidelity geometric construction and assembly, providing a foundation for integration with performance analysis and multidisciplinary design optimization. ![Transparent view of turbine engine core: compressor, combustor, and turbine](https://storage.googleapis.com/files-learn/lessons/parametric-turbomachinery-design/turbomachinery-overview.png) > **[Overview of Micro Turbojet Design](/lessons/parametric-turbomachinery-design/overview-of-micro-turbojet-design)** > **[Parametric Impeller](/lessons/parametric-turbomachinery-design/parametric-impeller)** > **[Combustion Chamber](/lessons/parametric-turbomachinery-design/combustion-chamber)** > **[Parametric Bladed Disk](/lessons/parametric-turbomachinery-design/parametric-bladed-disk)** > **[Parametric Housing and Component Placement](/lessons/parametric-turbomachinery-design/parametric-housing-and-component-placement)** # Overview of Micro Turbojet Design Source: https://docs.ntop.com/lessons/parametric-turbomachinery-design/overview-of-micro-turbojet-design In this course, you will learn how to model a fully parametric micro turbojet engine using nTop. By using custom blocks, you can create a modular workflow that can be easily reused in other notebooks. This approach leverages robust implicit geometry to enable rapid design exploration and performance optimization. ## Course Curriculum The curriculum is organized into four lessons, each focusing on a key stage of the engine's development. 1. **Parametric Impeller:** Learn best practices for creating stable geometry using Signed Distance Functions (SDFs). This lesson covers vane generation, exponential twist rates, and robust trimming techniques. 2. **Combustion Chamber:** Explore the use of parametrized polylines and profiles. You will learn how to create complex cooling hole arrays and utilize list processing to manage multiple internal features. 3. **Parametric Bladed Disk (Blisk):** Focuses on modeling turbine wheels, including the precise control of blade curvature and the integration of aerodynamic profiles with the central hub. 4. **Parametric Housing and Component Placement:** The final lesson covers the assembly of all engine components. You will learn how to parametrically place modules and design the engine housing to complete the micro turbojet. ![](https://files.learn.ntop.com/lessons/overview-of-micro-turbojet-design/Screenshot-2025-12-16-181250-1024x534.png) **Downloadable File:** [Parametric Micro Turbojet Example.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Parametric%20Micro%20Turbojet%20Example.ntop) *This file was last updated in nTop* 5.37.3 # Parametric Bladed Disk Source: https://docs.ntop.com/lessons/parametric-turbomachinery-design/parametric-bladed-disk In this lesson, you will create a parametric blisk (bladed disk) designed for high-performance turbomachinery. This model replicates advanced parametrization techniques derived from the research of [Fricke et al. (2021)](https://iopscience.iop.org/article/10.1088/1757-899X/1024/1/012067). By following implicit modeling best practices, you will develop a robust, responsive custom block that maintains clean Signed Distance Functions (SDFs) across all design iterations. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-104859-1024x567.png) **Downloadable File:** [Parametric Blisk.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Parametric%20Blisk.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop* 5.37.3 ## 1. Generate the Hub Perform initial mathematical operations on input parameters to derive values. Use the derived values for creating primitives, then generate the main features of the hub. We use custom blocks to help ensure efficient creation of geometry with clean fields. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-104524-1024x579.png) > [!TIP] > > **Tip:** *When in doubt, trim as late as possible.* Trimming early in an implicit workflow could lead to unpredictable field distortions during subsequent offsets or blends. Define a custom asymmetric blend radius using a **Ramp** block. This allows for localized control over the transition between different hub features. We continue to use custom blocks that help streamline the workflow and ensure clean signed distance functions throughout the model. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-105921-1024x478.png) ## 2. Generate Flange for Hub Define tools for the flange cutouts using a **Polar Array Body** of “infinite” **Cylinder** blocks. Base their placement and count on the outer diameter of the main pipe. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-111539-1024x613.png) Create the final flange by subtracting the cutout tools from a pipe. Perform a **Boolean Intersect** with a **Slab** custom block to define a specific thickness within an infinite field. Combine the finished flange with the hub using a **Boolean Union**. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-111900-1024x459.png) ## 3. Generate the Seals Use a custom block to generate the seal geometry around the main pipe. Translate the seal according to the specified spacing parameters and perform a **Boolean Union** with the hub assembly. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-113614-1024x457.png) ## 4. Generate the Blades The blade geometry utilizes a **Double Circle Arc (DCA)** airfoil, standard in supersonic and transonic applications. **Downloadable File:** [DCA Airfoil SDF.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/DCA%20Airfoil%20SDF.ntop) Generate the base SDF for the DCA airfoil. Because the inputs for the airfoil are fields, you can vary the profile spatially for advanced aerodynamic control. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-120406-1024x421.png) 1. Model a single blade along the Z-axis using **Ramp** functions to drive geometry changes. 2. Apply a sweep using the **Displace** custom block. 3. Apply twist using the **Z Rotation** custom block. Remove geometry below the Z-origin using a **Boolean Subtract** and add a **Bounding Box** to visualize the implicit body. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-120654-1024x503.png) Rotate the single blade into position around the Y-axis, and use the **Polar Array Body** block to generate the required number of blades. Trim the blades to their final domain using a **Boolean Intersect** with a pipe. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-121725-1024x496.png) ## 5. Final Assembly Perform a final **Boolean Union** between the blades and the hub. Utilize field manipulation to ensure the blend radius is *0* within the hub and transitions to the specified value only at the intersection of the blades and the hub surface. This prevents internal “bulging” that occurs when a positive blend radius is applied inside solid geometry. ![](https://files.learn.ntop.com/lessons/parametric-bladed-disk/Screenshot-2025-12-22-122321-1024x566.png) As with the other lesson, we will create a custom block for Parameteric Bladed Disk. Ensure all critical design parameters (e.g. blade count, twist rate, hub diameter) are moved to the **Inputs** section. Drag the **Final Solid** variable into the **Output** section. # Parametric Blisk Analysis Source: https://docs.ntop.com/lessons/parametric-turbomachinery-design/parametric-blisk-analysis In this lesson, we will walk through an example of how to set up a thermal and structural analysis of the parametric blisk that was created earlier. The mounting holes in the Parametric Blisk file has been modified slightly to make them cyclically symmetric and export bodies for easier analysis setup. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-16-130951-1024x535.png) **Downloadable File:** [Blisk Analysis Example.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Blisk%20Analysis%20Example.ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop* 5.42.2 ## 1. Generate the Parametric Blisk Generate the parametric blisk using the updated custom block. This custom block now outputs a list of implicit bodies – the first element is the blisk, the second element is a polar array of cylindrical bodies at the mounting holes. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-16-152457-1024x568.png) From the properties tab of the Parametric Blisk custom block, drag the first list element into a variable named “Turbine” and the second list element into a variable named “Mounting Bolts” ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-16-152516-1024x568.png) ## 2. Create a Wedge for Analysis Calculate the angle for each cyclically symmetric wedge for analysis, then rotate a plane from the center coordinate system and perform boolean operations to get just a single wedge. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-17-140432-1024x591.png) ## 3. Generate a FE Mesh Start by creating an implicit body that can be used to define the “Sharp Extents” of the mesh from implicit body. Do this by rotating the original slice planes slightly and doing a boolean intersect with the analysis wedge. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-17-154136-1024x431.png) Use the “Mesh from Implicit Body” block to create an initial mesh, using the body created above as the input for “Sharpen Extents”. Then use the “Remesh Surface with Cyclic Symmetry” block to ensure the triangles in the mesh are cyclically symmetric. Turn the surface mesh into a volume mesh and then into a FE Volume mesh to be analyzed ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-17-154512-1024x607.png) ## 4. Define Boundary Conditions for Structural Analysis Specify material to create an FE Solid Domain and then define you cyclically symmetric faces on either side of the wedge and your displacement restraint on the bolt holes. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-20-120400-1024x566.png) Next define the pressure boundary conditions on either side of the blade faces and a rotational force boundary condition on the entire wedge. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-20-120613-1024x674.png) Finally define your Cyclic Symmetry connector and run your static analysis (we'll run another static analysis later with the thermal stress applied – this initial static analysis is just a good way of validating our structural boundary conditions). ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-20-121730-1024x591.png) ## 5. Define Boundary Conditions and Run Thermal Analysis Use the Temperature Restraint block to define the temperature at the shaft and bolt hole, then use a Convection Boundary Load block to capture the heat transfer on the blades and outer shaft face from the hot flow. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-20-121234-1024x619.png) Run a Thermal Analysis using the defined boundary conditions and pull out the temperature field result from the properties tab so we can use it to define thermal stress. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-20-122012-1024x566.png) ## 6. Set Up and Run Thermo Mechanical Analysis Start by defining an ambient temperature before the thermal load is applied, then define a new material that includes a Thermal Expansion Property (we use an isotropic material, but it can be orthotropic or anisotropic) and create a new FE Solid Domain. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-20-122550-1024x501.png) Finally, re-run a static analysis using the newly defined FE Domain, adding Initial Temperature and Applied Temperature Load boundary conditions to the initially defined mechanical boundary conditions. Use the temperature field result as the input to the “Applied Temperature Load” boundary condition. ![](https://files.learn.ntop.com/lessons/parametric-turbomachinery-design/Screenshot-2026-03-20-122912-1024x564.png) You can then export the displacement or stress/strain results of your Thermo-Mechanical analysis as a point map for further analysis. You can also use maximum values as inputs to objectives or constraints in the formulation of a design optimization problem. # Parametric Housing and Component Placement Source: https://docs.ntop.com/lessons/parametric-turbomachinery-design/parametric-housing-and-component-placement This final lesson demonstrates how to assemble each component generated with your **Custom Blocks** into a cohesive system. You will learn to use bounding box properties for relative placement, create a parametric housing, and integrate mounting struts to complete the micro turbojet assembly. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-123656-1024x566.png) **Downloadable Files:** * [Parametric Micro Turbojet Example.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Parametric%20Micro%20Turbojet%20Example.ntop) * [Turbopump Wedge Diffuser.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Turbopump%20Wedge%20Diffuser.ntop) * [Turbo Guide Vanes.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Turbo%20Guide%20Vanes.ntop) *These files were last updated in nTop* 5.37.3 ## 1. Move Components into Place In a parametric assembly, component locations should reference a common origin or the dimensions of adjacent parts to ensure the model updates correctly when parameters change. **Establish a Reference Point:** The **Impeller** custom block generates the base of the impeller at the origin (0, 0, 0). All subsequent components use this point as their primary reference. **Capture Tolerances:** Use variables and basic math to define fits. For example, set the **Impeller Max Radius** as a variable and add a tolerance value to drive the **Wedge Diffuser Inner Radius**. Use the **Translate Object** block to position the **Wedge Diffuser**. Since the original block centers the diffuser on the origin, translate it along the Z-axis by half the base plate thickness plus an offset tolerance. > [!TIP] > > **Tip:** Access the **Bounding Box** properties of a block (such as the `min` or `max` points) to drive placement ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-132257-1024x449.png) Place the **Combustor** relative to the `min Z` point of the diffuser's bounding box. Move it down by the overall length parameter plus a Z-offset. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-132509-1024x380.png) Position the **Guide Vanes** and **Blisk** using the same logic, referencing the bounding box of the component immediately preceding them. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-132703-1024x447.png) ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-132808-1024x489.png) ## 2. Generate the Nozzle Cap The nozzle cap directs exhaust flow and is defined by the dimensions of the turbine wheel (**Blisk**). **Define the Profile:** Generate an arc for the nozzle cap side profile. Parametrize its points using the `min Z` point and inner diameter of the **Blisk**. Modify the “pointiness” of the cap by changing the start tangent of the arc. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-133317-1024x478.png) **Create Solid Geometry:** Use the **Revolve Profile** block to sweep the arc around the Z-axis. Perform a **Boolean Intersect** with a **Plane** located at the **Blisk** `min Z` point to ensure a clean mating surface. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-133426-1024x513.png) ## 3. Generate the Outer Housing The housing must encapsulate all internal components while allowing for specific wall thicknesses. **Construct the Side Curve:** Use the **Polyline** block and arcs to create the housing profile. Parametrize these curves based on component bounding boxes plus required offsets. > [!NOTE] > > **Note:** In production workflows, these curves are often driven by first-order equations governing the engine's performance requirements. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-133946-1024x513.png) **Revolve and Shell:** 1. Revolve the profile around the Z-axis to create an initial solid. 2. Use the **Shell** block to hollow the geometry to your specified wall thickness. 3. Finalize the geometry by performing a **Boolean Intersect** with a **Box** (generated from the side profile's bounding box) to trim any infinite fields ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-134441-1024x489.png) ## 4. Generate Mounts and Union Housing Mounting struts connect the internal nozzle cap to the outer housing. **Model Struts:** Use a **Custom Block** to generate a symmetrical 4-digit NACA airfoil profile. **Extrude and Array:** 1. Use **Extrude Profile** to create the strut geometry. 2. Use **Boolean Subtract** to remove the portion of the struts that overlaps with the main housing field. 3. Apply a **Polar Array Body** block to create the required number of struts around the Z-axis. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-134951-1024x579.png) Join the nozzle cap, struts, and outer housing using a **Boolean Union** to create the final solid engine assembly. ![](https://files.learn.ntop.com/lessons/parametric-housing-and-component-placement/Screenshot-2025-12-22-135220-1024x512.png) Congratulations! You have completed the **Parametric Turbomachinery Design** course. You now have a modular, reusable system for exploring and optimizing micro turbojet designs. # Parametric Impeller Source: https://docs.ntop.com/lessons/parametric-turbomachinery-design/parametric-impeller This lesson demonstrates how to create a robust, parametric impeller using implicit modeling best practices. You will learn to use Signed Distance Functions (SDFs) to ensure your geometry remains stable across wide parameter variations while maintaining clean fields for downstream meshing and analysis. ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-130728-1024x568.png) ### Downloadable File: [Parametric Impeller.ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Parametric%20Impeller.ntop) *This file was last updated in nTop* 5.37.3 [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) ## Modeling Principles Keep these core principles in mind as you build the model: * **Trim and Intersect Late:** Perform trimming and intersection operations at the end of your workflow to ensure offsets and blends behave predictably. * **Use Variables:** Save useful calculations as variables to simplify your workflow and allow for easy reuse. * **Build Modularly:** Build components separately and assemble them at the end. This avoids redundant operations and keeps your notebook organized. * **Field Viewer:** Frequently use the Field Viewer (Hotkey: F) to inspect your distance fields and identify potential issues early. ([How to use the Field Viewer](https://support.ntop.com/hc/en-us/articles/360042931073-How-to-use-the-Field-Viewer)) ## Procedure ## 1. Generate the Central Body and Base Plate Create the bottom plate and an “Untrimmed” (infinite) center cylinder. By using an infinite cylinder at this stage, you can apply large blends without distorting the final part. ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-17-140919-1024x378.png) > [!TIP] > > **Tip:** *When in doubt, trim as late as possible.* ## 2. Generate the Vane Domain Define the volume that contains the vanes. * Create a drafted surface using the Top Vane Taper angle parameter. * Use the **Boolean Union** block to combine this surface with a cylinder defined by the Vane Straight Height parameter. * Apply the Vane Cutout Radius as your blend radius. ![Screenshot showing the domain that the vanes will be contained within.](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-125747-1024x505.png) ## 3. Generate the Vanes The primary and secondary vanes are generated using the **Twisted Vanes (Axial)** custom block. **Downloadable File:** [Twisted Vanes (Axial).ntop](https://storage.googleapis.com/files-learn/Courses/Turbomachinery%20Design/Twisted%20Vanes%20\(axial\).ntop) [*Report File Issue*](https://docs.google.com/forms/d/1Ev9UFCZGo1aefglpX6E8sQ6Hr-Y6ILhGSZxE3paCqy4/edit) *This file was last updated in nTop* 5.37.3 **Field Generation:** Create a polar array of infinitely thin fields. You can achieve this by taking the absolute value of a Plane starting at the origin. (Boolean intersecting the absolute value with the orthogonal plane ensures there is no forced symmetry.) ![Field viewer showing a polar array of infinitely thin fields.](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-133447-1024x567.png) > [!TIP] > > **Tip:** *Use the field viewer!* Learn more about using the field viewer [in this support article](https://support.ntop.com/hc/en-us/articles/360042931073-How-to-use-the-Field-Viewer). **Twist and Thickness:** Use a **Z Rotation** custom block to twist the vanes along the Z-axis using Remap blocks. Then, use the Thicken Body block to convert the infinitely thin fields into solid geometry. ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-135402.png) ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-135459-884x1024.png) Use the **Boolean Intersect** block to trim the thickened, twisted body with cylinders that represent your vertical (based on height input) and radial domains (based on outer radius input). ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-135748-1024x486.png) In the main notebook, define a “twist function” that varies exponentially along the Z-axis. The **Exponential Ramp** custom block provides precise control over the twist rate. The **Exponential Ramp** custom block includes some mathematics that allows for more control over the twist rate than a typical **Ramp** block would (learn more about the **Ramp** block in this article: [How do I use the Ramp Block](https://support.ntop.com/hc/en-us/articles/360041676813-How-do-I-use-the-Ramp-block)). ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-164113-1024x507.png) Finally, perform a **Boolean Intersect** with the vanes that you generated and the “Vane Domain” that you created in the previous step. Rotate the secondary vanes by half the angle between each primary vane to position them correctly. ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-165430-1024x528.png) ## 4. Assemble the Components **Underside Inset:** Create an infinite cylinder and offset it using a **Ramp** function along the central axis. Use *Tangent* continuity in the **Ramp** block to ensure smooth transitions. ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-165941-1024x469.png) Use the **Boolean Subtract** block to remove the bottom inset from a cylinder, creating the overall impeller domain. Join the vanes, central body, and base plate using a **Boolean Union**. Finally, perform a **Boolean Intersect** with the impeller domain to trim the entire body. ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-204938-2-1024x271.png) ## 5. Final Result Create an infinite cylinder for the center hole and use the **Boolean Subtract** block to remove it from the main body ![](https://files.learn.ntop.com/lessons/parametric-impeller/Screenshot-2025-12-18-205723-1024x568.png) ### Custom Block Conversion To prepare this notebook for use as a **Custom Block**: 1. Drag your **Final Solid** variable into the **Output** section at the bottom of the notebook. 2. Move all relevant design parameters into the **Inputs** section at the top of the notebook. # Answer to Bitmap Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/answer-to-bitmap-test-problem [https://www.youtube.com/embed/TfXN0uHUOUk](https://www.youtube.com/embed/TfXN0uHUOUk) > **Transcript** > > In this lesson, we are asked to create this tag using bit mapping. So, we start with our beginning parasolid part which contains two bodies. I have that outer body saved as a variable and our inner body as an implicit body. I also have that as a CAD body as well, and we're going to focus on this inner body starting off. > > First, we have to import our bit map. I've imported my bit map, and then I have to map that bit map to a plane. So, using that bit map, I have it located here on my part. I have it right at the center of my CAD inner or my inner body. If you didn't use a CAD body, I have interpolation type as linear, and then the length is 20 mm, width is 80 mm, and that looks like this. > > To create our nTop name on the tag, we're going to go to our **Block Details** and just choose grayscale. I took that out to be our grayscale values, just as we had done in the previous follow along. Then for offsetting and to create our final body, we are going to use our **Offset Body** with our body being the inner body, and we use that grayscale values. I'll type F so we can view what that looks like. > > So, our in min is going to be zero where we see that blue. Our in max is one, and for something like this, we want the maximum depth to be where we have that logo. That's going to be where it equals zero, so our maximum depth of 3 mm is in that out min, and we want no offset wherever we have that blank space. So, we get something like this, and we get this. If you like this design, you can keep this as is, but to follow the prompt, we want to have this just look like the normal nTop name. > > So, we're going to trim this. I'll use a **Boolean Intersect** where I use a box to trim it, and the box, I have it also centered at the centroid of our CAD inner body. And know that this width and this length are flipped, so when we're doing our bit mapping, the width and the length are the opposite of what we would do for this box, so just keep that in mind. And then for our height, I'm using this as the outer body span in the Z to ensure that it goes up to that face that we want. > > So, if I look at my outer body, this is just going to be up to that face, and I see that the **Boolean Intersect** we now have that nTop where we have that offset, and then we have this box here. And that's just because we are offsetting it right from that original inner body, so we're going to keep that inner body and just have what comes out of it is that nTop name. > > The last step then is to **Boolean Union** everything together: our trimmed outline, our outer body, and our inner body to get our tag here. This video reviews the answer to the optional bitmapping test problem which asks you to add the given image to a part. **Example File:** [311\_25\_Complete — Bitmapping Test Problem.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_25_Complete%20--%20Bitmapping%20Test%20Problem.ntop) *This file was last updated in nTop 4.14.2* # Answer to Conformal Ribbing Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/answer-to-conformal-ribbing-test-problem [https://www.youtube.com/embed/4i6wBE9cNMU](https://www.youtube.com/embed/4i6wBE9cNMU) > **Transcript** > > In this lesson, we will walk through the answer to our optional test problem for creating conformal ribbing. We were given a starter file with this nozzle, our height, thickness, and UVW divisions. Those parameters we need to apply, and we are asked to add conformal ribbing to this space. > > So, I have that nozzle. We have that saved as a CAD body. This is our primary body, which is also converted into an Implicit. We have our inner body here, which is going to be used to remove excess lattice that might be inside that part. And then the lattice face that we want to add the conformal ribbing. Once we have these geometry, we open up that starter file. We can begin to create that periodic lattice that will make our conformal ring. > > So for our unit cell, we'll use a **Graph Unit Cell** because the prompt asks us to use the hexagonal honeycomb. If I view that, this is what it looks like. And then we are going to use a **Cell Map from CAD Face** because we have one CAD face. We can use that option. Let me show that lattice face again, and we can see that that height is 3 mm out of our part. So we're just going to have that show here, and we have those divisions as defined in that UVW divisions with a linear check. > > Then to create our periodic lattice, we just bring in that graph, that cell map, and our thickness into our **Periodic Lattice**, and it will place that hexagonal honeycomb in each one of those cells. So we now have our conformal ribbing. The last step is just to remove any excess that's going inside the part and unioning this to the primary body. > > So first, I did a **Boolean Subtract** of the inner body from the lattice body. In case there was any excess in there, we would make sure we had that removed. Then once we have that, we can just do a **Boolean Union** with the primary body. So now we have our primary body and our conformal ribbing on the outside face. This video reviews the answer to the optional conformal ribbing test problem which asks the user to add conformal ribbing to a nozzle. **Example File:** [311\_6\_Complete — Conformal Ribbing Test Problem.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_6_Complete%20--%20Conformal%20Ribbing%20Test%20Problem.ntop) *This file was last updated in nTop 5.13.2* # Answer to Perforation Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/answer-to-perforation-test-problem [https://www.youtube.com/embed/AUaJm3mham8](https://www.youtube.com/embed/AUaJm3mham8) > **Transcript** > > In this lesson, we will walk through the answer to the optional test problem of creating perforations on a part. To learn a bit more about perforations, you can also visit our perforations training dedicated solely to different options for creating perforations. Since this is a big use case for a lot of our customers, we've included this as a test problem because you can use the same concepts of orienting the body to create these holes. This is that final result that we're looking for. > > To get to there, I first have to import my part perforation. I've converted it to an implicit body and I've also selected my faces. So we were asked to take that inner face, so I have all those inner faces, and make those holes normal to that face. Next, I'm going to stitch these all together and convert them into a mesh. So instead of having multiple meshes from those CAD bases, I'll have one mesh to work with. Once my geometry section is complete, we'll go on to our next step which is creating the locations for these holes. I'm going to use our **Random Points on Mesh** to do that. So we have our mesh base, I have my point count of 600, and our random seed of one to create all the locations where we will place our holes. > > You could also, if you wanted a certain region that has a cluster of them in one area and another, you could have added a ramp into our spatial weighting as well. We've also, if you wanted instead to control the distance between the two, we can also do that. I won't explain it in this video, you can watch it in that perforations training. But that can also be another kind of challenge problem using our surface area of our mesh and thinking about that distance that we would need to control that point spacing. > > Now that I have the location for where my holes will go, I have to create my holes and I'll start with a cylinder which I am just making sure is going to go through our geometry. So I have that two go to eight in the Z direction. You might play around with that when you're first starting off, maybe you have this a lot larger as long as it's going fully through your part, it doesn't really matter. Our radius, I'm going to have as about two millimeters as asked in the problem. The next thing I'll do is convert this to a mesh with the tolerance of one. I did for this one sharpen, and I've also simplified it so I get this cylinder to start off with. > > Next, we'll use our **Orient Object** to place it on each one of these points on our surface. So our source plane, I've placed this at the center of my cylinder. You may have placed it in a different location, as long as you make sure that this hole goes all the way through your part, that should be fine. But making sure it's at the centroid, I can ensure that it'll go all the way through in one direction and through the other direction as well. And that's why also you may have, if you didn't choose the centroid, you may have a different point to as well. And our normal I just have that at 001 so it's going through a hole for my destination planes. I have my origin is those points, and then I use the **Evaluate Field Gradient** so that I can find that normal. So at the solid body, what is the normal at each of those points, and this will give me this factor. You could have also used our **Closest Point to Body** as well and taken the normal from that property. And we can see all of the planes are now pointing inwards and are normal to our face. > > So we orient our holes onto each one of those planes like so, and I'm going to merge these into one. So we did not do the **Orient Object** with an implicit, because doing a Boolean Union of 600 would take a little while, and by merging that meshes it will be quick. So the last step is to convert this to an implicit body and then we can just subtract this from our solid body to get the design we have here. So that's how we could create perforations in this way. This video reviews the answer to the optional perforation test problem, which asks you to add perforations to the given part. **Example File:** [311\_20\_Complete — Perforation Test Problem.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_20_Complete%20--%20Perforation%20Test%20Problem.ntop) *This file was last updated in nTop 5.13.2* # Answer to Texturing Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/answer-to-texturing-test-problem [https://www.youtube.com/embed/hyAITbSiZN4](https://www.youtube.com/embed/hyAITbSiZN4) > **Transcript** > > In this lesson, we will walk through the optional texturing test problem answer where we are asked to add roughness, a constant roughness, to this part. Varying that noise roughness based on a CAD face and then as an advanced test, mimicking metal AM surface. So, we have our starter part which I have as a **Cad Body** variable and also as an **Implicit Body**. > > So the first task was to add a constant roughness throughout this surface with an amplitude of 0.6 mm and a frequency of 100. So in our **Simplex Noise 3D**, we'll have a random seed of one, frequency of 100, and then we'll just multiply the **Simplex Noise 3D** by that amplitude, 0.6. The last step is to offset the body. So we'll take our original body, offset it by the noise, and we get something like this where we have roughness all throughout this part. > > The second ask was to have that burying roughness based on that CAD face. So we'll again use that same noise. We'll use this noise throughout our part, so we still have that amplitude of 0.6 and our frequency of 100, but now we're going to have a ramp. So you could have done this in a different way. You could have done the **Simplex Noise 3D** and then had a ramp where the out max was the amplitude, but I just am keeping this noise in each one of these examples. > > So for my ramp, I have a plane that is based on—I'll show that final result. So I have a plane that is at the centroid of our face that we want to use, this smooth face, and it's pointing in that direction we want to see along that Z. You could have also just made this CAD face into an implicit and used that, either way works. For our in min, I have it zero. And to ensure that this change is happening throughout our entire part along the Z, I chose the original body dot bounding box dot span Z. So we can go into that original body bounding box and get that information here. So we have that high span along the Z. You also didn't have to use those variables. You could have used our ruler and chosen a value that seems about right for that. And then for our out min and our out max, because my noise I already multiply by 0.6 mm, I'm not having units in my out min and out max, and instead I just have this go from 0 to 1, where zero is that smooth base. We can see that final result here. And one would be the maximum noise that I want, which is going to have that amplitude of 0.6 mm. So that's how we get something like this. > > And then our final ask was to mimic something similar to a metal AM surface. And this is an advanced question that uses our **Angle Field**. So if you did not do this step, that's okay, feel free to listen to this explanation as one way you could do this. So to show my final result, if we have our build plate, let's say at the bottom, that same face is—we would expect something like this top surface to be smooth, while we have any overhangs will be our areas of most rough region. So in order to make something that looks like this that mimics that metal AM surface, we can use this **Angle Field**. So if our build plate, we expect that the plane from normal would be 0 0 1, so pointing up to our part, if I look at this angle field of our original body type F, and let's look at this with our plane from normal at 0 1 0, or let's do 1 0 0, and I'll move this so we can see what it looks like in that hole. So this is a great for doing anything, especially when thinking about overhangs, this **Angle Field**, because it will give us the angle that that surface is to our direction. So this bottom surface is 180 degrees. At that top surface, we're around zero, and we can see how that is in this hole as well. > > So we can use this to then say where we want areas to be more rough versus more smooth. So I have this **Angle Field** as my ramp, and my in min is going to be 0 degrees, in max at 180. So this is just a simple example. Maybe you would change this around if you were remaking your metal AM surface, but our out min zero, so when we have something that is in that same direction, we're going to have a smooth base like we can see here. And when we have that overhang of 180, we'll have our max value as we can see there. > > So with that, we can bring that into our offset, and I'm just multiplying our ramp by the noise. We have that as their Z alignment factor, and we get our offset. So that **Angle Field** makes this a bit more of an advanced question, but using our ramp, using our **Offset Body Multiply**, it's pretty much the same thing, we're just using a different scalar field for this. So that's how we would solve those three questions. This video reviews the answer to the texturing test problem using the **Simplex Noise 3D** block. **Example File:** [311\_14\_Complete — Texturing Test Problem.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_14_Complete%20--%20Texturing%20Test%20Problem.ntop) *This file was last updated in nTop 5.13.2* # Before We Begin: Ribbing & Texturing Source: https://docs.ntop.com/lessons/ribbing-and-texturing/before-we-begin-ribbing-texturing [https://www.youtube.com/embed/0mClTvXrQeE](https://www.youtube.com/embed/0mClTvXrQeE) In this course, we will: * Get to know various lattice workflows for creating conformal ribs * Understand the built in roughness fields and how we can use them to texture a part * Explore multiple methods for texturing any geometry # Download: Adding an Image Source: https://docs.ntop.com/lessons/ribbing-and-texturing/download-adding-an-image Now that you have completed the follow along, feel free to download the completed file with descriptions as a resource. **Example File:** [311\_23\_Complete — Adding an Image.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_23_Complete%20--%20Adding%20an%20Image.ntop) *This file was last updated in nTop 4.14.2* # Download: Adding Roughness Source: https://docs.ntop.com/lessons/ribbing-and-texturing/download-adding-roughness Now that you have completed the follow-along, feel free to download the completed file with descriptions as a resource. **Example File:** [311\_9\_Complete — Adding Roughness.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_9_Complete%20--%20Adding%20Roughness.ntop) *This file was last updated in nTop 5.13.2* # Download: Creating Ribs Source: https://docs.ntop.com/lessons/ribbing-and-texturing/download-creating-ribs Now that you have completed the follow-along, feel free to download below the completed file with descriptions on how to add ribbing to a part. **Example File:** [311\_4\_Complete — Creating Ribs.ntop](https://storage.googleapis.com/files-learn/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_4_Complete%20--%20Creating%20Ribs.ntop) *This file was last updated in nTop 5.13.2* # Download: Orienting Bodies on a Surface Source: https://docs.ntop.com/lessons/ribbing-and-texturing/download-orienting-bodies-on-a-surface Now that you have completed the follow-along download, the completed file with descriptions is available as a resource. **Example File:** [311\_18\_Complete — Orienting Bodies onto a Surface.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_18_Complete%20--%20Orienting%20Bodies%20onto%20a%20Surface.ntop) *This file was last updated in nTop 5.13.2* # Download: Procedural Texturing Source: https://docs.ntop.com/lessons/ribbing-and-texturing/download-procedural-texturing Now that you have completed the follow-along, feel free to download the completed file with descriptions as a resource. **Example File:** [311\_12\_Complete — Procedural Texturing.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_12_Complete%20--%20Procedural%20Texturing.ntop) *This file was last updated in nTop 5.13.2* # Follow Along: Adding an Image Source: https://docs.ntop.com/lessons/ribbing-and-texturing/follow-along-adding-an-image [https://www.youtube.com/embed/cRvAZU2fMZ8](https://www.youtube.com/embed/cRvAZU2fMZ8) > **Transcript** > > In this lesson, we will add textures and logos using bitmap, and basically using a PNG image to create that texture. So, in our starter file, we have our box and then this trimming box, which is where we will add our texture. So, our texture will be right in that region. > > Let's go to our adding bitmap section. The first thing I'll do is just import this so we can do our beta tab for our bitmap. So, you can see in Utilities Exchange or you can search for this. And if you don't see this, you don't see the beta tab, you can always go to File Settings and just make sure you have your Show Beta Blocks turned on. For the path, you can download the image that we'll use in this example, or you can upload your own PNG. I'm going to use that pattern three. > > For a dot pitch, sometimes you'll need this dot pitch. I'll just put in 1 mm for this. Other times, you can just leave it optional. And I'll right-click, make this a variable, and label this image. So we don't see anything yet. But if we use our **Map Bitmap to Plane** block, so type that in, **Map Bitmap to Plane**, what I can see is I'll bring in my image, that bitmap. I have a plane that I'm going to see this on, and I'll just choose a plane. And if I scroll out, we can already see it. It's put this in, and I haven't defined the length and width, and that's why it's so large. So I'm going to change the length to 12 mm and the width to 15 mm. > > So if I zoom in by typing Z, we can see now what this shape looks like. We can also change our interpolation from L to cubic. It doesn't really change too much that we can see. And I'll right-click, make this a variable, and label this planar image. So we have this image, and if we look in our Block Details under properties, we can see that I have these different fields associated with it. So I can offset A and B, similar to what we've been doing with the adding roughness and the procedural texturing using the grayscale image, alpha, blue, green, hue, red – all these different options we have available. So I'm going to use our grayscale. I'll just drag and move that to its own separate line and double-click on the name to rename this as Grayscale Values. > > The next thing I'll do is add this to our design. So I have my box, I have my trimming box, and just as we had done in the previous follow-alongs, I will use our **Offset Body** block to offset our box. We'll use our regular box, not our trimming box. And for our distance, I'm going to use a ramp again. So as I've said in previous follow-alongs, if you're unfamiliar with ramps or fields, I definitely recommend going to our Intro to Field Driven Design course and checking those out. Our scalar field that we'll be using is this grayscale volume. So I'll turn off that planar image and let's see the grayscale values as a field. So I'll type F, and anywhere that we had that design, we can see we have a field that matches that, and then past it, it just has those values remain the same. > > So for our in min, if I also probe my values, we can see that these values are between zero and one. My grayscale value is my scalar field. In min will be zero, in max will be one. And how much I want to have this texture come out will be where we have those values of zero. So anywhere that light blue is, we will have an out of 0 mm, and our out max will be 2 mm. We'll only see that texture in those areas that are black in this field showing. And I'll make this geometric, so we can see I am seeing that design now as a field, and it has this offset 2 mm above, below, and all around. So that's why we needed that trimming box, and I have that trimming box shown. So we'll actually only keep anything that's within there. So you can play around with how much of that out min, out max you actually want. But I'll make this a variable, label this 3D texture. > > And now what I'll do is just a Boolean intersect between this 3D texture and our trimming box. So of our 3D texture, our trimming box, and turn off that 3D texture and the trimming box, and now we are going to get something like this. So in some areas, we see that kind of roughness in certain areas, and part of that is because if we look at our bounding box, we have this trimming box that's going inside of that box, too. So where we are offsetting our box, it's sometimes going to be a little… it's going to have some areas shown like so, especially depending on what image you do. So you can also play around with different images and see what this looks like as well. You can use a **Smoothing Body** block as well to smooth this design. I chose to use this **Smoothing Body** block, and I'll make that grid size pretty small since it's a relatively small design. You can see we're going to have that smoothness everywhere, but it will also kind of help with any areas of that roughness that you still see. So you can play around with different inputs to get a better design that you might want. I'll just keep with this Boolean intersect for now. > > And the last thing that I'll do is a Boolean Union of this texture with our box. Another way to help remove that excess besides that **Smoothing Body** block is you could also play around with this blend radius. So I'm going to actually change this to chamfered and give this a blend radius of 1 mm. And what we can see any of that area is now gone. So we have that little chamfer that will remove any of that excess. So sometimes just playing around with that blend type, that blend radius can also help with this as well. > > So now that this is exactly as I want, I'm going to do a Boolean Union of our texture and our box. So now I get something like this where I have my completed texture here. I'll right-click, make this a variable, and label this trim texture. So you can play around with these different designs, put in something else that you want. You may also want to have a texture that comes from your logo. You want to have that image on your part. So I actually have a custom block in here, this **Implicit Body from Logo** block, that will show how to do something like that as well. You can also download our **Implicit Body from Logo** custom block below this video. But in this last section, I have my **Implicit Body from Logo** block, and if you're unfamiliar with importing custom blocks, I recommend checking out our Intro to Automation course. But this has just our path for the location we want it, it has the color field we want to choose, so you may want to play around with different color fields, and then the length, width, and depth that we want this design to be. > > So, this is doing a very similar process we had just gone through. Now it has made it a custom block to just import a logo, so we have our nTop logo for this. So, if I wanted to then place this onto my part, first I'll make this a little bit smaller and I'll just make this 2 mm length, 2 mm width, and a depth of 0.5 so it fits a bit nicer on our part. > > Right now it's right inside of our box, which will not work. So, one way we can move this logo is by just going to our custom box that I have also that you can download below this video or in our in automation course, which is our **Move Object** block. So, you can just put in this logo and move this to where you want it to go, and this uses our **Orient Object** block that we've talked about previously. > > Another option that you can do is just use our **Orient Object** block. So, our object will be the logo, we'll put in a **Plane From Normal** block, and I can move this around to where I want it to be. Or I can make sure that it is right on that face using different variables. So, another custom block I have down that you can download with this video is the **Point From Bounding Box** block, which is really helpful. > > So, given this logo, I can say I want this at the midpoint in the X and the, or the midpoint in the Z, but the centroid in the X and the Y. So, if I use this, it will now place this right at the location I want to have for my source. If you want to see what this does in kind of a manual way, all we have to do is place in a point. Go into our block details for our logo and the bounding box, and we'll just choose, if we click on that centroid, we'll choose the centroid in the X and the Y, but then we'll choose the endpoint in the Z. So, a lot of ways to do something at nTop, and why custom blocks can be useful, is that it just saves us a little bit of time. > > So, this is our source plane and our destination plane. If we look at our trimmed texture, let's add another **Plane From Normal** block. And if we go back to our box in our geometry tab, we have this going up a height of 2.5, so this is really going to be up 1.25, which is where we want it in the Z. So, I can also just drag and move this so that it roughly is where I want it to go. Maybe I want this to be, you know, at that corner, and then put in for the Z 1.25, and I'll know that it's right at that top of the surface. > > And the last thing is just unioning this now to our final body. So, I'll do a **Boolean Union** of this logo now oriented in the right spot, and I'm going to use our trimmed texture that we made in the previous section. And if I type “I”, we now have our final body that has our texture we created and uses that custom block as well. In this lesson, we will walk through how to use bitmapping to add texture to a part. If you are unfamiliar with the **Ramp** block, please visit our [Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/) course before reviewing this lesson. We will also use a custom block in this lesson to create an implicit body from a logo. To learn more about custom blocks, please visit our [Intro to Automation](/courses/230-intro-to-automation/) course. Please download the PNG and nTop files below to follow along with the tutorial. > [!NOTE] > > **Note**: This lesson contains a Beta block, to ensure you can access it go to *Settings → General → Check Show Beta Blocks.* **Example File:** [311\_22\_Starter — Adding an Image.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_22_Starter%20--%20Adding%20an%20Image.ntop) *This file was last updated in nTop 5.13.2* [311\_22\_CB Implicit Body from Logo.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_22_CB%20Implicit%20Body%20from%20Logo.ntop) *This file was last updated in nTop 5.13.2* [311\_22\_CB Move Object.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_22_CB%20Move%20Object.ntop) *This file was last updated in nTop 5.13.2* [311\_22\_CB Point from Bounding Box.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_22_CB%20Point%20from%20Bounding%20Box.ntop) *This file was last updated in nTop 5.13.2* [311\_22\_pattern.png](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/Images/311_22_pattern.png) [311\_22\_Follow Along – Adding an Image.pdf](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/PDFs/311_22_Follow%20Along%20-%20Adding%20an%20Image.pdf) # Follow Along: Adding Roughness Source: https://docs.ntop.com/lessons/ribbing-and-texturing/follow-along-adding-roughness [https://www.youtube.com/embed/aydYLcMqWow](https://www.youtube.com/embed/aydYLcMqWow) > **Transcript** > > In this lesson, we will walk through how to add roughness to a surface of a part. So, I have this part that I also have as a CAD body variable. That one body will work with, and I've converted it to an implicit body. So, we'll need that implicit body since we'll be working primarily with fields and topology. So, I'll even show just that fields tab. > > So, to create this type of roughness, we're going to use in the noise section of our fields this **Simplex Noise 3D**. So, I'll add that to my notebook and add that in for the texture reference. So, I'll make my frequency a variable. This is a bit of a larger part, so I'll also increase that frequency. But first, I'll right-click, make this a variable, and my frequency I'll make 100, and I will turn off that visibility. This is an infinite field, so I'm first going to just type F to see. I'll also increase that size for our field viewer to 2,000. > > And if I look at this from the bottom view, for instance, we can see this field that we have that looks a bit random is going to add that roughness that we want. If I press my values, you can see that these are values ranging between -1 and +1, and they are unitless. And what we're going to do is have the scalar field as an input for our **Offset Body**. So, in certain areas, it'll offset it by a lot outwards, some it'll offset it inwards. So, I'll search in my search bar for that **Offset Body**. The body we want to add that roughness to is our smooth part, and I can't immediately put this **Simplex Noise** in because we don't have any units of length. > > So, and before I do that, I'm going to multiply this field by 1 mm. So, I'll just write that in here and say multiply our **Simplex Noise 3D** by 1 mm. We can already see we're starting to see that roughness. If I turn off that smooth part onto our surface of our part all throughout. Now, if I look at that field we just made, that **Multiply Simplex Noise 3D** by 1 mm, if I type F, we can see it looks the same. It just has these units. So, if you're unfamiliar with fields, I recommend reviewing some of this in our intro to fields course. We also talk about fields in greater detail in our intermediate fields course as well. But really, just to summarize, if you have a field that has no units, or maybe it's in millimeters squared or in a different type of unit system, all you really need to do is multiply or divide by 1 mm, and that will allow us to use this as a thickness or whatever input you have. So, always make sure you have those right units. This multiply is also helpful because we can increase that surface roughness that we see, having it a larger offset, lower offset. So, for instance, I'll close my field. > > Now, if I multiply this by 5 millimeters for instance, we can see that we have a lot more of that roughness coming off the surface just because instead of it ranging from -1 to +1, it's now from -5 to +5. I'll keep this at 1 mm, but what I can do is if I want to have maybe a smooth surface at one end, maybe this space, and I want it to become rougher as we go along my parts, then we can use a ramp for our multiply so that we have that varying of that offset. And again, if you're unfamiliar with ramps, I recommend looking at our intro to field driven design course. > > But first, I'll right-click, make this a variable to keep our notebook nice and organized, and just label this rough part. And I'm going to use the same **Simplex Noise 3D** and just change that multiply. So, what I can do is just right-click on our **Offset Body** and duplicate this variable so I have all those inputs the same. We'll just change that multiply, and I'll rename this by double-clicking, “varied roughness.” > > So, to create that varied roughness, I'm going to type in “ramp” to get our **Ramp** block, and I'll turn off the visibility of that. So, our smooth part again, and for our preference for how we're going to change our roughness, I'm going to use **Plane from Normal** for that change. I want it to go along the Y-axis, so I'll make the normal 0, 1, 0, and I'm just going to move this over. And I'll make this a little bit past that face, so anywhere that is below this plane, so anywhere to the left, is going to have that smooth surface. And you could use the variables from our smooth part, so in the block details and the properties, you could choose some of these items in the bounding box. You either add and subtract to say, “I only want it to be 10 mm past that surface each time.” That bottom surface, you can play around with those options, but I've just dragged and dropped it for this instance. > > I want the change to begin of our roughness at 0 mm, so when we are right at that plane, that's when we'll start to see some change. And I'm going to end that change 1,000 mm past that. So, that's going to be going through basically our entire part, as you can see. I can drag and move this ruler, so if I lined up my plane, we can see that that's going to cause that change all throughout our part. > > Now, the change that I actually want to see that we'll put in our out Min and out Max is going to be that roughness. So, I want to start with no roughness at all, so that offset will be 0 mm, and I have to add in that millimeter so that we have those units to our **Simplex Noise 3D**. And our out Max is going to be 5 mm, so we'll have that very large roughness, and I'll have geometric continuity. So, I'll turn off that smooth part so you can see exactly what this looks like. But what we see is I have this smooth surface, and then as we go further to the right, I have this roughness. And to see a better gauge of what this looks like, I'm viewing this in medium resolution, but I could select this implicit body, go to view, and then precise render or type Ctrl+H, and we can see how rough that part really is. So, you can play around with that roughness, see that smoothness, and that's how we can add roughness to a part. So, of course, application of this is replicating additive manufacturing, that roughness that you might have on certain surfaces, met smoothness on others. So, you could use the **Simplex Noise 3D**, for instance, to create that same type of surface. In this lesson, we will walk through how to add roughness to a surface in nTop using the **Simplex Noise 3D** block and the **Ramp** block. If you are unfamiliar with the **Ramp** block, please visit our [Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/) course before reviewing this lesson. Please download the nTop file below to follow along with the tutorial. **Example File:** [311\_8\_Starter — Adding Roughness.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_8_Starter%20--%20Adding%20Roughness.ntop) *This file was last updated in nTop 5.13.2* [311\_8\_Follow Along – Adding Roughness.pdf](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/PDFs/311_8_Follow%20Along%20-%20Adding%20Roughness.pdf) # Follow Along: Creating Ribs Source: https://docs.ntop.com/lessons/ribbing-and-texturing/follow-along-creating-ribs [https://www.youtube.com/embed/483tGrm5lfI](https://www.youtube.com/embed/483tGrm5lfI) > **Transcript** > > In this lesson, we will walk through how to create ribbing on this part. So you can download the starter file below this video, which has our inputs we'll be using, as well as our part. In the file, we have this. We have it as an implicit body. We have the upper body and lower body. We have the lower face A that has different colors so we can see it: our upper face A, lower face B, and upper face B. So we will use these faces and show the CAD face method for creating ribbing, as well as the mesh method for creating ribbing. > > So, in this way of creating our ribbing, we're going to start off in the latticing tab, and I'm going to choose our **Periodic Lattice** and place that in my CAD face method. You could also search for your **Periodic Lattice** in the search bar. As we learned this in initial latticing, we'll use a unit cell. We can choose the graph unit cell. I can also just double-click and select that graph unit cell. I'm going to use our triangular honeycomb unit cell. If I type “I” and then “Z” to see this centered in my viewport, you can see what that will look like. We'll use this for our ribbing for our cell map. I'm going to have one for the lower ribs and one for the upper ribs. So let me type “I” again and begin with our lower ribs. > > For the cell map, I'll double-click and I can choose **Cell Map from CAD Face**. Also, you can choose that from our cell map options in the latticing tab. For the face, I'm going to choose our lower face A. So that's just that outer face UVW count. I have that as our ribs division, so I can just drag and drop that. We have our offset distance, that input is going to be our height, and I'm going to have this as linear. So now we can see the cell map that we're going to place each one of our cells. For the thickness, I'll just drag and drop that thickness here. When I turn on this, we can see that triangular honeycomb unit cell was placed in each one of those cells for our cell map. I'll right-click and make this a variable, which I'll label as “lower ribs.” > > So we'll do a similar thing for the upper ribs. I could go through the same process, but if you know that everything except for that face is going to remain the same, what I can also just do is right-click, duplicate variable. Now, instead of the lower face A, I'll take that out, save some space in my workflow by closing that. Let's view the upper body and that upper face A. So the outer face. Now I'll just drag and move that into here, turn on that lower ribs copy, and it gives me exactly what I want. So I'll double-click on that name of the variable and label this “upper ribs.” > > So now I have my lower ribs and my upper ribs, but none of these are connected quite yet. So the last thing that I'll do is a **Boolean Union** where I will take my lower ribs, my upper ribs, and then I'll add two more items in here so that I can also connect it to my lower body and my upper body. When I type “I” on this **Boolean Union**, we have one piece shown, and it has all of our ribbing on there. So I'll right-click, make this a variable, and label this “Part B.” > > So this walks through how I would use that **Cell Map from CAD Face**, and next we'll show how to use a mesh method or multiple CAD faces to create a similar design. So this is our CAD body. So really just going to be starting with CAD faces, but if you had a mesh beginning with, you can use that too. This time we'll use our lower face B and upper face B. So this is just the interfaces, and you can see that they are adjacent to each other, and I want to create one conformal ribbing throughout this entire two faces. I'll put my cursor under the mesh method, and I'm going to use a **CAD Face List** to just have both of these in there. > > I'm going to stitch them together, so I can search for the **Stitch Adjoining CAD Faces** by clicking on my part and using that context search and just type “Stitch,” and it'll already place it right in there. So now instead of the two, let me turn off that visibility. I have just this one, and they'll be treated as one face. However, our cell map on CAD face still, even though these are stitched, we would not be able to use this in that block. So instead, we'll use in our cell maps. We have this **Cell Map from Quad Mesh**, and I'll convert that to a quad mesh using the **Quadrangular Mesh** block. So you can go about this way, where we start from the innermost block and go outwards. You could also go the opposite way, where I double-click on the input and just keep on going from that cell map from quad mesh into the quad mesh into the mesh into this. But I'll continue with this flow of starting from that inner block and going outwards. > > So now that I have a CAD face, I then need to turn this to a mesh. So I'll do a context search, and I'll say **Mesh from CAD Body**, and we can see now it's a mesh. The last step, I'll click on that, do a context search, and use the **Quadrangular Mesh** block. So now I have all of these quads, which will be the basis for my cell map. We can see we get this warning that our output mesh is not closed. That's fine. We are only using some faces, it's going to be open anyway. I'm going to change my target count because if this is where I place each of these cells, I'm going to have a really small unit cell. It's going to be very densely packed. So I'm going to change my target count to 100, and we can see I have a much larger start for my cells. So I'll place this into our surface mesh. For our height, I'll use that offset distance in our inputs again, and our layer count, I'm going to just use one. So you can see wherever I had those lines on my mesh, that's where I'm placing those cells like so. I'll right-click, make this a variable, it's getting to have a lot of steps in there, and I'll label this “cell map.” > > Now I'm going to place my unit cell, my geometry, in there. So again, I can go to my lattices and choose that **Periodic Lattice**. So I can search for that. This is my cell map. I'll double-click on that unit cell and choose the graph unit cell again. I'm going to choose as the unit cell the triangular honeycomb, and the thickness will be that thickness in the input. So now we have this inner ribbing, and just as we had done before, the last step of this process, first I'll right-click and make this a variable and label this “conformal ribbing” or “conformal lattice.” > > The last step is just to do a **Boolean Union**. So I'll search for a **Boolean Union** block, place in my conformal lattice, and then I look at my CAD import and selections. I want to also union this to my upper and lower body. So I'll add another item in my list, move the upper body and lower body variables into that **Boolean Union**. If I type “I” so I only see that, we can see I now have that conformal ribbing on the inside of this part. So I'll right-click, make this a variable, and label this “ribbed part.” That is how we can create conformal ribbing using our **Periodic Lattice** and the **Cell Map from Quad Mesh** and **Cell Map from CAD Face**. In this lesson, we will explore different ways to create ribbing using our **Periodic Lattice** block. If you are unfamiliar with lattices, we recommend reviewing our [Intro to Latticing](/courses/210-intro-to-lattices/) course, which covers these topics in greater detail. Please download the nTop file below to follow along with the tutorial. **Example File:** [311\_3\_Starter — Creating Ribs.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_3_Starter%20--%20Creating%20Ribs.ntop) *This file was last updated in nTop 5.13.2* [311\_3\_Follow Along – Creating Ribs.pdf](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/PDFs/311_3_Follow%20Along%20-%20Creating%20Ribs.pdf) # Follow Along: Orienting Bodies onto a Surface Source: https://docs.ntop.com/lessons/ribbing-and-texturing/follow-along-orienting-bodies-onto-a-surface [https://www.youtube.com/embed/EgThrp9opc8](https://www.youtube.com/embed/EgThrp9opc8) > **Transcript** > > In this lesson, we will walk through how to orient bodies onto a surface. So, in the starter file, we have our part. We have the one body as a CAD body variable. We converted it to an implicit body, and we'll need that for any Boolean operations we do, as well as those two surfaces that we want that texture, as well as a mesh version of that. So currently, these are two faces, but when we stitch these CAD faces together, we will get one mesh. That mesh from CAD body and we can also remesh the surface if we want so that we have that more uniform mesh, and we can control that edge length as well. > > So I'll add a new section, and this will be where we do our work. So I'll just label this Orient object and minimize some of those inputs. The first thing that I'll do is pick the location that we're going to add our body to. So I'm going to use our **Random Points on a Mesh** where our mesh will be this meshed surface, and let's just have 200 points. So anywhere we see these points on this mesh surface, that is where our texture, our body that we're orienting is going to go. So right-click, make this a variable, and label this points. You can see what that looks like on our implicit body that we'll Boolean things to later. > > So then the next step is what do we want our texture to be? So for this example, we're going to have this hex design, this hex unit cell that we'll place on each one of these points. So you could also bring in, you know, a design that you made in CAD. You have a mesh design that you already have, you could import those and start right away. But I'm just going to create something within nTop that we'll use, and I'm going to use some of our options in our Modeling tab for this. > > Extrude profile. The profile that I'll use, I want this hex design. So I'm going to use our **Regular Polygon Block Plane**. It can be any starting plane. I'll just type in plane from normal sides. I want six, and for the radius, I'll use 20 mm. So if I type I, and I can type Z to have this centered, we can see this is just that polygon, currently has no thickness. So I'm just going to extrude through that profile. I'll make the distance 10 mm, and I'll do this in the direction of 0 0 1. So if I turn on that visibility, we can see it's just going up from that surface. > > And I could use this implicit body and orient it on each one of these parts, but it'll actually be faster if we first convert this to a mesh. This is a simple design, and I'll point out later how making this a mesh now will save us some time later on. So I'll use our **Mesh from Implicit Body** block, which I could search for, or I could just click on that and do a context search for that mesh from implicit body. I'll do a tolerance of one, and I'll sharpen this and also simplify it so you can see it. We'll have a lot of triangles. It has about 90% simplification, and I'll right-click and make this a variable, which I'll label units. > > So another way you can also create these kinds of designs is using our periodic lattices, having your own custom implicit unit cell, and placing that on here. So this is just another way that you can create that type of texture as well with these set of points. And the way to do that is using our **Orient Object** block. So the object I want to orient is unit cell, and the way this Orient object works is we have a source plane and then where we want this to go, that destination plane. So I'll start with the plane from normal. Let's go back to just viewing our unit cell. > > And this is at that bottom surface of our unit cell. So if I wanted to ensure that everything is flushed to the surface, maybe I only want this to actually come out 5 mm, but I want this to be placed right at that centroid. So it's 5 mm into our surface, 5 mm out to the surface. Then what I could do is go into our block details for our unit cell, into properties, into that bounding box, and choose that centroid as our origin for that source plane. And where I'm going to place this, I'll place in another plane from normal, and you can see it's just going to place this new object that's been moved right wherever that plane is. So if I move this plane over, it's going to be placed in the same way that the source plane was for our unit cell, so right at that centroid. So you could also play around with different locations that you want that origin to be, or even that normal to rotate that as well. > > But I want this to be at all of our points, so I can just drag and drop my points, and if I zoom out, everywhere that I have those points, we can see I now have that unit cell. And if I turn on my destination plane, so a lot of planes we have here, and the normal is all 0 0 1. So while it was placed in all of those points, we don't have it so it is oriented normal to the surface, which is what I want to create that texture. So there's a couple ways to go about it. So one thing we can do is use our **Closest Point to Body**. So if you were unsure if the points were exactly on that surface, you could always bring in the points, bring in that original body for the body. This will place them right onto that body. The other nice thing about this block is we also have the normal of that surface. So we could take this normal, we could take those points, and that would be our origin and our normal. > > Another way to go about this if you are fine with that location of those points is to use our **Evaluate Field Gradient**. So what this will do is take in a scalar field, or you could take in an implicit body like our original body, and place in our points, and it's going to give us this normal vector. So we can see these are the different vectors for each one of these points, and that's also going to give us the vector that's normal to that surface. So I'll put this right in here, turn on the destination plane, and now we can see that instead of them all having that 001, that we have our normal, which is those blue lines. If we look at our original body, that is going to be normal to our surface there. So when we look at our Orient object, which is now placing each of these unit cells right at that center of our plane, we are going to have it so that it is normal to the surface like so. > > Now these are 200 different hexagonal designs here, that unit cell. So I'm going to do to make this one, and then Union this to our original body is first merge these meshes. So I already have a list, so I'll delete this mesh list, bring in that Orient object, and now instead of having 200, I have just one mesh. So even though they are not connected, I still I'm thinking of them as one mesh, similar to that **Stitch Adjacent CAD Faces**. I'm going to get that one mesh. So I'll right-click and make this a variable and label this oriented X. > > And with our Orient object, we could have brought in an implicit, and it would have done the same thing, but we couldn't have done this quick merge meshes to get that one body. We would have had to bring in the Orient object into a Boolean Union, and when we have a couple items to Union, it's nice, quick, and easy. However, when we have something like 200 or a lot more than that, we are going to see that the Boolean Union will take a little while to run. So by doing this mesh version, such a simple part to mesh, it would be nice, quick, and easy. We had that merge meshes, and then what we can do is our **Implicit Body from Mesh**, bring in that merge meshes, and now it's pretty quick to convert that all to an implicit without having to do that Boolean Union. We have just one. So I'll bring that in to our **Boolean Union**, bring that to the last item in my notebook, and the last thing I'll do is just Union this to my original body. So when I type I to show this Boolean Union, we have our texture now all throughout those surfaces that we wanted. So I'll right-click, make this a variable, and label this our hex texture, and we've now oriented this body that we wanted onto the surface to create this type of texture. In this lesson, we will walk through how to create textures on a surface using the **Orient Object** block. To learn more about the meshing blocks used, please revisit our [Guide to Meshing](/courses/102-guide-to-meshing/) course. Please download the nTop file below to follow along with the tutorial. **Example File:** [311\_17\_Starter — Orienting Bodies onto a Surface.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_17_Starter%20--%20Orienting%20Bodies%20onto%20a%20Surface.ntop) *This file was last updated in nTop 5.13.2* [311\_17\_Follow Along – Orienting Bodies onto a Surface.pdf](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/PDFs/311_17_Follow%20Along%20-%20Orienting%20Bodies%20onto%20a%20Surface.pdf) # Follow Along: Procedural Texturing Source: https://docs.ntop.com/lessons/ribbing-and-texturing/follow-along-procedural-texturing [https://www.youtube.com/embed/yM3-hBOshM0](https://www.youtube.com/embed/yM3-hBOshM0) > **Transcript** > > In this lesson, we will walk through some examples of procedure texturing on a two new so. So, I have this, so imported into my notebook and I have the Miho shaved as an S of body. And I've also created this sidewall. So, using the sides of our CAD, I use this **Custom Block Implicit Body** from CAD faces that just thickens this inwards one mm. So, if you're unfamiliar with **Custom Blocks**, I recommend looking at our Intro to Automation course on how to import, export, uh, **Custom Blocks** like the ones we have in this notebook. But I have my sidewall and this is what I'm going to add my procedural texturing to. And I have a lot of different types of textures that I could play around with. > > So, I'll click on this first one and type F. Let's change the plane from normal to be 010. And what we'll see is I'll have this pairing bone-like texture. If I use this one, if I type F, we can see I have this polka dot texture, angular texture, this cell-like design, something like leather, something similar to a marble and wood. So, I'll play around with all of these and see what this looks like to create this procedural texturing on this side ball. > > I'll put my mouse on that texturing sidewall. So, I'll click on that and just as we had done in our adding roughness follow along, we're going to use an **Offset Body** to add this type of texture. So, for the body, we'll use our sidewall. And for the distance, we'll start with just our texture swap. So, we'll use this variable texture swap and we can just input different textures and quickly change which one we're using. And we'll start off by just putting this in. > > So, unlike the Adding Roughness follow along, we did not have to add multiply by one mm to get these units. And that's because these are **Custom Blocks**. They already have that step put in. But a lot of these are using either our fields or one of our noises such as Simplex Noise 3D or Cellular Noise 3D for anything like that leather. But cells type of texture, and now I can see I have this pattern. We're using the angular field so we get something like this. > > Now, even though we don't need to multiply or divide by units, we might want to still use that **Multiply Block** before putting our texture swap right in. And the reason for that is maybe you still want to have that varying, um, thickness for that texture. So, for instance, right at that inside, maybe I want it to be nice and smooth and on the outside that's where I want that texture to be. So, I'll delete this texture spot and instead add a **Multiply Block**. And we'll multiply our texture swap by a ramp to get that varying thickness. And if you are unfamiliar with **Ramp Block**, I recommend viewing our Intro to Fields course, specifically the lesson on ramps which is linked below this video. > > But I'll type in a **Ramp Block**. And for our scalar field, this time we're going to use our midsole. So, our midsole, remember, is that edge of the midsole is right at the edge of our sidewall. And what we want to define is what happens at the uh inner side of that sidewall. So, I'm going to have as my in min will still be zero. So, right at that surface of the minle. And then our in max, we have thicken this side ball by one mm. So, it's one mm into our midsole. So, my texture fall off where we're going to end that design, that texture is going to be one mm. But you can see this is negative one mm because instead of going out of our part, which would be positive one, we are going into that midsole. And so it is negative one. > > At the surface, I want to have my maximum texture depth which is going to be one. And our out max is zero. Again, note that this texture depth, this out and out max is unitless. So, we don't need to add millimeters. Our texture already has that millimeter. And if we added millimeters here, then it would again be the wrong units because it would be in millimeter squared. And I'll choose geometric continuity. So, we can see it runs. If I want to see the field version of this, turn off that **Offset Body** sidewall and the midsole and just type, uh, let's type F for the ramp. I can press my values and see it's one then it goes to zero. So, very quickly we can see that change. If we click on our **Multiply Block**, we can see that when we are past that one mm from that surface of the midsole, we are no longer going to have that texture. And if I look at my **Offset Body**, it shows me that same result. > > So, I'm viewing this in medium resolution. But if I click on this **Offset Body**, go to view and choose precise render, or type control H, we can see I'm going to have the that smooth surface inside at one mm of our sidewall and we're only going to have that **Offset Body** as we go closer to that surface. So, I'll right-click, make this a variable and label this textured sidewall. And we can look at this with our midsole and that's the design that we get. > > So, now is the time to see what these other textures look like. So, I could put in my polka dot texture and see what that looks like. We can do the herringbone, the cells texture, something like that, which is pretty neat. Leather, you can kind of see it is very thin. And something to note with this too is if I look at this, I can control this cell depth and the frequency. So, we could make this, you know, we could change this pattern as well too. You're not set on just this exact design for any of these. So, we can change that cell size. We have a lot to change for that marble if we want. And you can also always go into that **Custom Block** and change it as well too. I have what the marble would look like and then our wood. So, our wood is also a good example of how we can change things. > > So, what this does is it takes our axis, which we're using as a cylinder. Um, we can control that frequency and the organic of the field. So, just by moving my axis, so I'll move that starting point to there, we are going to get a slightly different design for this wood-like texture. So, a lot of ways you can change things. These are just some starting textures. And you can also make your own. In this lesson, we will show how to apply different textures to a design. If you are unfamiliar with the **Ramp** block, please visit our [Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/) course before reviewing this lesson. We will use different custom blocks for texturing our design, so to learn more, please visit our [Intro to Automation](/courses/230-intro-to-automation/) course. Please download the nTop file below to follow along with the tutorial. **Example File:** [311\_11\_Starter — Procedural Texturing.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_11_Starter%20--%20Procedural%20Texturing.ntop) *This file was last updated in nTop 5.13.2* [311\_11\_Follow Along – Procedural Texturing.pdf](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/PDFs/311_11_Follow%20Along%20-%20Procedural%20Texturing.pdf) # Noise Fields Source: https://docs.ntop.com/lessons/ribbing-and-texturing/noise-fields nTop's implicit modeling engine is mathematically based and natively compatible with field-based or procedural texturing recipes. Field-driven design allows you to control the size, shape, or strength of the texture however desired. ## Roughness Adding roughness is perhaps the simplest procedural texture and a foundation for the more advanced examples. It involves three easy steps: generating noise with the **Simplex Noise 3D** block, scaling the noise with the **Multiply** block, and applying it to a part with the **Offset Body** block. ![](https://files.learn.ntop.com/lessons/noise-fields/Simplex_Noise-1024x501.png) ## Simplex Noise The **Simplex Noise 3D** block is one of the native fields built into nTop. Using the field viewer (press F), you can see that the noise ranges from -1 to 1 (toggle “Probe Values” on the Field Viewer dialog, and hover over the field). The influence of the frequency input is best visualized by changing the value, and the random seed is useful if you want to layer multiple noise functions without them coinciding or to randomize different parts' textures. ![](https://files.learn.ntop.com/lessons/noise-fields/Simplex_Noise_Field.png) ## Texture Amplitude In order to use this field to manipulate your geometry, you must apply units with the **Simplex Noise 3D** block. You can use this block to vary the amplitude of the texture. Use a **Ramp** block to drive the roughness based on any other field or implicit. The texture is then applied to any implicit with an **Offset Body** block. Below, the texture fades from smooth (0 mm) to textured (1 mm) as we proceed away from the plane. ![](https://files.learn.ntop.com/lessons/simulation-model/image-14.png) ## Cellular Noise The **Cellular Noise** block generates another field often used for texturing. Each *Return Type* offers a different effect. The Distance2 Div type creates a texture similar to leather. ![](https://files.learn.ntop.com/lessons/noise-fields/311_7_Cellular-Noise.jpg) A **Clamp** block is used between the **Noise** and **Multiply** blocks. This essentially thresholds the noise signal (which runs from 0 to 1) to be between 0.75 and 1 only. This creates flat spots rather than mountains in our leather cells. ![](https://files.learn.ntop.com/lessons/noise-fields/image-15.png) # Optional Bitmap Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/optional-bitmap-test-problem Now that you have learned how to use bitmapping to create textures, feel free to try this optional test problem with a review of the answer in the following lesson. Given the PNG image and the Parasolid file, Add the nTopology name to the inner body of this tag as shown in the image below. The name should be in the center of the part, have a Width of 80mm, Length of 20mm with a maximum depth of 3mm. ![](https://files.learn.ntop.com/lessons/optional-bitmap-test-problem/311_24_nTop-tag.png) **Estimated Time to Complete:** 20 minutes [311\_24\_tag.x\_t](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/Models/311_24_tag.x_t) [311\_24\_logo-black.png](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/Images/311_24_logo-black.png) # Optional Conformal Ribbing Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/optional-conformal-ribbing-test-problem Now that you have learned how to create conformal ribbing in nTop try this optional test problem by reviewing the answer in the following lesson. Add a conformal ribbing to the part provided below. The height and beam thickness of the ribbing should be 3 mm, and the unit cell should be a hexagonal honeycomb with U, V,and W divisions of 12x15x1. ![](https://files.learn.ntop.com/lessons/optional-conformal-ribbing-test-problem/311_5_optconformalribbing.jpg) **Estimated Time to Complete:** 15 minutes **Example File:** [311\_5\_Starter — Conformal Ribbing Test Problem.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_5_Starter%20--%20Conformal%20Ribbing%20Test%20Problem.ntop) *This file was last updated in nTop 5.13.2* # Optional: Perforation Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/optional-perforation-test-problem Now that you have learned how to orient bodies, feel free to try this optional test problem with a review of the answer in the following lesson. Using the **Orient Object** block, create 600 cylindrical perforations with a radius of 2mm throughout the body. All of the holes should be normal to the inner surface. ![](https://files.learn.ntop.com/lessons/optional-perforation-test-problem/311_19_perforate.png) **Estimated Time to Complete:** 20 minutes [311\_19\_perforation\_part.x\_t](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/Models/311_19_perforation_part.x_t) # Optional: Texturing Test Problem Source: https://docs.ntop.com/lessons/ribbing-and-texturing/optional-texturing-test-problem Now that you have learned field-based texturing in nTop, feel free to try this optional test problem with a review of the answer in the following lesson. Given this part in the starter file below, add roughness to the part. Use a Frequency of 100 and a Max Amplitude of 0.6. * **Constant Roughness:** Create a constant roughness throughout the part. * **Varied Roughness:** Vary the roughness so that the face highlighted in the image is smooth and eventually reaches the max amplitude at the end of the part. * **Mimicking AM Surfaces:** Mimic the surfaces on a part using the **Angle Field** block to vary the roughness. Assume the build plane has a normal of \<0,0,1>. ![](https://files.learn.ntop.com/lessons/optional-texturing-test-problem/texturing_problem.png) **Estimated Time to Complete:** 25 minutes [311\_13\_smoothpart.x\_t](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/Models/311_13_smoothpart.x_t) # Orient Object Source: https://docs.ntop.com/lessons/ribbing-and-texturing/orient-object Another common texturing technique uses the **Orient Object** block to populate a surface with the desired unit cell. This block takes in an object of any type and orients it based on a *Source* and *Destination* plane. This block becomes powerful when we take advantage of list processing. By using a list of planes as our *Destination* input, we can very quickly cover an entire part with multiple objects to create a textured surface. ![](https://files.learn.ntop.com/lessons/orient-object/311_15_orient-object.jpg) ## Unit Cell Generation Depending on what we want to texture our part with, there are a few ways we can generate a unit cell. * **Imported Geometry:** Unit cells can be generated outside of nTop to use within a workflow. Both CAD and mesh bodies can be imported and used. * **Implicits Generated within nTop:** Using blocks in the *Create* and *Modeling* tab, we can generate an implicit geometry from scratch within nTop. ## Orient Object Once you have your unit cell, the **Orient Object** block will allow for populating your geometry. When setting up the block, your unit cell will be the *Object* input. It can be any geometry type but using a mesh type will allow for easy merging in the end. ![](https://files.learn.ntop.com/lessons/orient-object/311_15_orienthexes.jpg) The *Source* plane acts as the base for where your object will be pulled from. Here we use a **Plane from Normal** block with the centroid of the bounding box, accessed by the block properties. By bringing in a list of points, generated from a **Random Points on Mesh** block, we can place many unit cells at once. We use an **Evaluate Field Gradient** block to ensure that each unit cell is normal to the geometry. This trick is simple due to the fact that all Implicit bodies are fields. These geometries can then be merged with a **Merge Mesh** block and converted back to implicits to perform whatever boolean operations are needed for your desired texture effect; a **Boolean Union** to emboss or a **Boolean Subtract** to deboss. Here, we also use a **Collapse Mesh Vertices** block to avoid intersecting faces. ![](https://files.learn.ntop.com/lessons/orient-object/311_15_implicithex.jpg) # Overview Source: https://docs.ntop.com/lessons/ribbing-and-texturing/overview This course will walk you through multiple techniques for adding conformal ribs and textures to your geometry in nTop. After completing this course, you will be familiar with various workflows and tactics for both functional and aesthetic design. ![Ribbing and Texturing](https://storage.googleapis.com/files-learn/lessons/ribbing-and-texturing/ribbing-and-texturing.png) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Latticing](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What Will Be Covered:** * Using conformal lattices to design structural ribs * Using fields to add roughness and drive procedural textures * Orienting bodies across a surface * Importing Bitmaps to manipulate geometries > **[Before We Begin](/lessons/ribbing-and-texturing/before-we-begin-ribbing-texturing)** > > Introduction and course overview ### Conformal Lattices For Ribbing > **[Follow Along: Creating Ribs](/lessons/ribbing-and-texturing/follow-along-creating-ribs)** > **[Download: Creating Ribs](/lessons/ribbing-and-texturing/download-creating-ribs)** ### Optional Conformal Ribbing Test Problem > **[Optional Conformal Ribbing Test Problem](/lessons/ribbing-and-texturing/optional-conformal-ribbing-test-problem)** > **[Answer to Conformal Ribbing Test Problem](/lessons/ribbing-and-texturing/answer-to-conformal-ribbing-test-problem)** ### Field Based Texturing > **[Noise Fields](/lessons/ribbing-and-texturing/noise-fields)** > **[Follow Along: Adding Roughness](/lessons/ribbing-and-texturing/follow-along-adding-roughness)** > **[Download: Adding Roughness](/lessons/ribbing-and-texturing/download-adding-roughness)** > **[Periodic Fields](/lessons/ribbing-and-texturing/periodic-fields)** > **[Follow Along: Procedural Texturing](/lessons/ribbing-and-texturing/follow-along-procedural-texturing)** > **[Download: Procedural Texturing](/lessons/ribbing-and-texturing/download-procedural-texturing)** ### Optional Texturing Test Problem > **[Optional: Texturing Test Problem](/lessons/ribbing-and-texturing/optional-texturing-test-problem)** > **[Answer to Texturing Test Problem](/lessons/ribbing-and-texturing/answer-to-texturing-test-problem)** ### Orienting Bodies > **[Orient Object](/lessons/ribbing-and-texturing/orient-object)** > **[Unit Cell Generation](/lessons/ribbing-and-texturing/unit-cell-generation)** > **[Follow Along: Orienting Bodies onto a Surface](/lessons/ribbing-and-texturing/follow-along-orienting-bodies-onto-a-surface)** > **[Download: Orienting Bodies on a Surface](/lessons/ribbing-and-texturing/download-orienting-bodies-on-a-surface)** ### Optional Perforation Test Problem > **[Optional: Perforation Test Problem](/lessons/ribbing-and-texturing/optional-perforation-test-problem)** > **[Answer to Perforation Test Problem](/lessons/ribbing-and-texturing/answer-to-perforation-test-problem)** ### Texturing From Bitmaps > **[Working with Bitmaps](/lessons/ribbing-and-texturing/working-with-bitmaps)** > **[Follow Along: Adding an Image](/lessons/ribbing-and-texturing/follow-along-adding-an-image)** > **[Download: Adding an Image](/lessons/ribbing-and-texturing/download-adding-an-image)** ### Optional Bitmap Test Problem > **[Optional: Bitmap Test Problem](/lessons/ribbing-and-texturing/optional-bitmap-test-problem)** > **[Answer to Bitmap Test Problem](/lessons/ribbing-and-texturing/answer-to-bitmap-test-problem)** ### What's Next > **[Resources](/lessons/ribbing-and-texturing/resources)** # Periodic Fields Source: https://docs.ntop.com/lessons/ribbing-and-texturing/periodic-fields Periodic Fields can also be used to generate textures. The **Diamond Field** generates a striped pattern, while the **Schwarz Field** creates polka dots. You can find these in the Fields tab of the Ribbon. ![](https://files.learn.ntop.com/lessons/periodic-fields/image-16.png) Below are some great examples of workflows that can be packaged into custom blocks to create your library of textures. Opening each block will allow you to understand the workings of these procedural techniques better. You can open the files to see how it is built or import it into your nTop notebook to apply the Texture. **Example Files:** [311\_10\_CB Cells Texture.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_10_CB%20Cells%20Texture.ntop) *This file was last updated in nTop 5.13.2* [311\_10\_CB Polka Dot Texture.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_10_CB%20Polka%20Dot%20Texture.ntop) *This file was last updated in nTop 5.13.2* [311\_10\_CB Herringbone Texture.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_10_CB%20Herringbone%20Texture.ntop) *This file was last updated in nTop 5.13.2* [311\_10\_CB Angular Texture.ntop](https://files.learn.ntop.com/Courses/311%20Ribbing%20and%20Texturing/nTop%20Files/311_10_CB%20Angular%20Texture.ntop) *This file was last updated in nTop 5.13.2* ![](https://files.learn.ntop.com/lessons/periodic-fields/image-17-1024x518.png) # Resources Source: https://docs.ntop.com/lessons/ribbing-and-texturing/resources ### **Additional Resources on Ribbing and Texturing:** 1. Article: [Texturing for Additively Manufactured Products with nTop](https://ntopology.com/blog/texturing-for-additively-manufactured-products-with-ntop-platform/) 2. Article: [How to Create Procedural Textures for Design & Engineering](https://ntopology.com/blog/how-to-procedural-textures/) 3. Video: [Industrial Design DfAM Series: Tile-Free Texturing in nTop](https://ntopology.com/videos/video/industrial-dfam-series-tile-free-texturing-in-ntop/) (\~26min) 4. Video Training: [Texturing and Bitmapping](https://learn.ntopology.com/training-texturing-and-bitmapping/985207) (\~1hr) 5. Video Training: [Perforations](https://learn.ntopology.com/training-perforations/1028571) (\~1hr 16min) # Unit Cell Generation Source: https://docs.ntop.com/lessons/ribbing-and-texturing/unit-cell-generation Depending on what we want to texture our part with, there are a few ways we can generate a unit cell. ## Implicits Generated within nTop Using blocks in the *Create* and *Modeling* tab, we can generate an implicit geometry from scratch within nTop. For example, a **Sphere** block could create a simple bump texture. Using the **Regular Polygon** and **Loft Between Profiles** blocks could make a hexagonal geometry. ![](https://files.learn.ntop.com/lessons/unit-cell-generation/311_16_ImplicitsinnTop-1.jpg) Example of Unit Cell Generated within nTop ## Imported Geometry: Meshes and CAD Parts Unit cells can also be generated outside of nTop to use within this workflow. Both CAD and mesh bodies can be imported and used. # Working with Bitmaps Source: https://docs.ntop.com/lessons/ribbing-and-texturing/working-with-bitmaps Another way to add texture to an implicit is by importing bitmaps. Bitmaps can currently be imported into nTop as PNG files. ## Import Bitmap Use the **Import Bitmap** block to import any PNG. If the file does not specify a Dot Pitch, use the input to define the distance between the dots of your image. ![](https://files.learn.ntop.com/lessons/working-with-bitmaps/311_21_Import-Bitmap.jpg) > [!NOTE] > > **Note**: This block is a Beta block, to ensure you can access it go to *Settings → General → Show Beta Blocks*. ## Map Bitmap to Plane The **Map Bitmap to Plane** block will make the image usable in nTop. This will place the image on your specified plane and open up access to various fields in the properties. Depending on the color of your image, these fields can drive texturing operations. We will use the Grayscale field since we have imported a black and white image. ![](https://files.learn.ntop.com/lessons/working-with-bitmaps/311_21_mapbitmap-1024x366.jpg) > [!NOTE] > > **Note**: This block is a Beta block, to ensure you can access it go to *Settings → General → Show Beta Blocks*. Take a look at the Grayscale field with the Field Viewer (F). With *Probe Values* checked, we can see how the values vary and will manipulate the geometry. ![](https://files.learn.ntop.com/lessons/working-with-bitmaps/311_21_grayscale.jpg) ## Offset Body The **Offset Body** block is used to texture the body based on the color field. In order to offset properly, a **Multiply** block is used to assign units. This can be a constant value for a constant offset, or a **Ramp** in order to vary the texture. ![](https://files.learn.ntop.com/lessons/working-with-bitmaps/311_21_offsetbody.jpg) # Automation and Parameter Sweeps Source: https://docs.ntop.com/lessons/scalable-interoperable-workflows/automation-and-parameter-sweeps ## Introduction Earlier in this learning path, the Automating Workflows and AI Applications lesson introduced nTop's Command Line Interface (CLI), also known as its headless interface. A Notebook functions as a reusable computational workflow: once its Inputs and Outputs are defined, an external process can provide input values and collect the resulting outputs without requiring manual interaction in nTop. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/ntop%20automate%20simple%20diagram.png) *A diagram showing the process of automating an nTop Notebook using Command Line* In this lesson, you will prepare a Notebook for execution outside nTop and run it from the command line. You will also learn how to structure JSON inputs so that a single command can evaluate multiple sets of input values. By the end of this lesson, you will be able to: * Prepare a parametric Notebook for headless execution. * Run a Notebook from the command line with a single set of inputs. * Use JSON to execute a Notebook across multiple sets of inputs. * Understand how tools such as Python can further scale and automate these workflows. ## Requirements and Setup ### Installation and Access nTop's Command Line Interface, nTop Automate, is installed as a separate executable alongside the nTop application. On Windows, the executable is typically located at: ``` C:\Program Files\nTopology\nTopology\ntopcl.exe ``` If this directory was added to your system's PATH during installation, you can run nTop Automate from any directory in PowerShell or Command Prompt by entering ntopcl. Otherwise, you must specify the full path to the executable. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/command%20prompt%20start%20ntopcl.jpg) *Running the command “ntopcl” will open nTop Automate in Command Line* ### Python Development Environment If you plan to follow along, download one of the following free software: * [Spyder](https://www.spyder-ide.org/) — used throughout this lesson * [Thonny](https://thonny.org/) — recommended for beginners * [Visual Studio Code](https://code.visualstudio.com/) ### JSON File Editor nTop Automate uses JSON files to supply input values to a Notebook and write its output values to a specified file. JSON files are lightweight, text-based files used to store and transport data. They are language-independent, so most programming languages, like Python and C++, can read and write them. To view and edit these files, download [Notepad++](https://notepad-plus-plus.org/downloads/) or use another text editor that supports JSON formatting. The examples throughout this lesson use Notepad++. ## Setting up and Running nTop Automate For the following sections, download and work from the provided nTop File **Downloadable Files:** [Example File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/Box.ntop) *This file was last updated in nTop 6.03* ### Preparing Your Notebook A Notebook must have defined **Inputs** and a single **Output** before it can communicate with a process outside nTop. This is the same requirement used when packaging a Notebook as a Custom Block. Like a Custom Block, nTop Automate treats the Notebook as a self-contained function: you can supply values designated as Inputs externally, and the value designated as the Output is returned when the workflow finishes executing. > [!NOTE] > > **Note:** Avoid spaces when naming Notebook files and folders in your working directory. If a file or folder name contains spaces, you must enclose its path in quotation marks when entering commands. #### Inputs Convert each variable you want to control during execution into a Notebook Input. You can do this by dragging the variable into the Inputs section at the top of the Notebook or by right-clicking it and selecting Make Notebook Input. Each Notebook Input becomes a parameter that nTop Automate can assign through the command line or an input JSON file. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/make_inputs_automationLesson.gif) *Dragging variables into the Input section or using the right-click menu are both methods for creating Inputs* #### Output Because this follows the Custom Block mechanism, a Notebook can have only one declared Output. Drag the block or property you want nTop Automate to return into the Output section, or enter its name directly in the Output field. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/drag_output_nTopCL.gif) *Drag a variable into the Output section to define the Output of a Notebook* #### Workflow Validation Before running the Notebook with nTop Automate, verify that the complete workflow evaluates successfully using the test inputs currently defined in the Notebook. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/workflow%20validation%20notebook%20comparison.jpg) *A complete notebook will not have any unbuilt blocks when all variables are populated (left), while an incomplete notebook will have unbuilt blocks (right)* Confirm the following: * Every block evaluates successfully, with no unresolved blue question mark (?) icons or error messages. nTop Automate cannot execute a workflow that does not run successfully in the nTop interface. * The Notebook filename and working-directory path do not contain spaces. Although spaces are supported when the path is enclosed in quotation marks, avoiding them reduces the likelihood of command-line and scripting errors. ## Running a Command There are two ways to provide inputs when executing a Notebook with nTop Automate: directly through the command line or through an input JSON file. JSON is recommended for most workflows because it supports more input types and makes input values easier to identify, modify, and reuse. Entering inputs directly can still be useful for simple workflows and for understanding the structure of an nTop Automate command. To view the available command-line arguments and options, enter the following command in PowerShell or Command Prompt: ``` ntopcl ``` ### Method 1: Provide Inputs Through the Command Line For a simple Notebook, you can enter values directly in the execution command. This method supports only *Scalar* and *Text* inputs. Use the *-i* flag once for each Notebook Input. Values must be provided in the same order in which the Inputs appear in the Notebook: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/provide%20inputs%20CL.jpg) *An example of running an nTop Notebook directly through Command Line with labeled components* Include units when they are not already defined by the corresponding Notebook Input. Because the command does not identify which value corresponds to each Input, this method can become difficult to interpret and maintain as the number of Inputs increases. ### Method 2: Use an Input JSON File (Recommended) For more complex workflows, use a JSON file to define the input values. This method supports *Boolean, Integer, Scalar, Text, File Path, Vector, Point,* and *Enum* input types. Additional information about each type is available in nTop under *Documentation → Using nTop Automate → Input*. To generate JSON templates for the Notebook, use the -t flag: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/JSON%20file%20run%20CL.jpg) *Use the -t command to generate a JSON template file for the specified nTop workflow* This command generates an input JSON template and an output JSON template in the current working directory. The input template, shown in the image below, contains an entry for each Notebook Input. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/input%20json%20example.jpg) *The JSON inputs file generated from the -t command above* To evaluate more than one value for an Input, change the *value* property to *values* and provide the values as a list. For example, the following entry evaluates three values, \[2.0, 6.0, 10.0], for the Box *Length*: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/value%20to%20values.jpg) *Changing the property “value” to “values” to accept multiple input* *values* After modifying and saving the input JSON file, execute the Notebook with the following command: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/execute%20CL%20command%20json.jpg) **An example of running an nTop Notebook* using JSON files in Command Line* The *-j* flag specifies the input JSON file, while the *-o* flag specifies the name of the output JSON file that nTop Automate will create in the working directory. To include additional information about the properties of the Notebook Output, add the *-p* flag: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/ntopcl%20p%20command.jpg) *Use the -p command for information about the properties* ### Additional Execution and Troubleshooting Options The following options can help you test, save, and troubleshoot the workflow: * Run the command with ntop instead of ntopcl to open the Notebook in the nTop interface with the specified inputs. This allows you to inspect the workflow and confirm that it behaves as intended. * Add the -s flag to save the executed Notebook. This overwrites the existing Notebook file. * Add -v2 to enable level 2 verbose logging. The default verbosity level is 1, which displays errors and warnings. Level 2 also displays runtime information that can help identify where a workflow is encountering an issue. * Add –logfile \.txt to save the execution messages to a text file. > [!NOTE] > > **Note:** In Windows File Explorer, hold Shift, right-click inside the working-directory folder, and select Open PowerShell window here. This opens PowerShell in the correct directory, eliminating the need to navigate there manually. After the execution finishes, open the generated output JSON file in Notepad++ to review the returned result, such as the calculated *Surface Area*. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/surface%20area%20output%20json.jpg) *Values for Surface Area based on new values to the Length input.* > [!NOTE] > > **Note:** The values in the image above are printed in meters, while the Surface Area block in the file reports the values in mm ## Best Practices and Troubleshooting Before scaling a workflow for automation or integration, verify each stage independently. ### Verify Your Setup 1. Confirm that nTop Automate is installed. Run ntopcl without any arguments: ``` ntopcl ``` If the nTop Automate command menu appears, the installation is available. If it does not, review the installation and licensing guidance below. 2. Prepare the nTop Notebook. Configure the required input and output variables according to the recommendations in the Preparing Your Notebook section. 3. Generate the JSON templates. ``` ntopcl -t (insert_nTop_File_name).ntop ``` 4. Test the workflow with verbose logging. Adding -v2 instructs nTop Automate to display detailed runtime information. Modify the input JSON file with the desired values, and then run: ``` ntopcl -v2 -j input.json -o output.json nTop_File_Name.ntop ``` 5. Verify the results. Open Output JSON file and compare its values with those produced by the same inputs in the nTop GUI. If the results differ or the workflow fails, use the troubleshooting guidance below. ### Troubleshooting Example commands and scripts may behave differently depending on the operating environment, licensing configuration, and Notebook setup. #### Licensing Issues When using a cloud license, nTop Automate automatically reuses the cached credentials from an active nTop login. If the machine is not already authenticated, credentials can be supplied directly: ``` ntopcl -u your.email@company.com -w yourpassword ``` A successful authentication attempt should report that the login and logout were successful. If the command does not include a notebook, expect a “No notebook provided” message. For a local license file or floating FlexNet license, use –license and provide either the path to the .lic file or the license server in the format PORT\@HOSTNAME. #### Error Messages and Logging If an error message does not clearly identify the problem, add -v2 to display detailed runtime information: ``` ntopcl -v2 -j input.json -o output.json nTop_File_Name.ntop ``` Verbose logging helps identify when a failure occurs and which area of the Notebook may be responsible. To save this information for later review, write it to a log file: ``` ntopcl -v2 --logfile=run.log -j input.json -o output.json nTop_File_Name.ntop ``` #### Input Issues If an input does not appear to be reaching the Notebook, replace ntopcl with ntop to open the Notebook in the GUI with the specified inputs applied: ``` ntop -v2 -j input.json -o output.json nTop_File_Name.ntop ``` This provides a quick way to inspect the input variables and confirm that they load without errors. Alternatively, add -s to save the nTop Automate results and cached inputs in the Notebook for further inspection: ``` ntopcl -v2 -s -j input.json -o output.json nTop_File_Name.ntop ``` ## Exporting Additional Files Export blocks write files to the specified directory each time the Notebook executes. Use these blocks when the workflow needs to generate files in addition to returning its declared Notebook Output. For example, combine **Text from Scalar** with **Export Text** to write the Notebook Output or other calculated values to a .txt file during each nTop Automate execution. You can also use one or more **Concatenate Text** blocks with property chips to incorporate relevant input values into exported filenames. This makes it easier to identify files produced by different input configurations. For guidance on converting and combining scalar values as text, refer to this [Help Center article](https://support.ntop.com/hc/en-us/articles/1500009183541-How-to-combine-scalar-lists-together-as-text). You can use the same approach to construct a complete output path dynamically. Define each level of the folder structure as a separate Notebook Input, and then concatenate those values to create the desired path. > [!NOTE] > > **Note:** Export blocks, such as **Export STL** and **Export Text**, execute during every run regardless of which value is designated as the Notebook Output. Use them for any additional files that should be written to disk with each execution. ## Scaling nTop Automate Workflows with Python After completing the five-step validation process outlined in the Best Practices and Troubleshooting section, you can use Python or another scripting language to batch-process the workflow or integrate it with external software. The provided nTop Notebook and Python script will serve as the reference files for this section. The Notebook, BoxPython.ntop, includes an Output File Generation section that demonstrates how Export blocks can generate additional files alongside the declared Notebook Output. For guidance on converting scalar values to text and combining them for filenames or file paths, refer to this [Help Center article](https://support.ntop.com/hc/en-us/articles/1500009183541-How-to-combine-scalar-lists-together-as-text). **Downloadable Files:** [nTop File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/BoxPython.ntop) *This file was last updated in nTop 6.03* **Python File**: [BoxExamplePython.py](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/BoxExamplePython.py) The Python script executes BoxPython.ntop five times through nTop Automate, using a different combination of *Length, Width*, and *Height* for each run. For every combination, the script: * Creates a numbered subfolder, from run\_1 through run\_5, within the designated output directory. * Writes the input and output JSON files to the corresponding run folder. * Executes the Notebook with the specified dimensions. * Saves the generated STL and surface-area text file in the same run folder. * Prints the command-line output and any errors after each execution. This structure keeps all files for an individual design iteration together, making results easier to review and compare. Before continuing, place the provided Python script and BoxPython.ntop files in the same working directory. The following procedure builds on the workflow established in the previous sections: 1. Prepare the nTop Notebook. Define the following values as Notebook Inputs: * *Length* * *Width* * *Height* * *Output Directory* The *Output Directory* specifies where the script will create the run folders and save the generated JSON, STL, and text files. Confirm that the Notebook also declares one output for nTop Automate to return. > [!NOTE] > > **Note:** Replace the sample output-directory path in the provided nTop file with a valid directory on your computer. The existing path is provided only as an example and will not work in your local environment. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/inputs%20outputs%20notebook%20setup.jpg) *The Inputs and Outputs of the example nTop Notebook* 2. Generate the JSON templates. Use the -t flag with nTop Automate to generate the input\_template.json and output\_template.json files for the Notebook: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/ntopcl%20boxpython.jpg) *Add the -t command to generate the JSON template files* > [!NOTE] > > **Note:** In this example, input\_template.json and output\_template.json are renamed inputs.json and outputs.json, respectively, as shown in the image below. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/inputs%20outputs%20markdown%20files.jpg) *The renamed JSON template files* 3. Open and run the Python script. Open your preferred Python code editor and create a .py file for the script that will generate the input JSON files and execute the Notebook with multiple sets of input values. For this example, open the provided .py file and run it from your code editor. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/box%20example%20python%20script.jpg) *The example Python script open in a code editor* If the script executes successfully, it will create five numbered folders in the specified output directory. Each folder will contain the files associated with one design iteration: * An STL file of the generated box * A text file containing the calculated surface area * The input JSON file used for the iteration * The output JSON file returned by nTop Automate ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/folder_export_python.gif) *A successful script execution will create five numbered folders in the output directory* ## What to Take Away * nTop Automate enables headless execution of nTop Notebooks. Once a Notebook has defined Inputs and a single Output, external processes can supply parameters and collect results without manual interaction in nTop. * JSON files are the recommended way to supply inputs. They support a wider range of input types, clearly associate values with their parameters, and can be reused for multiple design configurations. * Validate the workflow before scaling it. Confirm that the Notebook evaluates successfully in nTop, generate and test its JSON templates, and compare nTop Automate results with those produced in the nTop interface. * Logging and diagnostic options simplify troubleshooting. Commands such as *-v2*, *–logfile*, and *ntop* help identify execution errors, inspect applied inputs, and verify workflow behavior. * Export blocks can generate additional files during every execution. Use them to write files such as STL and text outputs alongside the Notebook's single declared Output. * Python can scale and integrate nTop Automate workflows. A Python script can automate multiple design iterations, organize and collect their results, and connect nTop workflows with external tools, data sources, simulation software, or broader engineering processes. ## What's Next You have learned the fundamentals of preparing and executing an nTop Notebook for headless automation. Next, test your understanding with a knowledge check. # Custom Blocks Source: https://docs.ntop.com/lessons/scalable-interoperable-workflows/custom-blocks ## Automation and Custom Blocks Utilizing nTop's automation capabilities can significantly lower the time to create your designs. If you are working with a design you plan to implement across multiple parts, it is very easy to automate and package that workflow across those designs. The key concepts to consider when automating your process are utilizing custom blocks, list processing, and nTop Automate. In this course, we will focus on creating custom blocks (CBs) and list processing to repeat workflows across multiple nTop files and to run through iterations. The process for using a custom block is as follows: ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/custom%20block%20flow.png) *A flow diagram of creating and importing a Custom Block* A custom block is a whole notebook packaged into a single block for reuse in other notebooks. You can use it both for creating small, frequently used utilities and encapsulating entire workflows in a single block. This is one of the most powerful features of nTop because it enables you to package the work of a whole notebook to replay the entire step-by-step process recorded in that notebook quickly. You can then save the new custom block and reuse it in other files or share it with other nTop users. Custom blocks are easy to make since they are defined similarly to a notebook, and use the same file format (\*.ntop). You can customize a notebook to perform a specific function or process. Custom blocks don't require inputs (like materials) to be a valid block. An Output is required for the notebook to register as a custom block. If there is no output, an alert will appear when you try to load it. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/custom%20block%20example.png) *An example of a Custom Block, **Extrude Flat CAD Face*** Custom blocks have a double line on their left side to indicate that they are CBs. You can open the block by right-clicking and then selecting the Open Block to view the packaged nTop workflow. Then, you can modify the block or further understand how the process works. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/open%20a%20cb.gif) *You can open a Custom Block using the right-click menu* ### Benefits of Using Custom Blocks * Readability: CBs are easier for a user to digest. * Repeatability: If you use the same process multiple times, you can use a CB instead of repeating those steps. * Controlling the areas a user can change: If you share a workflow, you may only want a colleague to change a few parameters. Using a CB will yield a gated view of a workflow. ### Overloads Certain blocks in nTop have what is called an Overload, which means they have multiple input configurations and may have the option to return different Output types. Not every block function has an overload. If an overload exists, a chevron icon will appear next to the block's name. Clicking this icon will open a drop-down menu that contains the block's overloads to choose from. For example, the **Add** block has several overload configurations to choose from for both *Operand A* and *Operand B* inputs. The gif below demonstrates selecting different overloads for the **Add** block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/overload%20example.gif) *The **Add** block has many available overloads depending on the block types you want to add together* A custom block can have one or multiple overloads, which will let you switch between different forms of the block. You can do this by ensuring all relevant CBs have the same notebook name before importing them. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/overload.png) *An example of a CB with overloads* In the example below, notice how the CB's name is the same, but one block has the option to specify a *Random Seed* input. This is the benefit of creating an Overload. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/cb%20overload%20comparison.png) *A comparison of the two CBs with the same name. One of them has an additional input which creates the overload* > [!NOTE] > > **Note:** In the upcoming sections, we will explain how to create your own Custom Block and Overloads. ### Creating a Custom Block The process overview for creating a CB is shown below. First, create the nTop workflow as you normally would. We recommend saving this workflow before you create your CB, because once you begin to create the CB, you may be altering the workflow. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/create%20cb%20flow.png) *A flow chart for creating a CB* Once you have created your workflow, there are four key areas to create the CB: the notebook name, the description, the inputs section, and the output section. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/components%20of%20CB.png) *An example CB with labeled components of the nTop Notebook* #### Notebook Title and Description The name and description of the custom block are taken directly from the notebook's name and description. We recommend naming your custom block based on its functionality and purpose. We also recommend writing a description to help you or your colleagues understand what the CB does. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/cb%20name%20and%20description.png) *A CB's Name and Description are used when a CB is imported into a Notebook. They are populated under the Information tab in the Right Panel* #### Defining Inputs To define the parameters of the CB, we need to place those variables in the Inputs section of the notebook. 1. Identify the parameters that you want to define as inputs for the CB. 2. Turn those parameters into named variables (Right-click -> select Make Variable, or *Ctrl+M*). 3. Move those named variables into the Inputs section of your notebook (drag and drop, or right-click -> select Make Notebook Input). ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/creating%20an%20input.gif) *You can convert a variable into an input by dragging it into the Inputs section, or by using the right-click menu* ##### Block Type Before importing your CB into another notebook, you could change the block type of your inputs. For instance, *Spatial Weighting* is a scalar variable in the example below. However, if you intend to have varying spatial weighting and uniform values, you must change the block type to a scalar field. To do this, click the chevron icon and change it to the desired block type. Once you export this notebook, you will not be able to change that type, so we recommend changing the variable type to the broadest option. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/unit%20type.gif) *You can change an Inputs block type by clicking the chevron next to the block icon* ##### Commenting The custom block input name and descriptions will be taken from the notebook's input name and description. Before exporting, we also recommend adding comments to your inputs. This will help others understand key information regarding those inputs in your CB, whether that is a longer description of the input or a recommended range of values for that input. To add a comment, right-click the variable and select “Add Comment”. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/input%20comments.gif) *We recommend adding comments to your inputs to help explain their function* Once you import the CB to another notebook, input comments will become the block's input descriptions. You can see the input descriptions in the block's Information tab. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/cb%20input%20comment%20desc.png) *Adding a comment to your CB input will utilize the comment as an input description* #### Defining an Output The other key area when creating a CB is the Output. Any notebook with a defined output can be repackaged into a single, customized block, complete with custom inputs and descriptions. To add an output, simply drag the block into the Output section of the notebook. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/output.gif) *Drag and drop your desired output block into the Output section of the Notebook* #### Creating a Custom Block Overload 1. Create a valid custom block. For this example, we will use **Extrude Flat CAD Face**. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/extrude%20flat%20cad%20face%20cb.png) *An example CB* 2. Open the folder where the file is saved. Copy and paste the file in the same folder ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/cb%20copy%20for%20overload.png) *Copy and paste the CB in the same folder as the original* 3. Open the copy of the custom block, make the change you would like for the overload function, and save it. For this example, we are adding the *Random Seed* input. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/extrude%20flat%20cad%20face%20overload.png) *The same CB as the previous steps, but with an added input for Random Seed* 4. Your custom block is now set up for an Overload. To test that it functions correctly, you will need to import both versions of the block and verify that the chevron icon appears next to the block's name. The gif below shows our new CB with a working Overload. > [!NOTE] > > **Note:** The next section will teach you how to import custom blocks so that you can test it yourself. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/importing%20the%20overload.gif) *Importing both versions of the CB allows you to use the Overload* ### Importing a Custom Block Once you have created a custom block, the next step is to implement it in another workflow in a separate nTop file. There are a few ways to import a CB into your notebook: * Importing the CB by going to the nTop menu icon → File → Import or use the shortcut *Ctrl+I* and selecting the corresponding nTop file * Saving the CB in My Blocks Folder * Open the Left Panel → Select the Import tab → Import Block Some of these import methods are described in further detail below. #### My Blocks Folder If you use a CB frequently, we recommend saving it in your My blocks folder as shown below (file path blurred). The default folder is in the nTop folder under Myblocks. Once the block is saved in this folder, it will automatically be imported into your notebooks and available for use. Simply search for the block in the search bar to add it to your workflow. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/my%20blocks%20settings.png) *The My blocks folder is located in the General tab of the nTop settings* #### Import using the Left Panel The last option to import a CB is to open the Left Panel, select the Imports tab, and click “Import Block” to select the corresponding nTop file. All imported files will be listed under the Custom Blocks section of the Imports tab. If you have multiple variations of the same custom block imported, the block version will be labeled next to the block name. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/left%20panel%20import.png) *Opening the Left Panel allows you to import blocks using the Imports tab* #### Using Imported Custom Blocks Once you import the CB, you can add it to the notebook by searching for its name in the search bar. When imported, the CB will appear as a single block in the body of the notebook. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/search%20bar%20cb.gif) *Imported CBs will appear in the Search Bar results* #### Deleting Unused Blocks We recommend deleting unused custom blocks to decrease file size, improve opening speed, and maintain organization. You can only delete imported blocks from the Left Panel that are unused in the notebook. You can also click the “Remove Unused Blocks” to remove all the unused imported CBs. Blocks appearing at least once in a workflow are marked with a notebook icon in the Imports tab, like in the example below. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/imported%20block%20notebook%20icon.png) *Imported blocks that have the highlighted icon next to them are* *actively in the notebook* ## Lists All blocks in nTop can exist as singular entities or as a list. A list contains multiple items of the same type in a single block, like a list of points. When a process runs on a list block, it runs the process on every list item. Working with list blocks is called List Processing. You can differentiate between a single block and a list block by a few block indicators. * The block name will have a quantity shown next to it in parentheses. Even if a block name has (1) next to it, it still is a list with one item. * A small icon of 3 stacked horizontal bars will appear next to the block type icon. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/single%20block%20vs%20list%20fixed.png) **A singular* ***Point*** *block compared to a* ***Point List*** *to show the list indicators** ### List Properties Each list contains a set of List properties at the top and individual properties for each item within that list grouped under List Elements. You can drag an individual property from a List to create an item in the notebook. You can expand the dropdown arrow next to the individual entities to reveal more information on that individual list entity. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/list%20properties.png) *An example Properties panel of an* ***Implicit Body List*** *of 3 bodies* ### List Processing When applicable, blocks can accept list inputs instead of singular inputs. The block will then become a listed block of the same length as the input list. We refer to this as list processing. List processing can be helpful for: * Testing multiple input options for the same process (e.g. multiple unit cell options for a lattice) * Saving calculation time by processing multiple bodies * Reducing notebook clutter by condensing a repetitive process The gif below is an example of list processing. The example starts with an **Implicit Body List** of 3 different bodies. The bodies start by being stacked on top of each other. The list of bodies is then placed in the *Object* input of the **Translate Object** block. You can see how the **Translate Object** block converts to a list when the input is populated with a list. A **Vector List** is then inserted into the *Vector* input. The **Translate Object** block then computes by spacing out the individual list items using the vector values of the **Vector List**. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/list%20processing.gif) *An example of using List Processing with the **Translate Object** block* List elements are mapped 1 to 1 based on their list index number. Using the example above, this means that the Box (index 0) uses the \[0,0,0] vector because it is index 0 of the **Vector List**. This means that list order is important when using blocks for list processing. ### List Manipulation Regardless of block type, the method for modifying lists is the same. Select the '+' next to the View Block Details icon to add more inputs. If you add too many, use the '-' on the left of the input to remove them. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/modify%20list.gif) *You can add additional list items using the plus sign and remove items using the minus sign* Lists can be powerful for automating workflows. The manipulation tools are in the Utilities Ribbon Tab, under General. Next, we will cover some of these blocks that are used to manipulate lists. #### List Element Extract a single entity from a list based on its index number. Note that the first item in a list is always index 0. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/List%20Element.gif) *The **List Element** block isolates items of a list based on the index number of the item* #### Insert Combine two lists into one by inserting a list into another at a specified index location. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/Insert.gif) *The **Torus** becomes the first item in the list using the **Insert** block* #### Sub List Extract a smaller list from a larger input list, based on a starting index and the desired size of the sublist. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/Sub%20List.gif) *Using the **Sub List** block to extract a portion of a list* #### Remove Remove one or more entities from a list, based on a starting index and the number of removed entities. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/Remove.gif) *Removes items from a list based on a specified Index and Range Length* #### Concatenate List Multiple lists can be added together using the **Concatenate Lists** block. In order to do this, the Lists must be of the same type. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/Concatenate%20Lists.gif) *Using **Concatenate List** to combine two **Implicit Body List** blocks into a single list* #### Sort The **Sort** block will rearrange a list from the lowest to the highest value. If you would like the values sorted from highest to lowest, you can use the 'reversed' scalar list in the block's properties. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/Sort.gif) *An example of using the **Sort** block to create an ordered list* #### Filter The **Filter** block removes items from a list based on a Bool List, which must be the same length as the List input in the block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/Filter.gif) *An example of using the **Filter** block to isolate list items based on a condition* #### Group Groups in nTop are the same as lists, except they can contain a combination of block types. For example, the group below consists of a point, a sphere, and a line. The same list manipulation operations described can be performed on groups. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/group.png) *A **Group** list containing 3 different block types* ### List Errors When working with lists, it is important to understand the key errors that could occur, including invalid input errors and lists within lists, described below. #### Invalid Input Error If you try to insert a block into an input and nTop won't let you, the block is not a valid input. If you insert a variable into an input and it turns red, the block is not a valid input. Causes: 1. Inserting a list into a singular type input 2. Inserting an incorrect block type list 3. Inserting a list into a list Solutions: 1. The block that you are trying to insert a list into may have a block overload that accepts list inputs. Check if the block has overloads available that may accept your list. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/singular%20input%20fix.gif) *Changing the **Greater Than** block type to a list allows it to accept the **Scalar List*** 2. The block type of your list needs to match the input block type. If you are getting an error due to mismatching types, you may need to convert your list to a different block type. You can also check if there is a block overload to accept that input type. 3. A list block cannot be input into another list block. If you want to input a list into a block that doesn't accept lists, you can create a custom block to run the list instead. This works because the inputs of a notebook are in variables, and variables cannot process lists. However, once you use it as a CB, it's a block like any other and, therefore, can process lists. This is not equivalent to putting the list into the input, but rather running the custom block workflow multiple times, once for each element in the list. We will cover this in more detail later in the lesson. Another way to solve this problem is to use **Concatenate Lists** to combine the two lists. Depending on the list type, you may also want to use **Merge Meshes**, **Merge Lattices**, **Merge Profiles**, etc. #### Lists of One (1) You may encounter a situation where you try to add one part to a block, and it won't let you. If your intended input block looks like “Block Name (1)“, somewhere a “list of one” was created. Lists of one are sometimes unintentionally created by the user or during CAD/Part importing. Causes: 1. Accidentally converting a block to a list using a list input 2. Extracting a list from a block properties panel when you meant to extract a singular element ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/list%20of%20one%20error.png) *Despite being a single **Sphere**, the block is a list due to the **Point List** in the Center Point input* Solutions: 1. Change the input type from a list to a single entity. Once you input the singular entity instead of the list, the block parent block should also update. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/list%20of%20one%20sol1.gif) *Changing the **Point List** to a singular **Point** removes the list property from the **Sphere*** 2. Extract the singular list item from the List Elements section of the list's properties panel. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/list%20of%20one%20sol2.gif) *You can extract the singular item from the List Elements section of the list's Properties panel* #### Input List Length Mismatch This occurs when two lists of different lengths are input into a block. The block can't run because it tries to match the two lists together. Cause: The lengths of the input lists are not equal. Solution: Ensure that the list length of both operands is the same. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/list%20mismatch%20sol.gif) *Most blocks require lists to be of equal length to compute* ### List Processing Custom Blocks Now that we've learned how to create custom blocks and how lists work, we can combine these to use list processing in our CBs. #### List Processing Inputs List processing custom block inputs is the same as list processing. Below is an example of a CB that is set up to lattice an input body with a defined cell size and unit cell type. It's important to note that the inputs are not list types. If you try to make a custom block input a list, you will get an error message when you import the block. The error will inform you that it is not a valid block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/LP%20Lattice%20Setup.png) *An example CB that we will use for List Processing* The gif below shows list processing with this CB. Each of the required inputs are lists of equal length that can be inserted into the CB inputs. The result is 3 different lattice configurations of different cell size and unit cell type. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/LP%20Lattice%20processing.gif) *Using lists an inputs for **LP Lattice**, the block generates three different lattice structures* #### List Processing Outputs List processing custom block outputs requires us to use the **Group** block. Since **Groups** are just lists that can have multiple block types, we can use them to output different bodies, values, etc. Here is another example of a custom block called Mesh Metrics. The gif below shows how we are setting up the **Group** block to output the merged implicit bodies, their mesh, and that mesh's face and vertex count. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/mesh%20metrics%20setup.gif) *A **Group** can contain multiple block types and then be placed in the Output section* Now we can perform a test run to see how to extract the multiple block outputs. The gif below shows the block executing **Mesh Metrics** using the two input cubes. The elements of the **Group** are then extracted from the properties panel and placed in the notebook as variables. **Group** elements are always the Any block type, so once they are converted to variables we can change them to their appropriate block types. Once the block type is changed, we can see the geometry results in the viewport, and the scalar results in their properties panels'. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/mesh%20metrics%20process.gif) *The **Group** elements can be extracted from the Properties panel* ## What to Take Away * Custom blocks can make repetitive processes more efficient. Making a custom block of your design process can help you save time and organize your notebook. * Lists are a powerful tool, but they can be finicky. Being aware of the quirks that come with using lists ensures users are able to troubleshoot their workflows quickly and identify potential downstream issues. * List processing allows you to batch process blocks. This provides a similar efficiency to custom blocks. Combining them keeps your notebook incredibly organized and efficient. ## What's Next You now have an understanding of how Custom Blocks and Lists work in nTop. The next lesson introduces you to nTop Automate, nTop's Command Line interface. Then you will learn how to set up your notebook to run in nTop Automate. # Geometry Conversions Source: https://docs.ntop.com/lessons/scalable-interoperable-workflows/geometry-conversions ## Introduction The previous lesson, *Working with External Data in nTop*, focused on bringing external data into nTop and converting it into geometry for modeling. A CSV file became a profile, while mesh and CAD files were converted into implicit bodies. This lesson focuses on the reverse process: preparing nTop geometry for use in downstream tools or FEA in nTop. An Implicit Body is nTop's native geometry representation. While the number of tools that can work directly with implicit geometry through Implicit Interop, introduced earlier in this learning pathway, continues to grow, many downstream applications still require other formats, such as mesh or CAD files. In this lesson, you will learn how to prepare and export geometry from nTop. You will begin by meshing an implicit body, then explore four export paths: mesh, CAD, curves, and implicit geometry. Along the way, you will examine each approach's strengths and limitations as geometric complexity increases. > [!NOTE] > > **Note:** This lesson focuses on surface meshing techniques, which capture the geometry's boundary. For volumetric meshing techniques, refer to the *FE and Volume Meshes* section of the *Intro to Meshing* course. ## Meshing in nTop Meshing discretizes a 3D model into a collection of smaller elements that approximate its geometry. Increasing the number and refinement of these elements generally produces a closer approximation of the original geometry. There are three primary mesh types used in nTop: * Mesh (Surface Mesh): Represents the boundary of a 3D body using two-dimensional elements. * Tetrahedral (Tet)/Volume Mesh: Discretizes a body's interior volume using three-dimensional elements. * Finite Element (FE) Mesh **:** A solid mesh prepared for use in finite element (FE) simulation. nTop supports linear and quadratic elements. This lesson focuses on surface meshes and techniques for accurately capturing a geometry's boundary. A surface mesh discretizes a surface with vertices, edges, and faces, typically composed of triangles or quad elements. Surface meshes are commonly used in manufacturing and rendering workflows, as well as in CAE applications that require a discretized representation of a model's boundary. > [!NOTE] > > **Note:** nTop's Finite Element Analysis (FEA) does not support a quad mesh; these meshes in nTop are used to create a NURBed body A surface mesh consists of two fundamental components: * Mesh geometry defines each vertex's position and geometric characteristics. * Mesh connectivity defines the relationships between mesh elements, such as which vertices and edges form a face and which elements are adjacent. Depending on the application, a surface mesh may also be called a mesh, surface, or domain. ### Mesh Properties and Terminology Four fundamental mesh properties assess mesh quality: *closed, manifold, oriented, and self-intersecting.* These Boolean properties appear as *True* or *False* in the Properties section of the block details and indicate whether a mesh is clean and suitable for downstream use. Additional mesh-specific properties, including *face count, vertex count, and vertices*, are also available for inspecting the mesh geometry. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/mesh%20from%20implicit%20properties.jpg) *The Properties panel of meshing blocks will contain mesh-specific properties* If the mesh is not closed, manifold, or oriented, or if it is self-intersecting, you will receive a warning, which can cause issues when converting the mesh or exporting the part. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/warning%20self%20intersections.jpg) *A self-intersecting mesh will have this warning message* > **Edges and Closed Meshes** > > A mesh can be classified by its edges, which help determine whether the mesh is closed. A closed mesh has no boundary edges; every edge is shared by at least two faces. > > Mesh edges are classified into three types: > > * Boundary Edge: Adjacent to exactly one face. A boundary edge indicates that the mesh is not closed. > * Regular Edge: Adjacent to exactly two faces. > * Singular Edge: Adjacent to more than two faces. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/closed%20vs%20open%20mesh.jpg) > > *An example of a closed mesh (left) vs an open mesh (right)* > **Manifold Meshes** > > For a mesh to be manifold, it must form a continuous surface that locally resembles Euclidean space. One way to think about this is: “If I could shrink myself down, could I walk across the entire mesh without encountering an invalid connection or discontinuity?” > > The causes of a non-manifold mesh are not always immediately apparent. The following are some common scenarios that can result in non-manifold geometry: > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/manifold%20meshes%20table.jpg) > > *Several examples of non-manifold mesh geometry* > **Oriented Meshes** > > Orientation provides a consistent way to distinguish between the two sides of a mesh face. > > * An **oriented mesh** has face normals that consistently point in the same direction—either outward or inward. > * Face orientation determines which side is the top (outward-facing, shown in gray) and which is the bottom (inward-facing, shown in black). > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/flip%20mesh%20normals.gif) > > *Use the **Flip Mesh Normals** block to reverse the normal direction of the mesh elements* > **Self-Intersecting Meshes** > > A self-intersection occurs when one part of a surface mesh intersects another part of the same mesh, causing two or more mesh elements to overlap or cross. > > ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/self%20intersections%20true.jpg) > > *A self-intersecting mesh will have the corresponding property set to “True”* Before continuing downstream operations, we recommend cleaning the mesh by identifying and removing defects like those described in this lesson. nTop provides tools for correcting simple mesh defects, which are covered in the Intro to Meshing course. For defective meshes imported into nTop, we recommend addressing these issues in the software that originally generated the mesh or in a dedicated mesh-cleaning tool before import. For meshes generated directly in nTop, you can address defects by refining the meshing parameters. This lesson will discuss these parameters and their effect on mesh quality later. ### Meshing an Implicit Body The **Mesh from Implicit Body** block, found in the Utilities tab under Conversion, converts an implicit body to a mesh. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/meshing%20an%20implicit%20spherecube.jpg) *An example of meshing using the **Mesh from Implicit Body** block* * *Tolerance*: Defines the maximum allowable deviation between the mesh and the implicit surface. Within the block, the tolerance determines the voxel size, which is set to half the specified tolerance. A voxel is a small, three-dimensional cell used to sample and represent the geometry during the meshing process. Smaller voxels capture finer geometric detail but require more mesh elements. As a result, halving the tolerance can approximately quadruple the triangle count. > [!NOTE] > > **Note:** A useful starting point is to set the tolerance to approximately half the thickness of the smallest feature you want to preserve. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/MFIB%20tolerance.gif) *Effect of increasing mesh tolerance on geometric fidelity and feature capture* * *Min. feature size*: An optional input that filters out features or holes smaller than the specified value. Use this input when the resulting mesh captures small geometric details that are unnecessary or below the limits of the intended downstream process. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/min%20feature%20size.jpg) **Effect of applying the Minimum Feature Size input to filter small holes, resulting in a mesh with those features closed** * *Sharpen*: Reconstructs sharp edges and corners that may become rounded during voxelization. Enabling this option approximately doubles computation time. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/sharpen.jpg) *Unsharpened mesh (left) and sharpened mesh (right)* The block's overload exposes the *Sharpen Extents* and *Sharpen Iterations* inputs, which limit sharpening to specific regions, such as mounting faces with GD\&T requirements, reducing computational cost compared with sharpening the entire geometry. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/sharpen%20extents.jpg) *The transparent blue body defines the Sharpen Extents input and overlaps the mesh region to be sharpened* * *Simplify*: Reduces the number of mesh elements while maintaining the specified input tolerance. When enabled, it aggressively decimates and combines about 90% of the mesh elements, which can significantly reduce mesh size but may reduce geometric fidelity or introduce defects, such as self-intersections. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/simplify.jpg) *The Simplify input will reduce the number of mesh elements while maintaining the Tolerance* For finer control over triangle count, two blocks in the Modeling > Utilities section can be applied to an existing mesh: * **Simplify Mesh by Amount** reduces an input mesh's face count by removing a specified proportion of its triangles. The Amount input must be greater than 0 and less than 1. For example, an input of 0.5 reduces the mesh face count by 50%. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/simplify%20mesh%20by%20amount.jpg) *Using the **Simplify Mesh by Amount** block to reduce mesh face count* > [!NOTE] > > **Note:** The simplification algorithm does not account for surface tolerance, which defines the maximum allowable distance between the original and simplified mesh surfaces. To maintain a specified surface tolerance during simplification, use the **Simplify Mesh by Threshold block**. * **Simplify Mesh by Threshold** removes as many mesh elements as possible while keeping the surface deviation between the input mesh and the simplified result below a specified threshold. Think of the Threshold input as Chord Height. This approach is useful for geometry that combines large, simple regions with fine features because it prioritizes geometric fidelity over achieving a fixed reduction percentage. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/simplify%20mesh%20by%20threshold.jpg) ***Simplify Mesh by Threshold** removes mesh elements while keeping the surface deviation below the Threshold value* After simplification, use the **Mesh Quality** block to evaluate the resulting mesh. The block reports several metrics that can help identify elements that may cause problems in downstream simulation workflows: * *Skewness* measures how much an element deviates from its ideal shape. Values range from 0 to 1, with values closer to 0 indicating higher-quality elements and values closer to 1 indicating highly distorted or potentially degenerate elements. * *Orthogonality* measures how closely an element conforms to an ideal orthogonal arrangement. Values range from 0 to 1, with values closer to 1 indicating better-quality elements and values closer to 0 indicating greater distortion. * *Intersecting triangles* identify triangles that overlap or pass through one another. Ideally, no triangles should intersect. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/mesh%20quality%20block.jpg) *The **Mesh Quality** block provides useful mesh metrics* Review these metrics to identify mesh quality issues before continuing the workflow, particularly when the mesh will be used for simulation. The **Mesh Quality** block supports surface, volume, and FE meshes. For more information on visualizing mesh quality in the HUD and this block, see [Mesh Quality Block](https://docs.ntop.com/Product-Documentation/ntop/block-documentation/blocks/structures/mesh/mesh-quality). ### Remeshing The **Remesh Surface** block improves mesh quality by redistributing elements across an existing surface mesh. It can reduce element count, improve element size and shape consistency, and vary mesh density spatially. Use this block to prepare high-quality surface meshes for downstream applications such as finite element analysis. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/remesh%20surface%20block.jpg) *The **Remesh Surface** block* * *Edge Length*: Specifies the approximate edge length of the mesh elements. It can be a constant value for uniform sizing or a scalar field to vary mesh density across the surface. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/edge%20length.jpg) *A mesh with a consistent Edge Length (left) versus a mesh with a field-driven Edge Length (right)* * *Shape*: defines the element shape of the output mesh. Triangular elements are the most common and computationally efficient option. Although quad and quad-dominant surface meshes cannot be converted directly into volume meshes in nTop, you can use them as inputs to the **CAD Body from Quad Mesh** block, which is discussed later in this lesson. * *Span Angle*: controls refinement along curved regions by defining the maximum angle that a mesh element may span across a curve. Smaller values produce greater refinement, allowing the mesh to represent curved geometry more accurately. The following ranges provide general starting points: * Coarse: 60°–91° * Medium: 24°–75° * Fine: 12°–36° * nTop default: 30° ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/span%20angle.jpg) *A mesh with a 30 degree Span Angle (left) versus a mesh with a 15 degree Span Angle (right)* * *Growth Rate:* Controls how quickly the element size may change between neighboring regions. The value must be greater than 1. Values closer to 1 produce a more gradual transition and a more uniform mesh, while larger values permit more rapid changes in element size. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/growth%20rate.jpg) *A mesh with a Growth rate of 2 (left) versus a mesh with a Growth rate of 1.05 (right)* The image above shows how reducing the growth rate from 2 to 1.05 creates a more uniform mesh. A growth rate of 1.2 is a useful general starting point. * *Feature Angle*: Identifies edges to preserve during remeshing. It defines the maximum allowable angle between adjacent faces before it treats their shared boundary as a geometric feature. Lower values preserve more changes in surface direction and may create additional planar regions along curved geometry. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/feature%20angle.jpg) *A mesh with a 10 degree Feature angle (left) versus a mesh with a 6 degree Feature angle (right)* * *Min Edge Length*: Defines the minimum allowable edge length. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/min%20edge%20length.jpg) *A mesh with a Min Edge Length of 1 versus a mesh with a Min Edge Length of 5* * *Chord Height*: Defines the maximum allowable distance between the midpoint of a mesh element edge and the input surface. A value of zero disables chord-height-based sizing. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/chord%20height.jpg) *A mesh with a Chord Height of 0.001 (left) versus a mesh with a Chord Height of 0.1 (right)* * *Min. Feature Size*: Specifies the minimum feature size to preserve in the resulting mesh. It removes features smaller than this value. A recommended starting value is approximately 5% of the edge length. Set the value to zero to disable feature removal. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/min%20feature%20removes%20implicit.jpg) *A small implicit body (left) is removed when meshing by using a small Min Feature Size (right)* * *Preserved Nodes*: Accepts a **Point List** specifying points to preserve as nodes in the resulting FE mesh. If left empty, node preservation is disabled. This input ensures that selected boundary points are retained during remeshing and is covered in greater detail in meshing for Simulation courses. ### Back to CAD Methods As we have learned, an Implicit Body is defined by a function rather than discrete faces and edges. Converting it to a CAD Body requires fitting NURBS surfaces to approximate the geometry, with curvature changes and sharp transitions often creating additional faces. Fine features, such as thin trailing edges or dense lattices, can generate more faces than a CAD system can practically manage. The following back-to-CAD methods suit different geometries and applications. Select an approach based on the geometry's complexity and the intended downstream use. #### Quadrangulate Mesh The **Quadrangulate Mesh** block remeshes a triangular or quad mesh to produce a quad mesh. Common applications include: * Preparing input for the **Cell Map from Quad Mesh** block * Creating or remeshing a quad mesh for export * Providing input to the **CAD Body from Quad Mesh** block This lesson focuses on using the block to prepare a low-complexity model for conversion into a CAD part with **CAD Body from Quad Mesh** (more on this block later in this lesson). ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/quadrangulate%20mesh%20block.jpg) *The **Quadrangulate Mesh** block* * *Mesh*: Accepts the mesh to quadrangulate. * *Target Count*: Determines the target number of quad elements. If the output mesh is self-intersecting, try increasing the *Target Count* value or disable the *Sharp features* input. * *Adaptivity*: Adjusts the target quad count to better capture the input mesh curvature; range \[0, 1]. * *Sharp features*: Auto-detects and preserves sharp features in the input mesh. * *Feature angle*: Defines the angle used to detect and preserve sharp feature edges in the input mesh. When you provide an input value and the angle between two faces of the mesh is greater than the provided angle, the edge between those faces is tagged as a sharp feature edge. If you don't provide an input value, an internal algorithm detects sharp edges. This input is used only if the Sharp Features input is checked; otherwise, it is ignored. * *Symmetry*: Is an optional input that accepts a frame defining the model's symmetry plane. #### Refine Mesh Sometimes you may get an error after using the **Quadrangulate Mesh** Block, and a warning appears on the block as shown in the image below. The solution is the **Refine Mesh** block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/triangles%20and%20quad%20mix%20mesh.jpg) *If your resulting mesh has both triangle and quad elements, you will encounter this warning message* The **Refine Mesh** block uses subdivision to divide mesh elements into smaller elements, improving the representation of geometric details and surface curvature. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/refine%20mesh%20block.jpg) *The **Refine Mesh** block* * *Mesh*: Accepts the mesh to refine * *Refinement Steps:* Specifies the number of subdivision iterations (1 to 5). * *Feature Angle*: Optionally identifies edges to preserve as sharp. Edges with a dihedral angle greater than this value are treated as sharp during refinement. * *Sharpness Value*: Controls the degree of sharpness applied to preserved edges, from 0 to 1. A value of 1 represents an infinitely sharp edge and is the default when a *Feature Angle* is specified. #### CAD Body from Quad Mesh Now that we have learned about meshing and refinement techniques in nTop, we can move on to creating a CAD body. The **CAD Body from Quad Mesh** block converts a quad surface mesh into a CAD Body that you can export to other CAD applications as a Parasolid (.x\_t, .x\_b) or STEP (.step) file using the **Export Part** block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/CAD%20Body%20from%20Quad%20Mesh.jpg) *The **CAD Body from Quad Mesh** block* Procedure: 1. Create a surface mesh: Use the **Mesh from Implicit Body** block to generate a triangular surface mesh. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/mfib%20bracket.jpg) *A surface mesh created from the **Mesh from Implicit Body** block* 2. Refine the mesh: Use **Remesh Surface**, **Simplify by Threshold**, **Simplify by Amount**, or another refinement method to prepare the mesh for quadrangulation. Before continuing, verify that the mesh contains no meshing errors. A clean, refined mesh enables a more reliable and efficient conversion to a quad mesh. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/smbt%20bracket.jpg) *A mesh simplified using the **Simplify Mesh by Threshold** block* 3. Create a quad mesh **:** Convert the refined mesh using **Quadrangulate Mesh** ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/quad%20mesh%20bracket.jpg) *Triangle elements converted to quads using the **Quadrangulate Mesh** block* 4. Refine the quad mesh **:** If necessary, apply **Refine Mesh** to improve detail retention and reduce rounding near sharp edges. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/refine%20mesh%20bracket.jpg) *Refine the quad mesh using the **Refine Mesh** block* 5. Create a CAD Body: Use the **CAD body from Quad Mesh** block and input the refined quad mesh. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/cad%20body%20from%20quad%20bracket.jpg) *Convert the mesh to a CAD body using **CAD Body from Quad Mesh*** This workflow is best suited to relatively simple geometry and most topology-optimized parts. It is not recommended for complex lattice structures. For small- to medium-sized lattices that this method cannot support, consider using **CAD Body from Implicit Body** instead. > [!NOTE] > > **Note:** The Export section of this lesson covers exporting the resulting CAD Body. #### CAD Body from Implicit Body (BETA) The **CAD Body from Implicit Body** block is a BETA block that converts an Implicit Body into a CAD Body for export to other CAD applications. You can export the resulting body as a Parasolid (.x\_t, .x\_b) or STEP (.step). This method is intended for medium-complexity textured models and lattices, including: * Beam- or face-based lattices with up to 10,000 beams or faces * TPMS lattices with up to 1,000 unit cells ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/cad%20body%20from%20implicit%20model.jpg) *A CAD Body generated using the **CAD Body from Implicit Body (BETA)** block* Implicit models within these guidelines can typically be converted into CAD Bodies containing 50,000 or fewer faces, allowing traditional CAD systems to process the detailed geometry. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/cad%20body%20from%20implicit%20body%20block.jpg) *The **CAD Body from Implicit Body** block* * *Body*: Input accepts the Implicit Body to convert. * *Tolerance*: Defines the maximum permitted deviation between the CAD Body and the input Implicit Body. Increasing the tolerance generally reduces the face count and conversion time but produces a less accurate approximation. Begin with a value approximately half the size of the body's thinnest feature. * *Preserved CAD*: Accepts an optional list of CAD Bodies containing faces to incorporate into the output. The block attempts to stitch eligible faces into the resulting CAD Body. Faces that extend beyond the Implicit Body's surface or cannot be stitched successfully are ignored. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/preserved%20cad%20input.jpg) *A CAD Body generated without the Preserved CAD input (left) versus one generated using the Preserved CAD input (right)* #### Simplified Body Representation The **Simplified Body Representation** block creates a simplified boundary envelope of a complex Implicit Body while preserving its mass properties. Overall mass is always matched, with the option to also preserve the center of gravity and moments of inertia. This method is recommended for high-complexity geometry that would produce too many B-rep faces for traditional CAD systems, including: * Fine surface textures * Beam- or face-based lattices with more than 10,000 beams or faces * TPMS lattices with more than 1,000 unit cells The output combines a boundary envelope with density-adjusted bodies, allowing downstream CAD applications to support visualization, clearance checks, weight studies, assemblies, drawings, and other workflows without representing the complete internal geometry. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/simplified%20body%20representation.jpg) *The **Simplified Body Representation** block* * *Envelope*: A list of CAD Bodies defining the simplified external boundary. * *Body:* *The* implicit body to simplify. * Density: The material density assigned to the body. * *Match Inertia:* Specifies whether the output should also preserve the center of gravity and moments of inertia. * *Uniform Density:* Creates an output compatible with CAD systems that do not support variable-density parts. SolidWorks users should enable this option to preserve the correct center of gravity and moments of inertia. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/simplified%20body%20rep%20bracket.gif) ****Simplified Body Representation*** *visibility is toggled on, showing the original CAD Body while preserving the mass properties of the final lattice part** ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/mass%20properties%20cad.jpg) **Mass Properties displayed in CAD tool** #### Reference Geometry for CAD Reconstruction As you learned in earlier lessons, nTop uses precise curves, including lines, arcs, conics, and splines, to construct implicit geometry. You can export these curves with relevant numerical parameters to support automated or manual surface reconstruction in CAD, especially for parts requiring highly tailored surfaces. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/airplane%20curves.jpg) *An example of a curve sketch that has been created in nTop* To export any Curve type or list of Curves, use the **Export Part** block. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/export%20part%20block.jpg) *The **Export Part** block being used to export a set of Curves* > [!NOTE] > > **Note:** The **Export Part** block includes multiple overloads. Use the Path, Curve and Path, Curve List overloads for this process. #### Convergent Body (BETA) Some CAx software using Siemens Parasolid, such as NX or STAR-CCM+, supports a geometric representation known as Convergent Modeling. In this format, mesh face groups are treated as CAD faces within the topology, in addition to analytical and NURBS faces. This supports many downstream operations that mesh formats typically don't support in the same software. nTop supports convergent body exports where each face group is defined by a mesh. Convergent Bodies are created using either the **Convergent Part from Named Body** or the **Convergent Body from Multi-Region Mesh** blocks. These workflows will be introduced in a separate course that explores meshing in nTop in greater depth. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/convergent%20body.jpg) *An example of a Convergent Body* ## Exporting Parts To export an Implicit Body from nTop, it must first be converted to a supported file type using one of the methods described above. The following steps outline how to export the converted part. ### Exporting Meshes The **Export Mesh** and **Export 3MF blocks**, located under Utilities > Exchange, export mesh geometry in STL, OBJ, PLY, or 3MF format. STL offers the broadest compatibility, while 3MF files are typically about one-third the size for equivalent geometry and support color and multi-body assemblies. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/export%20mesh%20and%203mf%20blocks.jpg) *The **Export Mesh** and **Export 3MF** blocks* > [!NOTE] > > **Note:** The **Export 3MF** block includes an option to export a thickened lattice. Only beam-based lattices are supported. If the input lattice does not have a defined thickness, it automatically applies a default thickness of 1 mm. For detailed instructions, see [How to Export a 3MF File](https://support.ntopology.com/hc/articles/360054069993). ### Exporting CAD The **Export Part** block exports CAD parts from nTop. Before exporting, convert an Implicit Body to a CAD Body using either the CAD Body from Quad Mesh block or the CAD Body from Implicit Body block, as described above. Parts can be exported as Parasolid (X\_T, X\_B), STEP, or IGES files. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/export%20part%20overloads.jpg) *The **Export Part** block has several overloads for exporting geometry* > [!NOTE] > > **Note:** The Export Part block includes multiple overloads for different input types. Select the overload that matches the geometry you want to export, or drag a compatible block into the input to update the overload automatically. ### Export for Additive Manufacturing All slicing tools are in the Manufacturing tab. You can export multiple slice file formats. To learn more about slicing for additive manufacturing, check out our course, [250: Slicing and Print Layout](https://learn.ntop.com/courses/250-slicing-and-print-layout/). ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/export%20slices%20blocks.jpg) *There are several block options for exporting slices in nTop* ### Exporting Implicits The **Export Implicit** Body block, located under Utilities > Exchange, exports an Implicit Body as an .implicit file. This format preserves the underlying implicit function rather than an approximated or tessellated representation, maintaining full geometric fidelity while typically producing a file significantly smaller than an equivalent mesh. As introduced in Course 1, this workflow uses Implicit Interop and requires the receiving application to support the .implicit format. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/export%20implicit%20body%20block.jpg) *The **Export Implicit Body** block* ## What to Take Away * Surface meshing converts an Implicit Body into a discrete representation of its boundary for downstream manufacturing, simulation, and visualization workflows. * A clean mesh should be closed, manifold, oriented, and free of self-intersections. * Meshing and remeshing parameters balance geometric fidelity, element quality, file size, and computation time. * The appropriate back-to-CAD method depends on geometric complexity and the intended downstream application. * Complex geometry that is impractical to convert into a full CAD Body can be represented using a **Simplified Body Representation** block that preserves critical mass properties. * nTop geometry can be exported as mesh, CAD, reference geometry, additive manufacturing, or .implicit files, depending on the capabilities of the receiving application. ## What's Next You have now learned the basics of exporting geometry from nTop. Next, test your understanding of geometry conversion in a knowledge check. # Importing & Exporting Data Source: https://docs.ntop.com/lessons/scalable-interoperable-workflows/importing-exporting-data ## Introduction Engineering data rarely begins and ends in one application. nTop can import tabular data, meshes, and computer-aided design (CAD) geometry, then convert each source into a representation suited to downstream modeling or analysis. It can also export calculated results for use in other engineering tools. In this lesson, you will import coordinates from a comma-separated values (CSV) file and turn them into a closed airfoil shape. You will calculate its area and export the result. You will also import mesh and CAD versions of the same bracket, convert each for downstream modeling, and verify how units, source quality, and conversion settings affect the result. ## Understanding External Data in nTop External data enters nTop as a specific data type. A CSV file can store ordered coordinates, a mesh represents surfaces with discrete faces, and CAD geometry represents boundaries with mathematically defined curves and surfaces. These source data types are not interchangeable, and they determine which blocks are available for immediate downstream operations. As discussed in previous lessons, many modeling operations in nTop use an implicit body. Converting imported geometry to this form makes it available to implicit modeling operations. The conversion is not a substitute for validation: units, point order, mesh quality, CAD detail, and conversion tolerance can all affect the result. The workflow in this lesson follows external data in both directions: source file to nTop representation to calculation to exported result. ## Create a Profile From CSV Coordinates A closed profile is a filled planar region bounded by one or more closed curves. Coordinate-driven geometry follows a reusable pattern: import numeric values as points, connect the points into a curve, and convert the closed curve into a profile. An airfoil is a useful example because you can inspect each stage, but the same workflow applies to other closed planar shapes described by ordered coordinates. Please refer to the following files as you work through this section: **Downloadable Files:** [Example File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/Profile%20from%20CSV.ntop) *This file was last updated in nTop 6.03* CSV Example File: **[Airfoil CSV Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/Airfoil%20CSV.csv)** ### Prepare the CSV File Use the provided airfoil CSV to follow the workflow, but structure the file as you would for any ordered point dataset: one point per row, three numeric columns in x, y, z order, and no header or metadata. For a closed profile, keep all z values equal, as the only way for the profile to remain closed is for the profile to remain planar. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/prepare%20the%20csv.jpg) *Sample point data arranged as x, y, and z columns. The z values remain 0 because this example creates a planar profile* 1. Open the CSV file and confirm that every row contains three numeric coordinate values. 2. Confirm the units used by the coordinate values. Assign these units when you import the file. 3. Check for duplicated points and points separated by distances that are negligible for the intended geometry. Nearly coincident values can create unstable or self-intersecting curves. 4. Inspect the first and last rows. They should describe the profile closure without creating a duplicated or nearly duplicated trailing-edge point. ### Overview of the CSV to Profile Workflow The workflow uses three standard blocks that you can add directly to any notebook. The custom block shown below packages them for convenience. In the reusable data path, the CSV values become points, the points define a spline, the periodic input closes the airfoil boundary, and the closed spline becomes a profile. For the custom block, the inputs are the airfoil root point, the airfoil CSV path, and the units. The main body contains a **Spline Through Points** block that processes the CSV points and a **Profile from Curves** block that converts the spline into a profile. The custom block outputs the airfoil profile generated from the CSV. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/csv%20airfoil%20cb.jpg) *The custom block packages the general workflow. Notice how the imported point list feeds* ***Spline Through Points*** *and how its closed curve feeds* ***Profile from Curves*** * **Import Points** reads coordinate rows from the *Path* input, interprets them using the *Units* input, and returns points. * **Spline Through Points** connects the *Points* input in row order. A spline is a smooth curve fitted through those points. Set *Degree* to 3 as a common starting point and enable *Periodic* when the boundary must close. * **Profile from Curves** converts coplanar *Curves* into a planar profile. Correct an open, self-intersecting, or non-coplanar curve before this step. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/airfoil%20points.jpg) ***Spline Through Points*** *uses Degree 3 with Periodic enabled to close the airfoil boundary* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/airfoil%20profile%20block.jpg) ***Profile from Curves*** *converts the closed spline into the Airfoil Profile output* This pattern is not specific to airfoils. Any ordered coordinate file can drive a similar workflow when you define its units, point order, curve closure, and planarity correctly. The file supplies values; the notebook determines how those values become geometry. ### Assemble the Workflow 1. Add an **Import Points** block, select the CSV file with the *Path* input, and set *Units* to match the coordinate values. 2. Add a **Spline Through Points** block, connect the imported points to the *Points* input, set *Degree* to 3, and enable *Periodic* for the closed boundary. 3. Add a **Profile from Curves** block, connect the spline to the *Curves* input, calculate the workflow, and display the resulting profile. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/airfoil%20profile.jpg) *The completed profile. The shaded interior confirms that the CSV-to-points-to-curve workflow produced a closed planar region* **Profile from Curves** outputs a reusable planar profile, not an airfoil-specific data type. The same workflow can create other closed planar profiles, and its output can connect to any downstream block that accepts a profile. ### Alternative Method: Import the CSV as a Table **Import Points** is the shortest path for a coordinate-only CSV without a header. The **Import Table** block is useful when the file has named columns or additional tabular values that you want to access independently. Please refer to the following files as you work through this section: **Downloadable Files:** [Example File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/Profile%20from%20Import%20Table.ntop) *This file was last updated in nTop 6.03* CSV Example File: **[Airfoil Table Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/Airfoil%20Table.csv)** For this alternate route, use a copy of the airfoil CSV with x, y, and z headers in the first row. * Add an **Import Table** block, select the headered CSV with the Path input, and enable Include Headers. * Add three **Extract Column as Text** blocks and assign the x, y, and z column headers to them. * Connect each extracted text list with **Scalar from Text**. Multiply each resulting scalar list by 1 mm, or by the length unit used in the source file, so the coordinates carry units. * Add a **Point** block and connect the unit-bearing scalar lists to its X, Y, and Z inputs. nTop list processing creates one point for each table row. * Connect the point list using **Spline Through Points**, set Degree to 3, enable Periodic, and generate the profile from the resulting curve using **Profile from Curves**. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/import%20table%20example.jpg) ***Import Table** reads the headered CSV, and **Extract Column as Text** separates the x, y, and z columns before **Scalar from Text** converts each column into a scalar list* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/airfoil%20spline%20block.jpg) *Point combines the unit-bearing coordinate lists. **Spline Through Points** creates the periodic boundary, and **Profile from Curves** creates the planar profile* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/airfoil%20profile%20with%20points.jpg) *The completed airfoil profile generated through the **Import Table** workflow. To confirm their order around the boundary, display the imported points* Both import methods produce the same downstream point-list-to-profile workflow. Use **Import Points** for a coordinate-only file and **Import Table** when individual columns or additional tabular data must remain accessible. ### Verify the Resulting Profile Before using imported data downstream, verify that nTop interpreted it as intended. Check that: * The profile occupies the intended region inside the boundary. * The curve is smooth wherever the source data should be smooth. * The profile closes cleanly at both the leading and trailing edges. * No loop, spike, or unintended region appears outside the boundary. If the profile does not close correctly, inspect the point order, duplicated or nearly coincident rows, and the *Periodic* setting before changing downstream blocks. These issues can cause the spline to loop back on itself or create an unintended region. ## Calculate and Export a Scalar Result The **Surface Area** block accepts a profile, mesh, or implicit body and returns an area value. When you use the airfoil profile directly, the result is the enclosed area of the two-dimensional profile, not the exterior surface area of a three-dimensional wing. The result is a scalar: a single magnitude with an associated unit. ### Calculate the Surface Area 1. Add a **Surface Area** block to the notebook. 2. Set the Profile input of the **Surface Area** block to Airfoil Profile. 3. Review the calculated value and its units. ### Export the Scalar Value nTop retains units as part of a scalar. A plain-text file does not retain nTop's data type, so the value must first be formatted as text with an explicit reference and precision. 1. Add a **Text from Scalar** block and connect the area to its *Value* input. 2. Set *Reference* to the desired area unit, such as 1 mm². The exported number will be expressed relative to this value. 3. Set *Precision* to the number of significant digits needed by the downstream workflow. 4. Add an **Export Text** block, connect the formatted value to its *Text* input, and choose the output *Path*. 5. Open the exported file and confirm that the number corresponds to the value displayed in nTop. **Export Text** keeps the workflow compact for a single result. For larger datasets, use **Export Table** for organized tabular values or **Export Point Map** for values associated with spatial points. Both blocks can export data in CSV format. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/airfoil%20surface%20area%20block.jpg) *Complete scalar-export workflow: Surface Area evaluates the airfoil profile, **Text from Scalar** formats the value in mm², and **Export Text** writes the result to a neutral lesson path* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/surface%20area%20text%20file.jpg) *The exported text file contains the formatted surface-area value* ## Import Mesh and CAD Geometry Mesh and CAD files can describe the same physical part, but they represent its boundary differently. A mesh approximates the boundary with discrete faces. CAD geometry uses mathematically defined curves and surfaces. Converting either source to an implicit body gives subsequent implicit modeling blocks a common data type. The steps below use explicit import and conversion blocks so that each data-type change is visible. You can also drag supported files into nTop and access available conversion operations by right-clicking selected geometry. Please refer to the following files as you work through this section: Example Mesh: [Mesh File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/Example%20Bracket%20mesh.STL) Example CAD: [CAD File Download](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/nTop%20Files/Example%20Bracket%20CAD.STEP) ### Import and Convert a Mesh 1. Add an **Import Mesh** block, select the provided file with the *Path* input, and set *Units* to the units used when the mesh was exported. Alternatively, drag the mesh file into nTop, then confirm that the imported mesh uses the correct units. 2. Inspect the imported mesh for obvious holes or disconnected regions. In the Properties panel, confirm that it is closed, manifold, oriented, and not self-intersecting. Closed means no open boundary edges; manifold means each edge has an unambiguous surface connection; oriented means the face directions are consistent; and non-self-intersecting means no faces cross one another. 3. Add an **Implicit Body from Mesh** block and connect the imported mesh to its *Mesh* input. 4. Toggle the visibility of the mesh and implicit body, or use a section view, to compare their boundaries. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/import%20mesh.jpg) ***Import Mesh** loads the bracket in millimeters, and **Implicit Body from Mesh** converts it for downstream implicit operations* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/imported%20mesh%20body.jpg) *The imported bracket displayed with facet edges visible, making its triangulated surface representation clear* The **Import Mesh** block may report that duplicate or very close vertices were merged and that unreferenced or invalid vertices were removed. This is automatic cleanup, not proof that the mesh is valid. Recheck the Properties panel before continuing. The implicit conversion uses the triangulated mesh boundary as its source. It cannot restore detail missing from the original triangles, so mesh resolution and topology remain important. ### Import and Convert CAD Geometry 1. Add an **Import Part** block and select the provided CAD file with the *Path* input. 2. Extract a single CAD body from the imported part. You can drag the individual body property into the notebook or use **Get CAD Bodies** when a block-based selection is more appropriate. Do not pass a CAD body list to an input that expects one body. Refer to the image below on where to find the body in the properties menu. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/imported%20bracket%20properties.jpg) *The properties panel showing where the single CAD Body can be found under List Elements* 3. Add an **Implicit Body from CAD Body** block and connect the selected body to the *CAD Body* input. 4. Set the *Tolerance* to the maximum permitted deviation between the CAD source and the implicit result. Use a smaller value when the part contains important small features or thin regions. 5. Compare the CAD and implicit boundaries to confirm that small features and thin regions were captured. The images below show the same bracket in the original CAD platform and after being imported into nTop. Compare the overall shape, holes, fillets, and thin regions before relying on the geometry downstream. ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/CAD%20bracket.jpg) *The example bracket in the source CAD application before export* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/CAD%20in%20nTop%20bracket.jpg) *The same bracket displayed in nTop after import, confirming that the intended CAD geometry was loaded* ![](https://files.learn.ntop.com/Courses/nTop%20Foundational%20Learning%20Course/Course%203/Images/Import%20part%20bracket.jpg) *Import Part loads a single bracket body, which is connected to **Implicit Body from CAD Body** with a 0.01 mm tolerance* If the implicit result softens or merges a small feature, reduce the *Tolerance* and recalculate. Smaller values generally preserve more detail but require more computation. ## Compare the Data Paths The three workflows produce nTop data types that can be used in downstream operations, but each has a different source of uncertainty: * CSV coordinates depend on formatting, units, point order, and clean profile closure. * Mesh geometry depends on tessellation resolution and mesh topology. * CAD-to-implicit conversion depends on the selected body and conversion tolerance. Conversion does not correct problems in the source data. Incorrectly ordered CSV points, a coarse or invalid mesh, or CAD features smaller than the selected tolerance can affect the converted result. Verification is therefore part of importing data, not an optional cleanup step. ## What to Take Away * External files enter nTop as specific data types, and those types determine which downstream operations are available. * A coordinate CSV becomes geometry only after nTop interprets its values as ordered points, a curve, and a profile. * Mesh and CAD geometry can both be converted to implicit bodies, but source quality and conversion settings affect the fidelity of the result. * The **Surface Area** block returns a scalar value that can be formatted with controlled units and precision before export. * Every imported or converted result should be checked before it is used downstream. ## What's Next You can now bring coordinate, mesh, and CAD data into nTop, convert each source into a usable representation, verify the result, and export a calculated value. These skills provide the data-handling foundation for workflows that connect nTop with other engineering tools. Next, you will apply this workflow in a knowledge check by identifying the appropriate import, conversion, validation, and export steps for different external data types. # Scalable, Interoperable Workflows Survey Source: https://docs.ntop.com/lessons/scalable-interoperable-workflows/scalable-interoperable-workflows-survey Thank you for taking the Modeling Foundations course. We highly value your feedback, and would greatly appreciate you taking a second to fill out our Feedback Survey. Please click the link below to complete the survey. Please click this link to take the: [Scalable Interoperable Workflows Feedback Survey](https://docs.google.com/forms/d/e/1FAIpQLScdkyYkVvUUHFplikHxyJdpUoDyTIlbMgN6YNd8urs5MKWElQ/viewform) After taking the survey, please make sure you click “Mark Complete” to complete this lesson and course. # Answer to Print Prep and Slicing Test Problem Source: https://docs.ntop.com/lessons/slicing-and-print-layout/answer-to-print-prep-and-slicing-test-problem [https://www.youtube.com/embed/Se\_znpqHDoc](https://www.youtube.com/embed/Se_znpqHDoc) > **Transcript** > > In this video, we will walk through the answer to the print prep and slicing optional test problem. So, it began with the starter file that you downloaded that had the first three sections: the starting geometry, where I just created three of the geometry that we'll use for placing and slicing. If you want to learn more on how these were created, you can check out our lising course. > > Then I have our geometry to place on build, so that gear lattice bracket and bracket are all in one implicit body list that we'll use for our 2D nesting with our requirements here. And we have our torus as well, which we will use our **Orient Object** to place on the build plane. We also had this printer information section, but the starter file only contains this build volume. > > So the first thing that I did was use our **Centered Plane from Box Floor** and made that a variable labeled it build plane, using that build volume. You could also have used our **Corner Plane from Box Four** for that as well. To begin placing our parts, I used our **Bounding Box 2D Nesting** first. So let me open that up. For the bounding box, I went into our parts for 2D nesting and chose that bounding box from there, with all three of those in there, our build volume, same as we were given in the printer information, and that 10 mm part-to-part offset, 0 mm platform offset, and a 1 mm perimeter offset. > > Because this is a transformation list, I have to use this in a **Transform Object** in order to actually have this happen to my part. So if I turn on that visibility, we can see that they are now all placed on that build plane within our bounding box. So these three are placed, and then the next step was to place my torus using an **Orient Object**, and I placed mine around here. I saw there was some space. You could also have something that maybe looks a little bit different on how you are orienting your parts and placing them in different locations. > > For our torus, I'll isolate that view, and if I use my source plane, which is going to be at the minimum point of that torus's bounding box, and the destination plane, I just did this visually looking at the options we had available. So if I show that build volume, our **Plane from Normal** I placed here, and the reason I placed it here is while that center of the plane is in my latest part, because that's the minimum point, we're going to see that that's placed well. So I just had a starting plane that was 0 0 and moved this around to a spot that I thought made sense. You could have also used a different plane, maybe you defined that origin instead of being the minimum point, it was just the minimum in the Z and the center in the X and the Y by defining each of those values individually for the X, Y, and Z. But this works fine for our application. So again, if yours looks a little bit different, that's okay too. > > Now that my parts are placed on my build volume and on my build plane, I can slice them. So I did this in two ways. You again might have something slightly different than me, but I used our **Slice Body** for all three of those, bracket and the gears. And if you look here, you can see I have that sliced. Now, something to note is I have my frame used, which was an optional input. If we look at our **Slice Body**, I double-clicked to add that frame. And the reason I have the frame is if we do this at the origin of 0 0 0, you can see I have some noise at the top of my part. And the reason for this is that when some sliced planes coincide exactly with the horizontal surfaces of a part, you will get this type of noise. And we can see this pretty clearly if we turn on those three parts, you can see that that's about right at that horizontal surface, and so it has some issues with that. > > So one thing that you can do is choose the centroid of your part as that frame. If you're using this one part, and usually that will be fine. Another option that we can do too, and this is what I'm doing in this option, especially because I have multiple different parts, is I added that frame and I just moved this up to 0.5 mm in that Z direction. And the reason for this, and I have this in our note as well too, is that we're doing half of our layer height, and by doing that, while it was hitting it originally, now because it's half of that layer height, we're going to get something that's nice and clean and it won't hit that portion. So something to think about also when you are creating these designs, if you're getting that kind of noise, you might need to change that frame. Also, you might want to have a, for instance, a lower, you might have a different layer height, different feature size when you would actually be printing these. But I just kept with those to make this relatively quick to run. > > So that's our **Slice Body**, and then I also used our **Slice on Build Plane** to create our torus, same feature size, same layer height, and I just placed in that build plane in this example. And that's why I needed to have that build plane, that **Center Plane from Box Floor** originally as well too. Because I have these four different slice stacks, I'm going to merge our slice stacks. I could do a **Merge Slice Stack** of these three and then merge them again with a **Slice on Build Plane**, or what I did in this example is used **Concatenate List**. So if I look at our **Merge Slice Stacks**, you can see I have two items I want to place in the slice stack, but one of them is already a list. In order to actually place this, I'm going to create one list, so concatenating them together with that torus slice and all our other slices. And to learn more about our **Concatenate List**, you can go to the lesson linked below this video in our intro automation course. But now I've merged them, so they are all going to be in one slice stack. > > Then the last step is to export these slices, and we're exporting them to Renishaw and using that ASCII format. And that's the answer to our print prep and slicing optional test problem. There's a lot of ways you can create something in nTop, so maybe your workflow is a little bit different, but hopefully this shows one example of how we can go through that test problem and the answer for that. This video reviews the answer to the Slicing and Print Preparation Test Problem. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [250\_18\_1 Complete — Print Prep & Slice Problem.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_18_1%20Complete%20--%20Print%20Prep%20%26%20Slice%20Problem.ntop) *This file was last updated in nTop 5.15.2* # Before We Begin: Slicing and Print Layout Source: https://docs.ntop.com/lessons/slicing-and-print-layout/before-we-begin-slicing-and-print-layout [https://www.youtube.com/embed/I4s3kfaYNBw](https://www.youtube.com/embed/I4s3kfaYNBw) In this course, we will learn how to… * Orient a part for printing using a build volume * Slice and export a part for printing # Download: Print Preparation Source: https://docs.ntop.com/lessons/slicing-and-print-layout/download-print-preparation Now that you have completed the follow-along feel free to download the completed file with descriptions of print preparation. **Example File:** [250\_7\_1 & 14\_1 Complete — Print Preparation.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_7_1%20%26%2014_1%20Complete%20--%20Print%20Preparation.ntop) *This file was last updated in nTop 5.14.3* # Download: Slice and Export Source: https://docs.ntop.com/lessons/slicing-and-print-layout/download-slice-and-export Now that you have completed the follow-along, feel free to download the completed file with descriptions on how to slice and export your part. **Example File:** [250\_15\_1 Complete — Slice and Export.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_15_1%20Complete%20--%20Slice%20and%20Export.ntop) *This file was last updated in nTop 4.2.3* # Exporting Slice Information Source: https://docs.ntop.com/lessons/slicing-and-print-layout/exporting-slice-information You can export different slice information shown below and import a slice stack into nTop. Below, we will walk through the export methods for some of these options. ![](https://files.learn.ntop.com/lessons/exporting-slice-information/250_11_1-Manufacturing-Exchange-Tab.png) ## Different Exporting Options Many of our export slices options have the same inputs options: the path where you plan to save the slices and the slice stack you want to export. If you plan to export slices to CLI, Renishaw, or EOS, you can define the format as ASCII or Binary. Our **Export Slices to EOS** block has the additional input to specify if the slice stacks are supports. ![](https://files.learn.ntop.com/lessons/exporting-slice-information/250_11_2-Different-Exporting-Options-SSL.png) ![](https://files.learn.ntop.com/lessons/exporting-slice-information/250_11_3-Different-Exporting-Options-Renishaw.png) ![](https://files.learn.ntop.com/lessons/exporting-slice-information/250_11_4-Different-Exporting-Options-EOS.png) > [!NOTE] > > **Note**: The **Exports Slices to CLI** block does not currently support exporting point exposures generated from the Slice Lattice block. To export to Arcam ABF, we have **Export Slices to Arcam ABF** block with the inputs for the Part Slice Stack and the Wafer Slice Stack (the optional slice stack to add as the wafer support). ![](https://files.learn.ntop.com/lessons/exporting-slice-information/250_11_5-Export-Slices-to-Arcam-ABF.png) If you plan to export slices to point data, you can use our **Export Slices to Point Data** block below, which will export slice data, and laser power and exposure time to a CSV point file. Points are uniformly distributed along contour and hatch lines. ![](https://files.learn.ntop.com/lessons/exporting-slice-information/250_11_6-Export-Slices-to-Point-Data.png) ## Importing a Slice Stack If you plan to import a slice stack, add the file path for the slice data into the **Import Slice Stack** block. ![](https://files.learn.ntop.com/lessons/exporting-slice-information/250_11_7-Import-Slice-Stack.png) # Follow Along: Print Preparation Source: https://docs.ntop.com/lessons/slicing-and-print-layout/follow-along-print-preparation [https://www.youtube.com/embed/\_bRqsQdpy20](https://www.youtube.com/embed/_bRqsQdpy20) > **Transcript** > > In this video, we will begin with our starter print preparation file that you can download below this video to implement the practices for preparing your part for a print discussed in the previous lessons. This begins with our sphere cube, which you learned in our nTop core as our sample part for this video. But feel free to also use other files that you may want to test this on by importing them, converting them to an implicit body, or even as a CAD or mesh file. > > I'm going to first add in my printer information, and we can find those in our additive manufacturing tab. We have some examples of build volumes that we can work with, and I'm going to use the EOS m290 build volume. This is just a bounding box with the dimensions of that printer volume. So if you do not see the printer you are working with in our examples, you can also just search for bounding box and put in your dimensions there. I'm going to right-click and make this a variable, which I will label **Printer Bounding Box**. > > I also want to define my build plane. So under build preparation, we have our **Centered Plane From Box Floor** and **Corner Plane From Box Floor**, and I'm going to choose **Corner Plane From Box Floor**, but you could really use either one. I place in my bounding box to determine where that build plane is, and that will be our printer bounding box. I will right-click and make this block a variable, and I'll label this **Build Plane**. We can see if I turn off my sphere cube, it is right in that corner. > > Once I have that part I want to print, I have my printer bounding box, my build plane. I can now think about how I want to orient my part. So the first option that we have, I'll place my mouse, click right underneath that part orientation. And if we look at this build preparation, we have a couple options here as well. We have our **Orient Object**, which I'll use first, and this is also really helpful if you're taking our texturing course; this also is mentioned in that as well. We have **Minimum Height Orientation** as well, and in our beta tab, we have under manufacturing utilities, **Minimum Support Orientations**. > > So let's start with that **Orient Object** in that added manufacturing tab under build preparation. This will take in the object that we want to orient in a certain way, and that will be that sphere cube. So I'll drag and drop that, and then I have my source plane and then my destination. So if we look at our sphere cube, I will type “I” to isolate and then “Z” to zoom in. I'm going to use a **Plane From Normal** as my source. So for this source plane, I want to have the minimum point of this box for this example to just place on to as my reference to place on to the build plane. So instead of having this origin, so that's at the center, I want to make sure that no part of my sphere cube is underneath the build volume. So what I'm going to do is go into the block details of our sphere cube, into the properties and bounding box, and just choose that minimum point, and I'll drag and move that. > > So if I use this minimum point, note that this is actually not at that corner. This will make sure that my part is within that bounding box, but it will be slightly lifted up that bounding box. So if I wanted to have this plane right onto that part, I'm actually going to use the minimum point of the cube. So the reason that this is not right at that corner is if I open up my sphere cube, I have a blend radius of 2 mm. So this is just also increased that bounding box that we have of our sphere cube. So I'm just going to go into my cube in that sphere cube, go into those properties, and choose the m-point and replace that from the sphere cube. And now we're going to have this at the minimum point that we want to work with, that minimum point of that cube. > > So this is our source, and in order to place this on the destination, I just want to place this on the build plane. So I will drag and drop that build plane in here. And if I view my printer bounding box, let's turn off that original sphere cube, we can see that now that minimum point of that cube is placed in that minimum location in that **Corner Plane From The Box Floor**. If I had used our **Center Plane From Box Floor**, I'll place in my printer bounding box in that option, and we can just see that now it would be placed in that center. You could also use a different plane. You can type in that **Plane From Normal** as well, too. If we look at the properties, we can see where this is located, so at 125, 125, Z. You can place in your own values as long as that Z is zero, but I'll just use our build plane that we have here. So this just changed the location of it, but if you wanted to change how this part was rotated, you could also change that normal. So for since this is just placing this on the build plane, but I could also choose the source plane to be a different way, we can see it's been rotated. > > If I do decide to just do a **Plane From Normal**, and maybe I do place in that 125, 125, 125, 0, and then decide I'm going to maybe have this lifted above my build plane, I could add in that higher value. > > I can rotate this at an angle. So, um, you have a lot of control with this **Orient Object** if you uh choose to use that. But I'll place that build plane back in there. Another option that we can do as well that is doing a very similar process to **Orient Object** is under build preparation, we can use this **Orient Body on Build Plane**. So I'll bring that down here and so what we'll do is place that sphere cube in that body to orient. Build plane will be the same build plane we work with and then you can see you can also have this rotated and it will still stay above that fill plane. So I can put that rotation angle for 30 for instance or 45. I can change the rotation axis as well to get something like this. > > Another option that we can use as well is our **Minimum Support Orientation** which is in our beta, as well as that **Minimum Height Orientation**. And I'll walk through in our beta tab that **Minimum Support Orientation**. So if you don't see this beta tab in your notebook, you'll have to go to file, settings, and then in the general, we have that show beta blocks. So we'll just click on that and then you should be able to uh see these beta blocks if you haven't already. For the body that we want to work with, I'll use the sphere cube. The build plane, same build plane we worked with before. Now we can also say we want a certain offset from that plane. So for instance, 3 mm above our plane, an overhang angle let's say of 30°. You can also define your minimum or overhang angle and choose that you are going to consider supports in all regions, external only, or internal only. And I'll just say external only and a feature size of one. So what this is actually doing is this is creating a number of orientations that will minimize the support. This is a transformation list that's going to come out of this, and we can see that are five items in our transformation list. So in order to view these different options, I'll first make this a variable. So I'll right click, make variable and label this orientations because this is a transformation block. I have to place this into a **Transform Object** block. So this transform will go into here and then our object will be the sphere cube. Remember though, that this is a list, so we have those five different orientations. So if you transform this, it'll do all five of those. But in order to best visualize each one individually, I'm going to use a **List Element** block. If you are unfamiliar with our **List Element** block, I do recommend when you're working with lists or anything like that checking out our intro to automation course which will cover list as well as custom blocks. But I'll use this **List Element** to take in my orientations and we can control which one we're going to use. So our lists always start at zero. So we're going to go to zero, and now we can visualize this here. Remember that this is at our corner plane from box floor. So this is going to be placed right at that center of the corner. So, you know, if you're doing something like this and you don't want to move this over, uh again, you would want to use that centered plane. We also can control, we can go to 1, 2, 3, 4, uh to determine which is going to be the best orientation for our situation. And that's how our **Minimum Support Orientations** work. Our, if we go to our additive manufacturing tab under build preparation, our **Minimum Height Orientation** works in a similar way where we have this body, we have a transform, and we'll place that into the **Transform Object** block. > > Now that you've oriented your part in the way that you want, maybe you have a collection of parts that you want to print and place onto this build plane. So we'll talk about that next in our placing part section. So I will make this **Transform Object** a variable since we'll use this as one of our objects to place, and I'll just label this minimum Min support orientation. And if we open up our placing part section, I have some of our primitives already in our implicit body list that we will place. So I have a sphere, I have a cube, I have a torus, and a cone. Now I have one option open, and that's going to be our minimum support orientation sphere cube. So I'll drag and drop that in there as our fifth item and then I can hide my part orientation. So if you have a collection of parts like this, all these different implicit bodies, what we can do is use our **Bounding Box 2D Nesting** which you can find in our manufacturing tab. So this is where we have our manufacturing support volume as well as our **Bounding Box 2D Nesting**. And it went into the part orientation section. So I'll just drag and drop that there. This block will take in bounding boxes that we're working with, as well as the build volume. So note that this is also a transformation list. So we'll use this transformation into another **Transform Object**, and we're not immediately putting in our implicit body list. We are only putting in those bounding boxes. So what I recommend is creating an implicit body list like this and then in our block details under properties, we have all five bounding boxes already as a list. I could also go individually, take this bounding box, add all my bounding boxes in here since this has this input of a bounding box list, but I already have that list. So I'll delete that input block, go into the block details for our implicit body list, and drag and drop our bounding box into that bounding box option. For the build volume, that'll be the printer bounding box that we have in our printer and part information. You can also control the part-to-part offset, which I will make 10 mm, so they have a little bit of space between them. You can also have a platform offset and a perimeter offset. And we had five items in our list. We now have five **Bounding Box 2D Nesting** transforms. So in order to see what this looks like, I will use our **Transform Object** block, place this in here, and know that this can take in an implicit body, a mesh, a CAD body. If we go into our block details and information, this is a spatial 3, so that really can be any type of object. So if you had a list of meshes, you could place that in here too. And now I'm going to take my parts, place them on that **Transform Object**, and we can see they've all been placed now onto our build volume. So to see what this looks like, I will also go into the block details of this **Transform Object** under properties and just drag our bounding box onto a separate line. So if I turn this on, we can see how this was produced, and we are organizing those parts to print in order of size. We have that largest and then we're going to those smaller ones. So we have that 10 mm perimeter between those, and we are able to do this 2D nesting. So that's how we can prep our part for printing, and next we'll talk about slicing and getting the out of nTop to send directly to your printer. In this lesson, we will walk through different options for orienting a part for printing and placing multiple bodies on a build plate. This lesson uses the **List Element** block discussed in our [Intro to Automation](/courses/230-intro-to-automation/). If you are unfamiliar, we recommend returning to these lessons. Please download the nTop file below to follow along with the tutorial. If you prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [250\_6\_1 Starter — Print Preparation.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_6_1%20Starter%20--%20Print%20Preparation.ntop) *This file was last updated in nTop 5.14.3* [250\_6\_1 Follow Along – Print Preparation.pdf](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/PDFs/250_6_1%20Follow%20Along%20-%20Print%20Preparation.pdf) # Follow Along: Slice and Export Source: https://docs.ntop.com/lessons/slicing-and-print-layout/follow-along-slice-and-export [https://www.youtube.com/embed/BcyRF1i1vE0](https://www.youtube.com/embed/BcyRF1i1vE0) > **Transcript** > > In this lesson, we will add to our print preparation file from the previous follow-along video and now add slicing to export this out of nTop. So, I have my parts to print in that transform object. I have that as a variable, and I also have my printer bounding box visualized. > > And I will add a new section called slicing. If you don't have your own print preparation file from the previous follow-along, you can also download it below this video. So, to view the different slicing options we have, we can look in our manufacturing tab. So, we have our different slicing options that we can **Slice Body**, **Slice Lattice and Hatches**, **Merge Slices**, **Boolean Union**, **Subtract and Intersect**, and then we can also export these slices. > > So, I could just choose our **Slice Body**, and if I have everything above that build plane, that is good to go. We can also choose to include negative Z if you didn't prep your part on that build volume and it's not above zero on the Z-axis. I can also go to my additive manufacturing Tab, and we have some options as well under our build preparation, specifically our **Slice on Build Plane** and that offset and checkerboard slices. But I'll choose our **Slice on Build Plane** from that build preparation on the added manufacturing tab. I will delete that **Slice Body**, but pretty similar layout as this one. > > The body we want to slice will be all of our parts to print, so I can drag and drop that transform object in here. If you didn't make it a variable, you can make that a variable now. For feature size, to keep this quick, I'll make this 1 mm. Layer height, I'll also use at 1 mm. And our origin plane, I could go into our part and printer information, or I could just type in build plane, select that one, and select out of that. And now I have our slices. So, I'll right-click and make this a variable, and I'll label this part slices. And if I turn off our part to print, we can see what that slice looks like. > > So, note that I also had that higher feature size tolerance. So, when I'm looking at this with our parts to print, I don't see those lines going all the way through for our torus and our cone, but if I look at this, it is there. Part of that is just because of that tolerance. It's going to be solid inside. So, when you're creating the slices, you want to play around with that feature size, that layer height, and I just kept those relatively large for this example video. > > So, now that we have our slices that we want to work with, we can export them. So, some of our options to export are here in our added manufacturing tab or in our manufacturing tab. For exporting to an EOS, that's the machine we used in this example, we can just place this as our slice stack, place that path where you want to save these, save it as ASCII or binary, and you can also choose to indicate if this is a support or not. So, these are not; I won't have that checked, but you could also check that. > > We also have other options as well. So, you can play around with based on your inputs for your printer. Maybe you need to export as CLI. You can place that in there. A lot of different options here. And if you don't see the printer that you are working with or the export information, feel free to add that as a comment to the end of this course when doing the feedback form. > > Along with exporting the slices, we can also merge these. So, know that this is five, these are five slice stacks that we've created. So, if I wanted to merge these all into one, I could go into my slicing section and choose our **Merge Slice Stacks**. This takes in a list, but we already have that list, so I will delete that and put in our part slices. So, now we'll have them all merged as one. > > You can also use our **Boolean Union** as well to combine multiple stacks into a single stack. So, same thing, we'll delete that slice stack list and just place in those part slices. You can also choose to trim, a lot of different options, simplify different ways that you can play around with your different ways that you can edit your slice stack. > > I'll also show an example of a custom block that we can use for slicing as well. So, I'll close this section, add a new section, and I'll label this just custom block slicing. You can download this custom block in **CLI Slice Body by Tiers**, but I can go into our view imported blocks, import this block, and I'm going to use our **CLI Slice Body by Tier**. So, I'll open that up. You can see it's right into my notebook. If you haven't gone through our entered automation course, or are not familiar with custom blocks, I recommend that you go back and do so, and I have that link below this video as well. > > But we have this in our notebook now. So, for the body, I'll close our placing parts and open up our part orientation. Let's turn on that minimum support orientation. We'll just use that one. So, I'll place this in as our body. Our slice height, I'll use as 1 mm, and slices per tier, I'll choose 7. For our minimum feature size, I'll use 1 mm, and tier number for export, I'm going to use a **Sequence** block. You can learn more about sequences in our in automation course. I'm going to just add this in here, and I want to start at one, have an increment of one, and a total count of 13. And this is a scaler list, but we need to have an integer. So, in order to do that, I can go into this block details under properties, and I can just have that rounded option. So, now when I place this in here, it would be fine if I tried to put in this scaler list, it wouldn't let me. > > And we can also export that. So, this custom block will break that **Slice Body** into multiple tiers that you can export, as that's why we're going through that tier number for export. We can see again that that slices per tier, that's going to be an integer as well as that tier number for exports. That's why we had to do that, and that's why we also had to start with an index of one. It'll just yield an error if we had that, and this would be one up to the number of tiers that we had. So, let me save this. I'll just label this as CLI tiers. It'll run through that, create those tiers for me, and then if I turn on this visibility, we can see it's created those 13 tiers that I have asked for export from my sequence, and we have this sliced like so. So, that's just an example of one of the custom blocks we have, and we have a couple others as well that you can play around with, create your own slice file, but this explains how we can slice our part with nTop as well as export to our printers. This lesson uses the **Sequence** block discussed in our [Intro to Automation](/courses/230-intro-to-automation/) course. If you are unfamiliar, I recommend returning to these lessons. We will export the parts created in the “*Follow Along: Print Preparation*” lesson as slice data in this lesson. Please use that same file or download the nTop file below to follow along with the tutorial. If you prefer to walk through this lesson in PDF format, you can download our PDF guide below. For a faster or slower speed for the video, click on the settings in the bottom right of the video. **Example File:** [250\_7\_1 & 14\_1 Complete — Print Preparation.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_7_1%20%26%2014_1%20Complete%20--%20Print%20Preparation.ntop) *This file was last updated in nTop 5.14.2* **Example File:** [250\_10\_1 & 14\_2 CB CLI Slice Body By Tiers.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_10_1%20%26%2014_2%20CB%20CLI%20Slice%20Body%20By%20Tiers.ntop) *This file was last updated in nTop 3.37.3* [250\_14\_1 Follow Along – Slice and Export.pdf](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/PDFs/250_14_1%20Follow%20Along%20-%20Slice%20and%20Export.pdf) # Knowledge Check: Preparing for Printing Source: https://docs.ntop.com/lessons/slicing-and-print-layout/knowledge-check-preparing-for-printing # Knowledge Check: Slice and Export Source: https://docs.ntop.com/lessons/slicing-and-print-layout/knowledge-check-slice-and-export # nTop Plugin for EOSPRINT Source: https://docs.ntop.com/lessons/slicing-and-print-layout/ntop-plugin-for-eosprint We are excited to announce that the nTop Plugin for EOSPRINT is now available for all nTop customers using EOSPRINT 2.14 or later. With our cutting-edge Implicit Interop technology, the nTop Plugin enables you to seamlessly import nTop Implicit Files directly into EOSPRINT for efficient slicing and manufacturing. Generating an nTop Implicit File is simple, just utilize the Export Implicit Body block in nTop. The nTop Plugin for EOSPRINT is a paid addon for nTop customers. To gain access to the plugin, kindly reach out to your nTop representative to start the acquisition process. Once the addon has been purchased, you will find it conveniently available in the Add-ons tab of your customer dashboard. The installation instructions can be found in this [support article](https://support.ntop.com/hc/en-us/articles/17319219880467-nTop-Plugin-for-EOSPRINT-Overview). ![](https://files.learn.ntop.com/lessons/ntop-plugin-for-eosprint/250_13_1-EOSPrint.jpg) ## Export Implicit Body As mentioned above, you can utilize our new Export Implicit Body block to export directly as an nTop Implicit File (\*.implicit). ![](https://files.learn.ntop.com/lessons/ntop-plugin-for-eosprint/250_13_2-Export-Implicit-Body-Beta.jpg) # Optional: Print Prep and Slicing Problem Statement Source: https://docs.ntop.com/lessons/slicing-and-print-layout/optional-print-prep-and-slicing-problem-statement Now that you know how to run slice a part in nTop, feel free to try this optional problem with a review of the answer in the following lesson. ## Problem Statement Given the starting geometry in the file linked below, please arrange the implicit bodies labeled “Lattice Bracket,” “Gear,” and “Bracket” using the **Bounding Box 2D Nesting** block explained earlier in this Course. * There should be a 10mm *Part to Part Offset*, 1mm *Perimeter Offset*, and no *Platform Offset*. * Use the **Orient Object** block to place the Torus implicit body in an open space on the build plane. * Once you arrange the parts, please slice the parts with a 1mm layer height and 0.5mm feature size and export the slices to a Renishaw 3D Printer in ASCII Format. * Please use the printer build volume in the “Printer Information” section of the starter file. ![](https://files.learn.ntop.com/lessons/optional-print-prep-and-slicing-problem-statement/250_17_1-Optional-Test-Problem.jpg) **Estimated Time to Complete:** 20 minutes > [!TIP] > > **Tip:** > If you are working with multiple lists, you may want to check out our lesson on List Manipulation in [230: Intro to Automation](/courses/230-intro-to-automation/) course. > If the slice does not look clean, try changing the frame. **Example File:** [250\_17\_1 Starter — Print Prep & Slicing Problem.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_17_1%20Starter%20--%20Print%20Prep%20%26%20Slicing%20Problem.ntop) *This file was last updated in nTop 5.15.2* # Orienting a Part Source: https://docs.ntop.com/lessons/slicing-and-print-layout/orienting-a-part There are many methods for placing your part on the build volume. One approach is simply using the **Translate Object** and **Rotate Object** blocks, described briefly in [101: nTop Essentials](/courses/101-ntop-essentials/). Below are other options that you can find in the *Build Preparation* section, which help orient your part and place it in the correct location. ![](https://files.learn.ntop.com/lessons/orienting-a-part/250_4_1-Build-Preparation-Tab.png) ## Orient Object You can use the **Orient Object** block to place and rotate your block at any location in your build volume. The block requires the object (implicit body, mesh, CAD, etc.), the source location, and the destination. The CB Move Object block in the [230: Intro to Automation](/courses/230-intro-to-automation/) course uses this block to function. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-22.png) If you are printing multiples of the same part and would like them all placed on the build plate, you can put in a point list to place all those parts simultaneously. To learn more about working with lists, please check out the *Lists* section of our [230:Intro to Automation](/courses/230-intro-to-automation/). ## Orient Body on Build Plane The **Orient Body on Build Plane** is a toolkit block that takes a body and places its lowest point on the given build plane. With this block, you also can rotate the body. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-23.png) ## Minimum Height Orientation The **Minimum Height Orientation** block creates an optimal orientation to minimize print duration. The output of the **Minimum Height Orientation** block is a transformation that minimizes the Z-Height of your object in preparation for manufacturing. You would then use the **Transform Object** block to generate the oriented body. Add the Body you want to *Object* input and the **Minimum Height Orientation** block into the *Transform* input. ![](https://files.learn.ntop.com/lessons/orienting-a-part/250_4_4-Minimum-Height-Orientation.png) > [!NOTE] > > **Note**: The **Minimum Height Orientation** block only works with Implicit Bodies. If you want to orient a CAD Body, Mesh, etc., convert it to an Implicit Body first. ## Minimum Support Orientation You can use the **Minimum Support Orientations** block to orient a part to have the minimum amount of support. This block has two overloads: Implicit body and Mesh. You can click on the chevron symbol next to the block's name to choose a different overload. Given the *Body* and *Build Plane* inputs, the block will provide several orientations that minimize the volume of support regions needed for the body. You can also select the Support Region to be All Regions, Internal Only, or External Only. Similar to the **Minimum Height Orientation** block, this block produces a Transformation as an output, so use the **Transform Object** block to generate the oriented object. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-24.png) > [!NOTE] > > **Note**: The Implicit Block overload is more robust and will likely provide more optimal results, while the mesh block version will converge on results much faster, but these may be less optimal. ![](https://files.learn.ntop.com/lessons/orienting-a-part/image-25.png) When you place the **Minimum Support Orientations** block in the **Transform Object** block, you will have a list of the options because several candidate orientations (typically 5) minimize the number of supports needed. Use the **List Element** block or drag and drop a property chip from the list. Learn more from our [230: Intro to Automation](/courses/230-intro-to-automation/)course on working with lists. ![](https://files.learn.ntop.com/lessons/orienting-a-part/250_4_7-Minimum-Support-Orientations-3-List-Transform.gif) You can also sort the different support volumes produced with each of the orientations made to determine which option to choose, and you can see an example of this in the [Support Article](https://support.ntop.com/hc/en-us/articles/1500005547201-How-to-use-Minimum-Support-Orientations). # Overview Source: https://docs.ntop.com/lessons/slicing-and-print-layout/overview This course will take you through the different slicing options available and the formats as well as the different techniques for creating your print layout for certain 3D printing machines. After the completion of the course, you will have developed the knowledge on how to export your part for additive manufacturing. ![Slicing and Print Layout](https://storage.googleapis.com/files-learn/lessons/slicing-and-print-layout/slicing-and-print-layout.png) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview) **What will be covered:** * Orienting a part * Using build volumes to orient bodies on a build plane * Slicing options within nTop * Exporting Slicing Data > **[Before We Begin](/lessons/slicing-and-print-layout/before-we-begin-slicing-and-print-layout)** > **[Slice Properties and Terminology](/lessons/slicing-and-print-layout/slice-properties-and-terminology)** ### Preparing For Printing > **[Preparing for Printing: Build Volume and Build Plate](/lessons/slicing-and-print-layout/preparing-for-printing-build-volume-and-build-plate)** > **[Orienting a Part](/lessons/slicing-and-print-layout/orienting-a-part)** > **[Placing Multiple Parts: Bounding Box 2D Nesting](/lessons/slicing-and-print-layout/placing-multiple-parts-bounding-box-2d-nesting)** > **[Follow Along: Print Preparation](/lessons/slicing-and-print-layout/follow-along-print-preparation)** > **[Download: Print Preparation](/lessons/slicing-and-print-layout/download-print-preparation)** > **[Knowledge Check: Preparing for Printing](/lessons/slicing-and-print-layout/knowledge-check-preparing-for-printing)** ### Slice and Export > **[Slicing a Body](/lessons/slicing-and-print-layout/slicing-a-body)** > **[Slicing Capabilities and Custom Blocks](/lessons/slicing-and-print-layout/slicing-capabilities-and-custom-blocks)** > **[Exporting Slice Information](/lessons/slicing-and-print-layout/exporting-slice-information)** > **[Slicing Tips](/lessons/slicing-and-print-layout/slicing-tips)** > **[nTop Plugin for EOSPRINT](/lessons/slicing-and-print-layout/ntop-plugin-for-eosprint)** > **[Follow Along: Slice and Export](/lessons/slicing-and-print-layout/follow-along-slice-and-export)** > **[Download: Slice and Export](/lessons/slicing-and-print-layout/download-slice-and-export)** > **[Knowledge Check: Slice and Export](/lessons/slicing-and-print-layout/knowledge-check-slice-and-export)** ### Optional Test Problem > **[Optional: Print Prep and Slicing Problem Statement](/lessons/slicing-and-print-layout/optional-print-prep-and-slicing-problem-statement)** > **[Answer to Print Prep and Slicing Test Problem](/lessons/slicing-and-print-layout/answer-to-print-prep-and-slicing-test-problem)** ### What's Next > **[Resources](/lessons/slicing-and-print-layout/resources)** # Placing Multiple Parts: Bounding Box 2D Nesting Source: https://docs.ntop.com/lessons/slicing-and-print-layout/placing-multiple-parts-bounding-box-2d-nesting If you have several parts to lay out on the printer, you can use the **Bounding Box 2D Nesting** block. This block performs a 2D bin packing of bounding boxes. You can control the distance between each part's bounding box, the offset from the platform, and the distance from the perimeter of the build plate. The output of this block is a transformation list, so after running the block, use the **Transform Object** block to move the bodies into the proper locations. ![](https://files.learn.ntop.com/lessons/placing-multiple-parts-bounding-box-2d-nesting/250_5_1-Bouding-Box-2D-Nesting.png) The *Bounding Boxes* input automatically includes an empty list. If you already have a list of bodies or bounding boxes, you can delete this and add in the bounding boxes from that list, as shown below. ![](https://files.learn.ntop.com/lessons/placing-multiple-parts-bounding-box-2d-nesting/250_5_2-Placing-Parts.gif) The additional Inputs for the **Bounding Box 2D Nesting** are *Build Volume*, *Part to Part Offset*, *Platform Offset*, and *Perimeter Offset*. ![](https://files.learn.ntop.com/lessons/placing-multiple-parts-bounding-box-2d-nesting/250_5_3-Nesting-Offset-Inputs.png) To use this block, place the **Bounding Box 2D Nesting** block into a **Transform** block, and they will all be placed as shown below. Boxes that fit will be placed in order of size, and the remaining boxes will be placed outside and next to the build volume. At the moment, they have to be manually “trimmed” off using Boolean operations. ![](https://files.learn.ntop.com/lessons/placing-multiple-parts-bounding-box-2d-nesting/250_5_4-Transform-Nesting-1.png) ![](https://files.learn.ntop.com/lessons/placing-multiple-parts-bounding-box-2d-nesting/250_5_5-Transform-Nesting-2.png) # Preparing for Printing: Build Volume and Build Plate Source: https://docs.ntop.com/lessons/slicing-and-print-layout/preparing-for-printing-build-volume-and-build-plate Before slicing and exporting a build, you can rotate and place your parts in the optimal location for printing. Our blocks involving print preparation are under the *Additive Manufacturing* Tab. ![](https://files.learn.ntop.com/lessons/preparing-for-printing-build-volume-and-build-plate/250_3_1-Additive-Manufacturing-Ribbon.jpg) ## Build Volume To help define where your parts will be located on the printer, you can use our selection of build volumes or create your own. Each of these build volumes is bounding boxes with the dimensions for those printers predefined. To define your build volume, you can input the dimensions in a **Bounding Box** block. If you use this often, you can create a custom block of this bounding box and save it in your My Blocks folder. Check out our [230: Intro to Automation](/courses/230-intro-to-automation/) course for more information on that process. ![](https://files.learn.ntop.com/lessons/preparing-for-printing-build-volume-and-build-plate/250_3_2-Build-Volume.png) ## Build Plane To define the build plane, you can use the **Corner Plane from Box Floor** or the **Center Plane from Box Floor** blocks using the bounding box or build volume described previously. You can then use this for ensuring your parts are located on the build plane, as many of our additive manufacturing blocks use a given build plane when orientating and placing your piece. ![](https://files.learn.ntop.com/lessons/preparing-for-printing-build-volume-and-build-plate/250_3_3-Build-Plane.png) Once you have these inputs, we are ready to place parts on the build plane. # Resources Source: https://docs.ntop.com/lessons/slicing-and-print-layout/resources ### **Additional Resources on Slicing and Print Layout:** 1. Video Example: [DfAM and Export](https://learn.ntop.com/lessons/dfam-and-export/) (\~47min) 2. Support Site Article: [Additive Manufacturing Preparation](https://support.ntopology.com/hc/en-us/sections/1500002208521-Additive-Manufacturing-Preparation) 3. Support Site Article: [Exporting Slice Data to Renishaw Quant AM](https://support.ntopology.com/hc/en-us/articles/1500000090301-How-to-export-slice-data-to-Renishaw-QuantAM) 4. Support Site Article: [How to Determine the Area and Length of Slices](https://support.ntopology.com/hc/en-us/articles/1500010487542-How-to-determine-the-area-and-lengths-of-slices) # Slice Properties and Terminology Source: https://docs.ntop.com/lessons/slicing-and-print-layout/slice-properties-and-terminology ## What are Slice Stacks? When exporting for 3D printing, you can create the slice data to send directly to the printer. In the [102: Guide to Meshing](/courses/102-guide-to-meshing/) course, we discussed how to export your designs as a mesh or CAD body, but this can create a large file and, depending on the complexity, can take a long time to compute. If your 3D printer takes in slice information, we recommend this path, as you can slice an implicit body and skip this longer process of meshing your complex design. You can find our slicing options in the *Manufacturing* tab. A “slice stack” is the collection of sliced contours ordered by layer. ![](https://files.learn.ntop.com/lessons/slice-properties-and-terminology/250_2_1-Manufacturing-Ribbon.jpg) ## Slice Stack Properties Each slice stack has the properties of *slice count* (how many slices are produced), *slices*, and *total length*. You can also find the cross-sectional area and the total length property within the slices options. ![](https://files.learn.ntop.com/lessons/slice-properties-and-terminology/image-21.png) > [!NOTE] > > **Note**: We can only export slice data for certain printers currently. Please check our [Exporting Slice Information](https://learn.ntop.com/lessons/exporting-slice-information/) lesson to see if we currently support the slice stack information for your printer. # Slicing a Body Source: https://docs.ntop.com/lessons/slicing-and-print-layout/slicing-a-body Once you are ready to print, it is time to use the **Slice Body**, **Slice Mesh**, or **Slice Lattice Graph** block. All of these work very similarly; the only difference in inputs is that the **Slice Body** requires a *Feature Size* and *Boundary*. ![](https://files.learn.ntop.com/lessons/slicing-a-body/image-27.png) To slice an Implicit Body, Graph, or Mesh. If you would want to slice an implicit body. Drag and drop the Implicit Body in the *Body* input, which will slice with the *Layer Height* and *Feature Size* input parameters. If your body has portions below 0 in the Z direction, select “Include Negative Z.” You can also add a *Frame* if you want to slice at an angle or a different starting location. In the *Frame* input, add a reference point to generate the slice stack using the **Frame** block. ![](https://files.learn.ntop.com/lessons/slicing-a-body/image-30-1024x378.png) ## Black and White Image Slicing If you need a Black-and-White Image Stack, you can create one with the **Slice Body to B\&W Image Stack** block. First, the implicit bodies on the build volume are oriented, and this list is translated to the *Implicit* input in the block. ![](https://files.learn.ntop.com/lessons/slicing-a-body/image-28.png) **Fill Suffix:** * Toggled On: Names the files: “slice\_001”, where the total number of slices determines the number of 0's before the slice number. * Toggled Off: The files are named “slice\_1”, with no 0's. **Layer Height:** Define the spacing between the layers. You may need to check the printer settings for the appropriate range of heights. **Frame:** This is the coordinate system for the build plate. Depending on the printer settings, it may need to be edited. The *Resolution* is the number of pixels in the X and Y directions. This value may change depending on your printer and desired resolution. The max image resolution support is 1 billion pixels. ![](https://files.learn.ntop.com/lessons/slicing-a-body/image-29-1024x485.png) After filling in all the inputs, the block saves the resulting **\*.png** file format image stack in the zip folder defined earlier. ![](https://files.learn.ntop.com/lessons/slicing-a-body/250_9_5-BW-Image-Slicing-3.gif) # Slicing Capabilities and Custom Blocks Source: https://docs.ntop.com/lessons/slicing-and-print-layout/slicing-capabilities-and-custom-blocks Along with our **Slice Body** blocks, other slicing capabilities are shown in the *Slicing* tab below. Similar to our Implicit body, you have the capabilities to Boolean Union/Subtract/Intersect our slices, as well as merge them. To learn more about these individual blocks, you can look at the software's documentation. This article, “[How to generate and export slice data for SLS/SLM/DMLS](https://support.ntop.com/hc/en-us/articles/9599938786195-How-to-generate-and-export-slice-data-for-SLS-SLM-DMLS),” has an example of using these blocks. ![](https://files.learn.ntop.com/lessons/slicing-capabilities-and-custom-blocks/image-31.png) ## Custom Block: CLI Slice Body by Tiers If you plan to slice the body using tiers, you can use the **CLI Slice Body by Tiers** custom block, available for download below, with similar inputs to the **Slice Body** block. ![](https://files.learn.ntop.com/lessons/slicing-capabilities-and-custom-blocks/250_10_2-CB-CLI-Slice-Body-by-Tiers-1.jpg) * **Body:** Implicit Body to slice * **Slice Height:** Spacing between slice layers * **Slices Per Tier:** Total height/Number of Tiers * **Slice feature size:** Minimum feature size to accurately capture details * **Tier Number for Export:** List of numbers for iterating all the tiers one after another You can use the **Sequence** block to create a list with an increment of 1, as shown below (for more information on the **Sequence** block, you can check out our *List Processing and Sequencing* lesson in our [230: Intro to Automation](/courses/230-intro-to-automation/) course. ![](https://files.learn.ntop.com/lessons/slicing-capabilities-and-custom-blocks/250_10_3-CB-CLI-Slice-Body-by-Tiers-2.gif) > [!NOTE] > > **Note**: The 'Include negative Z' is checked by default, and the default 'Frame' selected for this block is X-axis 1,0,0 and Y-axis 0,1,0, with the bounding box centroid as the origin. ![](https://files.learn.ntop.com/lessons/slicing-capabilities-and-custom-blocks/250_10_4-CB-CLI-Slice-Body-by-Tiers-3.jpg) **Example File:** [250\_10\_1 & 14\_2 CB CLI Slice Body By Tiers.ntop](https://files.learn.ntop.com/Courses/250%20Slicing%20and%20Print%20Layout/nTop%20Files/250_10_1%20%26%2014_2%20CB%20CLI%20Slice%20Body%20By%20Tiers.ntop) *This file was last updated in nTop 3.37.3* # Slicing Tips Source: https://docs.ntop.com/lessons/slicing-and-print-layout/slicing-tips * Currently, you will have better results for simple sliced objects when they are first meshed and then followed by the **Slice Mesh** block. * If you are experiencing noise on the surface of a sliced part, try changing the frame. Some slice planes coincide precisely with the horizontal surfaces of the piece, so if that is the case, we recommend increasing the frame of the slice stack in the z-direction (e.g. by half a slice distance) using the **Frame** block. * If your part has many repetitive structures, you can slice the unit cell and translate and merge the slice stack. ![](https://files.learn.ntop.com/lessons/slicing-tips/250_12_1-Merge-Slice-Stack.jpg) # Advanced Field Driven Design Source: https://docs.ntop.com/lessons/training-guide-advanced-field-driven-design/advanced-field-driven-design [https://www.youtube.com/embed/2SqEDbWMkHA](https://www.youtube.com/embed/2SqEDbWMkHA) #### Description This training takes you through two body fields and two applications of this advanced field driven design concept. After completing this training, you will have developed an understanding of what occurs when you add, subtract, and divide two bodies. **Prerequisites:**[101: nTop Essentials](/courses/101-ntop-essentials/),[210: Intro to Lattices](/courses/210-intro-to-lattices/), [220: Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/), [321: Intermediate Field Driven Design](/courses/321-intermediate-field-driven-design/) **What is covered:** * The process for creating the two-body field. * How to apply the two-body field to ramp a lattice structure. * How to create conformal ribbing defined by two bodies. **Downloadable Files:** [Advanced\_FDD\_–\_Two\_Body\_Field.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Advanced%20Field%20Driven%20Design/Advanced_FDD_--_Two_Body_Field.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-advanced-field-driven-design/overview November 9th, 2021 at 14:00 EST – Explore the two body field and applications of this field driven design. ![Layered vase form with swirling contour pattern from advanced field-driven design](https://storage.googleapis.com/files-learn/lessons/training-guide-advanced-field-driven-design/advanced-field-driven-overview.png) ### About this course This training takes you through two body fields and two applications of this advanced field driven design concept. After completing this training, you will have developed an understanding of what occurs when you add, subtract, and divide two bodies. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [321: Intermediate Field Driven Design](/lessons/intermediate-field-driven-design/before-we-begin-intermediate-field-driven-design) **What is covered:** * The process for creating the two-body field. * How to apply the two-body field to ramp a lattice structure. * How to create conformal ribbing defined by two bodies. > **[Advanced Field Driven Design](/lessons/training-guide-advanced-field-driven-design/advanced-field-driven-design)** > > Two body fields and applications # Advanced Topology Optimization Source: https://docs.ntop.com/lessons/training-guide-advanced-topology-optimization-multiple-loads-multiple-conditions/advanced-topology-optimization [https://www.youtube.com/embed/Gx9Zx-UQyMw](https://www.youtube.com/embed/Gx9Zx-UQyMw) #### Description This training examines a “start from scratch” example of a topology optimization with multiple load cases and multiple constraints. **Prerequisites:**[101: nTop Essentials](/courses/101-ntop-essentials/), [102: Guide to Meshing](/courses/102-guide-to-meshing/), [340: Topology Optimization](https://learn.ntop.com/courses/340-topology-optimization/) **What is covered:** * Review of process and blocks for running topology optimization * Setting up a topology optimization with multiple objectives and constraints * Understand how to apply geometric planar symmetry constraint, passive region constraint, and overhang constraint **Downloadable Files:** [Advanced\_Topology\_Optimization.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Advanced%20Topology%20Optimization%20-%20Multiple%20Loads%2C%20Multiple%20Conditions/Advanced_Topology_Optimization.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-advanced-topology-optimization-multiple-loads-multiple-conditions/overview Build a topology optimization with multiple load cases and constraints. ![Advanced Topology Optimization](https://storage.googleapis.com/files-learn/lessons/training-guide-advanced-topology-optimization/advanced-topopt-training.png) ### About this course This training examines a “start from scratch” example of a topology optimization with multiple load cases and multiple constraints. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview), [340: Topology Optimization](/lessons/intro-to-topology-optimization/overview) **What is covered:** * Review of process and blocks for running topology optimization * Setting up a topology optimization with multiple objectives and constraints * Understand how to apply geometric planar symmetry constraint, passive region constraint, and overhang constraint # Advanced Two Channel Heat Exchanger through Field Manipulation Source: https://docs.ntop.com/lessons/training-guide-advanced-two-channel-heat-exchanger-through-field-manipulation/advanced-two-channel-heat-exchanger-through-field-manipulation [https://www.youtube.com/embed/FwsY6nDMVn8](https://www.youtube.com/embed/FwsY6nDMVn8) #### Description This training walks you through how to create a two-channel heat exchanger with fields. While more This training walks you through how to create a two-channel heat exchanger with fields. While more complex than using the TPMS blocks, fields allow for more control of the heat exchanger design. **Prerequisites:**[101: nTop Essentials,](/courses/101-ntop-essentials/) [220: Intro to Field Driven Design,](/courses/220-intro-to-field-driven-design/) [321: Intermediate Field Driven Design](/courses/321-intermediate-field-driven-design/)**,**[Intro to Two-Channel Heat Exchangers](/courses/intro-to-two-channel-heat-exchangers-in-ntop/) **What is Covered:** * Understanding the difference between blocks and fields * Creating a single channel heat exchanger with fields * How to change the bias and wall thickness of a heat exchanger * How to add baffles or caps to regions of the HEX Core **Helpful Links:** **Article:** [Designing the Optimal Heat Exchanger](https://ntopology.com/blog/2019/12/16/heat-exchanger-design-high-performance/) and [White Paper](https://design-with.ntopology.com/rs/341-JSR-605/images/WP_HeatExchangerDesignSimulation.pdf?mkt_tok=MzQxLUpTUi02MDUAAAF9qqaWA1nGvwDxkRdcgts8iCEdyKoSLwqYxWhzwpMHE_PoALQpd1yC0xkrSpR-j0uGpQiGyA0v9V7p7wYno-rRNMsBisvEcsrytH9X_rx0) **Video Tutorial:** [CFD Driven Heat Exchanger Fin Orientation, Spacing and Sizing](https://ntopology.com/videos/video/ntop-live-cfd-driven-heat-exchanger-fin-orientation-spacing-sizing/) (\~8min) **Video Tutorial:**[How to export your design to Ansys Fluent](https://support.ntop.com/hc/en-us/articles/19341018332435-How-to-export-your-design-to-Ansys-Fluent) (\~19min) **Video Tutorial:**[Advanced Heat Exchanger Design](https://ntopology.com/videos/video/ntop-live-advanced-heat-exchanger-design-using-easy-to-manufacture-lattices/) (\~7min) **Video Tutorial:**[Preparing Fluid Volume Meshes for CFD Simulations](https://ntopology.com/videos/video/ntop-live-preparing-fluid-volume-meshes-for-cfd-simulations/) (\~11min) **Video Tutorial:** [Multiphysics Analysis of nTop Designs in Ansys](https://www.youtube.com/watch?v=yxeWTy9cCjg)(\~16min) **Downloadable Files:** [Advanced\_Two\_Channel\_Heat\_Exchanger\_through\_Field\_Manipulation.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Advanced%20Two%20Channel%20Heat%20Exchanger%20through%20Field%20Manipulation/Advanced_Two_Channel_Heat_Exchanger_through_Field_Manipulation.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-advanced-two-channel-heat-exchanger-through-field-manipulation/overview ![Two-channel heat exchanger with wavy and dumbbell flow paths visible](https://storage.googleapis.com/files-learn/lessons/training-guide-advanced-two-channel-heat-exchanger-through-field-manipulation/two-channel-hex-overview.png) October 26th, 2021 at 14:00 EST – Using fields to create two channel heat exchanger with baffles. ### About this course This training walks you through how to create a two-channel heat exchanger with fields. While more complex than using the TPMS blocks, fields allow for more control of the heat exchanger design. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [321: Intermediate Field Driven Design](/lessons/intermediate-field-driven-design/before-we-begin-intermediate-field-driven-design), [Intro to Two-Channel Heat Exchangers](/lessons/heat-exchanger-design-1-intro-to-two-channel-heat-exchangers/before-we-begin-hex-1) **What is covered:** * Understanding the difference between blocks and fields * Creating a single channel heat exchanger with fields * How to change the bias and wall thickness of a heat exchanger * How to add baffles or caps to regions of the HEX Core ### Helpful links * Article: [Designing the Optimal Heat Exchanger](https://ntopology.com/blog/2019/12/16/heat-exchanger-design-high-performance/) and [White Paper](https://design-with.ntopology.com/rs/341-JSR-605/images/WP_HeatExchangerDesignSimulation.pdf) * Video Tutorial: [CFD Driven Heat Exchanger Fin Orientation, Spacing and Sizing](https://ntopology.com/videos/video/ntop-live-cfd-driven-heat-exchanger-fin-orientation-spacing-sizing/) (\~8 min) * Video Tutorial: [How to export your design to Ansys Fluent](https://support.ntop.com/hc/en-us/articles/19341018332435-How-to-export-your-design-to-Ansys-Fluent) (\~19 min) * Video Tutorial: [Advanced Heat Exchanger Design](https://ntopology.com/videos/video/ntop-live-advanced-heat-exchanger-design-using-easy-to-manufacture-lattices/) (\~7 min) * Video Tutorial: [Preparing Fluid Volume Meshes for CFD Simulations](https://ntopology.com/videos/video/ntop-live-preparing-fluid-volume-meshes-for-cfd-simulations/) (\~11 min) * Video Tutorial: [Multiphysics Analysis of nTop Designs in Ansys](https://www.youtube.com/watch?v=yxeWTy9cCjg) (\~16 min) > **[Advanced Two Channel Heat Exchanger through Field Manipulation](/lessons/training-guide-advanced-two-channel-heat-exchanger-through-field-manipulation/advanced-two-channel-heat-exchanger-through-field-manipulation)** > > Create a two-channel heat exchanger with fields # Overview Source: https://docs.ntop.com/lessons/training-guide-am-support-structures/overview Generate support structures in nTop and learn how to modify premade custom blocks to tailor these structures to your specific needs. ![Three parts with additive manufacturing support structures in green, blue, and tan](https://storage.googleapis.com/files-learn/lessons/training-guide-am-support-structures/am-supports-overview.png) ### About this course Follow along as Senior Solution Engineer, Mandy Rosengren, walks through methods for generating support structures in nTop and how to modify premade custom blocks to tailor these support structures to your specific needs. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/before-we-begin-custom-blocks), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What is covered:** * Generating Bar Supports * Generating Volume Supports * Modifying Custom Blocks * Working with custom blocks to create custom support structures across a family of parts > **[Training Guide: AM Support Structures](/lessons/training-guide-am-support-structures/training-guide-am-support-structures)** > > Generate support structures and modify custom blocks for your needs # Training Guide: AM Support Structures Source: https://docs.ntop.com/lessons/training-guide-am-support-structures/training-guide-am-support-structures [https://www.youtube.com/embed/S4nH3hT\_238](https://www.youtube.com/embed/S4nH3hT_238) Follow along as Senior Solution Engineer, Mandy Rosengren, walks through methods for generating support structures in nTop and how to modify premade custom blocks to tailor these support structures to your specific needs. Prerequisites: [101: nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/), [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/), [210: Intro to Lattices](https://learn.ntop.com/courses/210-intro-to-lattices/), [220: Intro to Field Driven Design](https://learn.ntop.com/courses/220-intro-to-field-driven-design/) What is Covered: * Generating Bar Supports * Generating Volume Supports * Modifying Custom Blocks * Working with custom blocks to create custom support structures across a family of parts **Downloadable Files:** [AM Supports.zip](https://storage.googleapis.com/files-learn/Courses/Recorded%20Trainings/AM%20Supports/AM%20Supports.zip) *This file was last updated in nTop 5.5.2* # Cylindrical & Spherical Remaps Source: https://docs.ntop.com/lessons/training-guide-cylindrical-and-spherical-remap/cylindrical-spherical-remaps [https://www.youtube.com/embed/4a6XIkDyqk0](https://www.youtube.com/embed/4a6XIkDyqk0) #### Description Follow along as Senior Solution Engineer, Mandy Rosengren, explains the steps in a cylindrical remap and spherical remap and how to adjust parameters for different results. **Prerequisites:**[101: nTop Essentials](/courses/101-ntop-essentials/), [220: Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/) **What is Covered:** * Remapping fields in cylindrical and spherical coordinates * Visualizing outputs against corresponding coordinate systems * Manipulating resulting fields **Downloadable Files:** [Cylindrical\_and\_Spherical\_Remap.ntop](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Cylindrical%20and%20Spherical%20Remap/Cylindrical_and_Spherical_Remap.ntop) # Overview Source: https://docs.ntop.com/lessons/training-guide-cylindrical-and-spherical-remap/overview Understand cylindrically and spherically remapping fields ![Cylindrical and spherical remap examples](https://storage.googleapis.com/files-learn/lessons/training-guide-cylindrical-and-spherical-remap/overview.png) ### About this course Follow along as Senior Solution Engineer, Mandy Rosengren, explains the steps in a cylindrical remap and spherical remap and how to adjust parameters for different results. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What is Covered:** * Remapping fields in cylindrical and spherical coordinates * Visualizing outputs against corresponding coordinate systems * Manipulating resulting fields > **[Cylindrical & Spherical Remaps](/lessons/training-guide-cylindrical-and-spherical-remap/cylindrical-spherical-remaps)** # Dental Splints and Surgical Stents Source: https://docs.ntop.com/lessons/training-guide-dental-splints-and-surgical-stents/dental-splints-and-surgical-stents [https://www.youtube.com/embed/7poh6KY\_i0A](https://www.youtube.com/embed/7poh6KY_i0A) Follow along as Senior Solution Engineer, Mandy Rosengren, demonstrates how to generate Dental Splints and Surgical Stents within nTop and how to create a reusable workflow to apply dental splints on a variety of scans. **Prerequisites:**[101: nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/), [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/), [220: Intro to Field Driven Design](https://learn.ntop.com/courses/220-intro-to-field-driven-design/) **What is Covered:** * Developing dental splints for the upper and lower jaw scans * Creating surgical guide for a jaw that is missing teeth * Seamlessly applying the same workflow to other dental scans with easy placement of surgical guides **Downloadable Files:** [Dental Splints and Surgical Stents.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Dental%20Splints%20and%20Surgical%20Stents/Dental%20Splints%20and%20Surgical%20Stents.zip) *This file was last updated in nTop 5.5.2* # Overview Source: https://docs.ntop.com/lessons/training-guide-dental-splints-and-surgical-stents/overview Build custom blocks to generate dental splints and stents from scan data. ![Dental Splints and Surgical Stents](https://storage.googleapis.com/files-learn/lessons/training-guide-dental-splints-and-surgical-stents/dental-splints-and-surgical-stents.png) ### About this course In this training video, Senior Solutions Engineer, Mandy Rosengren, walks through the setup of dental splint and stent custom blocks. Follow along to understand underlying workflows, and implement these custom blocks using you own imported scans. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/overview) **What is Covered:** * Walk through creation of custom blocks to automate part creation. * See an advanced version of the custom block to optimize the results for field-driven body sectioning and improved comfort. * Understand custom block inputs to apply in your own nTop workflows. # Overview Source: https://docs.ntop.com/lessons/training-guide-design-parameters-doe-automation-ntop-ansys-discovery/overview Run an automated nTop <> Ansys Discovery DoE workflow for lattice characterization ![training-guide-design-parameters-doe-automation-ntop-ansys-discovery](https://storage.googleapis.com/files-learn/lessons/training-guide-design-parameters-doe-automation-ntop-ansys-discovery/training-guide-design-parameters-doe-automation-ntop-ansys-discovery.webp) ## About this course In this training video, Staff Solutions Engineer, Maiki Vlahinos, walks you through the steps of setting up an automated Design of Experiments (DoE) workflow between nTop and Ansys Discovery for lattice characterization. This example case investigates the effects of lattice type, the number of unit cells, and aspect ratio on pressure drop. The content and material provided in this training are intended to showcase one approach to perform a rapid DoE study by automating nTop workflows. You can modify and apply these as needed for your specific design goals and software tools. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/overview) What is Covered: * Importing a DoE table into nTop to assign the design parameters to relevant inputs that control the geometry * Setting up automated design generation, FE meshing and FE boundary conditions assignment for batch export .msh files for CFD analysis in Ansys Discovery * Using a script in Ansys Discovery to batch run CFD simulations and output .png and .csv results files. # Design Parameters & DoE Automation with nTop and Ansys Discovery Source: https://docs.ntop.com/lessons/training-guide-design-parameters-doe-automation-with-ntop-and-ansys-discovery/design-parameters-doe-automation-with-ntop-and-ansys-discovery [https://www.youtube.com/embed/oJ2iczXiIdM](https://www.youtube.com/embed/oJ2iczXiIdM) **Description** In this training video, Staff Solutions Engineer, Maiki Vlahinos, walks you through the steps of setting up an automated Design of Experiments (DoE) workflow between nTop and Ansys Discovery for lattice characterization. This example case investigates the effects of lattice type, the number of unit cells, and aspect ratio on pressure drop. The content and material provided in this training are intended to showcase one approach to perform a rapid DoE study by automating nTop workflows. You can modify and apply these as needed for your specific design goals and software tools. **Prerequisites:**[101: nTop Essentials](/courses/101-ntop-essentials/), [210: Intro to Lattices](/courses/220-intro-to-field-driven-design/), [230: Intro to Automation](/courses/230-intro-to-automation/) **What is Covered:** * Importing a DoE table into nTop to assign the design parameters to relevant inputs that control the geometry * Setting up automated design generation, FE meshing and FE boundary conditions assignment for batch export .msh files for CFD analysis in Ansys Discovery * Using a script in Ansys Discovery to batch run CFD simulations and output .png and .csv results files. **Downloadable Files:** [nTop-Discovery DoE Automation.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/DoE%20Automation%20nTop-Ansys%20Discovery/nTop-Discovery%20DoE%20Automation.zip) *This file was last updated in nTop 4.26* # DfAM and Export Source: https://docs.ntop.com/lessons/training-guide-dfam-and-export/dfam-and-export [https://www.youtube.com/embed/qS-UcwBC1sw](https://www.youtube.com/embed/qS-UcwBC1sw) #### Description This training guide walks you through additive manufacturing design, build orientation optimization, and support structure generation in nTop. You will learn about meshing and slicing fundamentals, tools within nTop, best practices when using conversion blocks, slicing an implicit body for printing, voxel grids and best ways to clean mesh before exporting (which include split mesh, remesh, and simplify mesh). **Prerequisites:**[101: nTop Essentials](/courses/101-ntop-essentials/) **What is Covered:** * Initial Concept and Design – self-supporting structures, escape holes, overhang constraints for topology optimization * Supports and Orientation – finding best orientation, creating minimal supports * Slicing – arranging parts on the built plate, slicing implicit bodies, exporting slices * Meshing – options for creating and cleaning meshes **Downloadable Files:** [DfAM\_and\_Export.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/DfAM%20and%20Export/DfAM_and_Export.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-dfam-and-export/overview October 13th, 2021 at 9:30 EST – Learn best practices for designing for AM, creating supports and slicing a part. ### About this course This training guide walks you through additive manufacturing design, build orientation optimization, and support structure generation in nTop. You will learn about meshing and slicing fundamentals, tools within nTop, best practices when using conversion blocks, slicing an implicit body for printing, voxel grids and best ways to clean mesh before exporting (which include split mesh, remesh, and simplify mesh). ![Block and sphere with AM support structures for DFAM](https://storage.googleapis.com/files-learn/lessons/training-guide-dfam-and-export/dfam-export-overview.png) **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview) **What is covered:** * Initial Concept and Design – self-supporting structures, escape holes, overhang constraints for topology optimization * Supports and Orientation – finding best orientation, creating minimal supports * Slicing – arranging parts on the built plate, slicing implicit bodies, exporting slices * Meshing – options for creating and cleaning meshes > **[DfAM and Export](/lessons/training-guide-dfam-and-export/dfam-and-export)** > > Design for AM, build orientation, and support packing # Extending nTop with Run Command and Python Source: https://docs.ntop.com/lessons/training-guide-extending-ntop-with-run-command-and-python/extending-ntop-with-run-command-and-python [https://www.youtube.com/embed/-YEs0RYcxW4](https://www.youtube.com/embed/-YEs0RYcxW4) **Description** In this training video, our Staff Solutions Engineer Imran Jameel explains what the Run Command block does, how it differs from nTop Automate, and when you might want to use it. The example workflow showcases an efficient approach of embedding the command function inside custom blocks to connect with Python and pass data in and out of nTop to visualize data. This approach can be applied to any Run Command use case. Follow along to understand how such a workflow can be set up to help you achieve specialized functionalities in nTop. **Prerequisites:** [101: nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/), [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/) **What is Covered:** * Introduction to the Run Command block in nTop and how it works * Setting up and executing Python scripts using the Run Command block * Exploring Python libraries accessible within nTop, and a data visualization example The files provided below include the main custom blocks used in the example workflow. There are more custom blocks in the workflow inside of these. You can save them for your own use by right-clicking on the block and choose 'Export Custom Block'. **Downloadable Files:** [Run Command and Python.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Run%20Command%20and%20Python/Run%20Command%20and%20Python.zip) *This file was last updated in nTop* 5.11.2 # Overview Source: https://docs.ntop.com/lessons/training-guide-extending-ntop-with-run-command-and-python/overview Extend nTop with Run Command and Python scripting. ![Extending nTop with Run Command and Python](https://storage.googleapis.com/files-learn/lessons/training-guide-extending-ntop-run-command-and-python/extending-ntop-with-run-command-and-python.webp) ### About this course In this training video, our Staff Solutions Engineer Imran Jameel explains what the Run Command block does, how it differs from nTop Automate, and when you might want to use it. The example workflow showcases an efficient approach of embedding the command function inside custom blocks to connect with Python and pass data in and out of nTop to visualize data. This approach can be applied to any Run Command use case. Follow along to understand how such a workflow can be set up to help you achieve specialized functionalities in nTop. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/overview) **What is Covered:** * Introduction to the Run Command block in nTop and how it works * Setting up and executing Python scripts using the Run Command block * Exploring Python libraries accessible within nTop, and a data visualization example # Heat Exchanger Design – Cold Plates Source: https://docs.ntop.com/lessons/training-guide-heat-exchanger-design-cold-plates/heat-exchanger-design-cold-plates [https://www.youtube.com/embed/KlL0jKWuILU](https://www.youtube.com/embed/KlL0jKWuILU) #### Description This training takes you through the process of creating a cold plate in nTop. After completing this training, you will have developed an understanding of methods for creating cold plates and how to implement them in a workflow. **Prerequisites:** [101: nTop Essentials](/courses/101-ntop-essentials/), [210: Intro to Lattices](/courses/210-intro-to-lattices/) **What is covered:** * Cell Map on CAD Face * Merging Meshes * Orient Object * Filtering Points * Cross Product * Evaluating Field Gradient **Downloadable Files:** [Cold\_Plate\_Training.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Heat%20Exchanger%20Design%20-%20Cold%20Plates/Cold_Plate_Training.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-heat-exchanger-design-cold-plates/overview ![Cold plate with central flow channel and surface features](https://storage.googleapis.com/files-learn/lessons/training-guide-heat-exchanger-design-cold-plates/cold-plates-overview.png) December 7th, 2021 at 14:00 EST – Designing a cold plate with custom implicit lattices and fin orientation. ### About this course This training takes you through the process of creating a cold plate in nTop. After completing this training, you will have developed an understanding of methods for creating cold plates and how to implement them in a workflow. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview) **What is covered:** * Cell Map on CAD Face * Merging Meshes * Orient Object * Filtering Points * Cross Product * Evaluating Field Gradient > **[Heat Exchanger Design – Cold Plates](/lessons/training-guide-heat-exchanger-design-cold-plates/heat-exchanger-design-cold-plates)** > > Methods for creating cold plates and implementing them in a workflow # Heat Sinks Source: https://docs.ntop.com/lessons/training-guide-heat-sinks/heat-sinks [https://www.youtube.com/embed/gTu1UMCcd7U](https://www.youtube.com/embed/gTu1UMCcd7U) #### Description This training guide takes you through the process of creating two types of heat sinks in nTop. After completing this training, you will have developed an understanding of methods for creating heat sinks with the gyroid field and remapping techniques. **Prerequisites:** [101: nTop Essentials](/courses/101-ntop-essentials/), [220: Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/), [321: Intermediate Field Driven Design](/courses/321-intermediate-field-driven-design/) **What is covered:** * Performance Driven Heat Sinks * Branched lattice * Ramp * Gyroid Field * Remap Field, Remap Cylindrical * Mod, Sin, Add, Subtract, Divide, Multiply **Downloadable Files:** [Heat\_Sinks\_Training.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Heat%20Sinks/Heat_Sinks_Training.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-heat-sinks/overview Learn how to create performance driven heat sinks with TPMS structures and fins. ![Performance-driven heat sink design in nTop](https://storage.googleapis.com/files-learn/lessons/training-guide-heat-sinks/heat-sinks-overview.png) ### About this course This training guide takes you through the process of creating two types of heat sinks in nTop. After completing this training, you will have developed an understanding of methods for creating heat sinks with the gyroid field and remapping techniques. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [321: Intermediate Field-Driven Design](/lessons/intermediate-field-driven-design/overview) **What is covered:** * Mod, Sin, Add, Subtract, Divide, Multiply * Remap Field, Remap Cylindrical * Gyroid Field * Ramp * Branched lattice * Performance Driven Heat Sinks > **[Heat Sinks](/lessons/training-guide-heat-sinks/heat-sinks)** # Intermediate Field Driven Design Source: https://docs.ntop.com/lessons/training-guide-intermediate-field-driven-design/intermediate-field-driven-design [https://www.youtube.com/embed/lBhAbZV0Vdk](https://www.youtube.com/embed/lBhAbZV0Vdk) #### Description This training guide explores remapping and creating bodies from fields. After completing this training, you will have developed an understanding of how to use equations and fields to warp a design and applied this concept for creating a woven pattern. **Prerequisites:** [101: nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/), [220: Intro to Field Driven Design](/courses/220-intro-to-field-driven-design/) **What is Covered:** * Mirroring, Translating, Scaling, Array with Remapping * Using Equations and fields to warp a part * Cylindrical and Spherical Remap * Boolean operations and how they work with fields * Capping TPMS structures with ramps * Apply Remapping fields and boolean operations to create a planar, cylindrical and spherical woven pattern **Downloadable Files:** [Intermediate\_Fields\_Training.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Intermediate%20Field%20Driven%20Design/Intermediate_Fields_Training.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-intermediate-field-driven-design/overview October 12th, 2021 at 14:00 EST – Learn how to manipulate fields and create structures from them ![Intermediate Field-Driven Design](https://storage.googleapis.com/files-learn/lessons/training-guide-intermediate-field-driven-design/intermediate-field-driven-design-overview.png) ### About this course This training guide explores remapping and creating bodies from fields. After completing this training, you will have developed an understanding of how to use equations and fields to warp a design and applied this concept for creating a woven pattern. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What is Covered:** * Mirroring, Translating, Scaling, Array with Remapping * Using Equations and fields to warp a part * Cylindrical and Spherical Remap * Boolean operations and how they work with fields * Capping TPMS structures with ramps * Apply Remapping fields and boolean operations to create a planar, cylindrical and spherical woven pattern # Overview Source: https://docs.ntop.com/lessons/training-guide-managing-distortion-via-geometry-compensation/overview Learn how to create compensated geometry to counteract distortion. ![Managing distortion via geometry compensation: overlay of distorted, original, and compensated beam](https://storage.googleapis.com/files-learn/lessons/training-guide-managing-distortion-via-geometry-compensation/overview.png) ### About this course In this training video, Staff Solution Engineer, Jack Landsbach, gives an overview of what distortion is, what causes it, and what can be done to combat it when additively manufacturing parts. Follow along to learn how nTop can help to create compensated geometry to counteract distortion. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/overview) **What is Covered:** * What is distortion and what methods are generally used to combat it? * Geometry compensation via predictive software * Geometry compensation via measurement data > **[Training Guide: Managing Distortion via Geometry Compensation](/lessons/training-guide-managing-distortion-via-geometry-compensation/training-guide-managing-distortion-via-geometry-compensation)** # Training Guide: Managing Distortion via Geometry Compensation Source: https://docs.ntop.com/lessons/training-guide-managing-distortion-via-geometry-compensation/training-guide-managing-distortion-via-geometry-compensation [https://www.youtube.com/embed/f9bFaJB0Vx4](https://www.youtube.com/embed/f9bFaJB0Vx4) In this training video, Staff Solution Engineer, Jack Landsbach, gives an overview of what distortion is, what causes it, and what can be done to combat it when additively manufacturing parts. Follow along to learn how nTop can help to create compensated geometry to counteract distortion. **Downloadable Files:** \[[Geometry Compensation.ntop](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Managing%20Distortion%20via%20Geometry%20Compensation/Geometry%20Compensation.zip)]\([https://storage.googleapis.com/files-learn/Courses/Recorded%20Trainings/Moldability%20Analysis/Moldability%20Analysis%20Workbook.ntop](https://storage.googleapis.com/files-learn/Courses/Recorded%20Trainings/Moldability%20Analysis/Moldability%20Analysis%20Workbook.ntop)) *This file was last updated in nTop 5.13.2* # Overview Source: https://docs.ntop.com/lessons/training-guide-medical-implant-latticing/overview ![Solid vs latticed medical implant for osseointegration](https://storage.googleapis.com/files-learn/lessons/training-guide-medical-implant-latticing/medical-implant-latticing-overview.png) Use lattice structures to design medical implants in nTop. ### About this course Follow along as Senior Solution Engineer, Annika Norden, builds and iterates across different point spacings, lattice thicknesses, and lattice cell sizes to quickly generate a latticed implant. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/before-we-begin-custom-blocks) **What is covered:** * Voronoi lattices for osseointegration * Periodic lattices for lightweighting * Custom blocks for automation > **[Training Guide: Medical Implant Latticing](/lessons/training-guide-medical-implant-latticing/training-guide-medical-implant-latticing)** > > Use lattice structures to design medical implants # Training Guide: Medical Implant Latticing Source: https://docs.ntop.com/lessons/training-guide-medical-implant-latticing/training-guide-medical-implant-latticing [https://www.youtube.com/embed/UjqQN4IRFqc](https://www.youtube.com/embed/UjqQN4IRFqc) Follow along as Senior Solution Engineer, Annika Norden, builds and iterates across different point spacings, lattice thicknesses, and lattice cell sizes to quickly generate a latticed implant. Prerequisites: [101: nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/), [210: Intro to Lattices](https://learn.ntop.com/courses/210-intro-to-lattices/), [220: Intro to Field Driven Design](https://learn.ntop.com/courses/220-intro-to-field-driven-design/), [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/) What is Covered: * Voronoi lattices for osseointegration * Periodic lattices for lightweighting * Custom blocks for automation Please download the files attached to follow along with the video. **Downloadable Files:** [Medical Implant Latticing.zip](https://storage.googleapis.com/files-learn/Courses/Recorded%20Trainings/Medical%20Implant%20Latticing/Medical%20Implant%20Latticing.zip) *This file was last updated in nTop 5.6.2* # Overview Source: https://docs.ntop.com/lessons/training-guide-moldability-analysis/overview Explore nTop’s tools to evaluate your designs for moldability. ![Moldability Analysis](https://storage.googleapis.com/files-learn/lessons/training-guide-moldability-analysis/moldability-analysis.webp) ### About this course In this training video, Senior Solution Engineer, Mandy Rosengren, shares a number of methods for evaluating the moldability of designs in nTop. The generalized notebook is not tailored to any specific molding process, and can be helpful for sand casting, drop forging, injection molding, and other related processes. Follow along to understand how to apply these tools and techniques to your own workflows. **Prerequisites:** 101: [nTop Essentials](/lessons/ntop-essentials/overview) **What is Covered:** * Analyzing draft angles * Evaluating undercuts * Calculating wall thickness # Training Guide: Moldability Analysis Source: https://docs.ntop.com/lessons/training-guide-moldability-analysis/training-guide-moldability-analysis [https://www.youtube.com/embed/Vz4ldff5vb8](https://www.youtube.com/embed/Vz4ldff5vb8) In this training video, Senior Solution Engineer, Mandy Rosengren, shares a number of methods for evaluating the moldability of designs in nTop. The generalized notebook is not tailored to any specific molding process, and can be helpful for sand casting, drop forging, injection molding, and other related processes. Follow along to understand how to apply these tools and techniques to your own workflows. **Downloadable Files:** [Moldability Analysis Workbook.ntop](https://storage.googleapis.com/files-learn/Courses/Recorded%20Trainings/Moldability%20Analysis/Moldability%20Analysis%20Workbook.ntop) *This file was last updated in nTop 5.9.2* # Overview Source: https://docs.ntop.com/lessons/training-guide-perforations/overview Methods for creating perforations and implementing them in a workflow. ![Perforations](https://storage.googleapis.com/files-learn/lessons/training-guide-perforations/perforations.png) ### About this course This training takes you through the process of creating perforations in nTop. After completing this training, you will have developed an understanding of the different methods for perforations and how to implement them in a workflow. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview) **What is covered:** * Cell Map on CAD Face * Cell Map on Quad Mesh * Orient Object * Branched Lattice Body * Using a perforation custom block * Using perforations in 3D printing # Perforations Source: https://docs.ntop.com/lessons/training-guide-perforations/perforations [https://www.youtube.com/embed/7AbvluC04Rs](https://www.youtube.com/embed/7AbvluC04Rs) #### Description This training takes you through the process of creating perforations in nTop. After completing this training, you will have developed an understanding of the different methods for perforations and how to implement them in a workflow. **Prerequisites:** [101: nTop Essentials](/courses/101-ntop-essentials/), [210: Intro to Lattices](/courses/210-intro-to-lattices/) **What is covered:** * Cell Map on CAD Face * Cell Map on Quad Mesh * Orient Object * Branched Lattice Body * Using a perforation custom block * Using perforations in 3D printing Please download the files attached to follow along with the video. **Downloadable Files:** [Perforation\_Training.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Perforations%20Training/Perforation_Training.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-prosthetics/overview ![Engineered prosthetic leg with textured socket and optimized structure](https://storage.googleapis.com/files-learn/lessons/training-guide-prosthetics/prosthetics-overview.png) February 24th, 2022 at 9:00 AM EST – Create a patient-specific prosthetic limb. ### About this course This training guide walks you through creating, lightweighting, and texturing a custom-fit prosthetic limb for patient comfort and mobility. After creating your nTop workflow, design time for similar applications can be reduced from hours to only a few minutes per patient. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/before-we-begin-custom-blocks) **What is covered:** * Surface Lattice * Orient Object * Lists > **[Prosthetics](/lessons/training-guide-prosthetics/prosthetics)** > > Create, lightweight, and texture a custom-fit prosthetic limb # Prosthetics Source: https://docs.ntop.com/lessons/training-guide-prosthetics/prosthetics [https://www.youtube.com/embed/3Q\_sEbFZYgc](https://www.youtube.com/embed/3Q_sEbFZYgc) #### Description This training guide walks you through creating, lightweighting, and texturing a custom-fit prosthetic limb for patient comfort and mobility. After creating your nTop workflow, design time for similar applications can be reduced from hours to only a few minutes per patient. **Prerequisites:** [101: nTop Essentials](/courses/101-ntop-essentials/)**,**[210: Intro to Lattices](/courses/210-intro-to-lattices/)**,**[230: Intro to Automation](/courses/230-intro-to-automation/) **What is covered:** * Surface Lattice * Orient Object * Lists **Downloadable Files:** [Prosthetics\_Download.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Prosthetics/Prosthetics_Download.zip) # Q&A: Ask the Basics Source: https://docs.ntop.com/lessons/training-guide-q-a-ask-the-basics/q-a-ask-the-basics [https://www.youtube.com/embed/rKNWEiXaHeQ](https://www.youtube.com/embed/rKNWEiXaHeQ) ## Description In this Q\&A session, our Senior Onboarding Engineer Mandy Rosengren answers some of the most frequently asked questions on geometry conversion, basic operations, and troubleshooting in nTop. The list of questions covered and the custom block mentioned are available below. **Downloadable Files:** [CB\_Move\_Object.ntop](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Q%26A_%20Ask%20the%20Basics/CB_Move_Object.ntop) *This file was last updated in nTop 4.23.2* # Overview Source: https://docs.ntop.com/lessons/training-guide-qa-ask-the-basics/overview Answers to frequently asked questions on geometry, operations, and troubleshooting. ![Ask the Basics](https://storage.googleapis.com/files-learn/lessons/training-guide-q-and-a-ask-the-basics/AsktheBasics.png) ### About this course In this Q\&A session, our Senior Onboarding Engineer Mandy Rosengren answers some of the most frequently asked questions on geometry conversion, basic operations, and troubleshooting in nTop. The questions covered are listed below: #### Geometry Conversions (CAD, Implicit Bodies, Mesh) Why can't I see my CAD part after importing? Why won't my CAD part be accepted in the Implicit Body from CAD Body block? Why and when would I use a Mesh vs. CAD Body vs. Implicit Body? #### Modeling/Basic Operations How do I define points at different corners of a box? How do I trim or smoothen out edges or corners of an implicit body? What about for lattices? I'm having trouble orienting objects in nTop. Is there a way to split an implicit body when it contains many disconnected solids? #### Troubleshooting Why won't my variable be accepted in an input? What do I do if I get an error when importing a custom block? My part looks strange, what can I do to find out the problem? #### Additional Questions Sometimes when importing a CAD body, I see a warning that there is a fault (or several). How can I get more info about exactly where the fault(s) is/are occurring? Is there a way to look “under the hood” of a block to see how it was built? How do I calculate the surface area of a part? # Overview Source: https://docs.ntop.com/lessons/training-guide-quick-guide-to-surface-meshing/overview Mesh geometry for downstream operations ![quick guide to surface meshing](https://storage.googleapis.com/files-learn/lessons/training-guide-quick-guide-to-surface-meshing/quick-guide-to-surface-meshing.png) ## About this course This training explores surface meshing in nTop. The objectives of these techniques are to successfully surface mesh for virtually any downstream operations while: * preserving geometric fidelity of our geometry * minimizing mesh element count and resulting file size * reducing overall solve time of meshing operations To dive deeper into the inputs and techniques shown in this guide, see (Surface Meshing Techniques)\[./]. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [102: Guide to Meshing](/lessons/intro-to-meshing/overview) **What is covered:** * How to mesh for simulation or manufacturing * **Mesh from Implicit Body** block and varying levels of sharpening * **Simplify Mesh by Threshold** block * **Remesh Surface** block * Meshing block order and its effect on solve time # Quick Guide to Surface Meshing Source: https://docs.ntop.com/lessons/training-guide-quick-guide-to-surface-meshing/quick-guide-to-surface-meshing [https://www.youtube.com/embed/ZHXmjRZtPEY](https://www.youtube.com/embed/ZHXmjRZtPEY) #### Description This training explores surface meshing in nTop. The objectives of these techniques are to successfully surface mesh for virtually any downstream operations while: * preserving geometric fidelity of our geometry * minimizing mesh element count and resulting file size * reducing overall solve time of meshing operations To dive deeper into the inputs and techniques shown in this guide, see [Surface Meshing Techniques](https://learn.ntop.com/courses/surface-meshing-techniques/). **Prerequisites:** [101: nTop Essentials](/courses/101-ntop-essentials/), [102: Guide to Meshing](/courses/102-guide-to-meshing/) **What is covered:** * How to mesh for simulation or manufacturing * **Mesh from Implicit Body** block and varying levels of sharpening * **Simplify Mesh by Threshold** block * **Remesh Surface** block * Meshing block order and its effect on solve time To view the file in the video, please download below. **Downloadable Files:** [Surface\_Meshing\_Techniques.ntop](https://files.learn.ntop.com/Support%20Article%20Example%20Files/Knowledge%20Base/Meshing/Surface_Meshing_Techniques.ntop) *This file was last updated in nTop 5.45.2* # Overview Source: https://docs.ntop.com/lessons/training-guide-serialization/overview ![Grid of numbered lattice parts for serialization](https://storage.googleapis.com/files-learn/lessons/training-guide-serialization/serialization-overview.png) Generate serial numbers and place them conformally to your parts. ### About this course This training walks through how you can generate and place serial numbers on your part. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/before-we-begin-custom-blocks) **What is covered:** * How to type text into a custom block and produce an implicit version of the text * Methods for placing text as an engraving or embossing on a part for serialization and part labeling * How to automate the serialization process > **[Serialization](/lessons/training-guide-serialization/serialization)** > > Generate and place serial numbers on your part # Serialization Source: https://docs.ntop.com/lessons/training-guide-serialization/serialization [https://www.youtube.com/embed/M6oCa4gLJMw](https://www.youtube.com/embed/M6oCa4gLJMw) #### ## Description This training walks through how you can generate and place serial numbers on your part. **Prerequisites:**[101: nTop Essentials](https://learn.ntop.com/courses/101-ntop-essentials/), [230: Intro to Automation](https://learn.ntop.com/courses/230-intro-to-automation/) **What is Covered:** * How to type text into a custom block and produce an implicit version of the text * Methods for placing text as an engraving or embossing on a part for serialization and part labeling * How to automate the serialization process **Downloadable Files:** [Serialization\_and\_Part\_Labeling.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Serialization/Serialization_and_Part_Labeling.zip) # Overview Source: https://docs.ntop.com/lessons/training-guide-shaping-implicit-bodies-with-simulation-results/overview Use imported simulation data to generate and reshape implicit geometry. ![Implicit body being shaped by imported simulation data](https://storage.googleapis.com/files-learn/lessons/training-guide-shaping-implicit-bodies-with-simulation-results/shaping-implicit-bodies-with-simulation-results.webp) ## About this course Follow along with Staff Solutions Engineer, Maiki Vlahinos, to generate geometry based on imported point maps. Use custom blocks to define upper and lower bounds you wish to truncate to shape your new geometry. Prerequisites: [101: nTop Essentials](/lessons/ntop-essentials/overview), [210: Intro to Lattices](/lessons/intro-to-lattices/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview), [230: Intro to Automation](/lessons/intro-to-custom-blocks/overview) What is Covered: * Generating implicit geometry from imported simulation data * Truncating data to to refine and optimize the design space # Training Guide: Shaping Implicit Bodies with Simulation Results Source: https://docs.ntop.com/lessons/training-guide-shaping-implicit-bodies-with-simulation-results/training-guide-shaping-implicit-bodies-with-simulation-results [https://www.youtube.com/embed/HiBdcmaHnRA](https://www.youtube.com/embed/HiBdcmaHnRA) Follow along with Staff Solutions Engineer, Maiki Vlahinos, to generate geometry based on imported point maps. Use custom blocks to define upper and lower bounds you wish to truncate to shape your new geometry. What is Covered: * Generating implicit geometry from imported simulation data * Truncating data to optimize the design space Please download the files attached to follow along with the video. **Downloadable Files:** [Field from Fluid Domain Custom Blocks.zip](https://storage.googleapis.com/files-learn/Courses/Recorded%20Trainings/Shaping%20Implicit%20Bodies%20with%20Simulation%20Data/Field%20from%20Fluid%20Domain%20Custom%20Blocks.zip) *This file was last updated in nTop* 5.1.2 # Overview Source: https://docs.ntop.com/lessons/training-guide-texturing-and-bitmapping/overview ![Textured sphere with displacement or bitmap-driven surface detail](https://storage.googleapis.com/files-learn/lessons/training-guide-texturing-and-bitmapping/texturing-bitmapping-overview.png) October 5th, 2021 at 14:00 EST – Learn how to add roughness to a part, a design on a surface and use an image to drive a pattern. ### About this course This training takes you through the basics of adding textures to a part using images and fields. After completing this training, you will have developed an understanding of the different options for adding textures as well as some applications for these textures. **Prerequisites:** [101: nTop Essentials](/lessons/ntop-essentials/overview), [220: Intro to Field Driven Design](/lessons/intro-to-field-driven-design/overview) **What is covered:** * Adding a logo to a part using Bitmapping * Creating Textures from an image using Bitmapping * Adding roughness to a part with Simplex Noise 3D * Custom Blocks for creating textures like leather with Cellular Noise 3D * Mimicking AM Metal Surfaces with Simplex Noise 3D > **[Texturing and Bitmapping](/lessons/training-guide-texturing-and-bitmapping/texturing-and-bitmapping)** > > Add textures to a part using images and fields # Texturing and Bitmapping Source: https://docs.ntop.com/lessons/training-guide-texturing-and-bitmapping/texturing-and-bitmapping [https://www.youtube.com/embed/5yULPeZhmzU](https://www.youtube.com/embed/5yULPeZhmzU) #### Description This training takes you through the basics of adding textures to a part using images and fields. After completing this training, you will have developed an understanding of the different options for adding textures as well as some applications for these textures. **Prerequisites:**[101: nTop Essentials](/courses/101-ntop-essentials/), [220: Intro to Field Driven Design](https://learn.ntop.com/courses/220-intro-to-field-driven-design/) **What is Covered:** * Adding a logo to a part using Bitmapping * Creating Textures from an image using Bitmapping * Adding roughness to a part with Simplex Noise 3D * Custom Blocks for creating textures like leather with Cellular Noise 3D * Mimicking AM Metal Surfaces with Simplex Noise 3D **Downloadable Files:** [Texturing\_and\_Bitmapping.zip](https://files.learn.ntop.com/Courses/Recorded%20Trainings/Texturing%20and%20Bitmapping/Texturing_and_Bitmapping.zip)