Oli553 Posté(e) le 21 mars 2005 Posté(e) le 21 mars 2005 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
BIM G CO Posté(e) le 21 mars 2005 Posté(e) le 21 mars 2005 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'affaireah 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 GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
Invité Patrick Posté(e) le 21 mars 2005 Posté(e) le 21 mars 2005 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.
Oli553 Posté(e) le 21 mars 2005 Auteur Posté(e) le 21 mars 2005 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
Tramber Posté(e) le 21 mars 2005 Posté(e) le 21 mars 2005 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 ./__\. (.°=°.)
Oli553 Posté(e) le 22 mars 2005 Auteur Posté(e) le 22 mars 2005 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
Oli553 Posté(e) le 22 mars 2005 Auteur Posté(e) le 22 mars 2005 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
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