# Google Summer of Code 2021 Ideas

We are eager to hear about your proposal to improve either OCCT or its infrastructure. Come and propose your project via contact e-mail to get feedback about its feasibility. If your project is doable, we will be glad to provide you with a mentor so you can succeed in your project.

Don't forget that OCCT is a big project and application fields are wide. You can choose between application or dll/framework development, or between working on OCCT itself or on extra tools used by developers for their daily work on OCCT. Also if all you prefer is web development, we also have some needs there.

#### 2) Regularization of B-spline objects

Purpose
Regularization aims at improving the parameter flows over the B-spline curves and surfaces while not affecting their shapes. The regularization algorithm can be used as a post-processing stage in the interpolation and approximation operators, such as surface skinning, sweeping, constraint filling, and others. The algorithm makes geometry more analytically fair by moving the existing control points in tangential directions. The obtained more regular parameterization is a valuable property for subsequent numerical algorithms. The most notable application for this algorithm is the preparation of CAD geometries to quality meshing, e.g., for the sake of consequent finite element analysis. Since even the commercial-grade mesh generators are sensitive to parameterization, expressing the geometry more regularly is a relevant industrial problem.
Difficulty
Challenge
Skills needed
Math background.
Understanding of numerical methods.
C++ programming.
Scientific mindset.
References
Xu, G., & Bajaj, C. (2011). Regularization of B-Spline Objects. Computer-Aided Geometric Design, 28(1), 38–49. https://doi.org/10.1016/j.cagd.2010.09.008

#### 3) Push/pull editing

Purpose
There are no open-source 3D graphics engines that allow for “direct modeling” of engineering and art objects in a CAD-compatible way. This project is aimed to ground a new modeling paradigm on the top of the OpenCascade library by introducing a push/pull operator. Using push/pull functions and alike, a user of an interactive system can create and edit shapes by dragging and tweaking the selected faces in a way that preserves the initial (or automatically guessed) design intent.

Various modes of the push/pull operator can be studied in the course of this project. Dragging a face may lead to different results as illustrated by the following picture (only two options are shown). Ideally, the result of dragging should preserve the original design intent of a model, although the choice of the preferred mode is normally left to the user.

- - -

Difficulty
Challenge
Skills needed
C++ programming.
Previous experience or great desire of working with computer graphics and 3D modeling algorithms.
References
Zou, Q., & Feng, H. Y. (2019). Push-pull direct modeling of solid CAD models. Advances in Engineering Software, 127(November 2018), 59–69. https://doi.org/10.1016/j.advengsoft.2018.10.003

#### 4) A two-dimensional geometric constraint solver

Purpose
This project aims at developing an algorithm for solving a set of algebraic equations that describe a two-dimensional sketch. Sketching a planar contour is the first stage of 3D modeling, both direct and history-based. The CAD systems’ interactive UIs are backed by two-dimensional constraint solvers that compute the involved geometric primitives' parameters, such as end positions for lines and radii of circles. Seemingly simple, constraint solving is a challenging task. Although there are several open-source solutions for that problem, none can easily be integrated with the open-source OpenCascade library.
Difficulty
Complex
Skills needed
C++ programming.
Understanding of numerical methods.
References
SolveSpace -- Parametric 2d/3d CAD. URL: https://solvespace.com/index.pl
PlaneGCS solver of FreeCAD. URL: https://bit.ly/3jZZYHd

#### 5) Gordon surface

Purpose
This project aims at adding a new algorithm for modeling Gordon surfaces to the open-source OpenCascade library. The Gordon surface is a generalization of a well-known Coons patch to the network of curves. This type of geometry is highly demanded in digital sculpting and industrial modeling, such as designing ship hulls or pieces of aircraft fuselages. While the Gordon surface is yet another primitive type conceptually, it is nicely compatible with the standard B-spline representations. Therefore, the algorithm might construct a traditional B-spline surface that is point-to-point equal to the original shape in the Gordon form.
Difficulty
Intermediate
Skills needed
C++ programming.
Previous experience or great desire of working with 3D modeling algorithms.
References
Lin, F., & Hewitt, W. T. (1994). Expressing Coons-Gordon surfaces as NURBS. Computer-Aided Design, 26(2), 145–155. https://bit.ly/2Zr1wAp
Siggel, M., Kleinert, J., Stollenwerk, T., & Maierl, R. (2019). TiGL: An Open Source Computational Geometry Library for Parametric Aircraft Design. Mathematics in Computer Science, 13(3), 367–389. https://bit.ly/3s4X4nb
Ayam. URL: http://ayam.sourceforge.net/features.html
An example of a Gordon Surface, based upon OCC. URL: https://bit.ly/3pvpS6A

