首页 > 解决方案 > Blender Python 脚本:按全局坐标放置/连接顶点

问题描述

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

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

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')

但是它返回相同的错误:

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

标签: pythonblenderverticesplane

解决方案


当操作员执行其任务时,它会收到一个上下文属性,告诉它诸如所选对象和正在工作的 3D 视图。当您在文本编辑器中运行脚本时,活动视口将是 3D 建模操作员无法运行的文本编辑器.

可以覆盖发送给操作员的上下文,这允许我们运行在 3dviewport 中工作的脚本。另请注意,该对象需要处于编辑模式

您还可以考虑定义一个运算符并从内部调用其他运算符。当您的操作员从 3dview 中启动时,无论是通过搜索、将其附加到快捷方式还是在面板中添加按钮,它都将具有正确的上下文以传递给其他操作员。


推荐阅读