Faire pivoter lobjet sur laxe entre deux points

Jai un objet et deux points dont jai besoin pour faire pivoter lobjet entier. Jai créé deux vides pour les points de rotation et je dois les faire pivoter autour dun axe formé par la ligne entre les deux vides. Jai essayé dajouter des contraintes dobjet en vain. Dans limage ci-dessous, je dois faire pivoter le triangle autour de laxe de la ligne rouge.

Commentaires

  • Similaire à une autre question. Vous pouvez essayer de cette façon .
  • Depuis que jai posé cette question, Blender 2.8 a introduit cela comme une fonctionnalité appropriée et facilement accessible. Faites défiler les anciennes réponses pour trouver la solution facile. (Don ‘ t downvote les anciennes réponses, dailleurs – elles sont utiles pour quiconque utilise une ancienne version de Blender.)

Réponse

Nous avons plusieurs orientations de transformation disponibles dans la vue 3D qui déterminent la façon dont un objet se déplace le long dun axe donné.

entrez la description de limage ici

Lorsque ces options ne correspondent pas à la tâche, vous pouvez définir une orientation personnalisée . Cette option est disponible dans la barre latérale des propriétés N

entrez la description de limage ici

Pour la mettre simplement, si vous ajoutez un objet et le faites pivoter de 23,6 degrés sur laxe z, puis que vous lutilisez pour définir une orientation personnalisée, vous pouvez ensuite utiliser cette orientation pour déplacer, faire pivoter ou mettre à léchelle un autre objet le long des mêmes axes x et y qui seront à 23,6 degrés des axes x et y du monde.

Pour lutiliser lorsque vous avez deux vides en place –

  1. Sélectionnez un emp ty et appuyez sur Shift S et sélectionnez Cursor to Selected.
  2. Ajoutez un plan et mettez-le à zéro sur laxe des x ( S X 0 Entrée ).
  3. Activer laccrochage au sommet entrer la description de limage ici dans len-tête 3D.
  4. Assurez-vous que la vue est alignée sur un préréglage (gauche, haut, avant …) qui regarde directement les deux vides de sorte que le seul angle entre le deux est langle que vous souhaitez définir. Si vous souhaitez définir une orientation qui modifie plusieurs axes, vous pouvez répéter létape suivante plusieurs fois à partir de trois vues pour obtenir le bon alignement.
  5. Commencez à faire pivoter le plan R et déplacez le curseur sur le deuxième vide. Lorsquun cercle saffiche autour du centre du vide indiquant quil sy accroche, acceptez la rotation. La rotation du plan correspondra désormais à langle entre les deux vides.
  6. Affichez la barre latérale des propriétés et recherchez le panneau Orientations de transformation, créez une nouvelle orientation en cliquant sur entrer limage description ici.

Le plan peut maintenant être supprimé et la nouvelle orientation de transformation peut être utilisée pour déplacer ou faire pivoter dautres objets le long dun axe parallèle à une ligne entre les deux vides .

Lorsquune orientation personnalisée est sélectionnée, X X , Y Y et Z Z normalement utilisés pour se déplacer sur laxe local utiliseront laxe personnalisé au lieu de laxe local.

Réponse

En fait, il nest pas nécessaire de créer les deux vides si vous allez simplement former un axe imaginaire. Je pense que lopération relativement simple et rapide ici serait:

Si vous voulez faire en Mode dédition :

  1. Sélectionnez tous les éléments que vous souhaitez faire pivoter, puis maintenez Maj et cliquez deux fois sur ce bord pour le rendre actif;
  2. Alt . (point), Shift Pavé numérique 1 ;
  3. R pour faire pivoter à votre guise, puis Entrée . Terminé.

entrez la description de limage ici


Si vous voulez faire dans Mode objet:

  1. Sélectionnez un ou plusieurs objets, assurez-vous que lobjet cible est sélectionné en dernier. Sélectionnez larête cible en mode Modifier ;
  2. Shift S Curseur vers sélectionné, . (point), Shift Pavé numérique 1 ;
  3. Retour à Objet mode, R pour faire pivoter, Entrée . Terminé.

entrez la description de limage ici

PS: Bien sûr, vous pouvez appuyer sur Alt Barre despace pour afficher comme Normal Système de coordination pour un jugement facile, ou CtrlAlt Barre despace pour créer / stocker une nouvelle orientation de transformation basée sur celle-ci pour une utilisation ultérieure, tout comme dautres lont mentionné. Je veux juste suggérer le moyen le plus rapide et le plus précis.

Commentaires

  • Pour ceux qui ‘ ne savent pas, Alt+. remplace le point de pivotement par lélément actif. Vous pouvez voir les autres options de pivot dans le menu juste à côté des options dombrage.

Réponse

Manière

Tout dabord, sélectionnez lun des vides et appuyez sur SHIFT + S Cursor to Selected. entrez la description de limage ici

puis MMB pour faire pivoter la vue jusquà ce que les deux vides salignent. entrez la description de limage ici

Maintenant, appuyez sur . (point) pour définir le point de pivot sur le curseur 3D. Enfin, sélectionnez lobjet et appuyez sur R pour faire pivoter.

Pythonic Way

Ce script utilise le vecteur entre les deux vides et rotation autour du curseur 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éponse

Vous pouvez le faire avec Mesh Align Plus (mon addon). Regardez les étapes du GIF ou lisez la version texte ci-dessous (jai enregistré la configuration que vous avez décrite ci-dessus, puis quelques exemples plus généralisés au cas où vous voudriez faire quelque chose de similaire):

entrez la description de limage ici

La fonctionnalité que vous recherchez est l axe rapide Faire pivoter lopérateur dans la Vue 3D Panneau Outils (T)> Onglet Mesh Align Plus , dans son propre panneau.

  1. Choisissez un axe cible en mode édition (Tab), en utilisant Maj + clic droit pour sélectionner les deux arêtes vertes (laissez-les sélectionnées, et assurez-vous que Auto Grab Source est coché, cest par défaut)

  2. Tapez langle de rotation pour Montant , et avec lobjet auquel vous voulez appliquer le rotation vers la sélection, appuyez sur Appliquer à: Objet

Réponse

Choisissez un axe cible (arête) en mode Édition.

Accrochez le curseur 3D sur larête sélectionnée ( Shif t + S et cliquez sur Curseur sur Sélectionné ).

Définit le curseur 3D comme point de pivot ( bouton de période du clavier ).

Ouvrez létagère Propriétés N et accédez au panneau déroulant Orientation Tranfsorm en bas de la panneau.

Cliquez sur le bouton «plus» pour créer une nouvelle orientation de transformation (ou appuyez sur Ctrl + Alt + Espace ) .
Assurez-vous que lorientation créée est active.

Vous pouvez maintenant tourner autour de ce bord en appuyant sur R et Y + Y (le long de laxe Y local de ce bord donné).

Réponse

Blender 2.8+

Cest beaucoup plus simple dans les versions récentes de Blender.

Démonstration vidéo

En mode édition, sélectionnez vos deux points (dans mode Vertex Select ) ou votre arête (en mode Edge Select ).

Ouvrez le popover Transform Orientation :

Transformer lorientation

Cliquez ensuite sur Créer une orientation  » + « :

Créer une orientation

Cela crée une orientation de transformation personnalisée, probablement nommée  » Edge  » par défaut pour vous. Assurez-vous quil est sélectionné lorsque vous souhaitez lutiliser, ou revenez à la valeur par défaut Global lorsque vous avez terminé. Vous pouvez également supprimer lorientation de la transformation personnalisée avec  » X  » à côté de son nom:

Transformation personnalisée

Lorsque votre orientation de transformation personnalisée est active, vous pouvez faire pivoter le long de son axe Y avec R Y ou utiliser le gizmo Rotation :

Faire pivoter le gizmo Faire pivoter le gizmo en cours dutilisation

Réponse

Je naime pas les réponses existantes. Premièrement, je vais vous dire pourquoi. Ensuite, joffrirai ma propre solution.

Premièrement, ce nest pas quelque chose pour lequel des addons sont nécessaires, et installer des addons quand cela peut être fait nest tout simplement pas nécessaire.

Deuxièmement, la rotation autour des points de pivot donne une interpolation étrange lorsquelle est utilisée dans une animation. La raison en est que ce nest pas une rotation droite, mais une combinaison de rotation et de translation. Il y a des moments où cela fonctionnera correctement, en fonction des axes locaux, mais parfois cela fonctionnera mal.

Troisièmement, la rotation autour daxes arbitraires peut également donner une interpolation étrange, lorsque vous utilisez des angles dEuler (et labsence de tout os dans vos images suggère que vous utilisez des angles dEuler pour vos transformations.) La rotation autour daxes arbitraires lors de lutilisation dangles dEuler peut également vous donner une bizarrerie déroutante – mieux illustrée par le cube de  » rubik «  » animations.

Alors, quelle est la solution que je préconiserais? Fondamentalement, ce avec quoi vous avez commencé, mais que vous navez pas pu terminer: une paire de vides et de contraintes. Commencez par la paire de vides que vous avez, un à lun ou lautre des points qui définit votre axe. Rien nest encore parenté. Ensuite, donnez à un vide un amorti piste ciblant lautre vide. Enfin, associez lobjet que vous souhaitez faire pivoter au vide contraint. Pour faire pivoter lobjet, faites pivoter le parent à vide sur son axe Y local. (Vous souhaiterez peut-être donner à ce vides des verrous de transformation pour empêcher la rotation dans dautres axes et éventuellement translation / échelle; vous pouvez également définir des deltas pour cela.)

Cela ne nécessite aucun add-on, en utilisant uniquement les outils Blender standard, et vous donne une bonne interpolation quel que soit le mode de transformation et les axes, car toute votre rotation sera dans un axe local de votre vide.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *