Computer Aided Design (CAD)

I am a computer engineer who is frustrated by the lack of open source CAD packages, so I wanted to start a discussion on what a CAD based off Geometric Algebra could look like.

  • How do you model a shape?
  • Compatibility with functional and boundary representations? (aka f-rep and b-rep)
  • Adding Constraints and free variables
  • Finite Element Analysis, Meshing and Topology Optimization
1 Like

Is FreeCAD https://freecadweb.org unsatisfactory for your use case? In my personal opinion it has a wide range of toolboxes. Maybe it cannot address your specific demands given above.
The FEM toolbox has interfaces to different solvers and allows access to certain mesh internals.

(Disclaimer: I contributed some code there.)

From my limited understanding of GA, I would think, that PGA is appropriate for CAD, since it models basic linear geometries intrinsically. Maybe CGA is also useful.

Grassmann.jl has built in support for finite element meshes and is designed from the ground up around doing finite element analysis. If anyone is interested in that, you need to reach out to me privately, as the egomaniac people on this forum want to suppress what I have to say.

@chakravala’s (original, and now this duplicated) account has been suspended for repeated insults, solicitation and pan handling. Feel free to lookup some of his old posts and don’t be fooled by this seemingly helpful first post.
You should make your own choices but my own attempts in interacting with this individual ended, after profanities and physical threats to my email, with insulting emails to my co authors and professors in the field.

There are many people active in CG and CAD on the bivector discord, if you ask there I’m sure you’ll find some like minded souls in no time.

Kind regards,

Steven

Regardless of personal relationships between these two, Grassmann.jl is state of the art when it comes to FEM and GA.

PGA is not a good choice for FEM since it doesn’t model non-euclidean transformations/objects in a nice way. Sadly I can’t give you an alternative algebra, more research is needed here.

I’d just like to re-iterate that Grassmann.jl provides a full finite element interface for 4 years now, and I have further upgraded the language designs.

With Grassmann.jl, I generate my geometries, and solve partial differential equations.

If you are very serious about engineering, it is entirely up to you to put in the effort to engage with me. There is no reward for me, so I am not going to run after people to convince them to do CAD with Grassmann.jl … you would have to take the initiative.

The CAD solver functionality associated to Grassmann.jl is purely based on my personal needs and desires, designed for me and my personal use.

If there are serious engineers interested in this, then they really need to take initiative to engage with my project in some way, as you should not expect me to serve everything on a silver platter for free to random strangers who are unwilling to engage.

Thanks for bringing this thread back up. I still think about the replies to this thread from time to time. I was aware of your project so I was excited to see your response and that CAD was a part of your focus. I think Julia is an excellent choice for a geometric analysis.

A vitally important side to CAD is the user interface. I think it is clear that the future of CAD is in the browser, so I’ve been looking at Javascript interfaces to opencascade, namely Replicad. The geometric kernel will need to be able to compile to Javascript or WebAssembly, so I’m excited to see that the Julia team is focused on static compilation and reducing the binary size. Did you see the recent talk by Jeff Bezanson and Gabriel Baraldi? It’s looking like Julia will be able to run in the browser soon.

I’m interested to discuss this with you further. I’ve kept up my study of GA, particularly 3DCGA because I like the symbolic representation of geometry, but you should treat me as an amateur. Regarding Grassmann’jl, do you think it will be possible to be compatible with the Boundary representation and/or STEP files? Perhaps there is a GA for B-splines?

Looking forward to hearing from you.

I completely disagree, the browser is the worst platform for scientific computing. However, with Julia language you can also run ganja.js (i have a Ganja.jl package but dont maintain it much) and with javascript in Julia, you can launch a browser window from Julia, to display a javascript. However, I don’t personally need javascript, as I am able to work with the Julia language and visualize results without that.

My interface is the Julia language, I believe that the most important features are the algorithms and language design itself, and the ideal way to do an engineering scientific computation session is in a command line interface with a visualization tool like Makie.jl available. You can have direct access to all the functions and API to manipulate data and feed it into a plotting or experiment an algorithm by defining a function and evaluating it.

With a graphical user interface instead of a command line interface, you are very restricted and limited in what you can do, compared to directly accessing the data and algorithms and plotting API.

If you use a separate CAD software, a separate physics solver software, a separate data visualization software, etc, then it is not a unified interface.

In my approach everything is fully unified with geometric algebra every step of the way, from generating the geometry with Grassmann.jl, then computing the PDE solutions with Grassmann.jl, and then using Grassmann.jl to facilitate into the visualization step as well.

By using the Julia language, I can easily interface with MATLAB or Mathematica as well, and I have access to the full Grassmann.jl geometric algebra every step of the way.

My philosophy is that a graphical user imterface can always be implemented as an after thought, as long as I already created the necessary API. The user interface should be the last step in such a project.

I’m not exactly sure what you mean, I work directly with the mesh topology including the boundary, I have a language design to deal with that. Either I generate my own geometry from scratch, or I can import it from another source, such as MATLAB or other Julia packages. Other Julia packages may support importing certain file types, and then the imported data could be transformed into the format that I personally designed for my purposes.

I am just using basic and standard finite element procedures, except that every step of the way it is built on top of Grassmann.jl geometric algebra, enabling the immediate manipulation of results with exterior algebra or the geometric product, so that those results can immediately be plotted, and everything is unified tensor algebra along each step.

However, I will not be going into great detail about how I approach all this on a public chat. Perhaps someday I will document these features, when I decide it is appropriate. The only way to learn about these features is if there is a good reason or purpose for me to explain it to someone. Currently, there are no good reasons to explain this stuff to anyone, so I will only make vague statements about my work.

Explaining all this stuff and teaching it is an entire job of itself, a thankless job, where other people will copy and imitate me and they refuse to give attribution. So there is no reason to fully reveal this stuff for now.

As far as splines go, I know a person who has used Grassmann.jl in combination with CUDA to do high performance computing with splines, the person has not published any of the code for that yet.

As a programmer, I resonate with what you said about using the language as your interface. Code will always be more powerful than a visual editor.

I mentioned STEP files because that’s what the mechanical engineer I work with expects from suppliers. It’s an international standard file format for mechanical parts. Its encouraging to hear that Grassman.jl is getting used for research with splines.

Another question for you; Is geometric algebra suitable for expressing contraints? For an example, the top-down of this curved support part is easier to draw if you can express the sides as tangents of the circles. I would be interested to hear how you would approach that problem, even if its only vaguely.

Boundary constraints have nothing to do with geometric algebra directly. How you assemble boundary constraints depends entirely on how you want to calculate them, which can include or exclude geometric algebra and any other calculation, as long as they are the appropriate type of value types.

In other words, you can specify the boundaries however you wish, since in a language interface you can piece together things, piece by piece, to get the end result in whatever way you want to construct.

The only true limitation is how deep your knowledge of mathematics and programming language goes.