Aller au contenu

rotation bloc 90degré


yusukens82

Messages recommandés

Bonjour,

Quelqu'un pourrait m'aider à adapter un lips, je souhaite faire une rotation de 90 degré d'un bloc depuis le point de basse du bloc.

une première écriture: 

(defun c:RR90 (/ yy)
(setq yy (ssget))
(command "ROTATION" yy "" "0" "90")
)

N’étant pas un expert du lips, merci d'être exigeant 

Cordialement,

Lien vers le commentaire
Partager sur d’autres sites

hello  Yusuken82

 

un truc comme ca ?

Phil
 

; --------------------------------------------
 ; ROTATION SUIVANT LE POINT INSERTION DES BLOC
 ; --------------------------------------------

(defun c:rri ()
  (setvar "cmdecho" 0)
  (setvar "dimzin" 0)
  (setvar "ucsfollow" 0)
  (setq osm (getvar "osmode"))
  (setvar "osmode" 0)
  (setq rotp (atof (getcfg "APPDATA/ROTP")))
  (setq tmp (getdist (strcat "\nENTRER LA VALEUR DE ROTATION <"
                             (rtos rotp 2 8)
                             ">: "
                     )
            )
  )
  (if tmp
    (setq rotp tmp)
  )
  (setcfg "APPDATA/ROTP" (rtos rotp 2 8))
  (prompt
    (strcat "\nCLIQUER SUR LES OBJETS A TOURNER : < ROTATION = "
            (rtos rotp 2 8)
            " >: "
    )
  )
  (setq bl nil)
  (while (null bl)
    (setq bl (ssget
               (list (cons 0 "insert") )
             )
    )
  )
  (command-s "scu" "")
  (setq ent nil)
  (setq compt 0)
  (setq com (sslength bl))
  (while (< compt com)
    (progn (setq ent (entget (ssname bl compt)))
           (setq point10 (cdr (assoc 10 ent))
                 noment  (cdr (assoc -1 ent))
           )
           (command-s "ROTATION" noment "" point10 rotp)
           (setq compt (1+ compt))
    )
  )
  (initget "n N")
  (setq ans (getkword "\nEST CE LE BON COTE ? (O/N):"))
  (if (OR (= ans "n") (= ans "N"))
    (progn (command-s "ANNULER" compt)
           (setq ent nil)
           (setq compt 0)
           (setq com (sslength bl))
           (while (< compt com)
             (progn (setq ent (entget (ssname bl compt)))
                    (setq point10 (cdr (assoc 10 ent))
                          noment  (cdr (assoc -1 ent))
                    )
                    (command-s "ROTATION" noment "" point10 (- 0 rotp))
                    (setq compt (1+ compt))
             )
           )
    )
  )
  (princ)
  (setvar "osmode" osm)
  (command-s "scu" "p")
  (setvar "dimzin" 8)
)

 

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut,

On peut faire beaucoup plus simple (et plus robuste) sans modifier le SCU ni les variables système (et en localisant les variables).

(defun c:rotbloc90 (/ ent)
  (if (setq ent (car (entsel "\nSelectionnez un bloc: ")))
    (if	(= (cdr (assoc 0 (entget ent))) "INSERT")
      (setpropertyvalue
	ent
	"Rotation"
	(+ (getpropertyvalue ent "Rotation") (* pi 0.5))
      )
      (prompt "\nL'objet sélectionné n'est pas un bloc.")
    )
    (prompt "\nAucun objet sélectionné.")
  )
  (princ)
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci Phiphi pour ton lisp très complet ça permet de choisir l'angle de rotation et une confirmation visuel.

Merci Gile pour ton Lisp,   en revanche est-ce possible de l'adapter pour qu'on puisse déclencher la routine sans cliquer de nouveau sur le bloc. j'ai essayé sans succès à placer la variable (ssget)

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, yusukens82 a dit :

Merci Gile pour ton Lisp,   en revanche est-ce possible de l'adapter pour qu'on puisse déclencher la routine sans cliquer de nouveau sur le bloc. j'ai essayé sans succès à placer la variable (ssget)

Dans ton premier message, tu disais : "je souhaite faire une rotation de 90 degré d'un bloc depuis le point de basse du bloc."

(defun c:rotblocs (/ ss rot i bloc)
  (if
    (and
      (setq ss (ssget '((0 . "INSERT"))))
      (setq rot	(cond
		  ((getangle "\nSpécifiez la rotation <90°>: "))
		  (T (* pi 0.5))
		)
      )
    )
     (repeat (setq i (sslength ss))
       (setq bloc (ssname ss (setq i (1- i))))
       (setpropertyvalue
	 bloc
	 "Rotation"
	 (+ (getpropertyvalue bloc "Rotation") rot)
       )
     )
  )
  (princ)
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é