Aller au contenu

Création de type de ligne


Oli553

Messages recommandés

Ce serait bien de pouvoir créer son type de ligne directement dans autocad, sans avoir besoin de bidouiller les fichier de type de ligne.

Bref, d'avoir un éditeur pour réalisé des lignes perso. ;)

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

bah moi j'ai fait l'inverse ....enfin presque à partir d'un plan archi j'arrive à récupérer les codes DXF du type de ligne (tblobjname "LTYPE" "Type de ligne à chercher")

 

cette petite fonction crée un fichier "C:\LTYPE.LIN":

(Programmation 3)

 

 (defun Programmation (ARG_TYPE	      /		      PRIVE_RESULTAT
	      n		      PRIVE_ENTITE    PRIVE_FILE
	      PRIVE_BOUCLE    PRIVE_ENTETE
	     )
 (cond
   ((= ARG_TYPE 1)			; Entité Variable Entité
    (progn
      (setq PRIVE_ENTITE nil)
      (while (not PRIVE_ENTITE)
 (setq PRIVE_ENTITE (entsel "Entité:"))
      )
      (setq PRIVE_ENTITE (entget (car PRIVE_ENTITE)))
      (if (assoc 7 PRIVE_ENTITE)
 (progn
   (Princ "\nBibliothèque :")
   (foreach n (tblsearch "STYLE" (cdr (assoc 7 PRIVE_ENTITE)))
     (print n)
   )
 )
      )
      (if (assoc 7 PRIVE_ENTITE)
 (Princ "\n\nEntité :")
      )
      (foreach n PRIVE_ENTITE (print n))
      (setq PRIVE_RESULTAT PRIVE_ENTITE)
      (if
 (and (= (cdr (assoc 0 PRIVE_ENTITE)) "INSERT")
      (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 PRIVE_ENTITE))))
 )
  (progn
    (Princ "\n\nEntité(s) dans le bloc:")
    (setq PRIVE_ENTITE
	   (entget
	     (cdr
	       (assoc
		 -2
		 (tblsearch "BLOCK"
			    (cdr (assoc 2 PRIVE_ENTITE))
		 )
	       )
	     )
	   )
    )
    (foreach n PRIVE_ENTITE (print n))
    (while (entnext (cdr (assoc -1 PRIVE_ENTITE)))
      (princ "\n")
      (setq PRIVE_ENTITE
	     (entget
	       (entnext (cdr (assoc -1 PRIVE_ENTITE)))
	     )
      )
      (foreach n PRIVE_ENTITE (print n))
    )
  )
      )
    )
   )
   ((= ARG_TYPE 2)			; Table de l'entité selectionnée
    (progn
      (setq PRIVE_ENTITE nil)
      (while (not PRIVE_ENTITE)
 (setq PRIVE_ENTITE (entsel "Entité: "))
      )
      (setq PRIVE_ENTITE (entget (car PRIVE_ENTITE)))
      (if (or (= (cdr (assoc 0 PRIVE_ENTITE)) "TEXT")
       (= (cdr (assoc 0 PRIVE_ENTITE)) "MTEXT")
   )
 (progn
   (print (cdr (assoc 0 PRIVE_ENTITE)))
   (setq PRIVE_RESULTAT (TABLE_ENTETE "STYLE"))
 )
      )
      (if (or (= (cdr (assoc 0 PRIVE_ENTITE)) "LINE")
       (= (cdr (assoc 0 PRIVE_ENTITE)) "LWPOLYLINE")
       (= (cdr (assoc 0 PRIVE_ENTITE)) "CIRCLE")
       (= (cdr (assoc 0 PRIVE_ENTITE)) "XLINE")
   )
 (progn
   (print (cdr (assoc 0 PRIVE_ENTITE)))
   (foreach n (tblsearch "LTYPE" (cdr (assoc 6 PRIVE_ENTITE)))
     (if n
       (print n)
     )
   )
   (setq PRIVE_RESULTAT (TABLE_ENTETE "LTYPE"))
 )
      )
      (if (= (cdr (assoc 0 PRIVE_ENTITE)) "INSERT")
 (progn
   (print (cdr (assoc 2 PRIVE_ENTITE)))
   (setq PRIVE_RESULTAT (TABLE_ENTETE "BLOCK"))
 )
      )
      (if PRIVE_RESULTAT
 (progn
   (princ "\nListe des Entêtes: ")
   (foreach n PRIVE_RESULTAT (Print n))
 )
      )
    )
   )
    [surligneur] ((= ARG_TYPE 3)			; Voler le type de ligne de l'archi format DXF
    (progn
      (setq PRIVE_FILE (open "C:\\LTYPE.CSV" "w"))
      (foreach	n (TABLE_ENTETE "LTYPE")
 (progn
   (setq PRIVE_BOUCLE 0)
   (setq PRIVE_RESULTAT "")
   (setq PRIVE_ENTETE (entget (tblobjname "LTYPE" n)))
   (if (assoc -1 PRIVE_ENTETE)
     (setq PRIVE_ENTETE
	    (vl-remove (assoc -1 PRIVE_ENTETE)
		       PRIVE_ENTETE
	    )
     )
   )
   (if (assoc 5 PRIVE_ENTETE)
     (setq PRIVE_ENTETE
	    (vl-remove (assoc 5 PRIVE_ENTETE)
		       PRIVE_ENTETE
	    )
     )
   )
   (if (assoc 330 PRIVE_ENTETE)
     (setq PRIVE_ENTETE
	    (vl-remove (assoc 330 PRIVE_ENTETE)
		       PRIVE_ENTETE
	    )
     )
   )
   (if (assoc 340 PRIVE_ENTETE)
     (setq PRIVE_ENTETE
	    (vl-remove (assoc 340 PRIVE_ENTETE)
		       PRIVE_ENTETE
	    )
     )
   )
   (while (< PRIVE_BOUCLE (length PRIVE_ENTETE))
     (setq PRIVE_ENTITE
	    (vl-string-subst
	      ":"
	      " . "
	      (vl-princ-to-string
		(nth PRIVE_BOUCLE PRIVE_ENTETE)
	      )
	    )
     )
     (setq PRIVE_ENTITE (strcat "[" (substr PRIVE_ENTITE 2)))
     (setq PRIVE_ENTITE
	    (strcat (substr PRIVE_ENTITE
			    1
			    (- (strlen PRIVE_ENTITE) 1)
		    )
		    "]"
	    )
     )
     (setq PRIVE_RESULTAT
	    (strcat PRIVE_RESULTAT
		    (if	(/= "" PRIVE_RESULTAT)
		      ";"
		      ""
		    )
		    PRIVE_ENTITE
	    )
     )
     (setq PRIVE_BOUCLE (1+ PRIVE_BOUCLE))
   )
   (if (/= (cdr (assoc 2 PRIVE_ENTETE)) "Continuous")
     (write-line PRIVE_RESULTAT PRIVE_FILE)
   )
 )
      )
      (close PRIVE_FILE)
    )
   )[/surligneur]
   (t nil)
 )
 PRIVE_RESULTAT
)

 

