chris_mtp Posté(e) le 5 mars 2011 Posté(e) le 5 mars 2011 Bonjour à tous Suite à ce sujet http:// http://www.cadxp.com/sujetXForum-31560.htm et dans le cadre d 'un besoin ponctuel dans mon travail, j'ai fais cette routine qui permet de réaliser une présentation selon divers paramètres utilisateur. J'attends vos remarques éventuelles pour améliorer, modifier et enrichir ce code qui je crois est loin d'être parfait. Peut être sera t--elle utile pour des utilisateurs d'Autocad à voir ou à adapter selon les besoins. (defun c:fm1 (/ lst1 pt1 echl lst_pr nom_pr1) (prompt "\nCréation Fenêtre Espace Papier Automatisée") (vl-load-com) (setvar "CTAB" "Model") (setq lst_pr (llayouts)) (setq d 1) (while (member (strcat "Fenetre" (rtos d 2 0)) lst_pr) (setq d (1+ d)) ) (setq nom_pr1 (strcat "Fenetre" (rtos d 2 0))) (setq lst1 (EchFen nom_pr1)) (if (not (member (nth 2 lst1) lst_pr)) (progn (if (not (tblsearch "LAYER" "Fenetre")) (command "_layer" "_N" "Fenetre" "_CO" "7" "Fenetre" "")) (setvar "CECOLOR" "DUCALQUE") (setvar "CLAYER" "Fenetre") (setvar "CMDECHO" 0) (setvar "OSMODE" 0) (setq pt1 (getpoint "\nSélectionner le centre de la fenêtre à créer: ")) (command "._layout" "N" (nth 2 lst1)) (setvar "CTAB" (nth 2 lst1)) (setq ss (ssget "_X")) (command "_.erase" ss "") (cond ((= (nth 1 lst1) "A4 Portait") (setvar "PLINEWID" 0.4782) (command "_pline" (list 202.8834 284.6971) (list 399.8845 284.6971) (list 399.8845 0.6712) (list 202.8834 0.6712) "c" ) (setvar "PLINEWID" 0) (command "_pline" (list 204.796 282.7845) (list 397.9719 282.7845) (list 397.9719 2.5838) (list 204.796 2.5838) "c" ) (command "fmult" (list 204.796 2.5838) (list 397.9719 282.7845)) (setq echl (/ 1000 (atof (nth 0 lst1)))) (command "_mspace") (command "zoom" "c" pt1 (strcat (rtos echl 2 2) "xp")) (command "_pspace") ) ((= (nth 1 lst1) "A4 Paysage") (setvar "PLINEWID" 0.4782) (command "_pline" (list 3.4622 4.008) (list 3.4622 201.0091) (list 287.4881 201.0091) (list 287.4881 4.008) "c" ) (setvar "PLINEWID" 0) (command "_pline" (list 5.3748 5.9206) (list 5.3748 199.0965) (list 285.5755 199.0965) (list 285.5755 5.9206) "c" ) (command "fmult" (list 5.3748 5.9206) (list 285.5755 199.0965)) (setq echl (/ 1000 (atof (nth 0 lst1)))) (command "_mspace") (command "zoom" "c" pt1 (strcat (rtos echl 2 2) "xp")) (command "_pspace") ) ((= (nth 1 lst1) "A3 Portait") (setvar "PLINEWID" 0.4782) (command "_pline" (list 2.6765 3.0634) (list 2.6765 397.0656) (list 286.7024 397.0656) (list 286.7024 3.0634) "c" ) (setvar "PLINEWID" 0) (command "_pline" (list 4.5891 4.976) (list 4.5891 395.153) (list 284.7898 395.153) (list 284.7898 4.976) "c" ) (command "fmult" (list 4.5891 4.976) (list 284.7898 395.153)) (setq echl (/ 1000 (atof (nth 0 lst1)))) (command "_mspace") (command "zoom" "c" pt1 (strcat (rtos echl 2 2) "xp")) (command "_pspace") ) ((= (nth 1 lst1) "A3 Paysage") (setvar "PLINEWID" 0.4782) (command "_pline" (list 5.8823 284.6971) (list 399.8845 284.6971) (list 399.8845 0.6712) (list 5.8823 0.6712) "c" ) (setvar "PLINEWID" 0) (command "_pline" (list 7.7949 282.7845) (list 397.9719 282.7845) (list 397.9719 2.5838) (list 7.7949 2.5838) "c" ) (command "fmult" (list 7.7949 2.5838) (list 397.9719 282.7845)) (setq echl (/ 1000 (atof (nth 0 lst1)))) (command "_mspace") (command "zoom" "c" pt1 (strcat (rtos echl 2 2) "xp")) (command "_pspace") ) ) (setvar "OSMODE" 65) (setvar "CMDECHO" 1) ) (progn (alert "La présentation existe déjà - Changer de nom") (exit) ) ) (prin1) ) (defun llayouts (/ acadobject ActDoc LAYOUTS LLAY n) (setq acadObject (vlax-get-acad-object)) (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object))) (setq LAYOUTS (vla-get-Layouts ActDoc)) (setq LLAY nil) (vlax-for n LAYOUTS (setq LLAY (cons (vla-get-name n) LLAY)) ) LLAY ) (defun EchFen (nom_pr1 / tmp file dcl_id echl lech typ ltyp nom_pr) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w")) ;; écrire dans le fichier (write-line (strcat "EchFen:dialog { label = \"Echelle Fenêtre\"; initial_focus = \"echl\"; :popup_list { key = \"echl\"; label = \"Choisir Echelle\"; edit_width = 10; } :popup_list { key = \"typ\"; label = \"Choisir Format\"; edit_width = 10; } :edit_box { key = \"nom_pr\"; label = \"Nom Fenêtre\"; edit_width = 11; } spacer; ok_cancel; } ") file ) ;; fermer le fichier (close file) ;; charger le fichier (setq dcl_id (load_dialog tmp)) ;; Appeler la boite de dialogue (if (not (new_dialog "EchFen" dcl_id)) (exit) ) ;;; initialisation de la boite (setq lech '("100" "125" "150" "200" "250" "500" "1000" "1250" "1500" "2000" "2500" "5000")) (setq ltyp '("A4 Portait" "A4 Paysage" "A3 Portait" "A3 Paysage")) ;; initialiser la liste echl (start_list "echl") (mapcar 'add_list lech) (end_list) (start_list "typ") (mapcar 'add_list ltyp) (end_list) (set_tile "nom_pr" nom_pr1) ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lstf (list (nth (atoi (get_tile \"echl\")) lech) (nth (atoi (get_tile \"typ\")) ltyp) (get_tile \"nom_pr\") )) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lstf ) John
VtKp Posté(e) le 7 mars 2011 Posté(e) le 7 mars 2011 Bonjour Marche très bien sur AutoCAD. 2010Il manque cependant le trace du carroyage du rectangleA voir si ça peut se programmer
lecrabe Posté(e) le 7 mars 2011 Posté(e) le 7 mars 2011 Hello Ca fonctionne aussi sur MAP 2006 --- Micro-critique 1 ---Tu dessines une polyligne epaisse legerement decalee par rapport a la fenetre A mon sens cela devrait etre une option !? ---- Micro-critique 2 ---Tu dessines une polyligne exactement sur/sous la fenetre (Fmult/Mview), pourquoi ? --- Micro-critique 3 ----Tu te decales legerement ar rapport au zero, zero - Pourquoi pas ?Mais cela devrait etre une option !? Voila sinon merci beaucoup, cette routine est fort sympathique ! :) Le Decapode (qui critique toujours un peu) ;) Autodesk Expert Elite Team
chris_mtp Posté(e) le 7 mars 2011 Auteur Posté(e) le 7 mars 2011 Merci pour vos tests.Cette routine marche donc sur toutes les versions d'Autocad apparemement.En attendant d'autres testeurs avec indication de la version d'Autocad utiiliséPar contre, pour la demande de VtKp, je ne sais pas comment faire un carroyage à partir de mon cadre. Si quelqu"un pourrait me donner une piste ou un début de code car la je bloque Lecrabe, merci d'avoir testé cette routine Tu dessines une polyligne epaisse legerement decalee par rapport a la fenetre Oui c'est pour la présentation Tu dessines une polyligne exactement sur/sous la fenetre (Fmult/Mview), pourquoi ? Oui car c'est pour éventuellement retracer la fmult à la main avec une autre échelleou zoomer sur une autre zone Tu te decales legerement ar rapport au zero, zero - Pourquoi pas ? Oui car sinon il faudrait quand même la présentation pour l'ajuster selon les marges d'impression Mais comme dit plus haut, ce code peut être addapté. Le but pour moi là est de savoir s'il marche et si on peut comme le suggère VtKp faire un carroyage directement selon l'échelle Merci encore de vos réponses et de votre aideJohn
VtKp Posté(e) le 11 mars 2011 Posté(e) le 11 mars 2011 Bonjour a tousIl manque en effet Que Le trace du carroyage de la zone voulue pour terminer ce lisp Deja fort utile.Si les cadors du lisp nous lisent Merci encore de votre aide
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant