x_all Posté(e) le 20 septembre 2017 Posté(e) le 20 septembre 2017 Bonjour Je fille un coup de main aux économiste de temps en temps. C'est dingue tout ce qu'ils comptent dans un bâtiment... Dans un dessin ou est placé l'Xref global on rajoute des calque avec un sufixe "-01 ..." "-02 ..." ect...Un tableau excel récapitule ce que l'on compte avec des titres ou on peu retrouvé les calque. En accompagnement au tableau il faut que je sorte un jeu de pdf par étage avec le fond de plan et le seul calque 01, 02, 03, ... J'avais fait un micro lisp (adapté d'un code de je sais plus qui et que je remercie au passage) Dans ce code, je fait des impression depuis l'espace objet adapté à la page d'un bloc qui définit l'emprise à imprimer et qui numérote la page (c'est pour les carnets de ferraillage)J'aimerai adapté ce lisp pour m'aider à sortir mes métrés. seulement, j'ai du mal à voir comment gérer mes calquesà chaque boucle, il faudrait geler tous les calques sauf ceux des Xref et le "-01..." à "0n..." et numéroter la page en ft du numéro (et un titre sur ce qui est après le -01?) donc si je raisonne correctement 2 boucles la 1er ft du nombre de calque de métré, et imbriqué une avec le nombre de blocBref, il y a peut être pas grand chose à ajouter à ce code, mais je ne voie pas bien comment faire... en exemple je laisse un dessin en cours, ou il y a déja une dizaine ce calque, mais il en manque encore autanthttps://wetransfer.com/downloads/03577af75c865037c37589d052177b3b20170920092344/6d4b2358ddd19e44fddfb18ba9efd0de20170920092344/00f42d?utm_campaign=WT_email_tracking&utm_content=general&utm_medium=download_button&utm_source=notify_recipient_email ;;;ImpA4 pour imprimer les blocs cart-fer ;;;voir explications ici: http://joch04.free.fr/achtml/howto-mosaique.htm ;;;Un grand merci à (gile) de cadXP qui a composer la routine de tri car je m'en sortais pas ;;;version 1.1 ajout cart a4 et a3 ;;;Modlst modifie la liste de paires pour le code ascode et la nouvelle valeur val (defun Modlst (ascode val lst-paire / valcible valsource) (setq valsource (assoc ascode lst-paire) valcible (cons ascode val) lst-paire (subst valcible valsource lst-paire) ) lst-paire ;valeur de retour ); fin modlst ;;;Modent modifie la liste entdxf pour le code dxcode et la nouvelle valeur val (defun Modent (dxcode val entdxf / valcible valsource) (setq entdxf (modlst dxcode val entdxf)) (entmod entdxf) );fin modification de l'entité pas de retour ;;;Imprime ft qui imprime un bloc ;; Parametres à changer en fonction de votre imprimante ceux qui suivent sont pour ;; un format A4 déffinit dans PDFCreator 1.pc3 puis : ;; M=mm, A pAysage P Portrait, N pas de symetrie verticale, F fenetre (p1 p2) ;; P pour ajuster au format ou "1=0.028" par exemple pour une echelle,C centrer,N Style de tracé (o/n) ;; nom de la table (BA-Fer.ctb) dans cet exemple ;; o épaisseur de lignes (o/n), tracé de l'ombrage au format Affiché/Filaire/Masqué/Style visuel/Rendu ;; N et O fo pas toucher je sais plus mais c'est pas grave (defun Imprime (bloc / p1 p2) (setq P1 (cdr (cadr bloc)) p2 (cdr (caddr bloc)) ) (if (= (cdr (assoc 2 bloc)) "cart-fer-a4") (command "-traceur" "o" "" "PDFCreator 1.pc3" "A4" "M" "A" "N" "F" p1 p2 "P" "C" "O" "BA-Fer.ctb" "o" "F" "N" "N" "O" ) ) (if (= (cdr (assoc 2 bloc)) "cart-fer-a3") (command "-traceur" "o" "" "PDFCreator 1.pc3" "A3" "M" "A" "N" "F" p1 p2 "P" "C" "O" "BA-Fer.ctb" "o" "F" "N" "N" "O" ) ) ; fin if (if (= (cdr (assoc 2 bloc)) "cart-a4v") (command "-traceur" "o" "" "PDFCreator 1.pc3" "A4" "M" "P" "N" "F" p1 p2 "P" "C" "O" "BA-Fer.ctb" "o" "F" "N" "N" "O" ) ) ; fin if ) ;fin tracé de l'entité pas de retour ;;;Att-lst retourne la liste enget de l'attributs "nomatt" du bloc "entb" dans l'élément ou nil si non trouvé ;;;;;;; NOTA ;;;;;;; 2 nom de l'attribut ;;;;;;; 10 coordonnée du point de l'atrib ;;;;;;; 1 valeur attrib (defun Att-lst (entb nomatt / lst-att dxf-1) (if (= (cdr (assoc 0 (entget entb))) "INSERT") (progn (while (= lst-att nil) (setq entb (entnext entb)) (setq dxf-1 (entget entb)) (if (and (= (cdr (assoc 0 dxf-1)) "ATTRIB") (= (cdr (assoc 2 dxf-1)) nomatt) ) (setq lst-att dxf-1) ) ) lst-att ;valeur de retour ) (progn (princ "la sélection doit etre un bloc") (exit) ) ) ) ;;; Listebloc fonction qui transforme une selection set en une liste avec ;;; en sous listes des elements du bloc (handle-bloc Pb Ph Num) (defun Listebloc (lsel / ent handle PB PB Nu i u lst-a) (setq i 0 u (length lsel) lst-a nil ) (while (< i u) (setq ent (car lsel) handle (assoc 5 (entget ent)) PB (cons 10 (trans (cdr (assoc 10 (Att-lst ent "PB"))) 0 1)) PH (cons 10 (trans (cdr (assoc 10 (Att-lst ent "PH"))) 0 1)) Nu (assoc 1 (Att-lst ent "NUM")) nom (assoc 2 (entget ent)) ) (setq lst-a (cons (list handle PB PH Nu Nom) lst-a)) (setq i (+ 1 i) lsel (cdr lsel) ) ) ;; fin while lst-a ;valeur de retour );;;fin Listebloc ;;; Ordone ft qui classe le blocs en x et en y avec une tolérence de 10 pour les lignes (defun Ordone (lst-b / e1 e2) (setq lst-b (vl-sort lst-b '(lambda (e1 e2) (if (equal (caddr (cadr e1)) (caddr (cadr e2)) 2) ;; changer ici la tolérence (< (cadr (cadr e1)) (cadr (cadr e2))) (> (caddr (cadr e1)) (caddr (cadr e2))) ) ) ) ) ) ;fin Ordone ;;;Num ft pour numéroter l'attribut NUM suivant N (defun Num (lsbloc n /) (setq lstatt (Att-lst (handent (cdr (assoc 5 lsbloc))) "NUM")) (Modent 1 (itoa n) lstatt) ) ;finNum ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; ft principale ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:impa34 (/ q i u ssel ent ls-1 lst-c nomatt val) (setq ssel (ssget '((0 . "INSERT"))) nomatt "NUM" i 0 u 0 ls-1 nil ) ;;; boucle de séparation des autres blocs et stokage de cette nouvelle liste dans ls-1 (repeat (sslength ssel) (setq ent (ssname ssel i)) (if (or (= (cdr (assoc 2 (entget ent))) "cart-a4v") (= (cdr (assoc 2 (entget ent))) "cart-fer-a4") (= (cdr (assoc 2 (entget ent))) "cart-fer-a3")) (setq ls-1 (cons ent ls-1)) ) ; fin if (setq i (+ 1 i) ) ) ;fin repeat ;;; construction de la liste de travail (setq ls-1 (listebloc ls-1)) ;;;;;; ordone cette liste de blocs optimisés (setq ls-1 (Ordone ls-1)) (initget "Oui Non Premier") (setq q (getkword "Renuméroter de 1 (Oui) pour changer le Premier n° de la série (P ou premier) pour ne rien changer (N ou non) ? ")) (if (= q "Oui") (progn (setq i 1 u (1+ (length ls-1)) lst-c ls-1 ) (while (< i u) (setq bloc (car lst-c)) (Num bloc i) (setq i (+ 1 i) lst-c (cdr lst-c) ) ) ) ) ; fin if renuméroter O N (if (= q "Premier") (progn (setq i (getint "N° du Premier cadre ? : ") u (+ i (length ls-1)) lst-c ls-1 ) (while (< i u) (setq bloc (car lst-c)) (Num bloc i) (setq i (+ 1 i) lst-c (cdr lst-c) ) ) ) ) ;;; (mapcar 'Imprime ls-1) (setq i 0 u (length ls-1) lst-c ls-1 ) (while (< i u) (setq lst-bloc (car lst-c)) (Imprime lst-bloc) (setq i (+ 1 i) lst-c (cdr lst-c) ) ) (princ) ) quelques trucs sur autocad
x_all Posté(e) le 21 septembre 2017 Auteur Posté(e) le 21 septembre 2017 personne n'a un tuyau pour éteindre les calques en EO en fonction de leur suffixe?j'ai un peu du mal à trouver des trucs sur la manipulation des calques, comment on les liste, gérer les visibilité... quelques trucs sur autocad
(gile) Posté(e) le 21 septembre 2017 Posté(e) le 21 septembre 2017 Salut, La fonction wcmatch est ton amie. (setq lst nil) ;; parcourrir la table des calques (while (setq lst (tblnext "LAYER" (not lst))) ;; récupérer le nom du calque (setq name (cdr (assoc 2 lst))) ;; récupérer le nom d'entité du calque (setq layer (tblobjname "LAYER" name)) ;; si le nom du calque commence par "-01" (if (wcmatch (cdr (assoc 2 layer)) "-01*") ;; on gèle le calque (setpropertyvalue layer "IsLocked" 1) ;; sinon, on dégèle le calque (setpropertyvalue layer "IsLocked" 0) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
x_all Posté(e) le 21 septembre 2017 Auteur Posté(e) le 21 septembre 2017 ok je creuse dés que j'ai du tempsl'idée c'est de les sortir 2 par 2 pour faire moins de pages, mais je crois que j'ai toute mes briques, je devrai m'en sortir.. merci pour le chainon manquant quelques trucs sur autocad
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