I have questions and suggestions regarding the measure tool for solids (geometry). I have geometries which are topologically similar to the part attached to this post (measureSolid.txt => rename to stp file):
I have machined parts with many different local thicknesses, while the "back face" is one "huge" surface.
For example I would like, for each orange surface, to know the thickness with one click (selecting the surface). This is a classic CAD functionnality.
The "Distance Between Geometry" tool works fine but after the 10th time it requires too many clicks. Same goes when using the "onto surface" method when measuring.
I'm not using v11.2.1 yet so this may already be done. If not I am interested in any ideas on the subject.
I wrote the attached piece of code which does the job, however it's not full proof.
This functionnality would be very useful for us in future versions: to be able to measure very quickly the local thickness of a solid. Looking at the "Variable Thickness Processing" upgrades in v11.2 I'm guessing something can be done.
Solved! Go to Solution.
There are no changes to this functionality in v11.2.1, but we would certainly be interested in hearing your (and others) input on how to improve this.
Do you still want to specify the surface(s) to measure from... the "base plane" in your model,,, and then just click around to surfaces to measure thicknesses? Or do you simply want to click a surface and have FEMAP figure out what "thickness" means (basically like you do in the API)? I don't see how the latter method could ever be 100% perfect for the general case ... for your model, yes... but in the case where there are multiple non-parallel surfaces, all at different depths, "below" the one you pick, your intention certainly would not be clear. We could ask more questions, but that would kind of defeat the purpose of single-click.
The later: I want to click a surface and have FEMAP figure out the thickness.
I wonder whether this would be doable via the cursor position: could it be possible through one click to select a surface and retrieve the cursor position where the user clicked the surface? The "cursor position" toolbar shows this location, so somewhere this is accessible (I haven't found it in the API though...)
Then what's missing (well, in the API) is the ability to project a coordinate onto a surface along a vector. That would be great: in the same way that you generalised point and node projection in the Modify > Project menu, you could regroup all the "feCoordOnto" methods in the API. But I digress.
In the end this is all ray tracing: from the cursor position, shoot a ray which is orthogonal to the screen towards the surface => that's the spot the user clicked on the surface. And then do something similar to the macro: shoot a ray in the direction of the local surface normal (the normal at the location that the user picked), find the "closest" surface intersected (through spreading), and compute the distance.
The "closest" surface means the closest connectivity-wise: by repeating "add curves on surfaces" and "add surfaces using curves" you "spread" through the solid. I agree that this is not full proof:
for a solid like this, the green surface is "closer" than the orange surface, so the algorithm described will return a false value. But that seems like a very particular case...
So in the end the "thickness" would be defined as the distance between the point I've clicked, on the surface I've selected, to the "nearest" (connectivity-wise) surface which intersects the local normal at the selected point. Ex:
the points with labels are selected.
It must be noted that points 2 and 3, though "on the same level", yield completely different results, but that is up to the user to know what he is doing / what the command measures. Highlighting the arrow (as done in the API) would help the user to understand the thickness returned.
Points 3 and 4, though close, will also return different thicknesses.
Point 5 (vertex) requires special treatment (more complex), personnaly I can do without it.
Thanks for your response!
I will look at this to see if there is something we can do in the future, but just wanted to let you know there is something in the API that you might have missed. Take a look at feSolidRayFire( ) and/or feSurfaceRayFire( ). They were added in v11.2 and let you "shoot" rays from any location you like and see what surface it hits along with the location that it hits. You could certainly combine this with one of the "Normal" methods of the surface object to fire rays normal to a surface at a location.
Great thanks a lot!
I'm still on v11.1.1, I look forward to playing around with the ray gun! This opens some very interesting possibilities, for example in opto-mechanical design. We are in the process of switching to v11.2.1.