Merge branch 'blender-v3.6-release'
[blender-addons.git] / mesh_tiny_cad / V2X.py
blob5d71c3b489029a319d0658de74ab372e98be8647
1 # SPDX-License-Identifier: GPL-2.0-or-later
4 import bpy
5 import bmesh
6 from mathutils import geometry
9 def add_vertex_to_intersection():
11 obj = bpy.context.object
12 me = obj.data
13 bm = bmesh.from_edit_mesh(me)
15 edges = [e for e in bm.edges if e.select]
17 if len(edges) == 2:
18 [[v1, v2], [v3, v4]] = [[v.co for v in e.verts] for e in edges]
20 iv = geometry.intersect_line_line(v1, v2, v3, v4)
21 if iv:
22 iv = (iv[0] + iv[1]) / 2
23 bm.verts.new(iv)
25 bm.verts.ensure_lookup_table()
27 bm.verts[-1].select = True
28 bmesh.update_edit_mesh(me)
31 class TCVert2Intersection(bpy.types.Operator):
32 '''Add a vertex at the intersection (projected or real) of two selected edges'''
33 bl_idname = 'tinycad.vertintersect'
34 bl_label = 'V2X vertex to intersection'
35 bl_options = {'REGISTER', 'UNDO'}
37 @classmethod
38 def poll(cls, context):
39 obj = context.active_object
40 return obj is not None and obj.type == 'MESH' and obj.mode == 'EDIT'
42 def execute(self, context):
43 add_vertex_to_intersection()
44 return {'FINISHED'}