Blender Python编程技巧

整理自 https://docs.blender.org/

bpy.data

object复制

ob = obj.copy() # duplicate linked
ob.data = obj.data.copy() # optional: make this a real duplicate (not linked)
bpy.context.scene.objects.link(ob) # add to scene
ob.location.y += 5

object数学变换

# 获取旋转四元数
ob.rotation_euler.to_quaternion()

文件读写

https://docs.blender.org/api/blender_python_api_current/bpy.types.BlendDataLibraries.html

# 链接所有以A为开头的object
# data_from为原文件的数据,data_to为选择加入当前文件的数据
with bpy.data.libraries.load(filepath, link=True) as (data_from, data_to):data_to.objects = [name for name in data_from.objects if name.startswith("A")]# 复制所有data并进入当前blend文件
with bpy.data.libraries.load(filepath) as (data_from, data_to):for attr in dir(data_to):setattr(data_to, attr, getattr(data_from, attr))# write selected objects and their data to a blend file
data_blocks = set(bpy.context.selected_objects)
bpy.data.libraries.write("./new_library.blend", data_blocks)

object界面选中与取消

ob = bpy.data.objects[0]
ob.select = True # add to selected list
bpy.context.scene.objects.active = ob # make ob active# 选中所有
bpy.ops.object.select_all(action='SELECT')
# 取消所有选中
bpy.ops.object.select_all(action='DESELECT')

添加灯光

scene = bpy.context.scene# Create new lamp datablock
lamp_data = bpy.data.lamps.new(name="New Lamp", type='POINT')# Create new object with our lamp datablock
lamp_object = bpy.data.objects.new(name="New Lamp", object_data=lamp_data)# Link lamp object to the scene so it'll appear in this scene
scene.objects.link(lamp_object)# Place lamp to a specified location
lamp_object.location = (5.0, 5.0, 5.0)

修改Object材质

# 获取第0个材质槽
slot = obj.material_slots[0]
# 材质槽中的材质名
print(slot.name)
# 材质槽的链接方式(OBJECT或DATA)
print(slot.link)
# 材质槽的材质
print(slot.material)
# 仅对OBJECT进行材质修改
mat = bpy.data.materials['Mat.002']
slot.link = 'OBJECT'
slot.material = mat

修改材质的纹理

img = bpy.data.images.load(texturePath)
tex = bpy.data.textures.new("Tex", 'IMAGE')
tex.image = imgmat.texture_slots.add()
slot = mat.texture_slots[0]
slot.texture = tex
slot.texture_coords =  'UV'
slot.mapping =  'FLAT'

bpy.ops

应用数据修改

# 将object的修改应用到mesh数据上
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)

导入obj

bpy.ops.import_scene.obj(filepath='/test/xx.obj', axis_forward='Y', axis_up='Z', use_groups_as_vgroups=True)

另存为blend文件

bpy.ops.wm.save_as_mainfile(filepath="path/to/myfilename")

删除object及其所有数据

# 取消所有选中
bpy.ops.object.select_all(action='DESELECT')
# 选择需要删除Object
bpy.data.objects['Camera'].select = True
# 执行删除
bpy.ops.object.delete()

切换Area类型

types = {'VIEW_3D', 'TIMELINE', 'GRAPH_EDITOR', 'DOPESHEET_EDITOR', 'NLA_EDITOR', 'IMAGE_EDITOR', 'SEQUENCE_EDITOR', 'CLIP_EDITOR', 'TEXT_EDITOR', 'NODE_EDITOR', 'LOGIC_EDITOR', 'PROPERTIES', 'OUTLINER', 'USER_PREFERENCES', 'INFO', 'FILE_BROWSER', 'CONSOLE'}# save the current area
area = bpy.context.area.type
# 当前Area切换到 3D View
bpy.context.area.type = 'VIEW_3D'

Python Tips

Blender后台运行

# 单纯运行,不引入blend文件
blender --background --python myscript.py
blender -b -P myscript.py
# 引入blend文件,直接修改该文件
blender myscene.blend --background --python myscript.py
# 渲染blend文件
blender -b hello.blend -o ./test -F PNG -x 1 -f 1

快速删除list元素

pop_index = 5# swap so the pop_index is last.
my_list[-1], my_list[pop_index] = my_list[pop_index], my_list[-1]# remove last item (pop_index)
my_list.pop()

快速字符串操作

Join is fastest on many strings, string formatting is quite fast too (better for converting data types). String arithmetic is slowest.

rather than…

if line[0:5] == "vert ": ...

use…

if line.startswith("vert "):

循环中减少try

try is significantly slower than an if since an exception has to be set each time, so avoid using try in areas of your code that execute in a loop and runs many times.

启动交互式Python

In the middle of a script you may want to inspect some variables, run some function and generally dig about to see whats going on.

import code
code.interact(local=locals())

If you want to access both global and local variables do this…

import code
namespace = globals().copy()
namespace.update(locals())
code.interact(local=namespace)

The next example is an equivalent single line version of the script above which is easier to paste into your code:

__import__('code').interact(local=dict(globals(), **locals()))

Blender Python编程技巧相关推荐

  1. python编程输入标准-揭秘python编程技巧

    揭秘python编程技巧 一.python的标准输入和输出[root@133 wc]# vim stdin.py #!/usr/bin/python #encoding:utf-8 import sy ...

  2. python编程技巧

    python编程技巧 一. 基础 1. 循环输入(连续输入2次回车退出) 2. 跳出多重循环方法 3. 子类调用父类方法 4. 字典排序 5. 判断文件(夹).路径是否存在 6. 返回句子仅单词首字母 ...

  3. 提高效率的Python编程技巧

    参考B站UP啥都会一点的研究生 整理了十个100%提高效率的Python编程技巧,更上一层楼 1.遍历列表,且要用到其索引位置进行相应的数据操作 遍历列表,且要用到其索引位置进行相应的数据操作 ''' ...

  4. 分享 10 个超实用的 Python 编程技巧

    作者 | 欣一 来源 | Python爱好者集中营 今天小编来给大家分享几个Python的编程技巧,帮助你迅速完成地从小白到Python大神的蜕变. 字典翻转 首先我们来看字典的翻转,假设我们有下面类 ...

  5. python编程口诀_科学网—Python编程技巧汇总 - 高关胤的博文

    正在学习python编程,把一些小技巧记录下来备查 ======================计算技巧========================== 正常的条件语句如下if a>b:c= ...

  6. Python编程技巧和需要注意的地方——Pro

    目录 前言 1.多个大数字相加 2.同时访问多个相互关联的列表 3.访问列表的同时输出对应下标 4.熟练使用*和_ 5.关于类的get和set方法 6.熟练使用help和dir方法 7.什么时候使用s ...

  7. 总结了90条简单实用的Python编程技巧

    点击上方"菜鸟学Python",选择"星标"公众号 超级无敌干货,第一时间送达!!! 来源:萝卜大杂烩 编码原则 建议1:理解 Pythonic 概念--详见 ...

  8. python 编程提高效率_15 个提高效率的 Python 编程技巧

    作者:George Seif 翻译:马可薇 来源:InfoQ 每次写 Python 都会忘记该怎么写,最后只能去 Stack Overflow 查?我也一样.时间一长,这让人厌倦. 这 15 个 Py ...

  9. 15个优雅的Python编程技巧,掌握后瞬间玩转Python

    学Python朋友们应该都喜欢整洁.一目了然的代码.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:reque ...

最新文章

  1. android 当前置顶的控件,Android利用RecyclerView实现全选、置顶和拖拽功能示例
  2. 在线作图|在线做Metastats组间差异分析
  3. 当医疗遇上人工智能,你不可不知的未来医疗5大趋势
  4. mysql行级锁实例,PHP – MySQL行级锁定示例
  5. 基于网络音频的Android播放程序简单示例
  6. 数据挖掘之聚类k-means
  7. 分支合并 Fork-Join 框架
  8. java线程名_java多线程
  9. html部分位置属性
  10. accept 返回0_从0开始理解Vite的主要新特性(一)
  11. 16R-在数组中查找目标值
  12. 目标检测——各个框架下Tensor和矩阵的维度次序
  13. 积分与坐标变换(极坐标)
  14. oracle 创建备份目录,Oracle rman创建和自动化备份
  15. 使用iMazing创建配置文件时的几个重要首选项组
  16. LY.JAVA.DAY12.Scanner
  17. CE修改器使用教程 [基础篇]
  18. 可变模糊集理论matlab程序,可变模糊集理论的哲学基础
  19. 第二十八篇 -- 学习第五十一天打卡20190819
  20. 【毕业设计项目】基于单片机的指纹识别系统实现 - 物联网 stm32 c51

热门文章

  1. oracle commandtimeout,连接池和 Timeout expired异常解决方法
  2. android spinner 简书,一步一步自定义spinner
  3. MVC 自定义AuthorizeAttribute实现权限管理
  4. 【在线研讨】《敏捷开发用户故事分类与组织结构(三期-3)》
  5. 计算机不能读手机内存不足,电脑和手机的内存不足怎么办
  6. Python Supervisord 进程管理工具
  7. 高斯模糊c语言,C语言实现高斯模糊
  8. 超级签研究流程之获取苹果描述文件
  9. 设计新一代的网游——第三章(游戏概况)
  10. FZU2207 以撒的结合(最近公共祖先lca,在线倍增)