Rechercher dans la communauté
Affichage des résultats pour les étiquettes 'étage'.
1 résultat trouvé
-
Lisp : aplomb et balade entre les étages - Copie et déplacement incrémenté
OïD a posté un sujet dans Routines LISP
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
