【Blender Python】随手一记

一个猴头复制另一个猴头的形状

import bpydef update_mesh(scene):o1 = bpy.data.objects['猴头']o2 = bpy.data.objects['猴头.001']for vert in o1.data.vertices[:]:o2.data.vertices[vert.index].co = vert.coprint("update Finished!!!")update_mesh( bpy.context.scene)
bpy.app.handlers.frame_change_pre.append(update_mesh)

设置一个集合的是否可见

 import bpydef set_visible(col_name, is_hide, obj_type = 'MESH'):if col_name in bpy.data.collections:col = bpy.data.collections[col_name]else:returnfor o in col.objects:if obj_type == o.type:o.hide_set(is_hide)

再起一个blender

import subprocess
subprocess.Popen(bpy.app.binary_path)

模型成堆起伏

import bpy
import mathC = bpy.contextobjs = C.scene.objects
#for obj in objs:
#    if obj.name.startswith("N"):
#        obj.select_set(True)
#        obj.location[2] += -1size = 10
for obj in objs:x_sin = size * math.sin(obj.location[0] / 10)y_sin = size * math.sin(obj.location[1] / 10)obj.location[2] = x_sin + y_sin

修改器目标选中

import bpy
C = bpy.context
D = bpy.dataobjs = D.objectstail = "_W"
tail2 = "_L"
for obj in C.scene.objects:for mod in obj.modifiers[:]:if mod.type == 'SHRINKWRAP':try:mod.target = objs[obj.name + tail]except:print("NONE")continueif mod.type == 'LATTICE':try:l_obj = objs[obj,name + tail2]if isinstance(l_obj.data, bpy,types.Lattice):mod.object = l_objexcept:print("NONE")continue

蜡笔的标注 转换为 网格

import bpy
import bmeshgp = bpy.data.grease_pencils['Annotations']
l = gp.layers[0]
frame = l.frames[0]
sts = [st for st in frame.strokes]me = bpy.data.meshes.new(name = "Mesh")
o = bpy.data.objects.new(name = "MyObjectCollection", object_data = me)
bpy.context.scene.collection.objects.link(o)bm = bmesh.new()for st in sts:for p in st.points[:]:bm.verts.new(p.co)bm.verts.ensure_lookup_table()for i in range(1, len(bm.verts)):try:bm.edges.new(bm.verts[i - 1], bm.verts[i])except:passbm.edges.ensure_lookup_table()bm.to_mesh(me)

蜡笔的标注 转换为 曲线

import bpygp = bpy.data.grease_pencils['Annotations']
l = gp.layers[0]
frame = l.frames[0]
sts = [st for st in frame.strokes]bezier_name_head = "bezier_"
counter = 0for st in sts:curve = bpy.data.curves.new(name = bezier_name_head + str(counter), type = 'CURVE')curve.splines.new(type = 'BEZIER')lines = curve.splines[0]lines.bezier_points.add(len(st.points) - 1)for i, p in enumerate(st.points):lines.bezier_points[i].co = p.colines.bezier_points[i].handle_left = p.colines.bezier_points[i].handle_right = p.cocounter += 1o = bpy.data.objects.new(name = "MyObjectCollection", object_data = curve)bpy.context.scene.collection.objects.link(o)

蜡笔绘制成圆(TODO:象限划分)

import bpyD = bpy.data
C = bpy.contextGp = D.grease_pencils.new("mygp")
O = D.objects.new("myobj", Gp)
layer = Gp.layers.new("layer")
f = layer.frames.new(0)
st = f.strokes.new()
st.points.add(100)r = 5def y(r, x):return (r ** 2 - x ** 2) ** 0.5# 1
xs1 = [5 * i/24 for i in range(25)]
ys1 = [y(r, x) for x in xs1]#2
xs2 = [-x for x in xs1]
ys2 = ys1.copy()#3
xs3 = xs2.copy()
ys3 = [-y for y in ys1]#4
xs4 = xs1.copy()
ys4 = ys3.copy()xs = xs1 + xs2 + xs3 + xs4
ys  = ys1 + ys2 + ys3 + ys4for ids, p in enumerate(st.points):p.co = (xs[ids], ys[ids], 0)C.scene.collection.objects.link(O)

