Otočit objekt na ose mezi dvěma body

Mám objekt a dva body, které potřebuji otočit kolem celého objektu. Vytvořil jsem dvě vyprázdnění pro body rotace a musím to otočit kolem osy tvořené linií mezi dvěma vyprázdněními. Zkoušel jsem marně přidávat omezení objektů. Na obrázku níže musím otočit trojúhelník kolem osy červené čáry.

Komentáře

  • Podobně jako jiná otázka. Můžete to zkusit tímto způsobem .
  • Protože jsem se na tuto otázku zeptal, představil to Blender 2.8 jako řádnou a snadno přístupnou funkci. Pro snadné řešení přejděte dolů za staré odpovědi. (Mimochodem, ‚ n nepřijímejte staré odpovědi – jsou užitečné pro kohokoli, kdo používá starší verzi Blenderu.)

Odpověď

V 3D zobrazení máme k dispozici několik transformačních orientací, které určují, jakým způsobem se objekt pohybuje po dané ose.

sem zadejte popis obrázku

Když tyto možnosti nesplňují úkol, můžete definovat vlastní orientaci . Tato možnost je k dispozici v postranním panelu vlastností N

zde zadejte popis obrázku

jednoduše, pokud přidáte objekt a otočíte ho o 23,6 stupňů na ose z a poté jej použijete k definování vlastní orientace, můžete pomocí této orientace přesunout, otočit nebo změnit měřítko jiného objektu podél stejné osy x a y, která bude ve 23,6 stupních od světové osy x a y.

Chcete-li to použít, pokud máte na místě dvě prázdná místa –

  1. Vyberte jednu emp a stiskněte Shift S a vyberte Cursor to Selected.
  2. Přidejte na osu x rovinu a měřítko na nulu ( S X 0 Enter ).
  3. Povolit přichytávání k vrcholu zadat popis obrázku zde v záhlaví 3D.
  4. Ujistěte se, že je pohled zarovnán k předvolbě (vlevo, nahoře, vpředu …), která se dívá rovně na dvě prázdná místa, takže jediný úhel mezi two je úhel, který chcete definovat. Pokud chcete definovat orientaci, která mění více než jednu osu, můžete opakovat další krok několikrát ze tří pohledů, abyste získali správné zarovnání.
  5. Začněte otáčet rovinou R a přesuňte kurzor na druhý prázdný. Když je kolem středu prázdného místa zobrazen kruh, který ukazuje, že se k němu přichytává, přijměte rotaci. Rotace roviny bude nyní odpovídat úhlu mezi dvěma prázdnými plochami.
  6. Zobrazit postranní panel vlastností a najít panel Transformace orientací, vytvořit novou orientaci kliknutím na zadat obrázek popis zde.

Rovinu lze nyní odstranit a pomocí nové transformační orientace lze přesouvat nebo otáčet další objekty podél osy probíhající rovnoběžně s přímkou mezi dvěma prázdnými plochami .

Když je vybrána vlastní orientace, X X , Y Y a Z Z klávesové zkratky, které se běžně používají k pohybu po místní ose, použijí místo místní osy vlastní osu.

Odpovědět

Pokud vypracujete imaginární osu, není nutné tyto dvě vyprazdňování vytvářet. Myslím, že relativně jednoduchá a rychlá operace by zde byla:

Pokud to chcete udělat v režimu úprav :

  1. Vyberte všechny prvky, které chcete otáčet, poté podržte klávesu Shift a dvakrát ji aktivujte;
  2. Alt . (tečka), Shift Numpad 1 ;
  3. R otočit, jak chcete, pak Enter . Hotovo.

zde zadejte popis obrázku


Pokud to chcete udělat v Režim objektu:

  1. Vyberte jeden nebo více objektů a ujistěte se, že je cílový objekt vybrán jako poslední. Vyberte cílovou hranu v Upravit režimu;
  2. Shift S Cursor to Selected, . (period), Shift Numpad 1 ;
  3. Zpět na Režim objektu, R pro otáčení, Enter . Hotovo.

sem zadejte popis obrázku

PS: Samozřejmě můžete stisknutím Alt mezerníku zobrazit jako Normální koordinační systém pro snadné posouzení nebo CtrlAlt mezerník vytvořit / uložit novou orientaci transformace na základě toho pro další použití, stejně jako ostatní zmínit. Chci jen navrhnout nejrychlejší a nejpřesnější způsob.

Komentáře

  • Pro ty, kteří ‚ nevědí, Alt+. změní bod otáčení na aktivní prvek. Další možnosti otáčení najdete v nabídce hned vedle možností stínování.

Odpovědět

Ručně

Nejprve vyberte jednu z prázdných jednotek a stiskněte SHIFT + S Cursor to Selected. sem zadejte popis obrázku

a poté MMB otočte zobrazení, dokud se obě prázdná pole nevyrovnají. sem zadejte popis obrázku

