Ruota loggetto sullasse tra due punti

Ho un oggetto e due punti attorno ai quali devo ruotare lintero oggetto. Ho creato due vuoti per i punti di rotazione e ho bisogno di ruotarlo attorno ad un asse formato dalla linea tra i due vuoti. Ho provato ad aggiungere vincoli agli oggetti senza alcun risultato. Nellimmagine sotto devo ruotare il triangolo attorno allasse della linea rossa.

Commenti

  • Simile a unaltra domanda. Puoi provare in questo modo .
  • Da quando ho posto questa domanda, Blender 2.8 lha introdotta come una funzionalità appropriata e facilmente accessibile. Scorri verso il basso oltre le vecchie risposte per la soluzione facile. (A proposito, non ‘ t votare le vecchie risposte: sono utili per chiunque utilizzi una versione precedente di Blender.)

Risposta

Abbiamo diversi orientamenti di trasformazione disponibili nella vista 3D che determinano il modo in cui un oggetto si sposta lungo un dato asse.

inserisci qui la descrizione dellimmagine

Quando queste opzioni non si adattano allattività, puoi definire un orientamento personalizzato Questa opzione è disponibile nella barra laterale delle proprietà N

inserisci qui la descrizione dellimmagine

Per inserirla semplicemente, se aggiungi un oggetto e lo ruoti di 23,6 gradi sullasse z e poi lo usi per definire un orientamento personalizzato, puoi quindi usare quellorientamento per spostare, ruotare o scalare un altro oggetto lungo lo stesso asse xey che sarà a 23,6 gradi dallasse x e y del mondo.

Per usarlo quando hai due vuoti in posizione –

  1. Seleziona un emp ty e premi Shift S e seleziona Cursor to Selected.
  2. Aggiungi un piano e scala a zero sullasse x ( S X 0 Invio ).
  3. Abilita lo snap al vertice inserisci la descrizione dellimmagine qui nellintestazione 3D.
  4. Assicurati che la vista sia allineata a un preset (sinistro, superiore, anteriore …) che guarda dritto verso i due vuoti in modo che lunico angolo tra il due è langolo che vuoi definire. Se desideri definire un orientamento che altera più di un asse, puoi ripetere il passaggio successivo più volte da tre viste per ottenere lallineamento corretto.
  5. Inizia a ruotare il piano R e spostare il cursore sul secondo vuoto. Quando viene mostrato un cerchio attorno al centro del vuoto che mostra che si sta agganciando ad esso, accetta la rotazione. La rotazione del piano ora corrisponderà allangolo tra i due vuoti.
  6. Mostra la barra laterale delle proprietà e trova il pannello Trasforma orientamenti, crea un nuovo orientamento facendo clic sul inserisci immagine descrizione qui.

Il piano ora può essere cancellato e il nuovo orientamento di trasformazione può essere usato per spostare o ruotare altri oggetti lungo un asse che corre parallelo a una linea tra i due vuoti .

Quando viene selezionato un orientamento personalizzato, X X , Y Y e Z Z normalmente utilizzate per spostarsi sullasse locale useranno lasse personalizzato invece dellasse locale.

Risposta

In realtà, non è necessario creare i due vuoti se intendi solo formare un asse immaginario. Penso che loperazione relativamente semplice e veloce qui sarebbe:

Se vuoi eseguire in modalità di modifica :

  1. Seleziona tutti gli elementi che desideri ruotare, quindi tieni premuto Maiusc e fai clic due volte su quel bordo per renderlo attivo;
  2. Alt . (punto), Maiusc Tastierino numerico 1 ;
  3. R per ruotare come desideri, quindi Invio . Fatto.

inserisci qui la descrizione dellimmagine


Se vuoi farlo in Modalità oggetto:

  1. Seleziona uno o più oggetti, assicurati che loggetto di destinazione sia selezionato per ultimo. Seleziona il bordo di destinazione in Modifica modalità;
  2. Shift S Cursore su Selezionato, . (punto), Maiusc Tastierino numerico 1 ;
  3. Torna a Oggetto modalità, R per ruotare, Invio . Fine.

inserisci qui la descrizione dellimmagine

PS: Ovviamente puoi premere Alt Barra spaziatrice per visualizzare come Normale sistema di coordinate per un facile giudizio o CtrlAlt Barra spaziatrice per creare / memorizzare un nuovo orientamento di trasformazione basato su quello per un ulteriore utilizzo, proprio come altri hanno menzionato. Voglio solo suggerire il modo più rapido e preciso.

Commenti

  • Per coloro che ‘ non sanno, Alt+. cambia il pivot point nellelemento attivo. Puoi vedere le altre opzioni pivot nel menu accanto alle opzioni di ombreggiatura.

Rispondi

Modalità manuale

Per prima cosa, seleziona uno dei vuoti e premi MAIUSC + S Cursor to Selected. inserisci qui la descrizione dellimmagine

quindi MMB per ruotare la visualizzazione finché i due vuoti non si allineano. inserisci qui la descrizione dellimmagine

Ora, premi . (punto) per impostare il punto di rotazione sul cursore 3D. Infine, seleziona loggetto e premi R per ruotare.

Pythonic Way

Questo script utilizza il vettore tra i due vuoti e la rotazione attorno al cursore 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() 

Risposta

Puoi farlo con Mesh Align Plus (il mio addon). O guarda i passaggi nella GIF o leggi la versione testuale di seguito (ho registrato la configurazione che hai descritto sopra, e poi un paio di esempi più generalizzati nel caso tu voglia fare qualcosa di simile):

inserisci qui la descrizione dellimmagine

La funzione che stai cercando è Quick Axis Ruota operatore nella Vista 3D Pannello Strumenti (T)> Scheda Mesh Align Plus , nel suo pannello.

  1. Scegli un asse di destinazione in modalità di modifica (Tab), utilizzando MAIUSC + clic destro per selezionare i due vertici del bordo (lasciali selezionati e assicurati che Sorgente di acquisizione automatica è selezionato, è per impostazione predefinita)

  2. Digita langolo di cui ruotare per Quantità e con loggetto a cui desideri applicare il rotazione su selezionato, premi Applica a: Oggetto

Risposta

Scegli un asse di destinazione (bordo) in modalità Modifica.

Posiziona il cursore 3D sul bordo selezionato ( Sposta t + S e fai clic su Cursore su selezionato ).

Imposta il cursore 3D come punto di rotazione ( pulsante punto della tastiera ).

Apri lo scaffale Proprietà N e vai al rollout Orientamento Tranfsorm nella parte inferiore del pannello.

Fai clic sul pulsante “più” per creare un nuovo orientamento di trasformazione (o premi Ctrl + Alt + Spazio ) .
Assicurati che lorientamento creato sia attivo.

Ora puoi ruotare attorno a quel bordo premendo R e Y + Y (lungo lasse Y locale di quel dato bordo).

Risposta

Blender 2.8+

Questo è molto più semplice nelle recenti versioni di Blender.

Dimostrazione video

In modalità di modifica, seleziona i tuoi due punti (in modalità Vertex Select ) o il tuo bordo (in modalità Edge Select ).

Apri il popover Transform Orientation :

Trasforma lorientamento

Quindi fai clic su Crea orientamento + “:

Crea orientamento

Questo crea un orientamento di trasformazione personalizzato, probabilmente denominato ” Edge ” per impostazione predefinita. Assicurati che sia selezionato quando vuoi usarlo o torna al valore predefinito di Globale quando hai finito. Puoi anche eliminare lorientamento della trasformazione personalizzato con ” X ” accanto al nome:

Trasformazione personalizzata

Quando il tuo orientamento di trasformazione personalizzato è attivo, puoi ruotare lungo il suo asse Y con R Y o utilizzare il gizmo Ruota :

Ruota gizmo Ruota gizmo in uso

Rispondi

Non mi piacciono le risposte esistenti. Per prima cosa, ti spiego perché. Quindi, offrirò la mia soluzione.

Innanzitutto, questo non è qualcosa per cui sono richiesti componenti aggiuntivi e linstallazione di componenti aggiuntivi quando può essere eseguita semplicemente non è necessario.

In secondo luogo, la rotazione attorno ai punti di articolazione fornisce una strana interpolazione quando viene utilizzata in unanimazione. Il motivo è perché non è una rotazione diritta, ma una combinazione di rotazione e traslazione. A volte funzionerà bene, a seconda degli assi locali, ma a volte funzionerà in modo confuso.

Terzo, la rotazione attorno ad assi arbitrari può anche dare una strana interpolazione, quando si usano gli angoli di Eulero (e lassenza di qualsiasi ossatura nelle immagini suggerisce che stai usando gli angoli di Eulero per le tue trasformazioni.) La rotazione su assi arbitrari quando si utilizzano gli angoli di Eulero può facilmente darti anche stranezze confuse, meglio dimostrato da ” rubik “s cube ” animazioni.

Allora, qual è la soluzione che propongo? Fondamentalmente ciò con cui hai iniziato, ma non sei riuscito a finire: un paio di vuoti e vincoli. Inizia con la coppia di vuoti che hai, uno in entrambi i punti che definisce il tuo asse. Niente è ancora genitore. Quindi, dai a uno vuoto uno smorzato traccia il targeting dellaltro vuoto. Infine, genitore delloggetto che si desidera ruotare nel vuoto vincolato. Per ruotare loggetto, ruotare il genitore vuoto nel suo asse Y locale. (Si potrebbe desiderare di dare a questi vuoti blocchi di trasformazione per impedire la rotazione in altri assi e possibilmente traslazione / scala; potresti voler impostare delta anche per questo.)

Questo non richiede addon, usando solo strumenti standard di Blender, e ti dà una buona interpolazione indipendentemente dalla modalità di trasformazione e dagli assi, perché tutta la tua rotazione sarà in un asse locale del tuo vuoto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *