Hi. I’m interested in measuring the distance between points along a mesh. A simple example would be the circumference of a sphere - the actual meshes are more dynamic than a sphere. As a test I’ll be trying to measure the distance between points along the stanford bunny library model. I would also like to show this distance (a strip along the surface)
I’m posting here in hopes of getting a few ideas to approach this. Below is what I’m going to start on, please let me know if I should divert my attention to other efforts.
Approach:
Define points (at first a 360 degree slice at some height)
Create ray cast intersection function to get location of mesh from some interior or exterior observation point (start at some inner section centroid)
Call the function at intermediate points along the section (start with measurement at 1 degree)
Calculate length along mesh by sum of change in measurements
I will also investigate creating a “path” at the intersection (of plane and mesh) and tracing or following / measuring the path.
I’m wondering about alternative approaches or built in functions - Any thoughts would be appreciated.
Latest PG here. This gets a bunch of points about 180 degrees at any height by casting a ray and getting the intersection.
I’m now going to use each of the points to form a curve / path and see if I can get length from that object.
If not I’ll sum up the change in measurements. The curve will at least be a nice way to visualize.
Interesting problem. Which means it is not as straightforward as it might seem! First of all what do you mean by the distance between points along a mesh? Assuming you mean the shortest surface distance between two points on the surface of the mesh.
Take a bowl as a mesh with two points on the rim of the mesh. Taking a verticle slice the path between the two points would be down one side to the bottom and up the other this would be longer than taking a horizontal slice and travelling the rim of the bowl. Then again with the horizontal slice going one way round the rim will be shorter than the other.
What if one point was on the rim and the other on the outside of the bowl and further round the bowl, what angle would the slice have to be to get the shortest root?
What is the range of meshes you want to look at? How much do you want the calcultion to be done automatically and how much user intervention can there be in determining the path to take?
thanks for your interest. In reality the geometry will be a similar set of cylindrical shapes (undulating a bit like peanuts or potatoes).
An ideal solution would act like a 3d printer slicer and calculate the length of the slice. The skull in my latest PG is a bit more shaped with multiple regions (enclosed portions) than I’ll actually have. The two points will be along some plane (height in this skull pg) making it a bit eaiser.
This wouldn’t give the exact distance but an upper bound, but a possibility would be doing a BFS through the edges between the two points. There is a similar idea here on the Trimesh library: trimesh/shortest.py at main · mikedh/trimesh · GitHub