Fonction connexe

 (defun table_entete (TB / TBLIST TBLIST TBNAME RES)
 (setq TBNLIST nil)
 (setq TBLIST (tblnext TB T))
 (while TBLIST
   (setq TBNAME (cdr (assoc 2 TBLIST)))
   (setq TBNLIST (append TBNLIST (list TBNAME)))
   (setq TBLIST (tblnext TB))
 )
 (setq RES TBNLIST)
)

 

et un simple entmake fera l'affaire

ah oui j'oubliais pour lire ce fichier et avoir une liste en retour :

 

(defun Lit_BIBLIOTHEQUE	(ARG_FILENAME	 /
		 PRIVE_LIGNE	 PRIVE_LISTE1
		 PRIVE_LISTE2	 PRIVE_FILE
		 PRIVE_BOUCLE	 PRIVE_ELEMENT
		 PRIVE_P1	 PRIVE_P2
		 PRIVE_CHEMIN
		)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Fonction qui lit le fichier bibliothèque Nommé                     ;;;
;;;                                                                    ;;;
;;; Argument : Nom du fichier de la bibliothèque                       ;;;
;;;                                                                    ;;;
;;; Retourne : une liste de constantes pour l'utilisation de fonctions ;;;
;;;             du type liste des Style de texte avec toutes les       ;;;
;;;             variables                                              ;;;
;;;                                                                    ;;;
;;; Sémantique : Création à partir d'un fichier Excel type "CSV"       ;;;
;;;  les commentaire commence par "\\\" (la fonction ne lit pas la     ;;;
;;;  suite de la ligne)                                                ;;;
;;;  Chaque ligne est considérée comme une sous-liste. à l'intérieur   ;;;
;;;  de celle-ci chaque élément est séparé par ";"                     ;;;
;;;  Si un élément se présente sous  forme  :                          ;;;
;;;  (....:....) il sera pris en compte comme paire pointée            ;;;
;;;                                                                    ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; Verification de la validité des arguments
;;;
 (if (and ARG_FILENAME
   (not (vl-filename-extension ARG_FILENAME))
     )
   (setq ARG_FILENAME (strcat (strcase ARG_FILENAME) ".CSV"))
 )
 (if (and ARG_FILENAME
   (not (findfile ARG_FILENAME))
   (= (vl-filename-directory ARG_FILENAME) "")
     )
   (setq ARG_FILENAME
   (findfile (strcat ".\\AUTOCAD\\BE.MNU\\BIB.AUTOCAD\\"
		     (strcase ARG_FILENAME)
	     )
   )
   )
   (if	ARG_FILENAME
     (setq ARG_FILENAME (findfile (strcase ARG_FILENAME)))
   )
 )
 (if (not ARG_FILENAME)
   (setq ARG_FILENAME
   (getfiled
     ;; Titre de la boite de dialogue
     "Lecture de Bibliothèque"
     ;; Dossier à partir duquel la boite est ouverte dans le cas où le fichier est introuvable.
     (strcat
       (strcase
	 (vl-filename-directory
	   (findfile
	     ".\\AUTOCAD\\BE.MNU\\BIB.AUTOCAD\\PUBLIC_STYLE.CSV"
	   )
	 )
       )
       "\\"
     )
     ;; Extension des fichier à voir
     "CSV"
     ;; Bit de controle
     8
   )
   )
 )
;;;
;;; Exécution de la fonction
;;;
 ;; Ouverture de la bibliothèque
 (setq	PRIVE_FILE
 (open ARG_FILENAME
       "r"
 )
 )
 (setq PRIVE_LISTE1 nil)
 ;; Lecture de la première ligne du fichier
 (setq PRIVE_LIGNE (read-line PRIVE_FILE))
 ;; Parcours du fichier
 (while PRIVE_LIGNE
   (progn
     ;; Enlève les point-virgules finaux
     (setq PRIVE_LIGNE (vl-string-right-trim ";" PRIVE_LIGNE))
     (setq PRIVE_LISTE2 nil)
     ;; Traite la ligne si elle n'est pas un "commentaire"
     (if (/= (vl-string-elt PRIVE_LIGNE 0) (ascii "\\"))
(while (or (/= PRIVE_LIGNE "") (> (strlen PRIVE_LIGNE) 0))
  (progn
    (setq PRIVE_BOUCLE 0)
    ;; détermine l'élément
    (setq PRIVE_BOUCLE
	   (vl-string-position (ascii ";") PRIVE_LIGNE)
    )
    (if	(= PRIVE_BOUCLE nil)
      (setq PRIVE_BOUCLE (strlen PRIVE_LIGNE))
    )
    ;; si l'élément est entier, réel ou chaine de caratères
    (if	(distof (substr PRIVE_LIGNE 1 PRIVE_BOUCLE) 2)
      (if (= (distof (substr PRIVE_LIGNE 1 PRIVE_BOUCLE) 2)
	     (atoi (substr PRIVE_LIGNE 1 PRIVE_BOUCLE))
	  )
	(setq PRIVE_ELEMENT
	       (atoi (substr PRIVE_LIGNE 1 PRIVE_BOUCLE)
	       )
	)
	(setq PRIVE_ELEMENT
	       (distof (substr PRIVE_LIGNE 1 PRIVE_BOUCLE) 2)
	)
      )
      (setq PRIVE_ELEMENT (substr PRIVE_LIGNE 1 PRIVE_BOUCLE))
    )
    ;; Pour le cas des paire pointée [...:...]
    (if
      (and
	(= (type PRIVE_ELEMENT) 'STR)
	(= (vl-string-elt PRIVE_ELEMENT 0) (ascii "["))
	(= (vl-string-elt
	     PRIVE_ELEMENT
	     (1- (strlen PRIVE_ELEMENT))
	   )
	   (ascii "]")
	)
      )
       (progn
	 (setq PRIVE_P1	(substr	PRIVE_ELEMENT
				2
				(1- (vl-string-position
				      (ascii ":")
				      PRIVE_ELEMENT
				    )
				)
			)
	 )
	 (setq
	   PRIVE_P2 (substr
		      (vl-string-subst
			""
			(strcat "[" PRIVE_P1 ":")
			PRIVE_ELEMENT
		      )
		      1
		      (1- (strlen (vl-string-subst
				    ""
				    (strcat "[" PRIVE_P1 ":")
				    PRIVE_ELEMENT
				  )
			  )
		      )
		    )
	 )
	 ;; Paire pointée entier, réel ou chaine de caractères
	 ;; Pour le pointeur
	 (if (= (distof PRIVE_P1 2) (atoi PRIVE_P1))
	   (setq PRIVE_P1 (atoi PRIVE_P1))
	   (if (distof PRIVE_P1 2)
	     (setq PRIVE_P1 (distof PRIVE_P1 2))
	   )
	 )
	 ;; Pour la valeur
	 (if (= (distof PRIVE_P2 2) (atoi PRIVE_P2))
	   (setq PRIVE_P2 (atoi PRIVE_P2))
	   (if (distof PRIVE_P2 2)
	     (setq PRIVE_P2 (distof PRIVE_P2 2))
	   )
	 )
	 ;;Assigne la paire pointée
	 (setq PRIVE_ELEMENT (cons PRIVE_P1 PRIVE_P2))
       )
    )
    ;; Ajoute l'élément à la sous-liste
    (if	PRIVE_LISTE2
      (setq PRIVE_LISTE2
	     (append
	       PRIVE_LISTE2
	       (list PRIVE_ELEMENT)
	     )
      )
      (setq PRIVE_LISTE2
	     (list PRIVE_ELEMENT)
      )
    )
    ;; Retire de la ligne lue, l'élément
    (setq PRIVE_LIGNE
	   (substr PRIVE_LIGNE
		   (+ PRIVE_BOUCLE 2)
		   (strlen PRIVE_LIGNE)
	   )
    )
  )
)
     )
     ;; suivant la taille de la sous-liste ajoute celle-ci à la liste prinicipale
     (if (= (length PRIVE_LISTE2) 1)
(setq PRIVE_LISTE2 (nth 0 PRIVE_LISTE2))
     )
     (if PRIVE_LISTE2
(if PRIVE_LISTE1
  (setq	PRIVE_LISTE1
	 (append
	   PRIVE_LISTE1
	   (list PRIVE_LISTE2
	   )
	 )
  )
  (setq	PRIVE_LISTE1
	 (list PRIVE_LISTE2)
  )
)
     )
     ;; ligne suivante
     (setq PRIVE_LIGNE (read-line PRIVE_FILE))
   )
 )
 (close PRIVE_FILE)
 ;; retourne à la fonction la liste ainsi créée
 PRIVE_LISTE1
)
;;; ----------------------------------------------------------------------

 

cette dernière fonction renvoie une liste de type code DXF où un simple entmake ou (foreach n liste (entmake n)) pour créer les entité

 

pour l'instant je n'arrive pas à récupérer des types de lignes utilisant les shx et/ou les polices de caractères mais ca doit se trouver dans le code 340, certainement ....

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

Invité Patrick
Ce serait bien de pouvoir créer son type de ligne directement dans autocad, sans avoir besoin de bidouiller les fichier de type de ligne.

Bref, d'avoir un éditeur pour réalisé des lignes perso. ;)

 

Tu peux utiliser la commande MKLTYPE des Express Tools.

Lien vers le commentaire
Partager sur d’autres sites

 

Tu peux utiliser la commande MKLTYPE des Express Tools.

 

Celle là je la connaissait pas, merci bien.

Et merci à Maximilien, je vais jeté un coup d'oeil au programme, sa peut mettre utile aussi

@+

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

Ce serait bien de pouvoir créer son type de ligne directement dans autocad, sans avoir besoin de bidouiller les fichier de type de ligne.

 

Je SIGNALE que la commande -TYPELIGNE permet tout à fait de faire ca.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Benh je l'avais pas trouvé celle là, et pourtant avant j'avais regarder l'aide de totocad;

@+ et merci ;)

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

Je SIGNALE que la commande -TYPELIGNE permet tout à fait de faire ca.

 

Oui mais elle le fait uniquement en ligne de commande; MKLTYPE le fait en prenant appui sur le dessin de la futur ligne. C'est exactement ce que je cherchais. Encore une fois, merci au express tools.

@+ :P

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

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é