Blender 【日本語解説・空の設定・メッシュ選択切り替え・削除入りテキスト】

Format
Python
Post date
2014-12-14 23:56
Zeitraum der Veröffentlichung
Unbegrenzt
  1. # ##### BEGIN GPL LICENSE BLOCK #####
  2. #
  3. # This program is free software; you can redistribute it and/or
  4. # modify it under the terms of the GNU General Public License
  5. # as published by the Free Software Foundation; either version 2
  6. # of the License, or (at your option) any later version.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program; if not, write to the Free Software Foundation,
  15. # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  16. #
  17. # ##### END GPL LICENSE BLOCK #####
  18. # <pep8 compliant>
  19. bl_info = {
  20. "name": "Pie Menus Official",
  21. "author": "Antony Riakiotakis",
  22. "version": (1, 0, 0),
  23. "blender": (2, 71, 4),
  24. "description": "Enable official pie Menus in blender",
  25. "category": "User Interface",
  26. }
  27. import bpy
  28. from bpy.types import Menu, Operator
  29. from bpy.props import EnumProperty
  30. # " # "記号がコメントの記号になるので、
  31. # 機能の説明を書き残しておきたいときや作成途中の文字列は" # "を行の最初に付けるとその行だけ無効化されるので便利。
  32. # ===============================================================
  33. # ===============================================================
  34. # ここから各項目の設定
  35. # ===============================================================
  36. # ===============================================================
  37. # オブジェクトモード切り替え
  38. class VIEW3D_PIE_object_mode(Menu):
  39. bl_label = "Mode"
  40. def draw(self, context):
  41. layout = self.layout
  42. pie = layout.menu_pie()
  43. # ===============================================================
  44. # ===============================================================
  45. # 視点切り替え
  46. class VIEW3D_PIE_view(Menu):
  47. bl_label = "select_mode"
  48. def draw(self, context):
  49. layout = self.layout
  50. pie = layout.menu_pie()
  51. pie.operator_enum("VIEW3D_OT_viewnumpad", "type")
  52. # ===============================================================
  53. # ===============================================================
  54. # シェード切り替え
  55. class VIEW3D_PIE_shade(Menu):
  56. bl_label = "Shade"
  57. def draw(self, context):
  58. layout = self.layout
  59. pie = layout.menu_pie()
  60. pie.prop(context.space_data, "viewport_shade", expand=True)
  61. if context.active_object:
  62. if(context.mode == 'EDIT_MESH'):
  63. pie.operator("MESH_OT_faces_shade_smooth")
  64. pie.operator("MESH_OT_faces_shade_flat")
  65. else:
  66. pie.operator("OBJECT_OT_shade_smooth")
  67. pie.operator("OBJECT_OT_shade_flat")
  68. # ===============================================================
  69. # ===============================================================
  70. # マニピュレーター切り替え
  71. class VIEW3D_manipulator_set(Operator):
  72. bl_label = "Set Manipulator"
  73. bl_idname = "view3d.manipulator_set"
  74. type = EnumProperty(
  75. name="Type",
  76. items=(('TRANSLATE', "Translate", "Use the manipulator for movement transformations"),
  77. ('ROTATE', "Rotate", "Use the manipulator for rotation transformations"),
  78. ('SCALE', "Scale", "Use the manipulator for scale transformations"),
  79. ),
  80. )
  81. def execute(self, context):
  82. #show manipulator if user selects an option
  83. context.space_data.show_manipulator = True
  84. context.space_data.transform_manipulators = {self.type}
  85. return {'FINISHED'}
  86. # ===============================================================
  87. # ===============================================================
  88. # マニピュレーター切り替え
  89. class VIEW3D_PIE_manipulator(Menu):
  90. bl_label = "Manipulator"
  91. def draw(self, context):
  92. layout = self.layout
  93. pie = layout.menu_pie()
  94. pie.operator("view3d.manipulator_set", icon='MAN_TRANS', text="Translate").type = 'TRANSLATE'
  95. pie.operator("view3d.manipulator_set", icon='MAN_ROT', text="Rotate").type = 'ROTATE'
  96. pie.operator("view3d.manipulator_set", icon='MAN_SCALE', text="Scale").type = 'SCALE'
  97. pie.prop(context.space_data, "show_manipulator")
  98. # ===============================================================
  99. # ===============================================================
  100. # ピボット切り替え
  101. class VIEW3D_PIE_pivot(Menu):
  102. bl_label = "Pivot"
  103. def draw(self, context):
  104. layout = self.layout
  105. pie = layout.menu_pie()
  106. pie.prop(context.space_data, "pivot_point", expand=True)
  107. if context.active_object.mode == 'OBJECT':
  108. pie.prop(context.space_data, "use_pivot_point_align", text="Center Points")
  109. #ここまで、デフォルトで用意されている設定
  110. # ===============================================================
  111. # ===============================================================
  112. # ここから自分で追加した設定
  113. # ===============================================================
  114. # ===============================================================
  115. # 削除 (自分で追加したパイメニュー)
  116. class VIEW3D_PIE_DELxx(Menu):
  117. bl_label = "DELETE"
  118. def draw(self, context):
  119. layout = self.layout
  120. toolsettings = context.tool_settings
  121. pie = layout.menu_pie()
  122. pie.operator("mesh.delete", icon='VERTEXSEL', text="V").type='VERT'
  123. pie.operator("mesh.delete", icon='EDGESEL', text="E").type='EDGE'
  124. pie.operator("mesh.delete", icon='FACESEL', text="F").type='FACE'
  125. pie.operator("mesh.dissolve_faces", icon='FACESEL', text="F_dissolve")
  126. pie.operator("mesh.dissolve_verts", icon='VERTEXSEL', text="V_dissolve")
  127. pie.operator("mesh.dissolve_edges", icon='EDGESEL', text="E_dissolve")
  128. # ===============================================================
  129. # ===============================================================
  130. # メッシュ選択切り替え (自分で追加したパイメニュー)
  131. class VIEW3D_PIE_MESH(Menu):
  132. bl_label = "MESH"
  133. def draw(self, context):
  134. layout = self.layout
  135. toolsettings = context.tool_settings
  136. pie = layout.menu_pie()
  137. pie.operator_enum("mesh.select_mode", "type")
  138. #ここから空のパイメニュー。
  139. # 空白の設定を3つ置いておくので、自分が欲しい設定を追加したい時に使ってください。
  140. # ===============================================================
  141. # ===============================================================
  142. # 空のパイメニュー01 サンプル
  143. class VIEW3D_PIE_A01(Menu):# ←Blenderの入力(input)設定上で見える名前
  144. bl_label = "A01"# ←パイメニューを起動させた時に中央に表示される名前。日本語OK
  145. def draw(self, context):
  146. layout = self.layout
  147. toolsettings = context.tool_settings
  148. pie = layout.menu_pie()
  149. pie.operator("mesh.primitive_cube_add", text="Cube", icon='MESH_CUBE')# ←キューブを追加
  150. pie.operator("transform.resize", text="Scale")# ←拡大・収縮
  151. pie.operator("object.modifier_add", text="Mirror", icon='MOD_MIRROR').type='MIRROR'# ←モディファイアのミラーを適応
  152. # ↑ ここに設定させたい動作を貼り付ける。今は例としてメッシュ選択切り替えの設定が書かれている。
  153. #■やり方
  154. #まずはアドオンの場所を探す。
  155. #(Macの場合)
  156. #「⌘ + Shift + G」で「フォルダへ移動…」のダイアログを出す
  157. #そこに下記のパスをコピペしてアドオンの場所へ移動する。
  158. #/Applications/Blender/blender.app/Contents/Resources/2.72/scripts/addons/ui_pie_menus_official.py#
  159. #「ui_pie_menus_official.py」を複製してバックアップをとっておく
  160. #このテキストをアドオンフォルダに追加して上書きする。
  161. #「ui_pie_menus_official.py」を開く。見れるものならなんでもよいが、色分けできるテキストエディターで開けば文字が色分けされて見やすいだろう。
  162. #
  163. #
  164. #▼設定したい動作の文字列を取得する
  165. #Blenderの方は「テキストエディタ」ウィンドウを増やしておく。
  166. #BlenderのT/Nプロパティやヘッターなどにある、設定させたい動作を右クリックし、でてきたメニューの中の「ソースの編集」をクリックする。
  167. #すると、テキストエディタの方に大元のソースが出てくる。
  168. # 例えば「移動」のソースを見た場合はこのようになっている。
  169. # col.operator("transform.translate")
  170. # この現在カーソルが置かれている行をコピーする。
  171. #この時、絶対に編集したりしないこと。やったことはないが、変にいじるとバグると思われる。
  172. #コピーした行を上の場所に貼り付ける。
  173. #この時、インデントがきっちり揃ってなかったり、無駄な文字が入っているとエラーが出るので、本当にコピーした行を丸ごと貼り付けることをおすすめする。
  174. # 次に、貼り付けたテキストをパイメニューで使えるようにするため、「col」部分を、「pie」に変更する。
  175. # col.operator("transform.translate")
  176. # ↓
  177. # pie.operator("transform.translate")
  178. #
  179. #▼「ソースを編集」がない場合
  180. #項目がメニューになっていて複数項目ある設定によくある。
  181. #その場合は「Python PLI プリファレンス」を方をクリックしする。
  182. #クリックすると、英語だがその動作のPythonについて詳細に書かれているサイトに飛ぶので、それらしきものをコピーし、下のような感じに当てはめる。
  183. #下の例はモディファイアのミラーをパイメニューの形式に当てはめた。
  184. #
  185. # モディファイアを追加する 追加するモディファイア
  186. # ↓ ↓
  187. # pie.operator("object.modifier_add").type='MIRROR'
  188. #
  189. #
  190. #▼パイメニューを修飾する
  191. #パイメニューにアイコンやタイトルを付けることができる。
  192. # 表示する名前 アイコン
  193. # ↓ ↓
  194. # pie.operator("object.modifier_add", text="Mirror", icon='MOD_MIRROR').type='MIRROR'
  195. #
  196. #
  197. #
  198. #そして、上書き保存したらBlenderに戻る。
  199. #ユーザー設定 →アドオン →「pie」と検索 →出てきた「ui_pie_menus_official」のチェックを外して、またチェックを付ける。なにもエラーメッセージがでなければ正常に読み込まれている。
  200. #エラーが出た場合は、もう一度目の皿のようにして間違いがないか確認する。できるかぎり正常に読み込みができている項目を、コピペして改変するのが確実で堅実だ。
  201. #
  202. #最後に、実際に動作を確認してみる。
  203. #ユーザー設定 → 入力 の検索窓に、「pie」と入力し、検索方法は「名前」で検索する。
  204. #設定されたパイメニューの一覧が出てくる。
  205. #しかし、不便なことに全て名前が「パイメニュー呼び出し」となっていてどれがどれだか識別しづらい。
  206. #用意した空のパイメニューのショートカットを変更していないのであれば、全て「A」に設定されているので、それで見分けるとよい。
  207. #項目を開いてみると、右下の方に実際に付けた名前が見える。
  208. #好きにショートカットを変更したり、不要な項目のチェックを外したりして、ショートカットが重複しないようにすること。
  209. #ショートカットが設定できたら、左上の「ユーザー設定の保存」で設定を保存しておくこと。
  210. #
  211. #
  212. #
  213. #
  214. # ▼パイメニューの機能の設定
  215. # ユーザー設定 → インターフェーイス の右下にパイメニューの設定項目がある。
  216. # 使いやすいよう調節するとよい。なるべく早く動作させたい場合は、どの値も小さくするのがおすすめ。
  217. # 私は、順番に0 、0 、25 、20 のように設定している。
  218. # ・アニメーションタイムアウト ……起動してから項目が出てくるスピード。
  219. # ・リセンタータイムアウト ……よくわからん。
  220. # ・半径 ……項目の広さ。パイメニューを大きく表示させたくない場合は小さくする。
  221. # ・しきい値 ……円の大きさ。円までマウスカーソルを持って行くと実行されるので、その距離を変更できる。
  222. # ===============================================================
  223. # ===============================================================
  224. # 空のパイメニュー02
  225. class VIEW3D_PIE_A02(Menu):
  226. bl_label = "A01"
  227. def draw(self, context):
  228. layout = self.layout
  229. toolsettings = context.tool_settings
  230. pie = layout.menu_pie()
  231. pie.operator_enum("mesh.select_mode", "type")
  232. # ===============================================================
  233. # ===============================================================
  234. # 空のパイメニュー03
  235. class VIEW3D_PIE_A03(Menu):
  236. bl_label = "A01"
  237. def draw(self, context):
  238. layout = self.layout
  239. toolsettings = context.tool_settings
  240. pie = layout.menu_pie()
  241. pie.operator_enum("mesh.select_mode", "type")
  242. #===============================================================
  243. addon_keymaps = []
  244. #===============================================================〜
  245. # ここまで、各項目の設定
  246. # ===============================================================
  247. # ===============================================================
  248. # ここからなんか知らんけどやらなきゃいけない設定諸々
  249. # ===============================================================
  250. # ===============================================================
  251. def register():
  252. bpy.utils.register_class(VIEW3D_manipulator_set)
  253. #register menus
  254. bpy.utils.register_class(VIEW3D_PIE_object_mode)
  255. bpy.utils.register_class(VIEW3D_PIE_view)
  256. bpy.utils.register_class(VIEW3D_PIE_shade)
  257. bpy.utils.register_class(VIEW3D_PIE_manipulator)
  258. bpy.utils.register_class(VIEW3D_PIE_pivot)
  259. bpy.utils.register_class(VIEW3D_PIE_DELxx) #←削除
  260. bpy.utils.register_class(VIEW3D_PIE_MESH) # ←メッシュ選択切り替え
  261. bpy.utils.register_class(VIEW3D_PIE_A01)
  262. bpy.utils.register_class(VIEW3D_PIE_A02)
  263. bpy.utils.register_class(VIEW3D_PIE_A03)
  264. # ===============================================================
  265. # ===============================================================
  266. #ショートカット設定
  267. wm = bpy.context.window_manager
  268. if wm.keyconfigs.addon:
  269. km = wm.keyconfigs.addon.keymaps.new(name='Object Non-modal')
  270. kmi = km.keymap_items.new('wm.call_menu_pie', 'TAB', 'PRESS')
  271. kmi.properties.name = 'VIEW3D_PIE_object_mode'
  272. kmi = km.keymap_items.new('wm.call_menu_pie', 'Z', 'PRESS')
  273. kmi.properties.name = 'VIEW3D_PIE_shade'
  274. kmi = km.keymap_items.new('wm.call_menu_pie', 'Q', 'PRESS')
  275. kmi.properties.name = 'VIEW3D_PIE_view'
  276. kmi = km.keymap_items.new('wm.call_menu_pie', 'SPACE', 'PRESS', ctrl=True)
  277. kmi.properties.name = 'VIEW3D_PIE_manipulator'
  278. kmi = km.keymap_items.new('wm.call_menu_pie', 'PERIOD', 'PRESS')
  279. kmi.properties.name = 'VIEW3D_PIE_pivot'
  280. kmi = km.keymap_items.new('wm.call_menu_pie', 'X', 'PRESS', alt=True) #←削除のショートカット
  281. kmi.properties.name = 'VIEW3D_PIE_DELxx' #←削除
  282. kmi = km.keymap_items.new('wm.call_menu_pie', 'X', 'PRESS') #←メッシュ選択切り替えのショートカット
  283. kmi.properties.name = 'VIEW3D_PIE_MESH' #←メッシュ選択切り替え
  284. kmi = km.keymap_items.new('wm.call_menu_pie', 'Z', 'PRESS')
  285. kmi.properties.name = 'VIEW3D_PIE_A01'
  286. kmi = km.keymap_items.new('wm.call_menu_pie', 'Z', 'PRESS')
  287. kmi.properties.name = 'VIEW3D_PIE_A02'
  288. kmi = km.keymap_items.new('wm.call_menu_pie', 'Z', 'PRESS')
  289. kmi.properties.name = 'VIEW3D_PIE_A03'
  290. # ===============================================================
  291. addon_keymaps.append(km)
  292. # ===============================================================
  293. # ===============================================================
  294. # ===============================================================
  295. def unregister():
  296. bpy.utils.unregister_class(VIEW3D_manipulator_set)
  297. bpy.utils.unregister_class(VIEW3D_PIE_object_mode)
  298. bpy.utils.unregister_class(VIEW3D_PIE_view)
  299. bpy.utils.unregister_class(VIEW3D_PIE_shade)
  300. bpy.utils.unregister_class(VIEW3D_PIE_manipulator)
  301. bpy.utils.unregister_class(VIEW3D_PIE_pivot)
  302. bpy.utils.unregister_class(VIEW3D_PIE_DELxx) # ←削除
  303. bpy.utils.unregister_class(VIEW3D_PIE_MESH) # ←メッシュ選択切り替え
  304. bpy.utils.unregister_class(VIEW3D_PIE_A01)
  305. bpy.utils.unregister_class(VIEW3D_PIE_A02)
  306. bpy.utils.unregister_class(VIEW3D_PIE_A03)
  307. wm = bpy.context.window_manager
  308. if wm.keyconfigs.addon:
  309. for km in addon_keymaps:
  310. for kmi in km.keymap_items:
  311. km.keymap_items.remove(kmi)
  312. wm.keyconfigs.addon.keymaps.remove(km)
  313. # clear the list
  314. del addon_keymaps[:]
Download Printable view

URL of this paste

Embed with JavaScript

Embed with iframe

Raw text