I have 2 vertices in 3d space (P1, P3)
I want to create a rectangle that is aligned along the viewrotation. The vertices P1, P3 are already aligned to the current viewrotation matrix. How can I calculate P2 and P4 so that I can create a rectangle?
Alright, now I got a good solution, I wrote a function to calculate the vertex3d from 3d like this, that takes the roation of the viewport into account:
def get_3d_vertex(context, vertex_2d): region = context.region rv3d = context.space_data.region_3d view_rot = rv3d.view_rotation overlay3d = context.space_data.overlay dir = get_view_direction(context) * -context.scene.draw_distance vec = region_2d_to_location_3d(region, rv3d, vertex_2d, dir)
When the rectangle is created I use the 2d mouse points to calculate all points of the rect:
def create_rect(self, context): rv3d = context.space_data.region_3d view_rot = rv3d.view_rotation self._vertices.clear() self._vertices.append(self._vertex1) # self._vertex1 and 3 are already in 3d space vertex2 = (self._vertex1_2d, self._vertex3_2d) vertex2 = get_3d_vertex(context, vertex2) vertex4 = (self._vertex3_2d, self._vertex1_2d) vertex4 = get_3d_vertex(context, vertex4) self._vertices.extend([vertex2, self._vertex3, vertex4])