Пример #1
0
 def intersect_face(pt):
     # todo: rewrite! inefficient!
     nonlocal vis_faces2D
     for f, vs in vis_faces2D:
         v0 = vs[0]
         for v1, v2 in iter_pairs(vs[1:], False):
             if intersect_point_tri_2d(pt, v0, v1, v2): return f
     return None
Пример #2
0
 def intersect_face(pt):
     # todo: rewrite! inefficient!
     nonlocal vis_faces2D
     for f,vs in vis_faces2D:
         v0 = vs[0]
         for v1,v2 in iter_pairs(vs[1:], False):
             if intersect_point_tri_2d(pt, v0, v1, v2): return f
     return None
Пример #3
0
    def is_in_shape(self, x, y):
        tri_indices = self.indices
        verts, lineverts = self.scale_and_offset_verts()
        # x, y = bpy.types.View2D.view_to_region(x, y, clip=True)

        for tri in tri_indices:
            if intersect_point_tri_2d(Vector((x, y)), verts[tri[0]],
                                      verts[tri[1]], verts[tri[2]]):
                return True
        return False
Пример #4
0
 def get_state(point:Point2D):
     nonlocal vis_faces2D
     point3D = self.rfcontext.get_point3D(point)
     if not point3D: return ('off', None)
     if self.rfcontext.is_point_on_mirrored_side(point3D): return ('off',None)
     for bmf,cos in vis_faces2D:
         co0 = cos[0]
         for co1,co2 in zip(cos[1:-1],cos[2:]):
             if intersect_point_tri_2d(point, co0, co1, co2):
                 return ('tar', bmf)
     return ('src', None)
 def get_state(point: Point2D):
     nonlocal vis_faces2D
     point3D = self.rfcontext.get_point3D(point)
     if not point3D: return ('off', None)
     if self.rfcontext.is_point_on_mirrored_side(point3D):
         return ('off', None)
     for bmf, cos in vis_faces2D:
         co0 = cos[0]
         for co1, co2 in zip(cos[1:-1], cos[2:]):
             if intersect_point_tri_2d(point, co0, co1, co2):
                 return ('tar', bmf)
     return ('src', None)
Пример #6
0
 def point_is_inside_of_tri(self, p, tri, threshold=THRESHOLD,
                            exclude_edges=False):
     """
     pがtriの中に含まれるか調べる。
     p:             2d persp coord
     exclude_edges: triの三辺上に来る場合は偽とする。
     """
     tri_vecs = [self.persp_coords[loop.vert].to_2d() for loop in tri]
     # 三角形の三辺上にくるか調べる
     for i in range(3):
         v1 = tri_vecs[i - 1]
         v2 = tri_vecs[i]
         if isect_point_line_v2(p, v1, v2, threshold):
             if exclude_edges:
                 return False
             else:
                 return True
     return bool(geo.intersect_point_tri_2d(p, *tri_vecs))
Пример #7
0
 def point_is_inside_of_tri(self, p, tri, threshold=THRESHOLD,
                            exclude_edges=False):
     """
     pがtriの中に含まれるか調べる。
     p:             2d persp coord
     exclude_edges: triの三辺上に来る場合は偽とする。
     """
     tri_vecs = [self.persp_coords[loop.vert].to_2d() for loop in tri]
     # 三角形の三辺上にくるか調べる
     for i in range(3):
         v1 = tri_vecs[i - 1]
         v2 = tri_vecs[i]
         if isect_point_line_v2(p, v1, v2, threshold):
             if exclude_edges:
                 return False
             else:
                 return True
     return bool(geo.intersect_point_tri_2d(p, *tri_vecs))
Пример #8
0
def inside_tri_tri_2d(v1, v2, v3, v4, v5, v6):
    """(v1, v2, v3)が(v4,v5,v6)の内側に在る場合1を返す(重なる場合も含む)。
    逆なら-1(重なる場合も含む), 重ならない場合は0を返す。
    """
    if geom.intersect_point_tri_2d(v1, v4, v5, v6):
        if geom.intersect_point_tri_2d(v2, v4, v5, v6):
            if geom.intersect_point_tri_2d(v3, v4, v5, v6):
                return 1
    if geom.intersect_point_tri_2d(v4, v1, v2, v3):
        if geom.intersect_point_tri_2d(v5, v1, v2, v3):
            if geom.intersect_point_tri_2d(v6, v1, v2, v3):
                return -1
    return 0
Пример #9
0
def inside_tri_tri_2d(v1, v2, v3, v4, v5, v6):
    """
    (v1, v2, v3)が(v4,v5,v6)の内側に在る場合1を返す(重なる場合も含む)。
    逆なら-1(重なる場合も含む), 重ならない場合は0を返す。
    """
    if geom.intersect_point_tri_2d(v1, v4, v5, v6):
        if geom.intersect_point_tri_2d(v2, v4, v5, v6):
            if geom.intersect_point_tri_2d(v3, v4, v5, v6):
                return 1
    if geom.intersect_point_tri_2d(v4, v1, v2, v3):
        if geom.intersect_point_tri_2d(v5, v1, v2, v3):
            if geom.intersect_point_tri_2d(v6, v1, v2, v3):
                return -1
    return 0