BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2128|回复: 9

(原创插件)自动自由的变换mesh的local坐标UserToLocal

[复制链接]
发表于 2013-7-24 22:42:47 | 显示全部楼层 |阅读模式
使用方法见gif,在edit模式下用。
第一步选中任意的点线面。
第二步是用ctrl+alt+space设定自定义坐标轴。
第三步执行Mesh user to Local,ok。
观察即发现OK了

ddd2.gif

文件在这:mesh_user_to_local.py
http://vdisk.weibo.com/s/ue70584sMTQoG

代码在这:
  1. import bpy,math,mathutils
  2. from bpy.props import FloatProperty, IntProperty, BoolProperty,EnumProperty,StringProperty
  3. from mathutils import Matrix,Vector
  4. #===============================================================================================

  5. #-----------------------------------------------------------------------------------------------
  6. class MeshUserToLocal(bpy.types.Operator):
  7.     bl_idname = "bpt.mesh_user_to_local"
  8.     bl_label = "Mesh User to Local"
  9.     bl_options = {'REGISTER', 'UNDO'}
  10.     @classmethod
  11.     def poll(cls, context):
  12.         cv=context.object
  13.         if cv!=None and cv.type=='MESH' and context.mode=='EDIT_MESH':
  14.             return True
  15.         return False
  16.     def execute(self, context):
  17.         ob=context.object
  18.         flag=0
  19.         if context.mode=='EDIT_MESH':
  20.             bpy.ops.view3d.snap_cursor_to_selected()
  21.             bpy.ops.object.editmode_toggle()
  22.             flag=1
  23.         ori=bpy.context.space_data.current_orientation
  24.         loc=ob.location[:]
  25.         mw_before=ob.matrix_world
  26.         vers=[]
  27.         for v in ob.data.vertices:
  28.                 vers.append(mw_before*v.co)
  29.         if ori!=None:
  30.             mat=ori.matrix.to_4x4()
  31.         else:
  32.             mat=None
  33.         if mat!=None:
  34.             
  35.             ob.matrix_world=mat
  36.             ob.location=loc
  37.             mw_after=ob.matrix_world
  38.             i=0
  39.             mw_inv=Matrix.inverted(mw_after)
  40.             loc=Vector(loc)
  41.             for v in ob.data.vertices:
  42.                 v.co=mw_inv*(vers[i]-loc)
  43.                 i+=1
  44.         if flag==1:
  45.             bpy.ops.object.origin_set(type='ORIGIN_CURSOR', center='MEDIAN')
  46.             bpy.ops.object.editmode_toggle()
  47.         bpy.context.space_data.transform_orientation = 'LOCAL'
  48.         return {'FINISHED'}
  49. #-----------------------------------------------------------------------------------------------
  50. #===============================================================================================
  51. def register():
  52.     bpy.utils.register_module(__name__)
  53.    
  54. def unregister():
  55.     bpy.utils.unregister_module(__name__)

  56. if __name__ == "__main__":
  57.     register()
复制代码


 楼主| 发表于 2013-7-24 22:49:01 | 显示全部楼层
本帖最后由 luxuy 于 2013-7-24 22:50 编辑

这个能干吗用呢?

比如shift+7可以将需要的面对齐到视图,用knife切割。
但这个shift+7只对local起作用,而不是user,是不是很蛋疼呢,这个插件就搞定了这个问题。
当然,由于矩阵运算不是那么得心应手,选择了比较苯的算法,不过,依然还是好用的。

欢迎使用,一起学习进步。

点评

再比如,改好物体的local坐标之后,alt+r,清除旋转,可以方便的对齐物体。  详情 回复 发表于 2013-7-24 23:25
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-24 23:25:42 | 显示全部楼层
luxuy 发表于 2013-7-24 22:49
这个能干吗用呢?

比如shift+7可以将需要的面对齐到视图,用knife切割。

再比如,改好物体的local坐标之后,alt+r,清除旋转,可以方便的对齐物体。
回复 支持 反对

使用道具 举报

发表于 2013-7-25 09:19:29 | 显示全部楼层
隐隐约约看懂了点,还是下载试试更方便理解,好样的~感谢分享!
[刚才发现2.68在 shift+numpad 用的就是选中面的normal坐标系,脚本没白写,知识贮备总是有意义的]

建议用 插件-按钮 的方式,不然会有很多人不知道用的,也确实容易记住 :)





点评

回复一下阳大: 1. 这个插件的功能实质就是,重新设定物体自身的坐标,也就是local。和shift+numpad的关系也不是必然的,只是一个用途而已。因为好多软件是可以直接并且精确设定物体的坐标轴的。 2.我发现,用norm  详情 回复 发表于 2013-7-25 14:55
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-25 14:55:13 | 显示全部楼层
nirenyang 发表于 2013-7-25 09:19
隐隐约约看懂了点,还是下载试试更方便理解,好样的~感谢分享!
[刚才发现2.68在 shift+numpad 用的就是选 ...

回复一下阳大:

1. 这个插件的功能实质就是,重新设定物体自身的坐标,也就是local。和shift+numpad的关系也不是必然的,只是一个用途而已。因为好多软件是可以直接并且精确设定物体的坐标轴的。

2.我发现,用normal,然后shift+7,和用local(2.68中)得到的结果有些不同,不知道什么原因。如下图: 01.jpg
normal方法得到的并不是希望中的x轴朝右,y轴朝上。local方法则是期望中的。

3.我弄了一个弹出式菜单,可以直接用operator,就懒得写panel了
02.png
回复 支持 反对

使用道具 举报

发表于 2013-7-25 15:05:24 | 显示全部楼层
我想,你是找到一个bug:)我用chinglish询问了一下:
https://projects.blender.org/tracker/index.php?func=detail&aid=36278&group_id=9&atid=498


blender修复速度真是嗖嗖的
提交bug时间:2013-07-25 15:27

修复bug时间:2013-07-25 19:05
Sender: Campbell Barton
fixed r58596.

点评

还真是好了,好快!  详情 回复 发表于 2013-7-27 13:44
回复 支持 反对

使用道具 举报

发表于 2013-7-25 23:44:10 | 显示全部楼层
好厉害....我电脑语言白痴...才开始啃 ubuntu命令....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-27 13:44:32 | 显示全部楼层
nirenyang 发表于 2013-7-25 15:05
我想,你是找到一个bug:)我用chinglish询问了一下:
https://projects.blender.org/tracker/index.php?fu ...

还真是好了,好快!
回复 支持 反对

使用道具 举报

发表于 2013-9-30 12:32:09 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-11-29 06:58:57 | 显示全部楼层
狂支持一个,看来还是很有用的
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2019-12-14 11:01 , Processed in 0.024709 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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