Drej objekt på aksen mellem to punkter

Jeg har et objekt og to punkter, jeg har brug for for at rotere hele objektet rundt. Jeg oprettede to tømninger til rotationspunkterne, og jeg skal rotere den omkring en akse dannet af linjen mellem de to tømninger. Jeg prøvede at tilføje objektbegrænsninger til ingen nytte. På billedet nedenfor skal jeg dreje trekanten omkring aksen på den røde linje.

Kommentarer

  • Svarende til et andet spørgsmål. Du kan prøve på denne måde .
  • Da jeg stillede dette spørgsmål, introducerede Blender 2.8 dette som en ordentlig, let tilgængelig funktion. Rul ned forbi de gamle svar for den nemme løsning. (Don ‘ Stem forresten ikke ned på gamle svar – de er nyttige for alle, der bruger en ældre version af Blender.)

Svar

Vi har flere transformationsretninger tilgængelige i 3D-visningen, der bestemmer, hvilken vej et objekt bevæger sig langs en given akse.

indtast billedbeskrivelse her

Når disse indstillinger ikke passer til opgaven, kan du definere en tilpasset retning Denne mulighed er tilgængelig i egenskabssidelinjen N

indtast billedebeskrivelse her

For at sige det simpelthen, hvis du tilføjer et objekt og roterer det 23,6 grader på z-aksen og derefter bruger det til at definere en brugerdefineret retning, kan du derefter bruge denne retning til at flytte, rotere eller skalere et andet objekt langs den samme x- og y-akse, som vil være ved 23,6 grader fra verdens x- og y-akse.

For at bruge dette, når du har to tømmer på plads –

  1. Vælg en emp ty og tryk på Shift S , og vælg markør til valgt.
  2. Tilføj et plan og skaler til nul på x-aksen ( S X 0 Enter ).
  3. Aktiver snapping til vertex indtast billedebeskrivelse her i 3D-headeren.
  4. Sørg for, at visningen er justeret til en forudindstilling (venstre, top, front …), der ser lige på de to tømmer, så den eneste vinkel mellem to er den vinkel, du vil definere. Hvis du ønsker at definere en retning, der ændrer mere end en akse, kan du gentage det næste trin flere gange fra tre visninger for at få justeringen til højre.
  5. Begynd at dreje planet R og flyt markøren over den anden tomme. Når en cirkel vises omkring midten af det tomme, der viser, at den klikker på den, skal du acceptere rotation. Drejningen af planet vil nu matche vinklen mellem de to tømninger.
  6. Vis sidebjælken for egenskaber, og find panelet Transform Orientations, opret en ny retning ved at klikke på indtast billede beskrivelse her.

Flyet kan nu slettes, og den nye transformeringsretning kan bruges til at flytte eller rotere andre objekter langs en akse, der løber parallelt med en linje mellem de to tømninger .

Når en brugerdefineret retning er valgt, er X X , Y Y og Z Z genveje, der normalt bruges til at bevæge sig på den lokale akse, bruger den tilpassede akse i stedet for den lokale akse.

Svar

Der er faktisk ikke behov for at oprette de to tømninger, hvis du bare skal danne en imaginær akse. Jeg tror, at den relativt enkle og hurtige betjening her ville være:

Hvis du vil gøre i Edit mode :

  1. Vælg alle elementer, du vil rotere, hold derefter Skift og klik på den kant to gange for at gøre den aktiv;
  2. Alt . (periode), Shift Numpad 1 ;
  3. R for at rotere, som du vil, derefter Enter . Udført.

indtast billedbeskrivelse her


Hvis du vil gøre i Objekttilstand:

  1. Vælg et eller flere objekter, sørg for at målobjektet er valgt sidst. Vælg målkanten i Rediger -tilstand;
  2. Shift S Markør til valgt, . (periode), Shift Numpad 1 ;
  3. Tilbage til Objekt -tilstand, R for at rotere, Indtast . Udført.

indtast billedbeskrivelse her

PS: Selvfølgelig kan du trykke på Alt Mellemrumstast for at vise som Normal koordinatsystem til nem vurdering eller CtrlAlt Mellemrumstast for at oprette / gemme en ny transformationsorientering baseret på den til videre brug, ligesom andre nævner. Jeg vil bare foreslå den hurtigste og nøjagtige måde.

Kommentarer

  • For dem der ikke ‘ ikke ved, Alt+. ændrer omdrejningspunktet til det aktive element. Du kan se de andre drejemuligheder i menuen lige ved siden af skyggeindstillingerne.

Svar

Manuel måde

Vælg først en af tømningerne, og tryk på SKIFT + S Cursor to Selected. indtast billedebeskrivelse her

og derefter MMB for at rotere visningen, indtil de to tømninger er opstillet. indtast billedebeskrivelse her

Tryk nu på . (periode) for at indstille drejepunkt til 3D-markøren. Til sidst skal du vælge objektet og trykke på R for at rotere.

Pythonic Way

Denne scripts bruger vektoren mellem de to tømninger og rotation omkring 3D-markøren .

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

Svar

Du kan gøre dette med Mesh Align Plus (min tilføjelse). Enten se trinene i GIF eller læse tekstversionen nedenfor (jeg optagede den opsætning, du beskrev ovenfor, og derefter et par mere generaliserede eksempler, hvis du vil gøre noget lignende):

indtast billedbeskrivelse her

Den funktion, du leder efter, er hurtig akse Drej operatøren i 3D-visning Værktøjspanel (T)> Mesh Align Plus-fanen i sit eget panel.

  1. Vælg en målakse i redigeringstilstand (Tab) ved at bruge shift + højreklik for at vælge de to kantverts (lad dem være markerede, og sørg for Auto Grab Source er markeret, det er som standard)

  2. Indtast den vinkel, der skal roteres med, til Beløb , og med det objekt, du vil anvende, rotation til valgt, tryk Anvend på: Objekt

Svar

Vælg en målakse (kant) i redigeringstilstand.

Snap 3D-markøren til den valgte kant ( Shif t + S og klik på Markør til valgt ).

Indstil 3D-markøren som omdrejningspunkt ( tastaturperiodeknap ).

Åbn Egenskaber hylden N , og gå til Tranfsorm Orientation udrulning i bunden af panel.

Klik på knappen “plus” for at oprette ny transformeringsretning (eller tryk på Ctrl + Alt + Mellemrum ) .
Sørg for, at den oprettede retning er aktiv.

Nu kan du rotere rundt om den kant ved at trykke på R og Y + Y (langs den lokale Y-akse for den givne kant).

Svar

Blender 2.8+

Dette er meget enklere i de seneste Blender-udgivelser.

Videodemonstration

I redigeringstilstand skal du vælge dine to punkter (i Vertex Select -tilstand) eller din kant (i Edge Select -tilstand).

Åbn pop op-vinduet Transform Orientation :

Transformer orientering

Klik derefter på Opret retning + ” knap:

Opret retning

Dette skaber en brugerdefineret transformeringsorientering, der sandsynligvis hedder ” Edge ” som standard for dig. Sørg for, at det er valgt, når du vil bruge det, eller skift tilbage til standardværdien for Global når du er færdig. Du kan også slette den tilpassede transformeringsretning med ” X ” ved siden af navnet:

Tilpasset transformation

Når din tilpassede transformeringsretning er aktiv, du kan rotere langs Y-aksen med R Y eller bruge Rotate gizmo:

Roter gizmo Roter gizmo i brug

Svar

Jeg kan ikke lide de eksisterende svar. Først vil jeg fortælle dig hvorfor. Derefter vil jeg tilbyde min egen løsning.

For det første er dette ikke noget, som der kræves nogen tilføjelser til, og installation af tilføjelser, når det kan gøres, er simpelthen ikke nødvendigt.

For det andet giver rotation omkring drejepunkter mærkelig interpolation, når den bruges i en animation. Årsagen til det er, at det ikke er lige rotation, men en kombination af rotation og oversættelse. Der er tidspunkter, at det fungerer fint, afhængigt af lokale akser, men tidspunkter, at det fungerer forvirrende forkert.

For det tredje kan rotation omkring vilkårlige akser også give mærkelig interpolation, når du bruger Euler-vinkler (og fraværet af knogler i dine billeder antyder, at du bruger Euler-vinkler til dine transformationer.) At rotere omkring vilkårlige akser, når du bruger Euler-vinkler, kan også nemt give dig forvirrende underlighed – bedst demonstreret af ” rubiks kube ” animationer.

Så hvad er den løsning, jeg går ind for? Grundlæggende hvad du startede med, men ikke kunne afslutte: et par tømninger og begrænsninger. Start med det par tømninger, du har, en på begge punkter, der definerer din akse. Intet er forældret endnu. Giv derefter en tom en dæmpet spor målrettet mod den anden tomme. Til sidst skal du forældre det objekt, du vil rotere til det begrænsede tomme. Hvis du vil rotere objektet, skal du rotere forælderen tomt i sin lokale Y-akse. (Du kan muligvis give dette tømmer transformeringslåse for at forhindre rotation i andre akser og muligvis oversættelse / skala; det kan også være en god idé at indstille deltas til det.)

Dette kræver ingen tilføjelser ved kun at bruge standardblenderværktøjer og giver dig god interpolering uanset transformationstilstand og akser, fordi hele din rotation vil være i en lokal akse for din tomme.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *