# Draw 3D with Python more in front

I have an addon with that I draw in 3d space (lines). The vertices are where I click with the mouse cursor.

I use the region_2d_to_location to get a point from the mouse coordinates in 3d space. But I want to draw a bit more "in front" like 2 or 3 units in direction of the view camera (hope this is understandable:-))

I guess I have to manipulate the last parameter of the region_2d_to_location function, but how to calculate this location dependant on the current view?

I guess I can use the

bpy.context.space_data.region_3d.view_rotation


and then kind of multiply a vector like (2,2,2) with it to draw in a distance to the origin. Any ideas on how to do this with this Quaterion?

• Related Add scalar * view_direction_vector to result of region2d to 3d location. – batFINGER Dec 18 '18 at 9:50
• I can get the view_direction like this: dir = bpy.context.space_data.region_3d.view_rotation * mathutils.Vector((0,0,-1)) vec = region_2d_to_location_3d(region, rv3d, (x, y), (0,0,0)) vec += 2.0 * dir // but a quaternion cant be added to a vector – Jayanam Dec 18 '18 at 10:10
• Oh really? Please re-check. Both dir and vec as stated above are vectors. r3d.view_rotation is a quaternion. A quaternion * vector => vector. Make dir a unit vector vec -= 2 * dir.normalized(). – batFINGER Dec 18 '18 at 10:57
• Sheet man... If you are in 2.8 use @ instead of * – batFINGER Dec 18 '18 at 11:41
• @batFINGER Oh man, that's it, you saved me! – Jayanam Dec 18 '18 at 11:44

rot = bpy.context.space_data.region_3d.view_rotation