[2.8]オブジェクト同士を頂点でスナップしたい場合
Blenderには意外と苦手なものがあります。その一つが「オブジェクト同士を頂点でスナップする」というものです。
オブジェクト原点と頂点、または面、というのは [2.80小わざメモ]: ぺたぺたくっつける や [2.80小わざメモ]: なめらかにつなぐ で使っているのですが、頂点同士、は他のソフトのスナップと同じようにはいきません。
2.80でも状況は同じです。
そこで、限定的ながら異なるオブジェクトで頂点スナップできる、補助スクリプトを書きました。操作感的には「スナップ」というものとは違ったものですけれども。
ソースコード
下のソースコードをコピーしてBlenderのテキストエディタに貼り付けておき、[Run Script] ボタンで実行します。
import bpy
if bpy.context.mode == 'OBJECT':
obj = bpy.context.active_object
s_obj=set(bpy.context.selected_objects)
s_obj.discard(bpy.context.active_object)
if len(s_obj) == 1:
iwobj = s_obj.pop()
loc = obj.location
v1 = iwobj.matrix_world @ iwobj.data.vertices[0].co
v2 = iwobj.matrix_world @ iwobj.data.vertices[1].co
obj.location = loc + (v2-v1)
使い方の例
CubeをSuzanneにスナップする、という例です。
スナップモードを「頂点」でOnにします。
Cubeを選択し、エディットモードにします。Suzanneにスナップさせたい頂点を選択し、Extrude([E])で頂点を押し出し、Suzanne側のスナップさせたい頂点に吸着させます。
[2]を押して辺選択モードにし、先ほど新しくできた辺を選択し、Separate([P])>Selection をクリックして別オブジェクトにします。
この状態で[Tab]キーを押してエディットモードにします。Cubeがアクティブ選択状態の少し明るいオレンジ色、新しく作った辺が少し暗めのオレンジ色になっています。
この状態で(Blenderの)テキストエディタで開いたスクリプトを[Run Script] ボタンで実行します。
Cubeが移動して、Suzanneの頂点に吸いつきました。
なお、辺として作成されたオブジェクトは そのまま残っていますので、適宜削除しましょう。
結果はこちら。
デモ
制限
このスクリプトは、オブジェクトの頂点を押し出した辺(を別オブジェクトしたもの)を元にオブジェクトの移動をおこなっているだけなので、そこそこ厳密に手順に従う必要があります。
お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!