I do not register a class, I can not understand what the problem is…
import bpyimport bmesh
from bpy.props import IntProperty, FloatProperty
from bpy_extras.view3d_utils import (region_2d_to_origin_3d, region_2d_to_vector_3d, region_2d_to_location_3d)
from mathutils import Vector, Matrix
from math import radians
bl_info = {
"name": "Quick Premetiv :)",
"location": "View3D > Add > Object > Quick Premetiv,",
"description": "Auto detect a delete elements",
"author": "Vladislav Kindushov",
"version": (0,1),
"blender": (2, 7, 8),
"category": "Object",
}
#############################################
first_mouse_y = IntProperty() #
first_mouse_x = IntProperty() #
first_value = FloatProperty() #
bm = bmesh.new() #
#############################################
class Test():
saveCursor = None
verts = None
def Mouse3D(self, context, event):
coord = event.mouse_region_x, event.mouse_region_y
region = context.region
rv3d = context.space_data.region_3d
vec = region_2d_to_vector_3d(region, rv3d, coord) # вектор направления камеры
loc = region_2d_to_location_3d(region, rv3d, coord, vec) # положение мыши в 3d относительно вектора камеры
return loc
def SetCursor (self, context):
loc = self.Mouse3D(self)
bpy.context.scene.cursor_location = (loc)
self.saveCursor = loc
def Create(self):
#bm.from_mesh()
bmesh.ops.create_cube(bm, 2.0, calc_uvs = True)
self.verts = [v for v in bm.verts[1:]]
#все вертексы ставим в 1 положение
for v in self.verts:
v.co = self.saveCursor
def FerstPos(self, tall):
loc = self.Mouse3D(self)
vertsX = bm.verts[4,5,6,7]
vertsY = bm.verts[2,3,6,7]
vertsZ = bm.verts[1,3,5,7]
for v in vertsX:
v.co = loc[0]
for v in vertsY:
v.co = loc[1]
if tall:
for v in vertsZ:
v.co = loc[2]
class QuickPremetiv(bpy.types.Operator):
bl_idname = "quick_premetiv"
bl_label = "Quick Premetiv"
#bl_options = {'REGISTER', 'UNDO'}
Test()
state = False # следит за тем был создан объект или нет
tall = False # следит за моментом когда пора изменять высоту
@classmethod
def poll(cls, context):
return context.active_objectv
def modal(self, context, event):
if event.type == 'MOUSEMOVE':
if not self.state:
Test.SetCursor(self)
if event.type in {'LEFTMOUSE'}:
if self.state:
self.tall = True
if not self.state:
verts = Test.Create(self)
self.state = True
FerstPos(self, self.tall)
return {'PASS_THROUGH'}
elif event.type in {'RIGHTMOUSE', 'ESC'}:
me = bpy.data.meshes.new("Mesh")
bm.to_mesh(me)
bm.free()
# Add the mesh to the scene
scene = bpy.context.scene
obj = bpy.data.objects.new("Object", me)
scene.objects.link(obj)
# Select and make active
scene.objects.active = obj
obj.select = True
return {'FINISHED'}
def invoke(self, context, event):
context.window_manager.modal_handler_add(self)
return {'RUNNING_MODAL'}
def register():
bpy.utils.register_class(QuickPremetiv)
def unregister():
bpy.utils.unregister_class(QuickPremetiv)
if __name__ == "__main__":
register()