Tatiana Kondrikova, C3D Modeler Team Leader, C3D Labs, talks about new features of the C3D kernel and plans for its further improvement.
The C3D Modeler 2025 updates cover multiple key areas: wireframe modeling, shells, direct modeling, sheet metal modeling, geometry diagnostics, and system-level improvements. A prominent new feature is the mid-curve (Fig. 1), which is a set of points equidistant to two given curves. This operation applies to two curves in the plane. These curves can be closed or open, and can consist of tangentially joined segments provided that there are no self-intersections. The result is a NURBS curve.
Another important feature is the wrapping/unwrapping of curves and points onto a ruled surface. Previously, this transformation was supported only for analytic surfaces (cones, cylinders, etc.) Now it is available for all developable surfaces (with zero Gaussian curvature at all points). For unmapping from closed surfaces, the user can now specify the position of the section line for better control.
A new export API function suggested to users is removing self-intersections of contours (Fig. 3). This operation used to be available to the kernel’s internal procedures only - for example, for constructing equidistant lines in rotation, extrusion, and sweep operations. Now, once self-intersections are removed, the result is the main contour and additional fragments.
The Boolean operations with regions (Fig. 4) have been improved. Now they handle tangency, self-tangency, and polylines better. Now the user can control the error of Boolean operations as tolerances in the intersections of complex regions are critical in some applications.
Similar refinements are now being applied throughout the entire kernel. For example, we have two regions as shown in Fig. 4 on the left. The two vertical segments are d apart. If the configured precision in this direction exceeds d, the kernel detects the overlapping of the segments, and the result will be different from the case where the error is smaller.
Some improvements are about switching the 3D curve functionality to wireframes. The goal is to support tolerant geometry. The edges in a wireframe model are connected with some error (there is a comparison of distances between edges with rough accuracy). Now, such operations as Equidistant, Extend, Intersect, Merge Edges, and Intersect Shells are available for wireframe models as well. For example, if one of the intersecting shells has a tolerant edge, the intersection curves will have some gap between them near the intersection with the edge. As a result, the resulting wireframe will maintain its connectivity because it now has a tolerant vertex.
Now let’s talk about shell operations. Another new capability is a geometric array of faces many new face filleting options.
Let's start with the midshell (Fig. 5). The midshell is a surface whose points are equidistant from two sets of faces. The midshell operation divides complex geometry into fragments to create shell models for CAE analysis. Previously, the operation handled only shells with pairs of equidistant faces. Now, a general solution is available. The result is a NURBS surface. The shell can be trimmed by the edges of the parent faces.
We are working hard on a geometric array of faces. This operation modifies the shell by copying groups of faces. The resulting shell is stitched together from the original shell and the copied faces. For this, the faces should be extended to or through the shell. Fig. 6.1-6.2 shows the geometry before (left) and after (right) the operation. The blue faces are copied. The operation can add material to the shell or remove it. In the second image, the interior faces of the hole are copied.
The surface extension tool (Fig. 7) has also been enhanced. We focused on simplified surface extension used when maximum surface extension is needed, with no strict requirements for the edge shape. Another innovation is a configurable result. The operation can now either extend the original faces, or create new extended faces and add them to the original shell, or generate a new shell containing only the extended faces.
The core operations have also been fine-tuned. Previously, you could not create open shells from a multi-contour sketch by rotation or extrusion. It is supported now; even more, if the shells contours intersect, self-intersections will be processed if possible (Fig. 8).
The fillet functionality has been significantly improved. We have introduced new filleting procedures like the rolling ball method, edge trimming for stitching into a single shell, and others.
Last year, we implemented the rolling disk method for face filleting. This operation requires defining a directrix. At each point on the directrix, a normal plane containing the cross-section is constructed. For the rolling ball method, a directrix is not required: the path curves are defined as the locus of the points where the ball touches the original surfaces (Fig. 9). If some parameters (e.g., radius or cross-section shape parameter) are variable, a directrix is still needed.
The new functionality constructs fillets when the original faces do not share a common edge and belong to different shells (Fig. 10). We have introduced new types of variable radius fillet surfaces (different radii for each face), as well as variable chord surfaces.
Another new face fillet feature trims the original faces with a tangent or end face (either tangent to the original curves or extending the side edges). Now the original faces can be trimmed, and the resulting shell is stitched with the fillet faces.
The second and third images in Fig. 11 show various types of fillet surface trimming. This functionality now has a new two-step interface. First, the fillet surfaces are created, and then, the user specifies the fragments to trim the original shell. The shell can be stitched with the fillet faces.
We are also working on filleting three groups of faces (Fig. 12). This will expand the two groups' filleting operation. It is similar to the full-edge fillet operation. Concurrently, we are developing filleting by boundary curves (Fig. 13). For this operation, two curves must be defined on the surfaces. The result is a surface with boundary curves identical to the original curves. These curves have the specified type of blending into the surfaces.
There is ongoing work to improve surface quality when filleting edges: the blending of adjacent and neighboring faces has been improved (Fig. 14). The fillet point coordinates are now calculated with higher precision, as are the higher-order derivatives. This has improved the fillet surface quality, the smoothness of its blending with adjacent faces, and eliminated defects that previously occurred due to the inaccurate definition of the fillet-to-original face intersection points.
Now let’s talk about direct modeling. There is a new operation: replace with a group of faces. On Figs. 15.1-15.3 (left), the faces to be replaced are shown in turquoise, and the faces to be replaced. In orange. The operation supports multiple options: extrusion (the shell faces are extended to the replacing faces), trimming (the faces are trimmed by the replacing faces), or creating a step (some faces are extended, and some are trimmed).
Another direct modeling improvement is better removal of faces (in particular, chamfers and fillets) with segmented edges after import (Fig. 16). The fillet recognition feature has been enhanced. The face rotation and face shift along a vector operations now better handle some special cases.
Now, about sheet modeling. An important refinement is unbend a ruled shell with complex side faces (Fig. 17). Suppose we have a ruled shell. We modify its side faces, for example, by adding chamfers shown in blue. Such a shell can now be flattened.
As for diagnostics, the kernel now detects self-intersections in shells and surfaces and provides a function for calculating the potential energy of a curve.
The shell self-intersection detector has two modes: self-intersection of faces only, intersection between different faces, or auto mode to search for all intersections (Fig. 18). The result is a list of indices of the intersecting faces and intersection curves.
The self-intersection detector can use triangulation. Similarly, the surface self-intersection feature supports such modes as along UV lines, segmented intersection, and auto.
The curve diagnostics now have an objective smoothness criterion: potential energy of the curve (Fig. 19). The CurveMinMaxCurvature function with an updated interface returns the potential energy. You can enable potential energy calculation in the operation settings. The function also detects inflection points, local minima and maxima of the curvature, and curvature discontinuity points.
Next, let me tell you about the system-level improvements. They can be divided into three categories.
First is about the performance and multithreading. We have parallelized a number of kernel algorithms, such as thin-wall body construction, detection of shell self-intersections, and construction of a NURBS copy of a surface. We did a lot of work to ensure thread safety: the function that retrieves a set of shell edges is now fully containerized, and vulnerabilities in intersection curves and surface contours have been fixed. Other operations (e.g., variable cross-section surfaces, projections) have been optimized.
The second category is the C3D format support. We have fixed Linux model read/write errors. We have also implemented delayed deletion of read objects to prevent memory leaks. When reading legacy models, there are two modes now: MbColor or MbVision. There is a progress indicator when saving models. The current view settings can now be saved as model attributes.
The third category is code refactoring and some low-level tasks. Now there is an option to disable internal handling of fatal errors. There is better control over memory usage when computing meshes in Win32, and memory shortages are now tracked during triangulation. We have fixed memory leaks and removed obsolete interfaces.
Let's move on to the plans for the future. These include greater control over operation precision, new wireframe functionality such as shell trimming and constructing an equidistant surface from a set of faces, and improvements to curve projection functions. We will improve conjugation along boundaries in surface passing through two families of curves.
As for face filleting, we will expand the three-face fillet functionality and improve the work on the topic of rounding edges along boundary curves. For edge filleting, we plan to improve the variable-radius operation and the handling of self-intersections in regions with extreme curvature changes of the original faces.
In direct modeling, we will make it possible to resize cylindrical and spherical faces while maintaining the correct topology.
These are our plans for the kernel to meet user requirements.

Tatiana Kondrikova,
C3D Modeler Team Leader,
C3D Labs

























