Incise TriangularFEMForceField depending on stress #2629
Replies: 6 comments 17 replies
-
|
Dear @TheGreatLudini Thanks for this interesting post. As you know, topological change is not a straightforward topic, but you identified correctly the components to look at mostly the InciseAlongPathPerformer, TopologicalChangeManager. In your case, you would like the physics (some ForceField corresponding to a constitutive model) to provide the stress info and from here compute a incision / tearing / rupture. I would do it as follows:
To make it in python to have different tearing criteria, which is an interesting move, you can:
I hope this helps. |
Beta Was this translation helpful? Give feedback.
-
|
Hello, just quickly to complete @hugtalbot answer. As you mention, the blackbox code is inside the class And to give a proper answer, if you look at the case INCISE in this processor. You can see the order of calls:
|
Beta Was this translation helpful? Give feedback.
-
|
Otherwise, I think what you a looking for is this behavior based on TriangularFEMForceField stress information. This was done during an internship I supervised, but not fully integrated. |
Beta Was this translation helpful? Give feedback.
-
|
Hello @hugtalbot and @epernod, Thank you very much for your answers, this helps a lot. I will look into your suggestions and keep you updated on my results. Regarding the work that was done during an internship that you supervised, @epernod: Thank you for the offer, this looks exactly like the behavior I want to implement. However, because of limited capacity, I cannot guarantee to finish the integration of your work as an open-source plugin for SOFA, so therefore I will try to create a tearing plugin on my own. Maybe I can share my work as a fully integrated plugin at a later stage. Best regards, |
Beta Was this translation helpful? Give feedback.
-
|
Hi @hugtalbot and @epernod, I made a lot of progress in the tearing simulation, using the TopologicalChangeProcessor. Now, I am facing some issues regarding the tear propagation. My tear algorithm now looks like this:
I am only analyzing the triangles around the tear end point because in reality, a tear would rather propagate from an existing end point. If I analyzed all triangles in the mesh, the tear would sometimes "jump" to a completely new location, leading to unrealistic tears. I have to main problems with this algorithm: First of all, the tear can only propagate from one single end point. But usually, a tear has multiple locations from where it could propagate. But if I let the tear occur in all locations of the mesh, it looks unrealistic. It would be best if the tear could propagate from all of its end points, but I don't know how to determine if a triangle is located at an end point of an incision. Coming back to the video that you posted, @epernod: In this video, the tearing looks really smooth and can also propagate from multiple ends. Could you specify how the tearing propagation was implemented? Were all triangles in the mesh analyzed for their stress? How was the length of the tear propagation calculated? I would really appreciate it if you could give some hints on that! Thank you very much. Best regards, |
Beta Was this translation helpful? Give feedback.
-
|
This topic is directly related to this one #3161 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi everyone,
I would like to simulate the tearing of a 2D FEM mesh, using a TriangularFEMForceField (SOFA v21.12 on Windows). For that purpose, I am extracting the principal stress in every element and compare it to a threshold. If the stress is exceeding the threshold inside a triangle, I would like to incise that triangle along the principal stress direction, which includes splitting the triangle or snapping the incision to an edge, snap to a border, and so on.
So essentially, I want to recreate the behavior that happens when you interact with Shift+wheelClick with the mouse, but instead of 'cutting' (checking if there is a collision between mouse and object and then incise the mesh), I want to implement 'tearing' (checking the stress and then incise the mesh at a desired triangleID).
My question is now: What is the best way to do this? I saw that there are already some functions implemented in InciseAlongPathPerformer, TopologicalChangeManager and TriangleSetGeometryAlgorithms that handle these kinds of topological changes when interacting with the mouse. Maybe if I could somehow use these functions (for example
TriangleSetGeometryAlgorithms::SplitAlongPathorTriangleSetGeometryAlgorithms::InciseAlongEdgeList), but without the Performer from the mouse interaction inbetween... Or is there another way to do it?Furthermore, I would like to use SofaPython3 for my scene, so that I can implement different tearing criteria and experiment a bit.
As I heard that you are an expert in the topic of topological changes, maybe you can help me with this problem, @epernod? Thanks in advance!
Best regards,
Ludwig
Beta Was this translation helpful? Give feedback.
All reactions