Aller au contenu

Messages recommandés

Posté(e) (modifié)

Salut, Voici ma Lisp qui me fait gagner un temps fou . N'hésiter pas à me faire des retours ou idées d'amélioration.

1.               Présentation de la routine LISP d'aplomb et balade entre les étages : - PAN PAN

Cette routine permet de définir un écart personnalisé correspondant à la distance entre les étages, rendant vos opérations d'aplomb précises et rapides. C'est un outil très pratique pour les plombages et pour gérer efficacement des plans multi-niveaux. En gros elle fait des Pan, Copies et Déplacements incrémentés.

Cette LISP fonctionne aussi sur Autocad  LT.

2.               Intérêt de la routine

  • Navigation fluide entre les étages : Utilisez les commandes 'BBB' et 'HHH' pour passer rapidement d'un étage à l'autre sans effort.
  • Copie et déplacement précis : Les commandes 'HH', 'BB', 'DH', et 'DB' permettent de copier ou déplacer des éléments avec une grande précision.
  • Cohérence dans la disposition des étages : Grâce à un écart prédéfini, ça assure l'aplomb entre les étages dans votre plan.
  • Flexibilité d'inversion : Appuyez sur 'I' ou 'N' pour inverser facilement la direction (haut/bas) pendant vos opérations.
  • Facilite les Présentations : Copier une fenêtre/présentation, faite 'HHH' dans la fenêtre et vous avez l'étage du dessus d'aplomb avec la disposition de la présentation précédente.

3.               Prérequis

Avant de commencer, assurez-vous de :

  • Disposer vos étages aligné avec un écart constant entre chaque étages et de préférence un chiffre rond (par exemple : RDC à x0 y0, R+1 à x0 y10, R+2 à x0 y20).
  • Définir l'écart (incrément) entre les étages en utilisant la commande 'EE' avant d'utiliser les autres fonctions.

4.               Utilisation

Voici comment tirer parti de cette routine :

  • EE : Configurez l'écart (incrément) en spécifiant deux points ( de Bas en Haut) correspondant à la distance entre deux étages consécutifs. Mettez un écart rond pour plus de précision et de facilité.
  • BBB/HHH : Naviguez vers l'étage supérieur ou inférieur.
  • HH/BB : Copiez la sélection d'aplomb sur l'étage supérieur ou inférieur.
  • DH/DB : Déplacez la sélection d'aplomb sur l'étage supérieur ou inférieur.

5.               Exemple pratique :

  • Faites une ligne représentant votre décalage entre étages (par exemple, une ligne verticale de 10 de longueur )
  • Utilisez 'EE' pour définir l'écart (incrément) entre le RdC et le R+1 avec les 2 extrémités de la ligne précédente (par exemple, 10 unités en Y ).
  • Sélectionnez les objets à copier du RdC au R+1.
  • Utilisez 'HH' pour copier d'aplomb vers le haut, répétez (Espace ou Entrer) pour copier au R+2, ou entrez 'I' ou 'N' pour inverser et copier d'aplomb vers le bas au Sous-Sol.

6.               Conseils et astuces

  • Configurez des raccourcis clavier (exemple : boutons précédent/suivant de la souris) pour accéder rapidement aux commandes fréquentes, comme ^c^cHHH pour monter d'un étage.
  • Créez des boutons sur la palette d'outils pour un accès rapide aux commandes.
  • N’oubliez pas que vous pouvez inverser la direction ( 'I' ou 'N') pour alterner facilement entre les copies/déplacements vers le haut et vers le bas.
  • Peut aussi servir pour des déplacements/copies rapide dans une légende, tableau ou n'importe quel paterne régulier.
  • Très utile pour avoir des présentations qui plombent d'un étage à l'autre.

Cette routine LISP est là faciliter les plans multi-étages, c'est une méthode rapide et précise pour naviguer, présenter et manipuler les éléments entre les différents niveaux.

Profitez-en !

Bonne journée.

;; Raccourcis clavier ==> ^c^cHHH
;; Raccourcis clavier ==> ^c^cBBB

;; Code AutoLISP pour gérer le décalage en X et en Y et effectuer des opérations de panoramique
;; Code AutoLISP original avec ajout des commandes HH, BB, DH, et DB avec fonctionnalité de répétition
;; Commande EE pour configurer l'écart en X et Y en spécifiant deux points
(defun c:ee ()
  ;; Demander à l'utilisateur de spécifier deux points
  (setq pt1 (getpoint "\nSpécifiez le premier point: "))
  (setq pt2 (getpoint "\nSpécifiez le second point: "))

  ;; Calculer la distance entre les deux points
  (setq dx (- (car pt2) (car pt1)))
  (setq dy (- (cadr pt2) (cadr pt1)))

  ;; Stocker les valeurs de décalage dans des variables d'environnement
  (setenv "EcartX" (rtos dx 2 9))
  (setenv "EcartY" (rtos dy 2 9))

  ;; Afficher les valeurs de décalage
  (princ (strcat "\nEcart en X défini à: " (rtos dx 2 9)))
  (princ (strcat "\nEcart en Y défini à: " (rtos dy 2 9)))

  ;; Message explicatif
  (princ "\nL'écart a été configuré avec succès.")
  (princ "\nUtilisez les commandes 'BBB', 'HHH', 'HH', 'BB', 'DH', et 'DB' pour naviguer, copier et déplacer en utilisant ces écarts.")
  (princ)
)

;; Commande pour effectuer un PAN vers le bas avec les valeurs de décalage en X et Y
(defun c:bbb ()
  ;; Récupérer les valeurs des variables de dessin "EcartX" et "EcartY"
  (setq ecartX (getenv "EcartX"))
  (setq ecartY (getenv "EcartY"))

  ;; Si les variables ne sont pas définies, demander à l'utilisateur d'entrer des valeurs
  (if (not ecartX)
    (setq ecartX (getreal "\nEntrez la valeur pour Ecart en X: "))
  )
  (if (not ecartY)
    (setq ecartY (getreal "\nEntrez la valeur pour Ecart en Y: "))
  )

  ;; Exécuter la commande PAN avec les valeurs de décalage en X et Y
  (command "_.pan" "0,0" (strcat "@" ecartX "," ecartY))
  (princ)
)

;; Commande pour effectuer un PAN vers le haut avec les valeurs de décalage négatives
(defun c:hhh ()
  ;; Récupérer les valeurs des variables de dessin "EcartX" et "EcartY"
  (setq ecartX (getenv "EcartX"))
  (setq ecartY (getenv "EcartY"))

  ;; Si les variables ne sont pas définies, demander à l'utilisateur d'entrer des valeurs
  (if (not ecartX)
    (setq ecartX (getreal "\nEntrez la valeur pour Ecart en X: "))
  )
  (if (not ecartY)
    (setq ecartY (getreal "\nEntrez la valeur pour Ecart en Y: "))
  )

  ;; Calculer les valeurs de décalage négatives
  (setq ecartX-neg (rtos (- (atof ecartX)) 2 9))
  (setq ecartY-neg (rtos (- (atof ecartY)) 2 9))

  ;; Exécuter la commande PAN avec les valeurs de décalage négatives
  (command "_.pan" "0,0" (strcat "@" ecartX-neg "," ecartY-neg))
  (princ)
)

