Aller au contenu

Messages recommandés

Posté(e)

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 bloc

Bref, 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 autant

https://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)
)


Posté(e)

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

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é