Blender Python 脚本:Place/Connect 全局坐标的顶点

Blender Python Script: Place/Connect Vertices by Global Co-ordinance

要挤出顶点,在编辑模式下,您只需按 Ctr+RMB,Blender 会自动检测鼠标位置并在该位置放置一个新的连接顶点。

我不明白为什么我不能设置鼠标位置,然后在信息 window 中使用相同的功能,如下所示:

bpy.context.scene.cursor.location = (0.0, 0.0, 0.0) bpy.context.scene.cursor.location = (1,1,1) bpy.ops.mesh.dupli_extrude_cursor(rotate_source=True)

当我 运行 时,出现以下错误:

RuntimeError: Operator bpy.ops.mesh.dupli_extrude_cursor.poll() expected a view3d region & editmesh

我需要这样,因为我的对象格式是全局协调的,我想避免与创建网格的低级函数交互,因为这是高级软件的脚本。

编辑>>>>

我尝试与操作员进行此操作:

import bpy


class MyExtrude(bpy.types.Operator):
    bl_idname = "wm.myextrude"
    bl_label = "Extrude Operator"



    def invoke(self, context, event):
        bpy.context.scene.cursor.location = (1,1,1)
        bpy.ops.mesh.dupli_extrude_cursor(rotate_source=True)
        return {'FINISHED'}


#weird workaround
classes = (MyExtrude,

          )

register, unregister = bpy.utils.register_classes_factory(classes)


if __name__ == "__main__":
    register()


bpy.ops.wm.myextrude('INVOKE_DEFAULT')

然而它returns同样的错误:

RuntimeError: Operator bpy.ops.mesh.dupli_extrude_cursor.poll() expected a view3d region & editmesh

当操作员执行其任务时,它会收到一个上下文 属性 告诉它诸如所选对象和它正在使用的 3D 视图之类的信息。当您 运行 在文本编辑器中编写脚本时,活动视口将成为 3d 建模运算符无法运行的文本编辑器。

可以override the context being sent to an operator, which allows us to run a script that works in the 3dviewport. Also note that the object needs to be in edit mode

您也可以考虑从内部定义一个 operator and calling other operators。当您的操作员从 3d 视图中启动时,无论是搜索它、将其附加到快捷方式还是在面板中添加按钮,它都会有正确的上下文传递给其他操作员。