;; Commande HH (Copie Haut)
(defun c:hh ()
  ;; Récupérer les valeurs des variables de dessin "EcartX" et "EcartY"
  (setq ecartX (getenv "EcartX"))
  (setq ecartY (getenv "EcartY"))

  ;; Si les variables ne sont pas définies, demander à l'utilisateur d'entrer les valeurs
  (if (not ecartX)
    (setq ecartX (getreal "\nEntrez la valeur pour Ecart en X: "))
  )
  (if (not ecartY)
    (setq ecartY (getreal "\nEntrez la valeur pour Ecart en Y: "))
  )

  ;; Vérifier s'il y a une sélection active
  (setq sel (ssget))
  (if sel
    (progn
      (setq multiplier-up 1)
      (setq multiplier-down 1)
      (setq direction 1)
      (setq first-inversion T)
      (while T
        (setq current-multiplier (if (> direction 0) multiplier-up multiplier-down))
        (setq vector (strcat "@" (rtos (* (atof ecartX) direction current-multiplier) 2 9) "," (rtos (* (atof ecartY) direction current-multiplier) 2 9)))
        (command "_.COPY" sel "" "0,0" vector)
        (princ (strcat "\nCopie effectuée: " vector))
        (initget "Inverser Nouveau Quitter")
        (setq input (getkword "\nAppuyez sur Entrée pour continuer, tapez [I]nverser, [N]ouveau ou [Q]uitter: "))
        (cond
          ((= input "Quitter") (exit))
          ((or (= input "Inverser") (= input "Nouveau"))
           (setq direction (* direction -1))
           (if first-inversion
             (setq first-inversion nil)
             (if (> direction 0)
               (setq multiplier-up (1+ multiplier-up))
               (setq multiplier-down (1+ multiplier-down))
             )
           )
          )
          (T 
           (if (> direction 0)
             (setq multiplier-up (1+ multiplier-up))
             (setq multiplier-down (1+ multiplier-down))
           )
          )
        )
      )
    )
    (princ "\nAucune sélection n'a été faite.")
  )
  (princ)
)

;; Commande BB (Copie Bas)
(defun c:bb ()
  ;; Récupérer les valeurs des variables de dessin "EcartX" et "EcartY"
  (setq ecartX (getenv "EcartX"))
  (setq ecartY (getenv "EcartY"))

  ;; Si les variables ne sont pas définies, demander à l'utilisateur d'entrer les valeurs
  (if (not ecartX)
    (setq ecartX (getreal "\nEntrez la valeur pour Ecart en X: "))
  )
  (if (not ecartY)
    (setq ecartY (getreal "\nEntrez la valeur pour Ecart en Y: "))
  )

  ;; Vérifier s'il y a une sélection active
  (setq sel (ssget))
  (if sel
    (progn
      (setq multiplier-up 1)
      (setq multiplier-down 1)
      (setq direction -1)
      (setq first-inversion T)
      (while T
        (setq current-multiplier (if (> direction 0) multiplier-up multiplier-down))
        (setq vector (strcat "@" (rtos (* (atof ecartX) direction current-multiplier) 2 9) "," (rtos (* (atof ecartY) direction current-multiplier) 2 9)))
        (command "_.COPY" sel "" "0,0" vector)
        (princ (strcat "\nCopie effectuée: " vector))
        (initget "Inverser Nouveau Quitter")
        (setq input (getkword "\nAppuyez sur Entrée pour continuer, tapez [I]nverser, [N]ouveau ou [Q]uitter: "))
        (cond
          ((= input "Quitter") (exit))
          ((or (= input "Inverser") (= input "Nouveau"))
           (setq direction (* direction -1))
           (if first-inversion
             (setq first-inversion nil)
             (if (> direction 0)
               (setq multiplier-up (1+ multiplier-up))
               (setq multiplier-down (1+ multiplier-down))
             )
           )
          )
          (T 
           (if (> direction 0)
             (setq multiplier-up (1+ multiplier-up))
             (setq multiplier-down (1+ multiplier-down))
           )
          )
        )
      )
    )
    (princ "\nAucune sélection n'a été faite.")
  )
  (princ)
)

