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.
Solved Get points within a given radius
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).
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.