Aller au contenu

Rotation bloc avec point d'origine.


fauxsuisse

Messages recommandés

Bonjour tout le monde,

 

J'ai un petit soucis que j'avais déjà posté et d'on à ma donnée une bonne réponse mais je n'arrive plus à mettre la main dessus.

 

Voilà j'ai plusieurs blocs que j'aimerai tourner un quart de tour 90° à partir de leur point d'insertion et ces bloc ne sont pas tous tournés de la même manière, en gros j'aimerai sélectionner un certain nombres de blocs et qu'en une fonction ils tournent tous de 90° tout en gardant leur position dans le dessin, je l'avais déjà mais je sais plus comment :(

Lien vers le commentaire
Partager sur d’autres sites

Cov edition/blocs/rotation

Il suffit ensuite de choisir les blocs qu'on veut faire pivoter

 

 

J'ai pas tout compris ta réponse mais il me semble que ce n'est pas ce que je cherche, je ne veux pas modifier l'édition du bloc je veux juste sélectionner par exemple un bloc d'une caméra qui est posé à différent endroit du plan et ces caméras n'ont pas toutes la même rotation mais je voudrai à toute leur donner 10° du plus de ce qu'elles ont, par exemple les caméra positionner à 210° deviennent 220° les 90° deviennent 100° tout en gardant leur position d'insertion d'origine, je l'avais déjà fait avec un lisp mais je ne sais plus de qui était ce lisp

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Voici une excellente routine BROT (ecrite par Gilles)

qui realise une Rotation "relative" des Blocs selectionnes

par rapport a leur rotation d'origine ...

 

lecrabe

 


;;
;; Rotation de N Bloc(s) d'un angle donne (+/- xx.xx)
;; par rapport a leur point d'insertion par GC
;; Commande au clavier :  BROT 
;;


(vl-load-com)

(defun c:brot	(/ *error* doc rot ss) 

(vl-load-com)

 (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (defun *error* (msg)
   (or	(= msg "Fonction annulée")
(princ (strcat "Erreur: " msg))
   )
   (vla-EndUndoMark doc)
   (princ)
 )
 (if
   (and
     (setq rot (getorient "\nRotation: "))
     (ssget '((0 . "INSERT")))
   )
    (progn
      (vla-StartUndoMark doc)
      (vlax-for o (setq ss (vla-get-ActiveSelectionSet doc))
 (vl-catch-all-apply
     '(lambda ()
	(vla-put-Rotation o (+ rot (vla-get-Rotation o)))
      )
   )
      )
      (vla-delete ss)
      (vla-EndUndoMark doc)
    )
 )
 (princ)
)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 5 ans après...

Bonjour,

Cette routine est exactement ce que je cherchais à un détail prêt, je voudrais que les objets restent ou sois resélectionné à la fin de la routine.

 

J’ai essayé quelque truc sans suces il faut dire également que ces un langage que je suis loin de maitriser.

Enfin voilà ci qu’elle qu’un a une idée je luis en serai très reconnaissent de la partager.

 

Merci par avance

Lien vers le commentaire
Partager sur d’autres sites

  • 4 ans après...
Le 17/07/2012 à 14:58, fauxsuisse a dit :

Bonjour tout le monde,

 

J'ai un petit soucis que j'avais déjà posté et d'on à ma donnée une bonne réponse mais je n'arrive plus à mettre la main dessus.

 

Voilà j'ai plusieurs blocs que j'aimerai tourner un quart de tour 90° à partir de leur point d'insertion et ces bloc ne sont pas tous tournés de la même manière, en gros j'aimerai sélectionner un certain nombres de blocs et qu'en une fonction ils tournent tous de 90° tout en gardant leur position dans le dessin, je l'avais déjà mais je sais plus comment 😞

Bonjour. C'est un des nombreux lisp de Gilles!!!

 

Le voici

 

BROT.LSP

Lien vers le commentaire
Partager sur d’autres sites

Il y a 21 heures, Luna a dit :

Le plus simple est de remplacer la ligne

(vla-delete ss)

par

(sssetfirst nil ss)

Eh non !...

Dans cette routine, c'est un jeu de sélection 'Visual LISP' (type vla-object) qui est assigné à la variable ss et la fonction AutoLISP sssetfirst réclame un jeu de sélection 'AutoLISP' (type pickset).
Par ailleurs, il est important de supprimer un jeu de sélection 'Visual LISP' après utilisation (leur nombre est limité dans la session), d'où le (vla-Delete ss).

Une routine équivalente en 'pur AutoLISP' :

;; Rotation de N Bloc(s) d'un angle donne (+/- xx.xx)
;; par rapport a leur point d'insertion par GC
;; Commande au clavier :  BROT 

(defun c:brot (/ rot ss i br)
  (if
    (and
      (setq rot (getorient "\nRotation: "))
      (setq ss (ssget '((0 . "INSERT"))))
    )
     (repeat (setq i (sslength ss))
       (setq br (ssname ss (setq i (1- i))))
       (setpropertyvalue
	 br
	 "Rotation"
	 (+ (getpropertyvalue br "Rotation") rot)
       )
     )
  )
  (sssetfirst nil ss)
  (princ)
)

 

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

En effet, j'ai lu un peu trop vite et je n'avais pas remarqué que 'ss était affecté à (vla-get-ActiveSelectionSet) et non à (ssget)...
My bad ! Je n'étais pas bien réveillée ^^"

Merci pour la correction @(gile) 🙂
Cependant, si ce que j'avais lu était bon, cela aurait aussi pu fonctionner il me semble, nan ? (Bon même si du coup, le jeu de sélection VLISP n'est pas supprimé dans cette version ^^")

;;
;; Rotation de N Bloc(s) d'un angle donne (+/- xx.xx)
;; par rapport a leur point d'insertion par GC
;; Commande au clavier :  BROT 
;;


(vl-load-com)

(defun c:brot	(/ *error* doc rot ss) 

(vl-load-com)

 (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (defun *error* (msg)
   (or	(= msg "Fonction annulée")
(princ (strcat "Erreur: " msg))
   )
   (vla-EndUndoMark doc)
   (princ)
 )
 (if
   (and
     (setq rot (getorient "\nRotation: "))
     (setq ss (ssget '((0 . "INSERT"))))
   )
    (progn
      (vla-StartUndoMark doc)
      (vlax-for o (vla-get-ActiveSelectionSet doc)
 (vl-catch-all-apply
     '(lambda ()
	(vla-put-Rotation o (+ rot (vla-get-Rotation o)))
      )
   )
      )
      (sssetfirst nil ss)
      (vla-EndUndoMark doc)
    )
 )
 (princ)
)

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité