スクリーンショット_2019-04-30_20

[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にシェアもよろしくお願いします!