1
$\begingroup$

I have 2 vertices in 3d space (P1, P3)

enter image description here

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?

$\endgroup$
1
$\begingroup$

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[0], self._vertex3_2d[1])
    vertex2 = get_3d_vertex(context, vertex2)

    vertex4 = (self._vertex3_2d[0], self._vertex1_2d[1])
    vertex4 = get_3d_vertex(context, vertex4)  

    self._vertices.extend([vertex2, self._vertex3, vertex4])
$\endgroup$

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.