Nyní stisknutím klávesy . (tečka) nastavte otočný bod na 3D kurzor. Nakonec vyberte objekt a stisknutím R proveďte rotaci.

Pythonic Way

Tento skript používá vektor mezi dvěma prázdnými plochami a rotaci kolem 3D kurzoru .

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() 

Odpověď

To lze provést pomocí Mesh Align Plus (můj doplněk). Podívejte se na kroky v GIF nebo si přečtěte níže uvedenou textovou verzi (zaznamenal jsem nastavení, které jste popsali výše, a pak několik obecnějších příkladů pro případ, že chcete udělat něco podobného):

zde zadejte popis obrázku

Hledanou funkcí je Quick Axis Otočit operátor v 3D zobrazení Panel nástrojů (T)> Síť Align Plus Tab , na vlastním panelu.

  1. Vyberte cílovou osu v režimu úprav (karta), pomocí kombinace kláves Shift + pravým tlačítkem vyberte dvě okraje (ponechejte je vybrané a ujistěte se, že Auto Grab Source je zaškrtnuto, je ve výchozím nastavení)

  2. Zadejte úhel, o který se bude otáčet pro Amount , as objektem, na který chcete použít rotace na vybranou, stiskněte Použít na: Objekt

Odpovědět

Vyberte cílovou osu (hranu) v režimu úprav.

Přichyťte 3D kurzor k vybrané hraně ( Shif t + S a klikněte na Kurzor na vybraný ).

Nastavte 3D kurzor jako otočný bod ( tlačítko období klávesnice ).

Otevřete Vlastnosti police N a přejděte na Tranfsorm Orientation v dolní části panel.

Kliknutím na tlačítko „plus“ vytvoříte novou orientaci transformace (nebo stiskněte Ctrl + Alt + mezera ) .
Zkontrolujte, zda je vytvořená orientace aktivní.

Nyní můžete kolem této hrany otáčet stisknutím kláves R a Y + Y (podél místní osy Y dané hrany).

Odpověď

Blender 2.8+

V posledních vydáních Blenderu je to mnohem jednodušší.

Video demonstration

V režimu úprav vyberte své dva body (v Vertex Select mode) or your edge (in Edge Select mode).

Otevřete vyskakovací okno Transformace Orientace :

Transformovat orientaci

Poté klikněte na Vytvořit orientaci + “ tlačítko:

Vytvořit orientaci

Tím se vytvoří vlastní orientace transformace, která je ve výchozím nastavení pravděpodobně pojmenována “ Edge „. Ujistěte se, že je vybrána, když ji chcete použít, nebo po dokončení přepněte zpět na výchozí Globální . Vlastní orientaci transformace můžete také odstranit pomocí “ X “ vedle názvu:

Vlastní transformace

Když je aktivní vlastní orientace transformace, můžete otáčet podél jeho osy Y pomocí R Y nebo použít Otočit gizmo:

Rotovat gizmo Rotovat gizmo v provozu

Odpovědět

Nelíbí se mi stávající odpovědi. Nejprve vám řeknu proč. Poté nabídnu své vlastní řešení.

Nejprve to není něco, pro co jsou vyžadovány nějaké doplňky, a instalace doplňků, pokud je to možné, jednoduše není nutná.

Zadruhé, rotace kolem otočných bodů dává při použití v animaci podivnou interpolaci. Důvodem je to, že nejde o přímou rotaci, ale o kombinaci rotace a překladu. Jsou chvíle, kdy to bude fungovat dobře, v závislosti na místních osách, ale chvíle, kdy to bude matoucí, špatně.

Za třetí, rotace kolem libovolných os může také poskytnout podivnou interpolaci, když použijete Eulerovy úhly (a absence jakýchkoli kostí na vašich obrázcích naznačuje, že pro své transformace používáte Eulerovy úhly.) Otáčení kolem libovolných os při použití Eulerových úhlů vám může také snadno poskytnout matoucí podivnost – nejlépe to demonstruje “ rubik „s cube “ animace.

Jaké je tedy řešení, které bych obhajoval? V podstatě to, čím jste začali, ale nemohlo to úplně skončit: pár prázdných a omezení. Začněte s dvojicí prázdných, které máte, jedno v každém bodě, které definuje vaši osu. Zatím nic není nadřazené. Dále dejte jedno prázdné tlumené sledujte cílení na další prázdný objekt. Nakonec nadřazte objekt, který chcete otočit, na omezený prázdný objekt. Chcete-li objekt otočit, otočte nadřazený prvek prázdný v místní ose Y. (Možná budete chtít dát tomuto vyprázdnění transformační zámky, aby se zabránilo rotaci osy a případně překlad / měřítko; možná budete chtít také nastavit delty.)

To nevyžaduje žádné doplňky, používá pouze standardní nástroje Blenderu a poskytuje dobrou interpolaci bez ohledu na režim transformace a osy, protože celá vaše rotace bude v jedné místní ose vašeho prázdného.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *