Aller au contenu

Messages recommandés

Posté(e)

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à pour 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

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é