要在编辑模式下挤出顶点,只需简单地使用Ctr+RMB,混合器就会自动检测鼠标位置,并在该位置放置一个新的连接顶点。
我不明白为什么我不能设置鼠标位置,然后在信息窗口中使用相同的功能,如下所示:
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
我需要这种方式,因为我的对象的格式是全局协调的,我想避免与创建网格的低级函数交互,因为这是一个用于高级软件的脚本。
EDIT>>>>
我用一个操作员尝试了一下:
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
发布于 2019-12-18 14:06:02
当操作员执行其任务时,它会收到一个上下文属性,告诉它所选对象以及它在哪个3D视图中工作。在文本编辑器中运行脚本时,活动视口将成为文本编辑器,其中3d建模操作符无法工作。
可以override the context the sent to an operator,这允许我们运行一个在3dviewport中工作的脚本。另请注意,该对象需要为in edit mode。
您还可以考虑从内部定义operator和calling other operators。当你的操作符从3d视图中启动时,无论是通过搜索它,将它附加到快捷方式还是在面板中添加按钮,它都将具有正确的上下文以传递给其他操作符。
https://stackoverflow.com/questions/59365940
复制相似问题