オブジェクトがあり、オブジェクト全体を回転させる必要がある2点があります。回転ポイント用に2つの空を作成しました。これを、2つの空の間の線によって形成される軸を中心に回転させる必要があります。オブジェクト制約を追加してみましたが、役に立ちませんでした。下の画像では、赤い線の軸を中心に三角形を回転させる必要があります。
コメント
- 別の質問と同様です。 この方法を試すことができます。
- この質問をしたので、Blender2.8はこれを適切で簡単にアクセスできる機能として導入しました。簡単な解決策については、古い回答を過ぎて下にスクロールしてください。 (ちなみに、'古い回答に反対票を投じないでください。古いバージョンのBlenderを使用している人には便利です。)
回答
3Dビュー内で、オブジェクトが特定の軸に沿って移動する方向を決定するいくつかの変換方向を使用できます。
これらのオプションがタスクに合わない場合は、カスタムの向きを定義できます 。このオプションは、プロパティサイドバー N
で使用できます。簡単に言うと、オブジェクトを追加してz軸を中心に23.6度回転し、それを使用してカスタム方向を定義すると、その方向を使用して、同じx軸とy軸に沿って別のオブジェクトを移動、回転、または拡大縮小できます。世界のx軸とy軸から23.6度の位置にあります。
2つの空がある場合にこれを使用するには-
- 1つのempを選択しますtyを押し、 Shift S を押して、[カーソルを選択]を選択します。
- 平面を追加し、x軸( S X 0 Enter )。
- 頂点へのスナップを有効にするの3Dヘッダー。
- ビューが2つの空をまっすぐ見ているプリセット(左、上、前…)に位置合わせされていることを確認し、 2つは定義したい角度です。複数の軸を変更する方向を定義する場合は、3つのビューから次の手順を数回繰り返して、正しい位置合わせを行うことができます。
- 平面 R の回転を開始します。 2番目の空の上にカーソルを移動します。空の中心の周りに円が表示され、スナップしていることを示したら、回転を受け入れます。これで、平面の回転が2つの空の間の角度と一致します。
- プロパティサイドバーを表示して[方向の変換]パネルを見つけ、。
平面を削除できるようになり、新しい変換方向を使用して、2つの空の間の線に平行に走る軸に沿って他のオブジェクトを移動または回転できます。 。
カスタム方向を選択すると、 X X 、 Y Y および<ローカル軸上を移動するために通常使用されるkbd> Z Z ショートカットは、ローカル軸の代わりにカスタム軸を使用します。
回答
実際には、架空の軸を形成するだけの場合は、2つの空を作成する必要はありません。ここでの比較的単純で高速な操作は次のようになると思います。
編集モード:
- 回転するすべての要素を選択し、 Shift を押したまま、そのエッジを2回クリックしてアクティブにします。
- Alt 。(ピリオド)、 Shift Numpad 1 ;
- R 必要に応じて回転し、 Enter します。完了。
オブジェクトモード:
- 1つ以上のオブジェクトを選択し、ターゲットオブジェクトが最後に選択されていることを確認します。 編集モードでターゲットエッジを選択します;
- シフト S 選択したカーソル、。(ピリオド)、シフト テンキー1 ;
- 戻るオブジェクトモード、回転するには R 、入力。完了。
–
PS:もちろん、 Alt スペースバーを押して通常の簡単に判断できる調整システム、または Ctrl Alt スペースバーは、他の人が言及したように、さらに使用するために、それに基づいて新しい変換方向を作成/保存します。最も速く正確な方法を提案したいだけです。
コメント
- 'わからない場合は、
Alt+.
はピボットポイントをアクティブな要素に変更します。メニューのシェーディングオプションのすぐ横に、他のピボットオプションが表示されます。
回答
手動による方法
まず、空の1つを選択し、 SHIFT + S Cursor to Selected
を押します。
次に MMB して、2つの空が揃うまでビューを回転させます。
次に、。(ピリオド)を押して、ピボットポイントを3Dカーソルに設定します。最後に、オブジェクトを選択し、 R を押して回転させます。
Pythonic Way
このスクリプトは、2つの空の間のベクトルと、 3Dカーソルの周りの回転を使用します。 p>
import bpy from mathutils import Vector def main(): C = bpy.context D = bpy.data #rotation set to 90 degrees (rotation in radians) rotation = (6.283185/4) #Save objects by their presumed names empty0 = D.objects["Empty"] empty1 = D.objects["Empty.001"] object_to_rot = D.objects["Suzanne"] #################################################### #set pivot point to be one of the empties by temporarily placing cursor there #use of Vector() here is to avoid copying reference to cursor location old_cursor_loc = Vector(CursorAccess.getCursor()) CursorAccess.setCursor( empty0.location ) CursorAccess.findSpace().pivot_point = "CURSOR" #make object the active object C.scene.objects.active = object_to_rot #get axis we rotate around rotation_axis = empty1.location - empty0.location #override the rotate operator override = get_override("VIEW_3D", "WINDOW") bpy.ops.transform.rotate( override, value=rotation, axis=rotation_axis ) #restore old cursor position CursorAccess.setCursor( old_cursor_loc ) def get_override(area_type, region_type): """Returns a dictionary which can be used to override certain bpy operators""" for area in bpy.context.screen.areas: if area.type == area_type: for region in area.regions: if region.type == region_type: override = {"area": area, "region": region} return override #error message if the area or region wasn"t found raise RuntimeError("Wasn"t able to find", region_type," in area ", area_type, "\n Make sure it"s open while executing script.") class CursorAccess: """This code allows you to set and get the cursor location. It came from the addon Cursor Control http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Cursor_Control""" @classmethod def findSpace(cls): area = None for area in bpy.data.window_managers[0].windows[0].screen.areas: if area.type == "VIEW_3D": break if area.type != "VIEW_3D": return None for space in area.spaces: if space.type == "VIEW_3D": break if space.type != "VIEW_3D": return None return space @classmethod def setCursor(cls,coordinates): spc = cls.findSpace() spc.cursor_location = coordinates @classmethod def getCursor(cls): spc = cls.findSpace() return spc.cursor_location if __name__=="__main__": main()
回答
これは、 Mesh Align Plus (私のアドオン)。 GIFの手順を見るか、以下のテキストバージョンを読んでください(上記で説明したセットアップを記録し、同様のことをしたい場合に備えて、より一般的な例をいくつか記録しました):
探している機能はクイック軸です独自のパネルで、 3Dビュー ツールパネル(T)> メッシュ整列プラスタブの[回転]演算子。 p>
-
Shift +右クリックを使用して、編集モード(Tab)でターゲット軸を選択し、2つのエッジ頂点を選択します(選択したままにして、自動グラブソースがチェックされています。デフォルトです)
-
量で回転する角度を入力し、適用するオブジェクトを使用します。回転して選択し、適用先:オブジェクト
回答
編集モードでターゲット軸(エッジ)を選択します。
3Dカーソルを選択したエッジにスナップします( Shif t + S をクリックし、カーソルを選択済みをクリックします。
3Dカーソルをピボットポイントとして設定します(キーボード期間ボタン)。
Properties シェルフ N を開き、下部にある Tranfsorm Orientation ロールアウトに移動します。パネル。
[プラス]ボタンをクリックして、新しい変換方向を作成します(または、 Ctrl + Alt + スペースを押します) 。
作成した方向がアクティブであることを確認します。
これで、 R と Y + Yを押して、そのエッジを中心に回転できます。 (指定されたエッジのローカルY軸に沿って)。
回答
ブレンダー2.8 +
これは最近のBlenderリリースでは非常に簡単です。
編集モードで、2つのポイントを選択します(頂点選択モード)またはエッジ(エッジ選択モード)。
方向の変換ポップオーバーを開きます:
次に、オリエンテーションの作成 " + "ボタン:
これにより、デフォルトで" Edge "という名前のカスタム変換方向が作成されます。使用するときに選択されていることを確認するか、終了したらデフォルトのグローバルに切り替えます。 " X
:
カスタム変換の向きがアクティブな場合、 R Y を使用してY軸に沿って回転するか、 Rotate ギズモを使用できます:
回答
既存の回答が気に入らない。まず、その理由を説明します。次に、「独自のソリューションを提供します。
まず、これはアドオンが必要なものではなく、簡単に実行できるときにアドオンをインストールする必要はありません。
次に、ピボットポイントを中心に回転すると、アニメーションで使用すると奇妙な補間が発生します。その理由は、直線回転ではなく、回転と平行移動の組み合わせであるためです。ローカル軸によっては正常に機能する場合もありますが、紛らわしいほど間違って機能する場合もあります。
第3に、オイラー角を使用する場合、任意の軸を中心に回転すると、奇妙な補間が発生する可能性があります(また、写真に骨がない場合は、変換にオイラー角を使用していることを示しています。)オイラー角を使用するときに任意の軸を中心に回転すると、紛らわしい奇妙さも簡単に発生する可能性があります。これは、"ルービックキューブ"で最もよく示されています。アニメーション。
では、私が提唱する解決策は何ですか?基本的に、最初は始めたものの、完全に終了できなかったもの:空と制約のペア。軸を定義するいずれかのポイントにある、空のペアから始めます。まだ何もペアレント化されていません。次に、空の1つを減衰させます。最後に、回転させたいオブジェクトを拘束された空にペアレント化します。オブジェクトを回転させるには、ローカルY軸で親エンプティを回転させます(他の空の回転を防ぐために、この空のトランスフォームロックを指定することをお勧めします)。軸と、場合によっては変換/スケール。デルタも設定することをお勧めします。)
これは、標準のBlenderツールのみを使用してアドオンを必要とせず、変換モードと軸に関係なく優れた補間を提供します。すべての回転は、空の1つのローカル軸になります。