Rotiți obiectul pe axă între două puncte

Am un obiect și două puncte trebuie să rotesc întregul obiect în jur. Am creat două goluri pentru punctele de rotație și trebuie să o rotesc în jurul unei axe formată de linia dintre cele două goluri. Am încercat să adăugăm constrângeri de obiect fără rezultat. În imaginea de mai jos trebuie să rotesc triunghiul în jurul axei liniei roșii.

Comentarii

  • Similar cu o altă întrebare. Puteți încerca în acest mod .
  • De când am pus această întrebare, Blender 2.8 a introdus aceasta ca o funcție adecvată, ușor accesibilă. Derulați în jos pe lângă vechile răspunsuri pentru soluția ușoară. (Nu ‘ nu votați răspunsurile vechi, apropo – sunt utile pentru oricine folosește o versiune mai veche de Blender.)

Răspuns

Avem mai multe orientări de transformare disponibile în vizualizarea 3D care determină modul în care se deplasează un obiect de-a lungul unei axe date.

introduceți descrierea imaginii aici

Când aceste opțiuni nu se potrivesc sarcinii, puteți defini o orientare personalizată . Această opțiune este disponibilă în bara laterală de proprietăți N

introduceți descrierea imaginii aici

Pentru a o pune pur și simplu, dacă adăugați un obiect și îl rotiți cu 23,6 grade pe axa z și apoi îl utilizați pentru a defini o orientare personalizată, puteți folosi acea orientare pentru a muta, roti sau scala un alt obiect de-a lungul aceleiași axe x și y care vor fi la 23,6 grade față de axa x și a lumii.

Pentru a utiliza acest lucru când aveți două goluri în loc –

  1. Selectați un emp tastați și apăsați Shift S și selectați Cursor la selectat.
  2. Adăugați un plan și scalați la zero pe axa x ( S X 0 Enter ).
  3. Activați fixarea la vârf introduceți descrierea imaginii aici în antetul 3D.
  4. Asigurați-vă că vizualizarea este aliniată la o presetare (stânga, sus, față …) care privește drept la cele două goluri, astfel încât singurul unghi dintre doi este unghiul pe care doriți să îl definiți. Dacă doriți să definiți o orientare care modifică mai multe axe, puteți repeta pasul următor de mai multe ori din trei vizualizări pentru a obține alinierea corectă.
  5. Începeți să rotiți planul R și deplasați cursorul peste al doilea gol. Când un cerc este afișat în jurul centrului golului, arătând că se fixează pe el, acceptați rotația. Rotația planului se va potrivi acum cu unghiul dintre cele două goluri.
  6. Afișați bara laterală a proprietăților și găsiți panoul Transformări orientări, creați o nouă orientare dând clic pe introduceți imaginea descriere aici.

Planul poate fi acum șters, iar noua orientare a transformării poate fi utilizată pentru a muta sau roti alte obiecte de-a lungul unei axe care se desfășoară paralel cu o linie între cele două goluri. .

Când este selectată o orientare personalizată, X X , Y Y și Z Z comenzile rapide utilizate în mod normal pentru a vă deplasa pe axa locală vor folosi axa personalizată în loc de axa locală.

Răspuns

De fapt, nu este nevoie să creați cele două goluri dacă doar veți forma o axă imaginară. Cred că operațiunea relativ simplă și rapidă de aici ar fi:

Dacă doriți să faceți în Mod de editare :

  1. Selectați toate elementele pe care doriți să le rotiți, apoi țineți apăsat Shift și faceți clic pe marginea respectivă de două ori pentru ao activa;
  2. Alt . (punct), Shift Numpad 1 ;
  3. R pentru a roti după cum doriți, apoi Enter . Gata.

introduceți descrierea imaginii aici


Dacă doriți să faceți în Mod obiect:

  1. Selectați unul sau mai multe obiecte, asigurați-vă că obiectul țintă este selectat ultimul. Selectați marginea țintă în modul Editați modul ;
  2. Shift S Cursor la Selected, . (punct), Shift Numpad 1 ;
  3. Înapoi la Mod obiect , R pentru a se roti, Enter . Gata.

introduceți descrierea imaginii aici

PS: Desigur, puteți apăsa Alt Bara de spațiu pentru a afișa ca Normal sistem de coordonate pentru o judecată ușoară sau CtrlAlt Bara de spațiu pentru a crea / stoca o nouă orientare de transformare bazată pe aceea pentru utilizare ulterioară, la fel cum au menționat alții. Vreau doar să sugerez calea cea mai rapidă și exactă.

Comentarii

  • Pentru cei care nu știu ‘, Alt+. schimbă punctul de pivotare în elementul activ. Puteți vedea celelalte opțiuni de pivotare din meniu chiar lângă opțiunile de umbrire.

Răspuns

Mod manual

Mai întâi, selectați unul dintre goluri și apăsați pe SHIFT + S Cursor to Selected. introduceți descrierea imaginii aici

apoi MMB pentru a roti vizualizarea până când cele două goluri se aliniază. introduceți descrierea imaginii aici

Acum, apăsați . (punct) pentru a seta punctul de pivotare a cursorului 3D. În cele din urmă, selectați obiectul și apăsați pe R pentru a roti.

Pythonic Way

Acest script folosește vectorul dintre cele două goluri și rotația în jurul cursorului 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() 

Răspuns

Puteți face acest lucru cu Mesh Align Plus (complementul meu). Fie urmăriți pașii din GIF, fie citiți versiunea text de mai jos (am înregistrat setarea pe care ați descris-o mai sus și apoi câteva exemple mai generalizate în cazul în care doriți să faceți ceva similar):

introduceți descrierea imaginii aici

Funcția pe care o căutați este Axa rapidă Rotiți operatorul în Vizualizare 3D Panou instrumente (T)> Filă Mesh Align Plus , în propriul panou.

  1. Alegeți o axă țintă în modul de editare (Tab), utilizând shift + clic dreapta pentru a selecta cele două versuri de margine (lăsați-le selectate și asigurați-vă că Auto Grab Source este bifat, este implicit)

  2. Introduceți unghiul de rotit pentru Cantitate și cu obiectul pe care doriți să îl aplicați rotație la selectat, apăsați pe Aplicare la: Obiect

Răspuns

Alegeți o axă țintă (margine) în modul Editare.

Ajustați cursorul 3D la marginea selectată ( Shif t + S și faceți clic pe Cursor la selectat ).

Setați cursorul 3D ca punct de pivotare ( butonul perioadei tastaturii ).

Deschideți raftul Proprietăți N și accesați meniul Tranfsorm Orientation din partea de jos a panou.

Faceți clic pe butonul „plus” pentru a crea o nouă orientare a transformării (sau apăsați Ctrl + Alt + Spațiu ) .
Asigurați-vă că orientarea creată este activă.

Acum puteți roti în jurul acelei margini apăsând R și Y + Y (de-a lungul axei Y locale a muchiei date).

Răspuns

Blender 2.8+

Acest lucru este mult mai simplu în versiunile recente de Blender.

Demonstrație video

În modul de editare, selectați-vă cele două puncte (în Mod Vertex Select sau marginea dvs. (în modul Selectare margine ).

Deschideți fereastra pop-up Transform Orientation :

Orientarea transformării

Apoi faceți clic pe Creați orientare + ” buton:

Creați orientare

Aceasta creează o orientare de transformare personalizată, numită probabil ” Edge ” în mod implicit pentru dvs. Asigurați-vă că este selectat când doriți să-l utilizați sau reveniți la valoarea implicită a Global când ați terminat. De asemenea, puteți șterge orientarea de transformare personalizată cu ” X ” lângă numele său:

Transformare personalizată

Când orientarea transformării personalizate este activă, puteți roti de-a lungul axei sale Y cu R Y sau puteți folosi dispozitivul Rotire :

Rotire aparat Rotire aparat în uz

Răspuns

Nu-mi plac răspunsurile existente. Mai întâi, vă voi spune de ce. Apoi, voi oferi propria mea soluție.

În primul rând, acest lucru nu este ceva pentru care sunt necesare completări, iar instalarea suplimentelor atunci când se poate face pur și simplu nu este necesară.

În al doilea rând, rotația în jurul punctelor de pivot oferă interpolare ciudată atunci când este utilizată într-o animație. Motivul este că nu este o rotație dreaptă, ci o combinație de rotație și translație. Există momente în care va funcționa bine, în funcție de axele locale, dar va funcționa în mod confuz greșit.

În al treilea rând, rotația în jurul axelor arbitrare poate da, de asemenea, interpolare ciudată, atunci când se utilizează unghiuri Euler (iar absența oricărui os din imagini sugerează că utilizați unghiuri Euler pentru transformările dvs.) Rotirea în jurul axelor arbitrare atunci când utilizați unghiuri Euler vă poate oferi cu ușurință și ciudățenie confuză – cel mai bine demonstrat de ” cubul rubik „s ” animații.

Deci, care este soluția pe care aș pleda-o? Practic cu ceea ce ați început, dar nu ați putut termina: o pereche de goluri și constrângeri. Începeți cu perechea de goluri pe care o aveți, una în ambele puncte care vă definește axa. Nimic nu este încă părinte. În continuare, dați unui gol urmăriți direcționarea celuilalt gol. În cele din urmă, părintește obiectul pe care doriți să îl rotiți spre golul constrâns. Pentru a roti obiectul, rotiți părintele gol în axa sa locală Y. (Poate doriți să acordați acest lucru goluri încuietori de transformare pentru a preveni rotația în altul axele și, eventual, traducerea / scara; s-ar putea să doriți să setați delta și pentru aceasta.)

Acest lucru nu necesită completări, folosind doar instrumente Blender standard și vă oferă o interpolare bună, indiferent de modul de transformare și de axe, deoarece toată rotația dvs. va fi într-o axă locală a golului dvs.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *