Get points within a given radius
-
Hi all,
is there a python function to get the points of an object within a given radius of a defined position?
I can iterate through all the points but this can get costly. -
Hi Orestis,
Unfortunately, all helpers classes available in C++ such as KDTree, DistanceQueryInterface or either VoxelizationInterface are not available in Python. So the only reliable way is to iterates over all the points like so.
import c4d import sys # Main function def main(): start = time.time() if not op: return if not isinstance(op, c4d.PointObject): return # WorldPosition to Match posToMatch = c4d.Vector(25, -13, -88) # Retrieves points position in World Position opMat = op.GetMg() pts = [pt * opMat for pt in op.GetAllPoints()] if not pts: return # Iterates overs all list to find the closest point nearestDist = sys.float_info.max ptId = None for x, pt in enumerate(pts): dist = (pt - posToMatch).GetLength() if dist >= nearestDist: continue nearestDist = dist ptId = x print nearestDist, ptId # Execute main() if __name__=='__main__': main()
I have also tested to do some threading stuff, but due to the GIL in python, this does not bring any performance gain (even worse).
Cheers,
Maxime. -
Thanks Maxime, that clears it out.
-
You may want to consider to use scipy.
You have to do indexing once, but can the efficiently iterate over the points within a desired radius with the functions that come with the module.