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 Answer 1

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$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .