 Okay, hello, my name is Aleksandr Moulchev. Yeah, and in this talk I'm going to present some key features of the kernel for new cameras and highlight some new features which have been added recently for more experienced users. The first question is, does somebody here about OpakSkate technology? Raise your hands up. Almost one third, one half, okay. What is OpakSkate technology? OpakSkate technology is a geometric modeling library. It provides a set of high-level topological operators and low-level geometric algorithms. It uses a well-known boundary representation approach to store underlying data. The boundary representation means that a three-dimensional model is constructed by a set of faces. They bound a model. Faces are bounded by edges. Edges are bounded by vertices. Some development facts. The most important thing here is the permissive LGPL license, and this is why I'm here, of course. Moreover, there is a special exception which is taken from LGPL 3.0, allowing to deal with object code incorporating material from header files, some code in templates and headers, etc. The OpakSkate technology is written in C++ and available on all major platforms. The actual master branch has nearly 2.5 million lines of code. This is quite a huge framework. Some technical details. Foundation classes are responsible for low-level functionality like smart pointers, collector, collections, maybe some numerical methods. Modeling data defines the set of representable objects. In general, we follow the step standard. So almost everything that you have in step from a modeling point of view, you can model this stuff using our modeling data directly or using some conversion techniques. Modeling algorithms, data exchange, and visualization will be discussed a bit later. Application framework is a set of tools and methods for rapid application development. It allows to build your own data model using Kanduri Do and transaction mechanism. This is some kind of hierarchical database. Of course, all the stuff uses our classes, our structure, so this is our way to build applications. Test harness application. It's a TCL-based console application which reviews OCT functionality. Almost everything that we have on C++ level is reflected somehow on the TCL level. This application supports a plugin mechanism so you can write your own commands to extend its functionality. We usually use it to test, to debug, to analyze, to prototype. It's some kind of, how to say, testing tool for us. Geometric modeling. Well, the set of geometric algorithms includes intersection, projection, approximation, intersection, interpolation algorithms. For instance, interpolation algorithm can accept tangents or parameterization to deal with the curve's form. You know that there are infinite number of ways to pass a curve for the given set of points. There should be a criterion to define one curve from this set. Another example of geometric algorithm is presented on the slide. Here you can see the projection of curve to the surface using direction. I have prepared this example using draw-to-see-all-based application, so let's take a look. Here it is, a bit bigger. Here we have a block constructing our inputs. After that, we have to convert geometric objects to their topological counterparts according to their common definition, which projects a curve on the surface. We convert them. Here we perform the projection. What to project, where to project, projection direction. Here it is. And the variable name to store the result. After that, we can display inputs and output on the screen. Here you can see our standard console, which is called draw. And here we can launch this script, and here is the result. High-level topological algorithms. The set of topological algorithms includes boolean algorithm, fillet, offset, skinning, thickening, chamfering, maybe something else. Once again, there is a special demo demonstrating this functionality, so let's take a look. This time, we are going to load a model from the hard disk drive, and other argument will be constructed manually. It will be just a truncated cylinder. After that, we will perform common operation boolean, display inputs, clear scene, and display the result. So, okay. Here are our inputs. Cylinder and well-known NC101 model. And let's see the result. Here it is. It's a result of common. Well, visualization is vital for successful modeling. We live in a three-dimensional world, or at least we feel it three-dimensional. Visual feedback gives understanding of what is going on with your paths, assemblies. It is helpful to debug problems of BRAP data. Our visualization engine is capable of displaying three-dimensional models, dimensions, relations, and other kinds of engineering data. It uses state-of-the-art accelerating techniques like bounding volume hierarchy to achieve high interactivity and frame rate on huge models. You know that there are two major paradigms in visualization. Rasterization and rate-racing. The OpenCascade technology supports both of them. Usually, rate-racing is used to produce photorealistic images. In our previous demo, we have seen a rasterization pipeline. Now it's time to get some understanding about rate-racing. Our next script. Once again, a lot model. Prepare scene. Here, we want to set a background color. We want to enable lights to see reflections and shadows. We want to set a material to see reflections and shadows. And here, we want to enable rate-racing mode and enable shadows, reflections, and anti-alasing. Here it is. You can see shadows, reflections, and this script is quite small. For instance, you can add textures, materials, etc. So to make it really photorealistic. Just a small demo. Date exchange. Well, date exchange is crucial to supporting a third-party software. Ask yourself how many CAD software do you use every day? Personally, I keep open three or four programs. In my opinion, it's almost impossible to imagine a software that does the entire job. So we have to date exchange with our software. Our step and IJAS translators are able to deal not only with parts and assemblies, but they can deal with metadata such as colors, layers, names. Popular mesh formats like STL are also supported. Other representation schemes like drawings, voxels, point clouds, wireframe can be constructed from internal built-up structure, but there are no built-in translators for them. Once again, there is a dedicated demo demonstrating how we can create a model, colorize faces, and save it on a disk and check it in some other software. This time, we are not going to use a predefined script. The OpenCascade technology has some built-in samples. This time, we are going to use built-in sample. Just type run sample. Here, we have a pencil model. It contains two solids. We'll see it. And after that, we can write a step file, what to store, where to store, and we can open it in other software, for instance, in FreeCAD. That's it? Yeah, well, I know that FreeCAD uses our step translator, but there is no good free step reader, unfortunately. Well, there are some nice features which have been added in the latest releases, and I would like to attract your attention to them. 7.0. We migrated from our own build system to the well-known CMake build system. I have to be polite here, but when I entered to the company several years ago and I faced with our build system, well, I could say it was unfriendly to newcomers. I have to be polite, but CMake offers the unified pipeline, which is fruitful for developers and the community. Our step translator was extended by application protocol 242, which deals with the product and manufacturing information, so you can write and read this kind of data. 7.1. OpenCascade technology usually uses bounding boxes to perform fast intersection checks. Sometimes, especially in case of BISplines, these access-aligned bounding boxes, they are much bigger than nominal geometry, and there is a problem. For instance, when we can compute bounding box once and cache it, it's much more interesting to build optimal bounding box than build an ordinary bounding box. Unfortunately, we sacrificed performance for that, of course. Calculation of optimal bounding box requires more efforts. IE's manipulator class suits for interactive transformation of objects on the scene. Once again, there is a dedicated demo for that. Let's take a look. Once again, we load model, we display it, and we create a manipulator and attach it to the model. That's all. So we can move along three global axes, x, y, z. We can rotate. We can scale. That's it. 7.2. Pre-compiled header support significantly improves compilation speed. On my desktop, it reduces compilation from 15 minutes to 10 minutes. I think it is worth to enable it when you don't want to modify OCT sources. It's fruitful for community, I think. Partition operator is a special kind of the Boolean algorithm which adds all splits of the first argument to the result, but it doesn't include anything from the second argument to the result. It's hard to explain it, so let's take a look. Here, once again, the same model, and we want to slice it using a set of parallel faces. After that, the block related to partition operator construction, displaying inputs and result. So let's take a look. I need to launch this stuff once again. Yeah, I need to clear my favorite stuff. Yeah, that's it. So actually, initially we have one solid, and we want to slice it into several pieces by these set of faces. We clear, we display, result. Here you can see some lines on the screen. They mean that we have several solids in underlying models, and we can check it. NBS, number of shapes. So initially we have one solid. In the result, we have nine solids, 7.3. Special algorithm for feature removal was added. This algorithm can remove features like gaps, holes, protrusions, fillets, chamfers. Also, this release introduces oriented bounding box. The idea is the same as an optimal bounding box. And once again, I have a demo for that functionality. Clear scene. Here we have a model. It is access aligned. So we want to rotate it along that axis to 45 degrees to make access aligned bounding box bigger. And after that, we can construct access aligned bounding box and oriented bounding box. And after that, we can display inputs and outputs. So you can see that the bigger one is access aligned and yellow one is oriented one. It's not absolutely optimal because it uses triangulation to build it. So it depends on triangulation quality. But it's much better in this case, nevertheless. And our latest, our actual release, 7.4. We added two new mesh formats, GLTF and OPTCH. Well, actually the OpenCascade technology supports four mesh formats, STL. We are ML, GLTF and OPTCH. Well, this set is not big, but it reduces the number of third-party companies in your software. You know, this annoying set of third-party companies in your software, it can be extremely huge. And we have finished meshing over whole. Now our meshing algorithm, I mean, BDAP meshing incremental mesh class produces much more reliable and robust result. There you can see some useful links on the slide. They contain instructions on how to compile, download and run the software. There is a dedicated forum to ask questions as well. If it is what you are interested in, if it is what you are looking for, then give it a try. Well, it's questions time. What is the difference between commercial kernels and the free kernel? Yeah? Unfortunately, we don't have an access for that, for other kernels. The only thing we can say here that our step and digest translators, they, I can say that they better, they should be better because we are interested in step and digest formats because this is our way to communicate with other software. Solid ACs and other kernels, they are internal formats and they do not want to go outside of them. How do we use OpenCascade on the web? Yes, we have some experiments in that area and the usual way is to add some bidding to the C++ libraries using JavaScript languages and call just C++ code. You can go to our website, I mean company's website, you can see some model on the web. So somebody has finished this job, but it's not my task. So technically it's possible, we have this experience, but how it is done, I don't know. Yeah, because somebody has finished this job, you can go to our website, you can see that three-dimensional model is displayed on the screen. Yeah, what is the difference between OpenCascade and OpenCascade Community Edition? OpenCascade Community Edition is a fork of OpenCascade. Several people started it around 2010 and they were not satisfied with our development progress. Since this time we came more open to the community, so OpenCascade Community Edition still uses OpenCascade 6.9.1, but our actual version is 7.4, so almost all users switch to the OpenCascade official release, let it be. Yeah, FGPL. The question is, Radma for the future, yeah? Well, here we are going to improve our visualization engine significantly. Actually, we have finished physically based rendering and materials, right design. From an algorithm and modeling point of view, there is no such a fixed Radma for that stuff. OpenCascade stuff mainly driven by the company itself or also external contributors? Do we have external contributors, yeah? Yeah. Yes, we have. Formerly we have nearly 100, but active with something between 10 and 20. Question about ray tracing, what do we display on the screen? Yeah, good question. In visualization, in this stuff, we ray trace that triangle, so we have to build mesh before usage. Yeah, I know this problem. Can you repeat the question for the end? The question is, do we have a mirror on some public website? Actually, no, but we are working on this. We are going to use GitHub, yeah? My colleagues say that we are going to publish a mirror on the GitHub. The process of a new developer coming in to be able to contribute is that documented somewhere, someone is watching this talk, where would they look to find out how to get involved in your project? The question is how to involve to the project, yeah? Yeah. Here you can see the first link. It has information about how to be involved. One still have to fax something to France? Unfortunately, yes. Some Lego reasons. Are you working on a contributor license agreement? Yeah, we are working on this stuff, but actually you have to sign it, yeah? Time for maybe one more question, yeah? The question is, can we replace our old API by a modern C++ API, yeah? The answer is no, because old CAD renders support non-C++ 11 compilers. So we cannot switch. And we wrap them by some macro, for instance standard override, just macro for C++ override. But in general, we cannot drop all this stuff.