The Real History of the C3D Kernel from Alexander Alakhverdyants
«Geometric kernels are few, and parametric solvers are even fewer. That is why C3D is so cool!»
C3D Labs this year celebrates the 20th anniversary of its C3D geometric kernel. Twenty years ago the founders of ASCON Group made the decision to begin writing a new mechanical CAD system, today known as KOMPAS-3D. To power the system, the company established a team to write a 3D kernel good enough to compete with foreign kernels in operability and functions. This is where the history of the "Kolomna" geometric kernel begins.
During the years that followed, ASCON continuously developed and improved the kernel. New modeling methods were invented, computational algorithms developed, and additional modules added to solve parametrics, convert data, and visualize models. Behind the changes, there always was a special group of people developing the geometric kernel, which more recently was renamed C3D.
Today, more people are taking an interest in geometric modeling, many of whom keep tabs on who develops what. So to celebrate the 20th anniversary, we decided to conduct a series of interviews with our development team. In our first issue, we chatted with Dr. Anna Ladilova, and our second interview is with mathematician and programmer Alexander Alakhverdyants. The interview was conducted by C3D product manager Arkadiy Kamnev.
Alex, where are you from?
I was born in the very south of Russia, in the city of Nalchik in the Kabardino-Balkar Republic.
How did you end up near Moscow in Kolomna?
I got a place in the Faculty of Physics at the Lomonosov Moscow State University studying elementary particle physics. After I graduated, I remained in Moscow region taking post-graduate courses and working at the Joint Institute for Nuclear Research. It was from there, much to my surprise, that I moved to Kolomna to work as a programmer.
I heard that you completed some of your research internship abroad. Is this true?
In Dubna, I worked as a member of the research team searching for quark-gluon plasma in the STAR (Solenoidal Tracker At RHIC) experiment, the largest experimental unit of the RHIC (Relativistic Heavy Ion Collider) accelerator complex. This is located at Brookhaven National Laboratory, in Long Island, USA. Participants come from all corners of the world, representing 40 institutions. It is the largest experiment in elementary particle physics conducted at BNL, and I was there twice for 3-4 months collecting data.
Did you enjoy working on STAR?
Of course! Unfortunately, there are no similar experiments related to my specialty occurring in Russia. To acquaint us with modern elementary particle physics, the university arranged that we went to Switzerland to the European Council for Nuclear Research or CERN to see the Large Hadron Collider.
Have you authored any research papers?
I was among the co-authors on the STAR research collaboration, and so all the articles published by the collaborators over the 5-6 years of my participation in the experiment include my co-authorship. They can be found in such publications as Physical Review and Physical Letters. I also had several personal articles.
Let's talk about your work at C3D Labs. When did you join the C3D development team?
I started in 2011 with the mathematics division of ASCON.
Did you initially work on geometry or kernel parametrization?
In the beginning, we did not have any divisions, and so there was only one mathematics unit. Then the C3D converter and C3D solver groups were created. Alex Maximenko, head of C3D Solver Department, came up to me and asked if I would like to work with him. I agreed at once.
How does the development of a geometric kernel differ from a parametric kernel?
The geometric kernel development group is much bigger than the parameters group. This is why at times we may not be fully aware of what is going in various sections of the kernel programming code. In our case, we develop code together with Alex, so we have a good knowledge of the functions appearing in the C3D Solver.
A provocative question: why is the parametric kernel cooler than the geometric one?
Because there are far fewer solvers than geometric kernels in the world. Or to be more precise, kernels are few, but parametric solvers are even fewer! I assume they are more complex because there are fewer of them. That's what makes them cooler.
Now you live near Moscow in Kolomna. Do you like this town?
I like it in terms of the historical sights. Kolomna has its own places of beauty and its own ancient spirit.
What do you do in your spare time?
I often program at home, read a lot, and I enjoy self-learning. After all, I don't have a degree in programming; I'm a physicist. So, there are some areas in informatics that I don't know, and I have to fill in these gaps in my knowledge.
What programming languages do you use, and how do you learn to use them?
I program in C++ and Python. I study by reading books and I watch video lectures. My colleagues help me an awful lot, too -- what would I do without them? The staff at C3D Labs consists of high-level professionals, and so I learn a lot from them, especially in my early days. You won't find their level of experience in any book. By now, however, it is my own experience that helps me to improve.
What is your favorite literature; do you read fiction?
Now I read much less, but in my school years I read avidly. I like classical Russian literature, and I have read some works by my favorite authors Fyodor Dostoyevsky and Nikolai Gogol several times over. I adore The Brothers Karamazov, which I got my head around at the third reading, and Doctor Zhivago by Boris Pasternak for its amazingly beautiful Russian language.
What about hobbies, sport, other pursuits?
I've always been into sports, both in my school years and then at university. I played football until the 6th grade and spent days on end outside with a ball. In Dubna, my colleagues and I were part of a mini-football team at the institute and even took part in citywide competitions. But when I moved to Kolomna, I gave up sport. Initially, I didn't know anyone to play sport with, and now I'm simply short of time.
I know you are a big CSKA Moscow [a Russian professional football club] fan. Are there any European football clubs that you support?
I'm keen on Italian clubs! I've been a fan of Juventus and the Italian national football team since childhood. My happiest day was in 2006 when Italy won the World Cup. At the time I was in Switzerland, living in the Italian quarter in Geneva, so I celebrated the victory with Italians ‘til morning!
Let's get back to your work. What are your main tasks at C3D Labs?
After the C3D Solver team was created, I took up the 2D solver, in particular the functions that parameterize NURBS curves. I improved or created from scratch constraints like tangencies and coincidence. I added an option to fix the derivatives up to the 3rd order at any spline point for smooth curve mating, such as with G2 curves. A spline is quite a complicated object, and it is easy to make a mistake when working with it. We faced the challenge of how to make it work well and to implement it in a simpler and more clear way.
Spline-dragging is another matter. When developing this function, we had to reconsider the spline behavior model and agree on how a large number of objects (of which a spline is composed and with which it integrates) should behave. Currently, we are focused on the 3D solver, and my current task is creating patterns.
As I understand it, patterns are arrays of components. How are they used?
I don't know; it’s up to the user! When we were creating the code, I worked out a requirement that the pattern API should give software developers as much freedom as possible. C3D Solver users can use them as intended (to create arrays of single-type components) but also in creative ways. For example, users can create arrays out of heterogeneous objects and then rotate each array element individually. Users can set individual behaviors, or use patterns to simply find the mid point on an arc.
Back when we were discussing how to implement patterns, I told my manager Alex Maximenko that I didn't want to have any restrictions the use of arrays: let users decide for themselves which tasks they would like to apply, and we simply offer the appropriate tool. I really hope we achieved this.
Some staff told me that you are a big fan of Apple products, so how did it come about that you agreed to compile a kernel for archcompetitor Android?
No one asked me to do this. I kind of made it my duty to assemble C3D for Linux and Android just because I liked doing it. I'm not so much a fan of Mac as a lover of Linux. As a matter of personal interest, I started by compiling the kernel, and then to make it easier I wrote an automatic compilation system in Python. (That's how I decided to study Python for an applied problem.) I managed to derive benefit not only for myself, but for C3D Labs as well. And since my technical process was well-tuned, it was not difficult to write a script that assembled the kernel for Android, too.
Have you tried to launch a test C3D application on Android?
When one of our Korean customers SolidEng was testing our technology, they noted that Android programming is generally done with Java. So I had to learn the fundamentals of Java to demonstrate how our kernel (written in C++) could be made compatible with this programming language. Later they asked us to show them how to draw graphics using triangular meshes, and again I wrote an application for Android demonstrating Boolean operations and transformations of the obtained body. Though the application is elementary, it was no walk in the park! I hadn’t ever programmed in Java or written anything for Android, but it all worked. Now it has become a sample available to all our customers who want to write an application for Android using C3D.
What do you like most about the working process?
Perhaps, like anyone else engaged in science and mathematics, I really appreciate the moments of insight. It's like you have some difficult task to solve, you rack your brain, can't sleep at night, think about it all the time... And then suddenly something clicks in your head and you've found the solution. In such moments, I feel the happiest man alive! Even my wife sometimes laughs at me. She says, “Alex has left this world,” and then congratulates me when I return to Earth.
Where do you get inspiration and ideas? After all, Newton's apples don't fall from down all the time.
I don't know what to think about inspiration. Thanks to the training I received from university, its good teachers, and academic advisers, I was taught many methods of task solving. That is why I always first try solving any task myself. To help me, I read specialized articles.
As to ideas, there is one thing that never stops surprising me: you work on a task for some time, and then suddenly you discover that somewhere some other people have come to more or less the same solution. On the one hand, it always boosts your self-esteem — smart people figured it out and so did you. On the other hand, you think that all this knowledge is perishable and insignificant, as so many people can conceive it independently of one other.
There are graduates who are beginning to think about which profession to follow. What might attract them to C3D kernel development?
I think everyone has their own interests that they should pursue. I, for one, have always been interested in solving complex mathematical tasks.
Can C3D kernel compete with foreign kernels?
Not just «can,» but «must.» There must be sound ambitions in any working process. I always want to do something to the best of my abilities, or at least at the highest level that I can achieve. I don't see any point in doing amateurish stuff.
Why should engineering software developers use C3D?
I believe that our C3D kernel is fast, provides many functions, is easy to use, has good support; in other words, it is one of the world's best kernels. The rest is a matter of taste. I'm totally convinced that those who use C3D in their work will never regret the choice.
How can parametrization change the modern 3D modeling system?
It has already changed it. Just like anything in CAD, using parameters has simplified a number of tasks for designers and engineers, relieving them of unnecessary routine, and increasing the number of options. For the future, I would like to see parameter functions for surfaces and curves in 3D that are as rich and diverse as they are in 2D. This will give engineers a multitude of new options.
What are the latest trends in CAD?
Judging by the publications I read, much attention is being given to direct variation modeling and hybrid modeling. Our trend is to communicate with customers to understand as much as possible what exactly they need to make the creative process of modeling easier, and to reduce the effort devoted to coding.
WHAT IS C3D?
Read more about the C3D geometric kernel at c3dlabs.com/en/products/c3d-kernel/
|К списку новостей|