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