Aller au contenu

Légende automatique (créée pendant le tracé)


Maximilien

Messages recommandés

Voici le code que j'utilise pour créer les blocs pour chaque réseau dessiné.

Pour chaque réseau différent nous avons un calque et suivant qu'il soit en plafond / en plinthe / encastré / ou sur le plan Masse il y a un style trait différent.

 

(defun BLOC_LEGENDE (ARG_NIVEAU	     ARG_ECHELLE     ARG_COLFIN
	     /		     VAR_ListePt     VAR_BLOCKNAME
	     VAR_EpaisFIN    VAR_EpaisTXT    VAR_EpaisNOR
	     VAR_TEXTE
	    )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Fonction qui crée un bloc dans la table des blocs dont les caract. ;;;
;;;   sont une polyligne pour cadre, une ligne pour le réseau tracé    ;;;
;;;   et un attribut pour la légende                                   ;;;
;;;                                                                    ;;;
;;; Arguments: Nom du calque où est mis le réseau                      ;;;
;;;            Niveau Plafond / plinthe  / sous dalle / plan Masse     ;;;
;;;            Echelle à laquelle le dessin est dessiné (1.0=1/50      ;;;
;;;                2.0=1/100 4.0=1/200 etc)                            ;;;
;;;            Couleur pour les traits fins                            ;;;
;;;                                                                    ;;;
;;; Retourne : le nom du bloc ajouté dans la table des blocs           ;;;
;;;                                                                    ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Variable local pour le nom du bloc
 (setq	VAR_BLOCKNAME (strcat "LEGENDE_"
		      (getvar "CLAYER")
		      "_"
		      (vl-princ-to-string ARG_NIVEAU)
		      "_"
		      (vl-princ-to-string ARG_ECHELLE)
	      )
;; Variable locale pour le texte
VAR_TEXTE     (tblsearch "STYLE" "Standard")
;; Variable locale pour la liste des points pour le tracé du bloc
VAR_ListePt   (list
		;; LWPOLYLIGNE point Origine
		(list 0.0 0.0)
		;; LWPOLYLIGNE point 1
		(list (* 3 ARG_ECHELLE) 0.0)
		;; LWPOLYLIGNE point 2
		(list (* 3 ARG_ECHELLE) (* -0.5 ARG_ECHELLE))
		;; LWPOLYLIGNE point 3
		(list (* 7.0 ARG_ECHELLE) (* -0.5 ARG_ECHELLE))
		;; LWPOLYLIGNE point 4
		(list (* 7.0 ARG_ECHELLE) 0.0)
		;; LWPOLYLIGNE point 5
		(list (* 3 ARG_ECHELLE) 0.0)
		;; LWPOLYLIGNE point 6
		(list (* 3 ARG_ECHELLE) (* -0.5 ARG_ECHELLE))
		;; LWPOLYLIGNE point 7
		(list 0.0 (* -0.5 ARG_ECHELLE))
		;; LINE Point 8 (assoc 10)
		(list (* 0.15 ARG_ECHELLE) (* -0.25 ARG_ECHELLE) 0.0)
		;; LINE Point 9 (assoc 11)
		(list (* 2.85 ARG_ECHELLE) (* -0.25 ARG_ECHELLE) 0.0)
		;; ATTDEF Point 10 (assoc 10)
		(list
		  (* 3.1 ARG_ECHELLE)
		  (* (/	(+ (* 2 (cdr (assoc 42 VAR_TEXTE))) 1.0)
			-4
		     )
		     ARG_ECHELLE
		  )
		  0.0
		)
		;; ATTDEF Point 11 (assoc 11)
		(list (* 3.1 ARG_ECHELLE) (* -0.25 ARG_ECHELLE) 0.0)
	      )
;; Variable locale pour le forçage des épaisseur de trait FIN (sers uniquement pour embêter les puristes)
VAR_EpaisFIN  13
;; Variable locale pour le forçage des épaisseur des textes (sers uniquement pour embêter les puristes)
VAR_EpaisTXT  18
;; Variable locale pour le forçage des épaisseur de trait des réseaux (sers uniquement pour embêter les puristes)
VAR_EpaisNOR  35
 )

 ;; CELTYPE = Type de ligne actuel
 ;; CECOLOR = Couleur actuelle
 ;; CELTSCALE = Echelle de type de ligne actuel

 ;|(princ "\n")
(princ VAR_BLOCKNAME)
(princ "\n")
(princ VAR_TEXTE)
(princ "\n")
(princ VAR_ListePt)
(exit)|;

 (entmake (list '(0 . "BLOCK")
	 '(8 . "0")
	 (cons 2 VAR_BLOCKNAME)
	 '(70 . 2)
	 '(4 . "")
	 '(62 . 0)
	 '(6 . "Byblock")
	 (cons 10 (list 0.0 0.0 0.0))
   )
 )
 (entmake (list '(0 . "LWPOLYLINE")
	 '(100 . "AcDbEntity")
	 '(67 . 0)
	 '(8 . "0")
	 (cons 62 ARG_COLFIN)
	 '(6 . "Continuous")
	 (cons 370 VAR_EpaisFIN)
	 '(100 . "AcDbPolyline")
	 '(90 . 11)
	 '(70 . 1)
	 '(43 . 0.0)
	 '(38 . 0.0)
	 '(39 . 0.0)
	 (cons 10 (nth 0 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 1 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 2 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 3 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 4 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 5 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 6 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 7 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 10 (nth 0 VAR_ListePt))
	 '(40 . 0.0)
	 '(41 . 0.0)
	 '(42 . 0.0)
	 (cons 210 (list 0.0 0.0 1.0))
   )
 )
 (entmake (list '(0 . "LINE")
	 '(100 . "AcDbEntity")
	 '(67 . 0)
	 '(8 . "0")
	 '(62 . 0)
	 '(6 . "ByBlock")
	 (cons 48 (getvar "CELTSCALE"))
	 (cons 370 VAR_EpaisNOR)
	 '(100 . "AcDbLine")
	 (cons 10 (nth 8 VAR_ListePt))
	 (cons 11 (nth 9 VAR_ListePt))
	 (cons 210 (list 0.0 0.0 1.0))
   )
 )
 (entmake
   (list
     '(0 . "ATTDEF")
     '(100 . "AcDbEntity")
     '(67 . 0)
     '(8 . "0")
     (cons 62 (cdr (assoc 62 VAR_TEXTE)))
     '(6 . "Continuous")
     (cons 370 VAR_EpaisTXT)
     '(100 . "AcDbText")
     (cons 10 (nth 10 VAR_ListePt))
     (cons 40 (cdr (assoc 42 VAR_TEXTE)))
     (cons
1
(strcat
  "Réseau "
  (vl-string-left-trim "Réseau " (substr (getvar "CLAYER") 6))
  " " (vl-princ-to-string ARG_NIVEAU)
)
     )
     (cons 50 (cdr (assoc 50 VAR_TEXTE)))
     (cons 41 (cdr (assoc 41 VAR_TEXTE)))
     '(51 . 0.0)
     (cons 7 (cdr (assoc 2 VAR_TEXTE)))
     (cons 71 (cdr (assoc 71 VAR_TEXTE)))
     '(72 . 0)
     (cons 11 (nth 11 VAR_ListePt))
     (cons 210 (list 0.0 0.0 1.0))
     '(100 . "AcDbAttributeDefinition")
     '(3 . "Désignation")
     '(2 . "DESIGNATION")
     (cons 70 (cdr (assoc 70 VAR_TEXTE)))
     '(73 . 0)
     '(74 . 2)
     '(280 . 0)
   )
 )
 (entmake (list '(0 . "ENDBLK")
	 '(8 . "0")
	 '(62 . 0)
	 '(6 . "byblock")
   )
 )
 VAR_BLOCKNAME
)

 

Cette routine est ici pour exemple

particularismes

- les calques sont nommés ainsi _xxx-Réseau ou _xxx-Eau froide

- ARG_ECHELLE est une valeur enregistrée dans le style de cote propriétaire.

- ce bloc est surtout fait pour une utilisation des plans en CTB avec le blanc en 0.18mm et rouge en 0.13mm

- Si le bloc existe le entmake ne provoque pas d'erreurs : il est inopérant( sous AutoCAD 2007)

 

 

[Edité le 29/11/2006 par Maximilien]

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

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é