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.
Når disse indstillinger ikke passer til opgaven, kan du definere en tilpasset retning Denne mulighed er tilgængelig i egenskabssidelinjen N
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 –
- Vælg en emp ty og tryk på Shift S , og vælg markør til valgt.
- Tilføj et plan og skaler til nul på x-aksen ( S X 0 Enter ).
- Aktiver snapping til vertex i 3D-headeren.
- 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.
- 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.
- Vis sidebjælken for egenskaber, og find panelet Transform Orientations, opret en ny retning ved at klikke på .
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 :
- Vælg alle elementer, du vil rotere, hold derefter Skift og klik på den kant to gange for at gøre den aktiv;
- Alt . (periode), Shift Numpad 1 ;
- R for at rotere, som du vil, derefter Enter . Udført.
Hvis du vil gøre i Objekttilstand:
- Vælg et eller flere objekter, sørg for at målobjektet er valgt sidst. Vælg målkanten i Rediger -tilstand;
- Shift S Markør til valgt, . (periode), Shift Numpad 1 ;
- Tilbage til Objekt -tilstand, R for at rotere, Indtast . Udført.
–
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
.
og derefter MMB for at rotere visningen, indtil de to tømninger er opstillet.
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):
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.
-
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)
-
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.
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 :
Klik derefter på Opret retning ” + ” knap:
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:
Når din tilpassede transformeringsretning er aktiv, du kan rotere langs Y-aksen med R Y eller bruge Rotate gizmo:
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.