by Cristiano Sacchi
GAUSS is a C++ class library designed to meet the needs of CAD applications that make use of geometric entities such as solids, surfaces and curves.
The KAEMaRT Group at ITIA-CNR has been working in the CAD field for more than 15 years; during this period we have developed several software prototypes capable of handling increasingly complex geometric entities. Five years ago, we began working on the development of a highly sophisticated geometric modeling kernel to be used by several applications. The two main goals of this project (named GAUSS) were:
In order to create the best development environment possible, we decided to follow the object-oriented paradigm and to use C++ as the implementation language. Several modules have been developed so far.
BGL (Basic Geometry Library)
We decided to have each basic geometric element represented in parametric form. The whole system therefore refers to a geometry library (BGL) that handles all the basic entities (i.e., parametric curves and surfaces). Since we did not believe that a unique representation could solve all the cases, BGL implements a parametric evaluator. In other words, each specific surface (curve) class is a subclass of the generic one. Different parametric mappings differ in operators, and not only in representation; we have therefore implemented a rich set of operators for each kind of mapping. The many surface types in BGL include: plane, cylinder, sphere, cone, ruled surface, revolution surface, offset surface and NURBS. We implemented quite a large number of specific operators for NURBS (interpolation of points and curves, knot insertion, degree elevation, free form deformation, etc.) because we feel it provides a very effective representation for free form shapes.
Several high level operators are based on the intersection of basic geometric entities. We thus developed several intersection algorithms allowing the intersection of any combination of curves and surfaces. In order to obtain a good trade off between speed and reliability, we selected different algorithms depending on the kind of entities to be intersected. The intersection between pairs of curves and between a curve and a surface is computed using the loop detection approach; the intersection between two surfaces follows the adaptive subdivision approach.
In order to be able to handle curves, surfaces and solids in a unique framework, we developed a mixed dimensional topological representation. The GAUSS representation scheme can describe geometric objects composed by any combination of points, curves, surfaces and solids.
Since our representation scheme describes the geometric model without approximation, we developed a discretization module that converts the model into a set of connected triangles. The user of this functionality can specify the tolerance of the triangulation in order to have a discretization that meets the required precision.
Results and Future Research
GAUSS is still under development but several positive results have already been obtained. Its flexibility, along with the increasing robustness and the range of functionalities offered, makes it highly suitable as a workbench for geometric management. We are currently using it in several research projects, for example in the modeling of fabrics and of mannequins, in surface reconstruction for mechanical reverse engineering, and in finite element modeling for elastodynamic wave propagation in solids.
The development of GAUSS will follow several directions. We are now working on implementing the following new modules:
return to the contents page