我想访问其他类的变量。 其他类的静态变量访问非常好。 但dynimic changed这个类的变量值不能很好地访问。在
为什么我不能得到变化的变量值?在
bl_info = {
"name": "New Object",
"author": "Your Name Here",
"version": (1, 0),
"blender": (2, 75, 0),
"location": "View3D > Add > Mesh > New Object",
"description": "Adds a new Mesh Object",
"warning": "",
"wiki_url": "",
"category": "Add Mesh",
}
import bpy
class SelectFace(bpy.types.Operator):
bl_idname = "object.d0"
bl_label = "Select Face"
selected_faces = 2
def __init__(self):
self.selected_faces = 3
def execute(self, context):
print("self.selected_faces: ", self.selected_faces)
self.selected_faces += 1
bpy.ops.object.d1('INVOKE_DEFAULT')
return {'FINISHED'}
class OperationAboutSelectedFaces(bpy.types.Operator):
""" Test dialog. """
bl_idname = "object.d1"
bl_label = "Test dialog"
F_num = bpy.props.IntProperty(name="be Selected face", default=1)
@classmethod
def poll(self, context):
obj = context.object
return(obj and obj.type == 'MESH' and context.mode == 'OBJECT')
def invoke(self, context, event):
# This block code is Not Work! --- TypeError: bpy_struct.__new__(type): expected a single argument.
testInstance = SelectFace() # why not work?
print("testInstance.selected_faces: ", testInstance.selected_faces)
self.F_num = testInstance.selected_faces
# This block code is nice Work!
testInstance = SelectFace.selected_faces
print("testInstance: ", testInstance)
self.F_num = testInstance
return context.window_manager.invoke_props_dialog(self)
def execute(self, context):
context.active_object.data.polygons [self.F_num].select = True
return {'FINISHED'}
def register():
bpy.utils.register_class(SelectFace)
bpy.utils.register_class(OperationAboutSelectedFaces)
def unregister():
bpy.utils.unregister_class(SelectFace)
bpy.utils.unregister_class(OperationAboutSelectedFaces)
if __name__ == "__main__":
register()
bpy.ops.object.d0()
混合器中的操作员用于执行操作。当我们使用一个类来定义该操作和相关属性时,我们不应该将它们视为普通的python类。运算符的属性应该用来调整操作表达式,而不是用来保存变量数据。在
由于操作符属性控制操作符的结果,blender使用它们执行撤消/重做步骤。这些属性也可由用户通过按F6使用操作员属性面板进行调整,也可以在工具栏区域的底部找到。在
{a1}
将
bl_options = {'REGISTER', 'UNDO'}
添加到运算符,以允许用户调整运算符。您也可以通过给操作员一个draw(self,context)
方法来自定义此面板中的显示。在为了控制在我们直接调用运算符时运算符如何执行其任务,我们可以将属性添加到运算符调用-
如果要将操作员按钮添加到面板,则可以使用-
^{pr2}$或者如果需要设置多个值,可以使用-
您提供的示例使用的属性似乎仅对一个对象有效,如果用户选择另一个对象,则该属性将不再有效。此属性作为一个对象属性会更好地工作,您可以add a property添加到对象类(或其他列为subclasses of ID)中,方法是将其添加到插件
register()
中并将其删除在unregister()
中对于该示例,您甚至可以在需要该值时对选定的面进行计数-
我认为
才是真正的问题。在
参见: https://www.blender.org/api/blender_python_api_2_60a_release/info_overview.html
似乎不希望您编写的代码创建bpy.types.运算符. 也许是搅拌机手柄bpy.types.运算符以自己的方式创建子类。在
“注意这些类没有定义init(self)函数。虽然如果定义了init()和del()将被调用,但类实例的生存期仅跨越执行过程。因此,例如面板,每次重画都会有一个新实例,因此很少有理由在面板实例中存储变量。相反,持久变量应该存储在blender数据中,以便在blender重新启动时恢复状态。”
另请参见属性定义:https://www.blender.org/api/blender_python_api_2_66a_release/bpy.props.html
相关问题 更多 >
编程相关推荐