Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

Bonjour

Marche très bien sur AutoCAD. 2010

Il manque cependant le trace du carroyage du rectangle

A voir si ça peut se programmer

Posté(e)

 

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

Posté(e)

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 échelle

ou 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 aide

John

Posté(e)

Bonjour a tous

Il 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

 

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é