#### 6) Point inversion study

Purpose
Although point inversion and projection are considered the solved problems in Computer-Aided Design and specifically in OpenCascade, there is still a direction for new exciting discoveries. A typical inversion algorithm based on Newton iterations assumes that the point to project is substantially close to the target surface. Therefore, a traditional test for point inversion consists of projecting a surface’s control poles onto itself. At the same time, there is a demand for an algorithm capable of projecting distant points with a certain level of predictability. This project aims to prototype an inversion algorithm based on state-of-the-art papers and conduct a comparative study over the existing solutions. The target geometry type is a spline curve or surface whose evaluations are computationally non-trivial. The main focus of the algorithm is on carefully choosing the initial guess for the subsequent numerical optimization.

Difficulty
Intermediate
Skills needed
C++ programming.
Previous experience or great desire of working with 3D modeling algorithms.
References
Ma, Y. L., & Hewitt, W. T. (2003). Point inversion and projection for NURBS curve and surface: Control polygon approach. Computer-Aided Geometric Design, 20(2), 79–99. https://bit.ly/2Zro581

#### 7) Curve-surface deviation checker

Purpose
One of the functions of a 3D modeling kernel is the computation of distances between curves and surfaces. Even a formally watertight CAD model is prone to approximation errors, especially on its edges. To measure the geometric gap between an edge’s curve and its owning faces, a dedicated algorithm should be employed. Knowing the real curve-to-surface distance would allow assigning the tightest possible geometric tolerances for a model itself and for the Boolean operations in their “fuzzy” mode.
Difficulty
Intermediate
Skills needed
C++ programming.
Basic understanding of computational geometry and numerical algorithms.
References

#### 8) Parallel computations in validity checker

Purpose
All models are wrong but some are useful. OpenCascade comes with a basic checklist that can be applied to a CAD model to verify its structural and geometric integrity. The set of applied checks ranges from the computationally efficient topology validators to some more sophisticated geometric routines, such as self-intersection tests. To leverage the full power of the CPU, these checks can be adapted for running in a multithreaded mode. Injecting parallelism is not a trivial problem. The employed data structures inherently support sharing that could lead to race conditions.
Difficulty
Intermediate
Skills needed
C++ programming.
Some experience with parallel computing and threading technologies (TBB, OpenMP).
Willingness to deep dive into the data structures of OpenCascade and the architecture of its validity checker.

#### 9) Procession of User-Defined attributes from/to STEP

Purpose
A CAD model may have a lot of metadata in addition to the 3D itself. One of the metadata types is user-defined attributes which are the key-value pairs, connected to the piece of a model.
STEP (ISO 10303) is an open format widely used in the world file to communicate CAD and related information.
OpenCascade already has STEP Reader and Writer, so the aim of this task is to expand their functionality with the processing of the user-defined attributes.
Difficulty
Intermediate
Skills needed
C++ programming.
Working with documentation in English.
Deep diving into the architecture of the OpenCascade model.
References
STEP Recommended practices: https://www.cax-if.org/documents/rec_prac_user_def_attributes_v17.pdf

#### 10) Reconstruction of sharp edges on meshes

Purpose
There is a problem of reverse engineering of a 3D object from its mesh presentation. A mesh can have areas with different curvatures, and these areas are usually divided by sharp edges. We name so edges between faces of a 3D model, which have the angle between them larger than some predefined value.
The purpose of this study is to find on a mesh all sharp edges and join them in contiguous contours.
This is not a trivial task, because there can be false detected sharp edges between some triangles due to mesh irregularities.
Difficulty
Intermediate
Skills needed
C++ programming.
Knowledge of vector algebra.
Willingness to work with mesh data structures.
References