蜡笔绘制成圆(角度划分)

import bpy
import mathD = bpy.data
C = bpy.contextGp = D.grease_pencils.new("mygp")
O = D.objects.new("myobj", Gp)
layer = Gp.layers.new("layer")
f = layer.frames.new(0)
st = f.strokes.new()
st.points.add(101)C.scene.collection.objects.link(O)r = 5
dgree = 360 / 100for ids, p in enumerate(st.points):angle = ids * dgreep.co = (r * math.cos(math.radians(angle)), r * math.sin(math.radians(angle)), 0)

图片转换成起伏图

import random
import bpy
import mathfrom mathutils import Vectorrr = random.randomcurimg = bpy.data.images[1]x = curimg.size[0]
y = curimg.size[1]p = curimg.pixelsvp = Vector(p)for i in range(x):for j in range(y):k = 4 * (i * y + j)vp[k: k + 4] = (abs(math.sin(j/10))/2 + abs(math.cos(i/10))/2, 1, 0, 1)p[:] = vpcurimg.update()

类似Qt 的QComBox的弹窗制作:

from cgi import test
import enum
import bpydef get_enum(self, context):it = []# test = bpy.context.scene.test.test_inttest = self.test_intfor i in range(test):it.append((f"T{i}", f"t{i}", "", i))return itclass My_Props(bpy.types.PropertyGroup):test_int: bpy.props.IntProperty(default=1)enum: bpy.props.EnumProperty(items=get_enum)class My_Panel(bpy.types.Panel):bl_space_type = "VIEW_3D"bl_region_type = "UI"bl_label = ""bl_idname = "testpanel"def draw(self, context: 'Context'):self.layout.prop(bpy.context.scene.test, "test_int")self.layout.prop(bpy.context.scene.test, "enum")bpy.utils.register_class(My_Props)
bpy.utils.register_class(My_Panel)bpy.types.Scene.test = bpy.props.PointerProperty(type = My_Props)

顶点存储在文件中 蜡笔汇聚成像

import bpywith open("C:\\Users\\LMX\\AppData\\Roaming\\Blender Foundation\\Blender\\3.2\\scripts\\addons\\vertices.txt","r") as f:str_data = f.read()D = bpy.data
C = bpy.contextGp = D.grease_pencils.new("mygp")
O = D.objects.new("myobj", Gp)
layer = Gp.layers.new("layer")
f = layer.frames.new(0)
st = f.strokes.new()C.scene.collection.objects.link(O)data_lsit = str_data.split("\n")
st.points.add(len(data_lsit))for idx, str_v in enumerate( data_lsit ):if str_v == "":breakstr_list = str_v.split(" ")tuple_v = (float(str_list[0]),float(str_list[1]), float(str_list[2]))print(tuple_v)st.points[idx].co = tuple_v

新增81个立方体并且位于相机的视角内渲染出图像

import bpy
from bpy import data as D
from bpy import context as C
from mathutils import *
from math import *#~ PYTHON INTERACTIVE CONSOLE 3.10.2 (main, Jan 27 2022, 08:34:43) [MSC v.1928 64 bit (AMD64)]
#~
#~ Builtin Modules:       bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bpy.utils, bgl, blf, mathutils
#~ Convenience Imports:   from mathutils import *; from math import *
#~ Convenience Variables: C = bpy.context, D = bpy.data
#~ bpy.ops.object.select_by_type(type = 'MESH')
bpy.ops.object.delete()for i in range(9):for j in range(9):bpy.ops.mesh.primitive_cube_add(location = (i*3, j*3, 0))bpy.ops.object.select_all(action = 'DESELECT')for obj in D.objects:if obj.name.startswith("立方体"):obj.select_set(True)bpy.ops.view3d.camera_to_view_selected()
bpy.ops.render.render()
bpy.ops.render.opengl()

【Blender Python】随手一记相关推荐

  1. Blender Python相关操作指令(bpy)

    Blender Python相关操作指令(bpy) bpy语句 实现效果 bpy.context 当前环境的所有选择内容的 bpy.context.object 当前活项物体,只能选择一个 mesh ...

  2. Blender: Python Scripting Blender教程之如何使用Python脚本 Lynda课程中文字幕

    Blender: Python Scripting 中文字幕 Blender教程之如何使用Python脚本 中文字幕Blender: Python Scripting 利用Python的力量让Blen ...

  3. blender python运动模糊 ob对象尺寸

    目录 blender python 获取对象尺寸 blender python 隐藏对象 blender python运动模糊例子 blender python 获取对象尺寸 import bpy# ...

  4. Blender Python编程技巧

    Blender Python编程技巧 整理自 https://docs.blender.org/ bpy.data object复制 ob = obj.copy() # duplicate linke ...

  5. Blender Python API中文介绍文档四

    ReferenceAPI Usage Blender有很多内部链接数据类型,这些数据类型需要api,这个文档帮助你了解api API文档范围 涵盖了bpy.types通过bpy.context获取 , ...

  6. Python每日一记60这一仗,华为必须赢,一定能赢!

    这篇文章和python无关----- 华为事件已经过去好多天,但是每每看到关于华为的文章,的确让人心潮澎湃. 能被一个超级大国这样对待,华为可谓是真强大,望华为以及国内的科技公司,加油. 这是一个大国 ...

  7. blender python 代码根据虚拟人物生成相应视频

    1.虚拟人物下载(fbx):Mixamo 2.虚拟人物设计:可以下载makehuman,然后导出为obj或fbx格式,并且在Mixamo上面进行绑定骨架 3.骨架绑定(需要带有界面的GPU机器)自动完 ...

  8. 工作中需要MP4视频文件怎么办?用Python随手采集一些【订阅赠品】

    详细内容参见置顶评论 需求分析 今天测试数据用到了 MP4 格式的视频文件,问题来了?从哪里去获取短小又精彩的MP4文件呢,我打开了X光网,从这里找预告片就好了. 打开站点http://地址脱敏处理/ ...

  9. Python每日一记127文本型数字转化为数值型数字(eval函数)

    不知道大家有没有注意到这样一个问题,那就是我们进行format数字格式化后,是文本型数字,这样是不能进行后续计算的,如何将其转化为数值型数字呢?这里我们不用int(),或者float() 这个时候我们 ...

最新文章

  1. Guice:最好用的依赖注入框架
  2. [认证授权] 1.OAuth2授权
  3. python笔记: 生成器
  4. react 哲学_细聊Concent amp; Recoil , 探索react数据流的新开发模式
  5. C51语言支持哪些数据类型,C51编译器支持的数据类型(1)
  6. XSSFWorkbook与HSSFWorkbook的区别
  7. 用soapUI测试webservice
  8. JavaWeb学习之三层架构实例(二)
  9. Unity下载安装详细教程
  10. 不愧是最好用的 pdf 阅读器~
  11. SPSS处理bicomb矩阵——打开txt文件只有输出文档界面显示正在运行GET DATA,并不占用cpu,原因是编码格式不匹配
  12. samkoon触摸屏软件sktool编程下载问题
  13. c语言中实型变量的三种类型,在C语言中实型变量分为两种类型.doc
  14. %1 不是有效的 Win32 应用程序。
  15. Android项目“error: Apostrophe not preceded by \ (”报错解决方法
  16. python爬取虎扑评论_Python爬取NBA虎扑球员数据
  17. 【python】保存某个文件夹下所有图片名字到一个txt文件里
  18. mysql 以什么结尾查询_MySQL查询选择以某些字符/数字结尾的列值?
  19. maven卸载强制性依赖
  20. TokenInsight 成功举办“首席对话首席”区块链行业论坛

热门文章

  1. python tkinter.Text 高级用法 -- 设计功能齐全的文本编辑器
  2. Android屏幕适配全方位解析与指导
  3. 北京市工作居住证的申请与办理
  4. 西南大学通信学硕成功上岸,初试专业课113分(专业课最高分)
  5. iOS 自定义转场动画篇
  6. 使用js,对数值保留小数点后两位的处理(两种情况)
  7. python口算训练出题
  8. 无光驱安装原版 windows server2008,win7 的方法,64位的
  9. (三)shp路网数据导入postgres中
  10. OJ刷题之《寄居蟹与海葵》