Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
Be nice to others! Respect the FreeCAD code of conduct!
Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
Using Python, is there a way to look up all objects (shells/faces/edges/vertices) in a body that intersect with a particular point in 3D space?
For example, imagine my body is a cube occupying [0, 1]x[0, 1]x[0, 1]. Given the point (0, 0, 0.5), I'd like to get the Python edge from (0, 0, 0) to (0, 0, 1). Given the point (0, 0.5, 0.5), I'd like to get the face on the YZ-plane in Python.
For example, imagine my body is a cube occupying [0, 1]x[0, 1]x[0, 1]. Given the point (0, 0, 0.5), I'd like to get the Python edge from (0, 0, 0) to (0, 0, 1). Given the point (0, 0.5, 0.5), I'd like to get the face on the YZ-plane in Python.
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
Code: Select all
doc = App.ActiveDocument
box = doc.addObject("Part::Box", "Box")
doc.recompute()
point = App.Vector(5, 0, 5)
distance, points, info = box.Shape.distToShape(Part.Vertex(point))
print(info)
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
What is the structure of info?
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
Code: Select all
[('Face', 2, (5.0, 5.0), 'Vertex', 0, None)]:
'Face' = subelement
2 = index of subelement (zero-based)
(5.0, 5.0) = (u, v) parameters of the point.
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
Fantastic. Thank you!
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
How do I evaluate the subelement at the supplied parameters?
-
- Veteran
- Posts: 3193
- Joined: Thu Sep 24, 2020 10:31 pm
- Location: Hawaii
- Contact:
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
Code: Select all
face = box.Shape.Faces[2]
print(face.valueAt(5,5)) #-> Vector (5.0, 0.0, 5.0)
face.Surface.normal(5,5)# normal at location etc.
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
How do I transform the result of valueAt into a correct 3D point? I'm trying to use it to produce a point cloud of a BREP, but it is giving incorrect results.
Re: Get all Shells/Faces/Edges/Vertices at a particular point in 3D space
valeAt is returning a Vector() and usually a Vector() will suffice to feed many methods that uses "3d Points" like lines and other entities. In other word where you have to use the returned info?
Regards
Carlo D.
GitHub page: https://github.com/onekk/freecad-doc.
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.
Blog: https://okkmkblog.wordpress.com/
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.
Blog: https://okkmkblog.wordpress.com/