BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1816|回复: 6

(原创插件)自动添加lattice适应选中物体边界

[复制链接]
发表于 2013-6-12 15:01:06 | 显示全部楼层 |阅读模式
本帖最后由 luxuy 于 2013-6-12 15:02 编辑

这个addon的用途看这个帖子:
http://bbs.blendercn.org/forum.php?mod=viewthread&tid=1198

用法:
文件(py后缀)放在2.67\scripts\startup\,然后F8重新加载,在物体模式下选中几个物体,可以是曲线或mesh,然后按space,输入:

Lattice Fit Selected Objects

回车即可。
附件贴不了,直接代码:
  1. import bpy

  2. def get_bounds(obj):
  3.     #save current state
  4.     c_mode=bpy.context.mode
  5.     #location
  6.     c_loc=obj.location
  7.    
  8.     bpy.ops.object.mode_set(mode = 'OBJECT')
  9.     bpy.ops.object.select_all(action='DESELECT')
  10.     obj.select = True
  11.     bpy.context.scene.objects.active = obj
  12.    
  13.     bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='MEDIAN')

  14.    
  15.     ori=obj.location
  16.    
  17.     dims=obj.dimensions
  18.    
  19.     bounds=[]
  20.     for i in range(3):
  21.         bounds.append(ori[i]-0.5*dims[i])
  22.         bounds.append(ori[i]+0.5*dims[i])
  23.     return bounds
  24.    
  25. #------------------------------------------------------
  26. class LatticeFitSel(bpy.types.Operator):
  27.    
  28.     bl_idname = "bpt.lattice_fit_sel"
  29.     bl_label = "Lattice Fit Selected Objects"
  30.     def execute(self, context):
  31.         
  32.         bds={}
  33.         bds[0]=[]
  34.         bds[1]=[]
  35.         bds[2]=[]
  36.         #print(bds)  
  37.         obs=[]
  38.         for ob in bpy.data.objects:
  39.             if (ob.type=='MESH' or ob.type=='CURVE') and ob.select:
  40.                 obs.append(ob)
  41.         for ob in obs:
  42.             obj_bds=get_bounds(ob)
  43.             bds[0].append(obj_bds[0])
  44.             bds[0].append(obj_bds[1])
  45.             bds[1].append(obj_bds[2])
  46.             bds[1].append(obj_bds[3])
  47.             bds[2].append(obj_bds[4])
  48.             bds[2].append(obj_bds[5])
  49.             #print("-"*20)
  50.         #print(bds)     
  51.         new_bd=(\
  52.         min(bds[0]),max(bds[0]),\
  53.         min(bds[1]),max(bds[1]),\
  54.         min(bds[2]),max(bds[2]))
  55.         bpy.context.space_data.pivot_point="ACTIVE_ELEMENT"
  56.         bpy.ops.object.add(type='LATTICE',\
  57.         location=(\
  58.         (new_bd[0]+new_bd[1])*0.5,\
  59.         (new_bd[2]+new_bd[3])*0.5,\
  60.         (new_bd[4]+new_bd[5])*0.5))
  61.         
  62.         sca=(\
  63.         (new_bd[1]-new_bd[0]),\
  64.         (new_bd[3]-new_bd[2]),\
  65.         (new_bd[5]-new_bd[4]))
  66.         
  67.         
  68.         bpy.ops.transform.resize(value=sca)
  69.         lat=context.active_object
  70.         
  71.         return {'FINISHED'}
  72.    
  73.    

  74. def register():
  75.     bpy.utils.register_module(__name__)
  76. def unregister():
  77.     bpy.utils.unregister_module(__name__)

  78. if __name__ == "__main__":
  79.     register()
复制代码










发表于 2013-6-12 15:17:57 | 显示全部楼层
本帖最后由 云风如我 于 2013-6-12 15:51 编辑

这代码好啊,这下像类似这样的变形,不用担心中心不准了。中心不准,板凳可是要坐塌滴……

3232.JPG

应该让官方集成一下,在选择创建晶格时,提供一个选择给用户,是要对齐物体边界盒呢?还是直接在 3D 光标创建。

附件你 RAR 打包一下就能贴了,因为论坛对上传文件的扩展名进行了判断。



回复 支持 反对

使用道具 举报

发表于 2013-6-12 23:11:41 | 显示全部楼层
Nice! 众人拾柴火焰高,感谢楼主分享!










回复 支持 反对

使用道具 举报

发表于 2013-6-13 12:36:39 | 显示全部楼层
是不是咱们也搞个 gitcafa github,省得长篇的贴code,论坛讨论细节就好了。

点评

好提议  详情 回复 发表于 2013-6-13 13:42
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-13 13:42:56 | 显示全部楼层
nirenyang 发表于 2013-6-13 12:36
是不是咱们也搞个 gitcafa github,省得长篇的贴code,论坛讨论细节就好了。

好提议
回复 支持 反对

使用道具 举报

发表于 2013-6-13 14:41:30 | 显示全部楼层
突然有个想法,先写下来,把脚本扩展成插件后,写一个按键到lattice属性面板下。

操作流程比如,先多选 参考的object群集,最后shift选lattice,这时候,不是就能看到功能按键了么。

点击功能,loop所有的selected objects,排除active的lattice,其他代码就和当前的没啥区别了。
我大部分插件,都是这么个逻辑,学了bsurfaces的。

点评

我觉得,可以让官方把这个代码,集成到 Crtl + P 的”晶格形变“ 代码中, 这样一次搞定了 父子关系,添加晶格修改器,晶格修改器的作用对象,以及晶格适配物体边界盒。 这个菜单本身就是一种便捷操作嘛,再加一个  详情 回复 发表于 2013-6-13 15:19
回复 支持 反对

使用道具 举报

发表于 2013-6-13 15:19:52 | 显示全部楼层
本帖最后由 云风如我 于 2013-6-13 15:24 编辑
nirenyang 发表于 2013-6-13 14:41
突然有个想法,先写下来,把脚本扩展成插件后,写一个按键到lattice属性面板下。

操作流程比如,先多选 参 ...


我觉得,可以让官方把这个代码,集成到 Crtl + P 的”晶格形变“ 代码中,

这样一次搞定了 父子关系,添加晶格修改器,晶格修改器的作用对象,以及晶格适配物体边界盒。

这个菜单本身就是一种便捷操作嘛,再加一个功能也无妨……

不过代码得修改一下了,现在是:检测边界盒大小  -> 创建晶格

而这个功能则是:检测边界盒大小  ->  修改晶格大小,移动晶格位置
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-11-13 16:29 , Processed in 0.021497 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表