上次示例使用了 Blender28 作为示范,那么作为使用 Python 语言时,到底是如何学会面向对象编程的呢?有的人问了我这个问题,那么这个过程是分为三步:
1.流程化编程,也就是把代码都写在一个模块里,按照从上到下,从左到右的一种程序阅读顺序来写作。
2.函数式编程,也就是开始使用函数来对代码进行重组,这是编程思维成长中的第二个阶段。
3.面向对象编程,或叫做结构化编程,也就是编程思维的终极阶段。
总体来说,这3个阶段既具有独立学习性,也具有相互合作性。不能用统一思想来看待这三个阶段,因为是灵活的,不是死板的。
那么用下列一段代码示例来体会一下成长三阶段:
#!/usr/bin/env python
“““书写Blender插件的工作流
1.写一个模块作为开始。
2.继续开发该模块。
3.把模块转换成一个插件。
“““
import bpy
from bpy import context
###流程介绍
##获得当前场景
#scene = context.scene
##获得3D光标的位置
#cursor = scene.cursor.location
##如果场景中有一个物体的话,获得当前选中的那个物体
#obj = context.active_object
##建立一个物体副本
#obj_new = obj.copy()
##新复制的物体要加入到场景中的收集对象里中
#scene.collection.objects.link(obj_new)
##然后才能摆放物体
#obj_new.location = cursor
##函数式编程
#接下来我们要用迭代来建立一组对象
#使用选中的物体和光标完成建立一串物体
def onebyone(total=10):
“““默认建立10个串联起来的物体组“““
scene = context.scene
cursor = scene.cursor.location
obj = context.active_object
for i in range(total):
obj_new = obj.copy()
scene.collection.objects.link(obj_new)
#把物体放在光标和选中的物体之间
#依据就是可迭代变量 i
#那么如果你的物体与光标重叠时就无法看到串联效果
#所以要让光标与物体存在一段距离
factor = i / total
obj_new.location =(obj.location * factor)+(cursor *(1.0 - factor))
##接下来我们会制作成 Blender28 的一个插件
bl_info ={
“name“:“Cursor Array“,
“blender“:(2,80,0),
“category“:“Object“,
}
class ObjectCursorArray(bpy.types.Operator):
“““物体光标阵列“““
bl_idname =“object.cursor_array“
bl_label =“One by One“
bl_options ={'REGISTER','UNDO'}
def __init__(self):
self.total = 10
def execute(self, context):
scene = context.scene
cursor = scene.cursor.location
obj = context.active_object
for i in range(self.total):
obj_new = obj.copy()
scene.collection.objects.link(obj_new)
factor = i / self.total
obj_new.location =(obj.location * factor)+(cursor *(1.0 - factor))
return {'FINISHED'}
def register():
bpy.utils.register_class(ObjectCursorArray)
def unregister():
bpy.utils.unregister_class(ObjectCursorArray)
if __name__==“__main__“:
register()