I would like to know when a 3D point is directly seen from any other position in space, i.e., when there is no obstacle (wall, object…) in between. Is it possible to achieve using the Ruby API?
Basically I’m trying to return a true flag when the point is seen, and a false flag when it’s not.
Let’s assume you have your two points already defined [eye and target]
vector = point_for_eye.vector_to( point_for_target )
ray = [ point_for_eye, vector ]
hit = Sketchup.active_model.raytest( ray, false )
if hit
### there is something in the way
else ### it's nil
### there is nothing in the way
end
Note that the raytest also returns truthy when the ray hits something beyond the target point. You also need to check if a hit is closer or further away from the eye point than the target is.
@eneroth3 makes a good point.
Modify the code to trap for this…
'''
if hit
### there is perhaps something in the way
if point_for_eye.distance(hit[0]) < point_for_eye.distance(point_for_target)
### the hit point is between the eye and target, so you can't see the target
else
### the hit is beyond the target, so you can still see the target
end
...