;; Commande DH (Déplacement Haut)
(defun c:dh ()
  ;; Récupérer les valeurs des variables de dessin "EcartX" et "EcartY"
  (setq ecartX (getenv "EcartX"))
  (setq ecartY (getenv "EcartY"))

  ;; Si les variables ne sont pas définies, demander à l'utilisateur d'entrer les valeurs
  (if (not ecartX)
    (setq ecartX (getreal "\nEntrez la valeur pour Ecart en X: "))
  )
  (if (not ecartY)
    (setq ecartY (getreal "\nEntrez la valeur pour Ecart en Y: "))
  )

  ;; Vérifier s'il y a une sélection active
  (setq sel (ssget))
  (if sel
    (progn
      (setq direction 1)
      (while T
        (setq vector (strcat "@" (rtos (* (atof ecartX) direction) 2 9) "," (rtos (* (atof ecartY) direction) 2 9)))
        (command "_.MOVE" sel "" "0,0" vector)
        (princ (strcat "\nDéplacement effectué: " vector))
        (initget "Inverser Nouveau Quitter")
        (setq input (getkword "\nAppuyez sur Entrée pour continuer, tapez [I]nverser, [N]ouveau ou [Q]uitter: "))
        (cond
          ((= input "Quitter") (exit))
          ((or (= input "Inverser") (= input "Nouveau")) (setq direction (* direction -1)))
        )
      )
    )
    (princ "\nAucune sélection n'a été faite.")
  )
  (princ)
)

;; Commande DB (Déplacement Bas)
(defun c:db ()
  ;; Récupérer les valeurs des variables de dessin "EcartX" et "EcartY"
  (setq ecartX (getenv "EcartX"))
  (setq ecartY (getenv "EcartY"))

  ;; Si les variables ne sont pas définies, demander à l'utilisateur d'entrer les valeurs
  (if (not ecartX)
    (setq ecartX (getreal "\nEntrez la valeur pour Ecart en X: "))
  )
  (if (not ecartY)
    (setq ecartY (getreal "\nEntrez la valeur pour Ecart en Y: "))
  )

  ;; Vérifier s'il y a une sélection active
  (setq sel (ssget))
  (if sel
    (progn
      (setq direction -1)
      (while T
        (setq vector (strcat "@" (rtos (* (atof ecartX) direction) 2 9) "," (rtos (* (atof ecartY) direction) 2 9)))
        (command "_.MOVE" sel "" "0,0" vector)
        (princ (strcat "\nDéplacement effectué: " vector))
        (initget "Inverser Nouveau Quitter")
        (setq input (getkword "\nAppuyez sur Entrée pour continuer, tapez [I]nverser, [N]ouveau ou [Q]uitter: "))
        (cond
          ((= input "Quitter") (exit))
          ((or (= input "Inverser") (= input "Nouveau")) (setq direction (* direction -1)))
        )
      )
    )
    (princ "\nAucune sélection n'a été faite.")
  )
  (princ)
)

;; Afficher un message pour indiquer que les fonctions ont été chargées
(princ "\n
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Les commandes suivantes sont disponibles :")
(princ "\n 1. 'EE'  - Configurer l'écart en spécifiant deux points (de Bas en Haut).")
(princ "\n 2. 'BBB' - Effectuer un panoramique vers le Bas.")
(princ "\n 3. 'HHH' - Effectuer un panoramique vers le Haut.")
(princ "\n 4. 'HH'  - Copier la sélection vers le Haut (copies multiples possibles, tapez 'I' ou 'N' pour inverser).")
(princ "\n 5. 'BB'  - Copier la sélection vers le Bas (copies multiples possibles, tapez 'I' ou 'N' pour inverser).")
(princ "\n 6. 'DH'  - Déplacer la sélection vers le Haut (déplacements multiples possibles, tapez 'I' ou 'N' pour inverser).")
(princ "\n 7. 'DB'  - Déplacer la sélection vers le Bas (déplacements multiples possibles, tapez 'I' ou 'N' pour inverser).")
(princ "\n 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pour configurer des Raccourcis Clavier pour les Pan dans tes Commandes Personalisée
      ==> ^c^cHHH & ^c^cBBB
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -")
	  
(princ)

 

 

 

- PanPan.lsp

Modifié par OïD

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é