It is traditional for C3D Labs to each year report on the work it has done to improve and expand the capabilities of its C3D Toolkit, which is a set of PLM components for developers of engineering software.

C3D Toolkit consists of the following modules:

- C3D Modeler geometric kernel
- C3D Solver parametric kernel
- C3D Converter data exchange module
- C3D Vision visualization module

## At a Glance: The Last 12 Months

It can take companies anywhere between six months to two years to go from testing an initial application to making the decision to license the C3D software components. During this time, C3D developers answer many questions regarding the functionality of the toolkit, and give advice on how to implement it effectively in projects proposed by potential customers.

The number of support tickets is growing from year to year. (See Figure 1.) The reasons for this are related primarily to the increase in the number of C3D Labs customers, as well as the close integration of C3D technology into their products.

Customers provide us with data on how they use our software, and this becomes the main driver for deciding how to further develop C3D components. In the past, it was ASCON Group that guided us through its development of KOMPAS-3D, KOMPAS-Graphic, and KOMPAS-Builder software; today, however, C3D Labs benefits from cooperating with users at 25 firms and institutions of higher education located in Russia, USA, Europe, and Asia.

To keep up with the latest developments in the industry, C3D Labs annually attends industry exhibitions and conferences for software developers. This helps us move our technology in the right direction. Last year, for instance, C3D Labs took part in the world-famous Hannover Messe 2016 exhibition (Hanover, Germany) and SIMTOS (Seoul, Korea). We also attended the annual Open Design Alliance conference (Prague, Czech Republic), and Intel event (Moscow, Russia). This year for the first time, we held out own conference in the USA as part of the Congress on the Future of Engineering Software (COFES).

C3D Labs deeply engages with its toolkit users and CAD market players. This allows us to create products that truly are of high-quality and prove to be easy-to-use for developers of 3D applications.

## C3D Modeler: The Geometric Kernel

C3D Modeler is our geometric kernel that constructs geometric models and calculates the geometric properties of the objects being modeled. The latest release of C3D Modeler removes holes and fillets from 3D models. (See Figure 2.) This function is crucial to simplifying 3D models in preparation for further calculations using CAE (computer-aided engineering) software or processing by a CAM (computer-aided manufacturing) system.

Users can remove specified holes, or all holes whose radius does not exceed the specified value. In the same way, specified fillets are removed, or those whose radius does not exceed the specified value. (See Figure 3.) These functions effectively remove small holes and fillets whose presence unnecessarily increase analysis time.

The same function is used in direct modeling, such as when it is necessary to make changes to a 3D model's fillets by moving elements to another location. (See Figure 4.)

Another way to use the new function is to modify the radius of fillets. (See Figure 5.) These capabilities are appreciated not just by CAE developers, but also by CAD/CAM developers using the C3D Modeler geometric kernel.

It now easier to handle fillets that cover elements of original 3D models. C3D Modeler can constructs new combinations of fillets, such as for designing molds of varying complexity. (See Figure 6.)

A new function extrudes elements to the nearest body. It determines the position of the body in relation to the sketch, and then constructs the extrusion by determining automatically the direction in which there is no body and then excluding it. (See Figure 7.)

One of the wishlist items from C3D users is to improve extrusions to surfaces. C3D Modeler now handles cases where two surfaces lie on the same side of the sketch. (See Figure 8.) Additionally, it is now possible to define a different angle of slope towards given surfaces for each extruded contour individually. (See Figure 9.)

Earlier versions of the C3D Modeler usually set the extrusion direction in specific direct and reverse directions. This meant that contours were extruded to only those surfaces that lay strictly in the specified direction, and so when the surface was on the other side of the extrusion contour, C3D Modeler reported an error. Users who specified the correct options for this construction got an equidistant surface lying in the other direction, after defining an offset, but then it was impossible to ensure the correct reconstruction of the extrusion. This problem is fixed in C3D Modeler 2017. (See Figure 10.)

By the way, when the equidistant surface is located on both sides of a sketch, there are different options for constructing the extrusions. Our R&D staff decided to consider correct the direction that is consistent with extrusion to the surface without an offset, as shown by the green arrow in Figure 11.

A single operation that constructs an extrusion now can include several closed contours, which can intersect one other. (See Figure 12.) It is important, however, that there be no self-intersecting elements among any contour.

Construction of bodies using sections with several guiding curves was significantly improved in C3D Modeler 2017. (See Figure 13.)

It is now possible to construct thin-walled bodies using sections together with several guiding curves. (See Figure 14.)

The update to the C3D Modeler now solves truly complex tasks, such as calculating bodies by sections. (See Figure 15.) Do you need 3D models of very unusual shapes? It's now easy!

We extended functions for working with sheet metal bodies, in particular operations for bending and unbending shell rings. (See Figure 16.)

It's now possible, when working with sheet bodies, to construct bends after selecting multiple edges, and then process angles between adjacent bends. (See Figure 17.)

To make it more convenient to construct a finite-element shell as computational grids for 3D models, we developed a brand new operation. It constructs a median shell using predetermined pairs of body faces. (See Figure 18.) The sets of faces are based on surfaces that are equidistant to each other.

The median shell is constructed by default at an equal distance from the generating faces (t = 0.5d), but users can make it offset by specifying the 0 < t < d parameter. (See Figure 19.) Several construction operations are available:

- Manually select a pair of equidistant faces
- Sequentially select pairs of equidistant faces
- Automatically search and select all suitable equidistant body faces that are offset relative to each other according to a specified d parameter

What else did we add to our modeler? This new version works with 3D grids, a function not included in traditional geometric kernels, even though there is demand for it among developers of engineering software. As a result, C3D Labs has taken some initial steps in this direction (see Figure 20) and in the near future the list of available operations for working with 3D grids will be expanded.

C3D Labs this year developed an extended file format to store the entire geometric model in a C3D file. This means that developers can extract data about the model's structure, even of individual objects, without needing to bring in the entire model from the file. (See Figure 21.)

The new format additionally supports random reads of individual model objects. When loading a 3D model, developers can define specific objects for to be read and then displayed on the screen. (See Figure 22.) The new format is compatible with the previous C3D format.

In 2016–2017, our programmers concentrated on correcting errors in the C3D Modeler. For example, the operation for joining fillets of a constant chord length is fixed. (See Figure 23.)

The algorithm for constructing curves at intersections of surfaces is improved. This is where the curve passes through the pole of a surface or coincides with one of its reference objects. Figure 24 shows a Boolean subtraction operation using the algorithm.

Figure 24. Boolean operation using the improved algorithm constructing curves from intersected surfaces

A special case is implemented when calculating the intersection curve of two spheres that touch each other at their poles. (See Figure 25.) The improved code accelerates the operation more than a 100 times as compared with the standard approach.

Our geometric kernel includes advanced C# functionality of the C3D wrapper for flat projections, reading and writing exchange formats, and the new data structure.

Searches for collisions between elements in the 3D model can now be stopped by users at the first collision; otherwise, the search can carry on to the finish, registering all collisions found in the assembly.

C3D Modeler 2017 now controls the merging of edges and faces. The speed of Boolean operations and of constructing NURBS curves with large numbers of points is increased.

The types of multi-threaded operations C3D Modeler can perform has been expanded to include the following operations:

- Construction of flat projections
- Triangulation of geometric models
- Calculation of mass-inertia properties

Excessive locks in the attribute container and the cache manager are detected and then eliminated; the cache now uses the mutex system. The object parallelization of the code responsible for the creation of triangulation grids sees a four-fold increase in speed on 8-core workstations running Windows 10, as compared to a 30% increase provided by classic parallel coding.

## C3D Solver: The Parametric Kernel

The job of our C3D Solver parametric kernel is to define relationships between elements of the geometric model. It does this by imposing geometric constraints with the help of equations. It supports 2D and 3D objects, and controls geometric models with the help of logical and dimensional constraints.

For this year's release, we substantially improved the software interface of the C3D Solver. The API is now based on the basic set of types and functions required to define geometric constraints. The object-oriented part of the interface is used as an add-on to the basic one. Such improvements simplify working with geometric data, and the unification of the interface allows users to integrate the C3D Solver into applications with arbitrary architectures.

Other improvements to C3D Solver 2017 include registering sub-objects for 3D models to be consistent with the concept of "geometrically rigid" clusters and so works correctly with large, complex assemblies of 3D models.

A user wishlist item was to add scalar variables as a new data type. Despite being an apparently simple request, this improvement caused significant modifications inside the C3D Solver. But now the parametric kernel is able to work with varying radii of different geometric objects -- circles, cylinders, tori, and spheres -- as well as scale linear and angular patterns. (See Figure 26.)

Logging API functions of the 2D solver first appeared in the previous version of C3D Solver. With the new release, the logs also record 3D solver calls. This allowed the implementation of an automated testing system in C3D Solver 2017 that reads the API logs and so improves the interaction with users during technical support provided by C3D Labs.

In recent years, one of the primary trends in the IT industry has been the migration of technology to the cloud. We took this trend seriously by writing a brand new product named "C3D Solver for JavaScript." What is unique about our solution is that any software based on it can be launched in a browser and, more importantly, it performs geometric calculations on the client side. C3D Solver is the first parametric kernel that works in a browser without the need for server-side calculations!

## C3D Converter: The Data Exchange Module

Our C3D Converter data exchange module reads and writes 3D models in a variety of standardized data formats, such as STEP, IGES, X_T, X_B, SAT, JT, STL, and VRML. The new version of C3D Converter supports STEP AP242, a protocol that should eventually replace its predecessors, AP203 and AP214, according to the ISO committee. The most significant changes in AP242 related to product manufacturing information (PMI), and so we significantly improved the ways in which annotations are transferred by C3D Converter, including dimensions, tolerances, and specifications.

An analysis of STEP files over time shows that the amount of PMI data transferred has increased significantly, and that text is transmitted predominantly in the graphical representation. (See Figure 27.)

Software developers who want to expand the list of available exchange formats with third-party applications may be interested in this new functionality of C3D Converter: importing and exporting JT (ISO 14306) 3D models. This format loads information from files quickly, transfers visual properties of models, and supports two representations of geometry, polygonal and boundary.

Boundary representation (b-rep) geometry offers the most complete set of information about the shape of models by describing the smoothness of surfaces, topology, and so on in an explicit form. Support for b-rep in JT was implemented thanks to conversion technology from C3D Labs for Parasolid. The b-rep format is suitable for making changes to 3D models; nevertheless, there still are tasks for which it is redundant, such as in visualization. For these kinds of tasks, it's a better idea to use the polygonal representation of geometry provided by JT, as it can be read separately from a file with lower computational loads. JT contains metadata for specifying the desired level of detail for the 3D model, taking into account the display mode. (See Figure 28.)

In addition, the JT format includes data compression in its specification, using various compression mechanisms to reduce the size of files being used to transfer large and complex 3D models.

Another feature distinctive to JT is its block structure. The description of the model tree and the form of each component is stored in separate but continuous segments. The offset (relative to the beginning of the file) is obtained from a pivot table. The beginning of each segment, or of its individual part (element), contains a header that indicates the length of the data in bytes. We are now studying the feasibility of supporting JT's block file structure in C3D Converter. In a sense, this work is similar to the one that was carried out during the refactoring of the C3D format.

## C3D Viewer

For the first time in its history, C3D Labs developed an application for end users, instead of only ones for developers. C3D Viewer is name of our new, easy-to-use application that opens 3D models (from files in standard data formats), views them in 3D, and then saves them in our native C3D file format. (See Figure 30.) We built this new application using our own technology, and so it is based on the C3D Modeler geometric kernel, C3D Vision visualization module, and C3D Converter data exchange module.

The features available in C3D Viewer include the following functions:

- Reads STEP, X_T, X_B, SAT, IGES, STL, VRML, and C3D files
- Loads one or more files in a single session
- Offers 3D model navigation, such as standard 3D orthographic and isometric views
- Provides a variety of render modes
- Generates quality renderings
- Offers several performance options
- Saves to raster formats, with scene settings, such as JPEG, TIFF, BMP, and PNG
- Writes to C3D format

C3D Viewer is useful for preparing materials based on 3D models in fields such as advertising and marketing, as well as when CAD and CAE projects need visual assessments of the design quality, when there is no need to create or edit 3D geometry.

The improvements to the C3D Toolkit described in this article are not exhaustive. It is worth noting that the C3D User Manual is supplemented with new chapters and sections, and that the 3D model catalog now contains new examples.

When you have any questions, please do not hesitate to contact us at info@c3dlabs.com