Mam obiekt i dwa punkty, które muszę obrócić cały obiekt. Utworzyłem dwa puste miejsca dla punktów obrotu i muszę je obrócić wokół osi utworzonej przez linię między dwoma pustkami. Bezskutecznie próbowałem dodawać ograniczenia obiektów. Na poniższym obrazku muszę obrócić trójkąt wokół osi czerwonej linii.
Komentarze
- Podobne do innego pytania. Możesz spróbować w ten sposób .
- Odkąd zadałem to pytanie, Blender 2.8 wprowadził to jako właściwą, łatwo dostępną funkcję. Przewiń w dół stare odpowiedzi, aby znaleźć łatwe rozwiązanie. (Nawiasem mówiąc, nie ' nie odrzucaj starych odpowiedzi – są one przydatne dla każdego, kto używa starszej wersji Blendera.)
Odpowiedź
W widoku 3D dostępnych jest kilka orientacji transformacji, które określają, w jaki sposób obiekt porusza się wzdłuż danej osi.
Jeśli te opcje nie pasują do zadania, możesz zdefiniować niestandardową orientację . Ta opcja jest dostępna na pasku bocznym właściwości N
Aby go umieścić po prostu, jeśli dodasz obiekt i obrócisz go o 23,6 stopnia na osi z, a następnie użyjesz go do zdefiniowania niestandardowej orientacji, możesz użyć tej orientacji do przesuwania, obracania lub skalowania innego obiektu wzdłuż tej samej osi xiy, która będzie 23,6 stopnia od osi X i Y świata.
Aby użyć tego, gdy masz dwa puste miejsca –
- Wybierz jedno emp ty i naciśnij Shift S i wybierz Kursor do zaznaczenia.
- Dodaj płaszczyznę i skaluj do zera na osi x ( S X 0 Enter ).
- Włącz przyciąganie do wierzchołka w nagłówku 3D.
- Upewnij się, że widok jest wyrównany do ustawienia wstępnego (lewy, górny, przedni …), który patrzy prosto na dwa puste miejsca, tak aby jedyny kąt między dwa to kąt, który chcesz zdefiniować. Jeśli chcesz zdefiniować orientację, która zmienia więcej niż jedną oś, możesz powtórzyć następny krok kilka razy z trzech widoków, aby uzyskać prawidłowe wyrównanie.
- Rozpocznij obracanie płaszczyzny R i przesuń kursor na drugi pusty. Kiedy wokół środka pustego obszaru pojawi się okrąg, pokazujący, że jest do niego przyciągany, zaakceptuj obrót. Obrót płaszczyzny będzie teraz odpowiadał kątowi między dwoma pustymi przestrzeniami.
- Pokaż pasek boczny właściwości i znajdź panel Przekształcanie orientacji, utwórz nową orientację, klikając przycisk .
Płaszczyznę można teraz usunąć, a nową orientację transformacji można wykorzystać do przesuwania lub obracania innych obiektów wzdłuż osi biegnącej równolegle do linii między dwoma pustymi przestrzeniami .
Po wybraniu orientacji niestandardowej X X , Y Y i Z Z skróty normalnie używane do poruszania się po osi lokalnej będą używać osi niestandardowej zamiast osi lokalnej.
Odpowiedź
Właściwie nie ma potrzeby tworzenia dwóch pustych przestrzeni, jeśli zamierzasz utworzyć wyimaginowaną oś. Myślę, że stosunkowo prosta i szybka operacja tutaj wyglądałaby tak:
Jeśli chcesz to zrobić w trybie edycji :
- Wybierz wszystkie elementy, które chcesz obrócić, a następnie przytrzymaj Shift i kliknij dwukrotnie tę krawędź, aby ją uaktywnić;
- Alt . (kropka), Shift Numpad 1 ;
- R aby obrócić, jak chcesz, a następnie Enter . Gotowe.
Jeśli chcesz to zrobić w Tryb obiektu:
- Wybierz jeden lub więcej obiektów, upewnij się, że obiekt docelowy jest wybrany jako ostatni. Wybierz krawędź docelową w trybie edycji ;
- Shift S Kursor do zaznaczenia, . (kropka), Shift Numpad 1 ;
- Powrót do Obiekt tryb, R , aby obrócić, Enter . Gotowe.
–
PS: Oczywiście możesz nacisnąć Alt spację , aby wyświetlić jako Normalny układ współrzędnych ułatwiający ocenę lub CtrlAlt Spacja aby utworzyć / zapisać nową orientację transformacji opartą na tej do dalszego wykorzystania, tak jak wspominali inni d. Chcę tylko zasugerować najszybszy i dokładny sposób.
Komentarze
- Dla tych, którzy nie ' nie wiedzą,
Alt+.
zmienia punkt obrotu na aktywny element. Inne opcje obrotu można zobaczyć w menu tuż obok opcji cieniowania.
Odpowiedź
Sposób ręczny
Najpierw wybierz jeden z pustych pojemników i naciśnij SHIFT + S Cursor to Selected
.
, a następnie MMB , aby obrócić widok, aż dwa puste miejsca zrównają się.
Teraz naciśnij . (kropka), aby ustawić punkt obrotu na kursorze 3D. Na koniec wybierz obiekt i naciśnij R , aby go obrócić.
Pythonic Way
Ten skrypt używa wektora między dwoma pustymi przestrzeniami i obrotu wokół kursora 3D .
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()
Odpowiedź
Możesz to zrobić za pomocą Mesh Align Plus (mój dodatek). Albo obejrzyj kroki w pliku GIF, albo przeczytaj poniższą wersję tekstową (nagrałem konfigurację, którą opisałeś powyżej, a następnie kilka bardziej uogólnionych przykładów na wypadek, gdybyś chciał zrobić coś podobnego):
Funkcją, której szukasz, jest Szybka oś Operator Obróć w Widok 3D Panel narzędzi (T)> Karta Wyrównanie siatki plus , w jego własnym panelu.
-
Wybierz oś docelową w trybie edycji (Tab), używając klawisza Shift + prawy przycisk myszy, aby wybrać dwa odwrócenia krawędzi (pozostaw je zaznaczone i upewnij się, że Auto Grab Source jest zaznaczone, jest domyślnie)
-
Wpisz kąt, o który ma zostać obrócony, dla Kwota , oraz dla obiektu, do którego chcesz zastosować obrót do zaznaczonych, naciśnij Zastosuj do: Obiekt
Odpowiedź
Wybierz oś docelową (krawędź) w trybie edycji.
Przyciągnij kursor 3D do wybranej krawędzi ( Shif t + S i kliknij Kursor do zaznaczenia ).
Ustaw kursor 3D jako punkt obrotu ( przycisk okresu klawiatury ).
Otwórz półkę Właściwości N i przejdź do wdrożenia Tranfsorm Orientation na dole panelu.
Kliknij przycisk „plus”, aby utworzyć nową orientację transformacji (lub naciśnij Ctrl + Alt + Spacja ) .
Upewnij się, że utworzona orientacja jest aktywna.
Teraz możesz obracać wokół tej krawędzi, naciskając R i Y + Y (wzdłuż lokalnej osi Y danej krawędzi).
Odpowiedź
Blender 2.8+
Jest to znacznie prostsze w ostatnich wydaniach Blendera.
W trybie edycji zaznacz dwa punkty (w tryb Vertex Select ) lub krawędź (w trybie Edge Select ).
Otwórz wyskakujące okienko Transform Orientation :
Następnie kliknij Utwórz orientację ” + „:
Tworzy to niestandardową orientację transformacji, prawdopodobnie domyślnie nazwaną ” Edge „. Upewnij się, że jest zaznaczona, kiedy chcesz jej użyć, lub przełącz się z powrotem na wartość domyślną Globalna , gdy skończysz. Możesz również usunąć niestandardową orientację transformacji za pomocą ” X ” obok nazwy:
Gdy Twoja niestandardowa orientacja transformacji jest aktywna, możesz obracać wzdłuż jego osi Y za pomocą R Y lub użyć gizmo Obróć :
Odpowiedź
Nie podoba mi się istniejące odpowiedzi. Najpierw powiem ci dlaczego. Następnie zaproponuję własne rozwiązanie.
Po pierwsze, nie jest to coś, do czego żadne dodatki są wymagane, a instalowanie dodatków, gdy można to zrobić, po prostu nie jest konieczne.
Po drugie, obrót wokół punktów obrotu powoduje dziwną interpolację, gdy jest używany w animacji. Powodem tego jest to, że nie jest to zwykły obrót, ale połączenie obrotu i translacji. Czasami będzie działać dobrze, w zależności od lokalnych osi, ale czasami będzie działać myląco źle.
Po trzecie, obrót wokół dowolnych osi może również dać dziwną interpolację, gdy używasz kątów Eulera (a brak jakichkolwiek kości na twoich zdjęciach sugeruje, że „używasz kątów Eulera do transformacji.) Obracanie wokół dowolnych osi podczas używania kątów Eulera może również łatwo wywołać mylącą dziwność – najlepiej zademonstrowane przez ” kostkę rubika ” animacje.
Jakie jest więc rozwiązanie, którego bym zalecał? Zasadniczo to, od czego zacząłeś, ale nie udało Ci się dokończyć: para pustych otworów i ograniczeń. Zacznij od pary pustych otworów, które masz, po jednym w dowolnym punkcie definiującym twoją oś. Nic nie jest jeszcze nadrzędne. Następnie daj jeden pusty i wytłumiony śledź celowanie w inny pusty. Na koniec nadaj obiektowi, który chcesz obrócić, do ograniczonego pustego. Aby obrócić obiekt, obróć element nadrzędny pusty w jego lokalnej osi Y. osie i ewentualnie translację / skalę; możesz również chcieć ustawić dla niej delty.)
Nie wymaga to żadnych dodatków, używa tylko standardowych narzędzi Blendera i daje dobrą interpolację niezależnie od trybu transformacji i osi, ponieważ cały twój obrót będzie w jednej lokalnej osi twojego pustego.