Roteer object op as tussen twee punten

Ik heb een object en twee punten die ik nodig heb om het hele object rond te draaien. Ik heb twee leeggoed gemaakt voor de rotatiepunten en ik moet het rond een as draaien die wordt gevormd door de lijn tussen de twee leeggoed. Ik heb geprobeerd objectbeperkingen toe te voegen zonder resultaat. In de onderstaande afbeelding moet ik de driehoek rond de as van de rode lijn draaien.

Opmerkingen

  • Vergelijkbaar met een andere vraag. Je kunt op deze manier proberen .
  • Sinds ik deze vraag stelde, heeft Blender 2.8 dit geïntroduceerd als een goede, gemakkelijk toegankelijke functie. Scroll naar beneden langs de oude antwoorden voor de gemakkelijke oplossing. (Overigens niet ‘ stemmen over oude antwoorden – ze zijn handig voor iedereen die een oudere versie van Blender gebruikt.)

Answer

We hebben verschillende transformatierichtingen beschikbaar in de 3D-weergave die bepalen op welke manier een object langs een bepaalde as beweegt.

voer de beschrijving van de afbeelding hier in

Als deze opties niet bij de taak passen, kunt u een aangepaste oriëntatie definiëren . Deze optie is beschikbaar in de eigenschappenzijbalk N

voer hier een afbeeldingbeschrijving in

Om het te plaatsen Als u een object toevoegt en het 23,6 graden op de z-as draait en het vervolgens gebruikt om een aangepaste oriëntatie te definiëren, kunt u die oriëntatie gebruiken om een ander object langs dezelfde x- en y-as te verplaatsen, draaien of schalen. op 23,6 graden ten opzichte van de x- en y-as van de wereld.

Om dit te gebruiken als je twee leeggoed hebt geplaatst –

  1. Selecteer één emp ty en druk op Shift S en selecteer Cursor om te selecteren.
  2. Voeg een vlak toe en schaal naar nul op de x-as ( S X 0 Voer ).
  3. Schakel snappen naar hoekpunt in voer afbeeldingbeschrijving in hier in de 3D-koptekst.
  4. Zorg ervoor dat de weergave is uitgelijnd met een voorinstelling (links, boven, voorkant …) die recht naar de twee leeglopen kijkt, zodat de enige hoek tussen de twee is de hoek die u wilt definiëren. Als u een oriëntatie wilt definiëren die meer dan één as verandert, kunt u de volgende stap verschillende keren herhalen vanuit drie weergaven om de uitlijning goed te krijgen.
  5. Begin met het roteren van het vlak R en beweeg de cursor over de tweede lege plek. Accepteer de rotatie als er een cirkel rond het midden van de lege ruimte wordt getoond, wat aangeeft dat hij ernaar snapt. De rotatie van het vlak komt nu overeen met de hoek tussen de twee lege plekken.
  6. Toon de zijbalk van de eigenschappen en zoek het deelvenster Transformatierichtingen, maak een nieuwe oriëntatie door te klikken op de afbeelding invoeren beschrijving hier.

Het vlak kan nu worden verwijderd en de nieuwe transformatieoriëntatie kan worden gebruikt om andere objecten te verplaatsen of te roteren langs een as die parallel loopt aan een lijn tussen de twee leeglopen .

Wanneer een aangepaste oriëntatie is geselecteerd, zijn de X X , Y Y en Z Z snelkoppelingen die normaal worden gebruikt om op de lokale as te bewegen, zullen de aangepaste as gebruiken in plaats van de lokale as.

Antwoord

Eigenlijk is het niet nodig om de twee leeggoederen te creëren als je gewoon een denkbeeldige as gaat vormen. Ik denk dat de relatief eenvoudige en snelle bewerking hier zou zijn:

Als je wilt doen in Bewerkingsmodus :

  1. Selecteer alle elementen die je wilt roteren, houd dan Shift ingedrukt en klik twee keer op die rand om deze actief te maken;
  2. Alt . (punt), Shift Numpad 1 ;
  3. R om te roteren zoals je wilt, en dan Enter . Klaar.

voer hier de beschrijving van de afbeelding in


Als je wilt doen in Objectmodus:

  1. Selecteer een of meer objecten, zorg ervoor dat het doelobject als laatste is geselecteerd. Selecteer de doelrand in Bewerken -modus;
  2. Shift S Cursor naar geselecteerd, . (punt), Shift Numpad 1 ;
  3. Terug naar Object modus, R om te roteren, Enter . Klaar.

voer hier de beschrijving van de afbeelding in

PS: Je kunt natuurlijk op Alt spatiebalk drukken om weer te geven als de Normaal coördinatenstelsel voor gemakkelijk inschatten, of CtrlAlt Spatiebalk om op basis daarvan een nieuwe transformatie-oriëntatie aan te maken / op te slaan voor verder gebruik, net zoals anderen vermelden. Ik wil alleen de snelste en nauwkeurige manier voorstellen.

Reacties

  • Voor degenen die het niet weten ‘ niet weten, Alt+. verandert het draaipunt naar het actieve element. U kunt de andere draaiopties in het menu zien, direct naast de arceringopties.

Antwoord

Handmatige manier

Selecteer eerst een van de lege plekken en druk op SHIFT + S Cursor to Selected. voer de beschrijving van de afbeelding hier in

en vervolgens MMB om de weergave te draaien totdat de twee leeggoederen op één lijn liggen. voer hier een afbeeldingbeschrijving in

Druk nu op . (punt) om het draaipunt naar de 3D-cursor in te stellen. Selecteer tenslotte het object en druk op R om te roteren.

Pythonic Way

Dit scripts gebruikt de vector tussen de twee lege plekken en rotatie rond de 3D-cursor .

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

Antwoord

Je kunt dit doen met Mesh Align Plus (mijn add-on). Bekijk de stappen in de GIF of lees de tekstversie hieronder (ik heb de setup opgenomen die je hierboven hebt beschreven, en dan een paar meer algemene voorbeelden voor het geval je iets soortgelijks wilt doen):

voer de beschrijving van de afbeelding hier in

De functie waarnaar u op zoek bent, is de Quick Axis Roteer operator in het 3D-weergave Paneel Tools (T)> Mesh Align Plus Tab , in zijn eigen paneel.

  1. Kies een doel-as in de bewerkingsmodus (Tab), door shift + rechterklik te gebruiken om de twee randverts te selecteren (laat ze geselecteerd, en zorg ervoor dat Auto Grab Source is aangevinkt, dit is standaard)

  2. Typ de hoek waarmee u wilt roteren voor Bedrag , en met het object dat u wilt toepassen rotatie naar geselecteerd, druk op Toepassen op: Object

Antwoord

Kies een doel-as (rand) in de bewerkingsmodus.

Klik de 3D-cursor op de geselecteerde rand ( Shif t + S en klik op Cursor om te selecteren ).

Stel de 3D-cursor in als draaipunt ( toetsenbordperiode-knop ).

Open de Eigenschappen plank N en ga naar de Tranfsorm Orientation uitrol onderaan de paneel.

Klik op de “plus” knop om een nieuwe transformatie oriëntatie te creëren (of druk op Ctrl + Alt + Spatie ) .
Zorg ervoor dat de gemaakte oriëntatie actief is.

Nu kunt u rond die rand draaien door op R en Y + Y te drukken (langs de lokale Y-as van die gegeven rand).

Antwoord

Blender 2.8+

Dit is veel eenvoudiger in recente Blender-releases.

Videodemonstratie

Selecteer in de bewerkingsmodus uw twee punten (in Vertex Select -modus) of uw rand (in Edge Select -modus).

Open de Transform Orientation popover:

Oriëntatie transformeren

Klik vervolgens op Oriëntatie maken + ” knop:

Oriëntatie maken

Dit creëert een aangepaste transformatie-oriëntatie, waarschijnlijk standaard ” Edge ” genoemd. Zorg ervoor dat het is geselecteerd wanneer u het wilt gebruiken, of schakel terug naar de standaardinstelling Globaal als u klaar bent. U kunt de aangepaste transformatie-oriëntatie ook verwijderen met de ” X ” naast zijn naam:

Aangepaste transformatie

Als uw aangepaste transformatie-oriëntatie actief is, je kunt roteren langs zijn Y-as met R Y of gebruik de Rotate gizmo:

Draai gizmo Draai gizmo in gebruik

Antwoord

Ik hou niet van de bestaande antwoorden. Ten eerste zal ik je vertellen waarom. Dan bied ik mijn eigen oplossing aan.

Ten eerste is dit niet iets waarvoor add-ons nodig zijn, en het installeren van add-ons wanneer het kan, is gewoon niet nodig.

Ten tweede geeft rotatie rond draaipunten een vreemde interpolatie bij gebruik in een animatie. De reden hiervoor is dat het geen rechte rotatie is, maar een combinatie van rotatie en translatie. Soms werkt het prima, afhankelijk van lokale assen, maar tijden dat het verwarrend verkeerd werkt.

Ten derde kan rotatie rond willekeurige assen ook vreemde interpolatie geven als je Euler-hoeken gebruikt (en de afwezigheid van botten in je afbeeldingen suggereert dat je Euler-hoeken gebruikt voor je transformaties.) Als u rond willekeurige assen draait bij het gebruik van Euler-hoeken, kan dit ook gemakkelijk verwarrende gekheid opleveren, het beste gedemonstreerd door de kubus van ” rubik “s ” animaties.

Dus, wat is de oplossing die ik zou bepleiten? Eigenlijk waar je mee begon, maar niet helemaal kon eindigen: een paar leeggoed en beperkingen. Begin met het paar leeggoed dat je hebt, een op elk punt dat je as definieert. Er is nog niets ouder. Geef er vervolgens een leeg een gedempt track gericht op de andere lege. Ten slotte, ouder het object dat u wilt roteren naar de beperkte lege ruimte. Om het object te roteren, roteert u de bovenliggende lege ruimte in de lokale Y-as. assen en mogelijk vertaling / schaal; misschien wilt u er ook deltas voor instellen.)

Dit vereist geen add-ons, met alleen standaard Blender-tools, en geeft je een goede interpolatie ongeacht de transformatiemodus en assen, omdat al uw rotaties zullen in één lokale as van uw lege ruimte zijn.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *