TiGL 3.2.0 and TiGL 3.2.1. released

We are happy to announce the release of the TiGL 3.2 series. The new release features:

  • Full support of CPACS 3.2. In many cases, TiGL 3.2 can still load CPACS 3.0/3.1 files and will warn, if problems are expected.
  • We finally transitioned to OpenCASCADE 7.4.0 from the almost seven years old 6.8.0 version. TiGL can still be built with older OpenCASCADE Versions though, but we highly recommend using OCCT 7.4.0.
  • Improved computation speed of wing cell geometries.
  • TiGL now allows to define wing cells with contour coordinates, which will be a CPACS 3.4 feature.
  • A new curve / curve intersection algorithm. This is used e.g. for the computation of curve network interpolation and was necessary due to a regression in OpenCASCADE 7.4.0. The new algorithm is designed to find all intersections between two curves within a user defined tolerance.

Conversion to CPACS 3.2

To update a CPACS file to 3.2, use our cpacs2to3 tool as follows

cpacs2to3 -i my_old_cpacs_file.xml -o mycpacs32.xml -v 3.2

OpenCASCADE 7.4.0

The new OpenCASCADE 7 series comes with a completely modernized code base and offers also many improvements for boolean operations, which have been problematic in many cases in the past.

From the users perspective, there are some changes when using TiGL with OCCT 7.4.0

  • It is much harder now to install TiGL 2 and TiGL 3.2 into the same environment, as their different opencascade version are conflicting. In particular, we had a problem for the cpacs2to3 tool, which requires both libraries to be present. If you need to install bot TiGL libraries, either build TiGL 3.2 with the same OpenCASCADE Version as TiGL 2 or statically link TiGL 2 to the old OpenCASCADE version.
  • As a workaround to support installing TiGL 2 and TiGL 3 under python in the same environment, we created the conda package tigl-static, which repackages TiGL 2 and statically links OCCT 6.8.0.
  • The python bindings of TiGL 3.2 now use pythonocc-core 7.4.0. Scripts, that use TiGL and pythonocc together might need to be adapted:
    • The package structure of pythonocc-core has changed
    • pythonocc 7.x does not use OpenCASCADE Handles anymore. Therefore, all calls to GetObject() or GetHandle() need to be removed.

A new curve intersection algorithm

TiGL implements now an own curve/curve intersection algorithm tigl::IntersectBSplines. We had problems with the one from OpenCASCADE GeomAPI_ExtremaCurveCurve, which did not find all intersections in all cases.

Since curves will hardy exactly intersect in 3D, tigl::IntersectBSplines uses a tolerance values. If two curves pass each other within the tolerance, it will be counted as a intersection.

The algorithm works as follows:

  1. Create the convex hull of both curves. If their convex hulls don't overlap no intersection is found.
  2. If there is an overlap, the curves will be split recursively into two smaller curves and 1. will be checked again.
  3. If the (split) curves are almost linear and these curve segments pass within the tolerance, these segments will be counted as a possible intersection candidate.
  4. Finally, each intersection canidate will be refined by minimizing the distance between both curves segments.

The following image shows, how the algorithm finds curve segments and their bounding boxes that are a potential intersection candidate. The red crosses are true intersections that are within the tolerance level

The new algorithm is used at many places "under the hood" in TiGL e.g. for the curve network interpolation to create coons and gordon surfaces.