Hanno Braun
@hannobraun.com
I'm working on Fornjot, an early-stage b-rep CAD kernel written in the Rust programming language.
https://github.com/sponsors/hannobraun
https://github.com/sponsors/hannobraun
It's more complicated than the topological object graph of the previous experiment, but maybe it's manageable. I'm looking forward to sketching out more of the architecture, as I'm sure that will lead to more insight.
November 7, 2025 at 2:24 PM
It's more complicated than the topological object graph of the previous experiment, but maybe it's manageable. I'm looking forward to sketching out more of the architecture, as I'm sure that will lead to more insight.
Here's what I've come up with so far: github.com/hannobraun/f...
github.com
November 7, 2025 at 2:24 PM
Here's what I've come up with so far: github.com/hannobraun/f...
This isn't a commitment to go ahead with this approach yet. I might abandon this and continue the previous experiment. I'm just trying to get a better handle on what this idea would mean in practice.
November 7, 2025 at 2:24 PM
This isn't a commitment to go ahead with this approach yet. I might abandon this and continue the previous experiment. I'm just trying to get a better handle on what this idea would mean in practice.
No idea how I even did this. Changed a few lines, thought that shouldn't change anything about the behavior of the code, and now I have this crazy thing 😂
October 16, 2025 at 11:55 AM
No idea how I even did this. Changed a few lines, thought that shouldn't change anything about the behavior of the code, and now I have this crazy thing 😂
Right now, I have placeholder code that generates enough of the surface, so the current model has what it needs. That obviously can't last, but maybe I can adjust the placeholder code to make progress now, and revisit this problem later.
October 8, 2025 at 11:48 AM
Right now, I have placeholder code that generates enough of the surface, so the current model has what it needs. That obviously can't last, but maybe I can adjust the placeholder code to make progress now, and revisit this problem later.
Another solution might be not to generate triangles for both sides of the degenerate cylinder surface. I'm not sure how to do that though. Which parts of a surface to generate for projecting points, is an unsolved problem so far.
October 8, 2025 at 11:48 AM
Another solution might be not to generate triangles for both sides of the degenerate cylinder surface. I'm not sure how to do that though. Which parts of a surface to generate for projecting points, is an unsolved problem so far.
So that might be the solution: When choosing surface triangles to project the points on, take their normals into account and not just their position. Or maybe somehow make the decision based on surface coordinates?
October 8, 2025 at 11:48 AM
So that might be the solution: When choosing surface triangles to project the points on, take their normals into account and not just their position. Or maybe somehow make the decision based on surface coordinates?
I'll have to look into exactly why that happens, but it's probably just some quasi-random artifact of the algorithm that chooses the triangle to use for projecting.
October 8, 2025 at 11:48 AM
I'll have to look into exactly why that happens, but it's probably just some quasi-random artifact of the algorithm that chooses the triangle to use for projecting.
So we have the face's points in 3D and need to project them into the surface to prepare for generating the face's triangle mesh. Most points get projected into the part of the surface that's facing the camera, but some into the part that's facing away.
October 8, 2025 at 11:48 AM
So we have the face's points in 3D and need to project them into the surface to prepare for generating the face's triangle mesh. Most points get projected into the part of the surface that's facing the camera, but some into the part that's facing away.
The surface looks broken, with the blue and black intermixed, because the front sides of the triangles facing the camera (blue) and the back sides of the triangles facing away (black) are in the same place.
October 8, 2025 at 11:48 AM
The surface looks broken, with the blue and black intermixed, because the front sides of the triangles facing the camera (blue) and the back sides of the triangles facing away (black) are in the same place.
And here's the surface, shown as its full triangle mesh. Not sure how well that comes through in the picture, but when moving the camera it's obvious that the surface is completely flat. This is a degenerate case of a cylinder surface.
October 8, 2025 at 11:48 AM
And here's the surface, shown as its full triangle mesh. Not sure how well that comes through in the picture, but when moving the camera it's obvious that the surface is completely flat. This is a degenerate case of a cylinder surface.
But all that will take a lot of time, and I was really hoping to solve an actual problem for a change. Still, not investing in the infrastructure that would make this problem really easy to solve, is probably a mistake.
October 7, 2025 at 11:53 AM
But all that will take a lot of time, and I was really hoping to solve an actual problem for a change. Still, not investing in the infrastructure that would make this problem really easy to solve, is probably a mistake.
If I want to solve this the "right way", I need to spend more time on visualization. Showing the surface, its coordinate system, location of the seam, maybe even visualizing the projections somehow.
October 7, 2025 at 11:53 AM
If I want to solve this the "right way", I need to spend more time on visualization. Showing the surface, its coordinate system, location of the seam, maybe even visualizing the projections somehow.
In addition, I'm not sure _why_ the face extends over the seam. Looking at the code that generates this, it seems like there shouldn't be a seam there? This needs more investigation.
October 7, 2025 at 11:53 AM
In addition, I'm not sure _why_ the face extends over the seam. Looking at the code that generates this, it seems like there shouldn't be a seam there? This needs more investigation.
But it causes this problematic self-intersection, which prevents the face being turned into a triangle mesh, which is what needs to happen next. I need to find a way to make sure that projecting a face happens in a way that prevents these self-intersections.
October 7, 2025 at 11:53 AM
But it causes this problematic self-intersection, which prevents the face being turned into a triangle mesh, which is what needs to happen next. I need to find a way to make sure that projecting a face happens in a way that prevents these self-intersections.
It seems that the face extends over the "seam" of the cylindrical surface. Which causes the projected points to not end up next to each other, like you'd expect. In principle, this seems reasonable.
October 7, 2025 at 11:53 AM
It seems that the face extends over the "seam" of the cylindrical surface. Which causes the projected points to not end up next to each other, like you'd expect. In principle, this seems reasonable.
I've shared various screenshots of Fornjot before. Just scroll down on my profile.
October 2, 2025 at 5:14 PM
I've shared various screenshots of Fornjot before. Just scroll down on my profile.