Aller au contenu

chris_mtp

Membres
  • Compteur de contenus

    406
  • Inscription

  • Dernière visite

Tout ce qui a été posté par chris_mtp

  1. Bonjour Pierre, SI j'ai bien compris depuis le début ta demande, tu veux côter une polyligne. Et bien recherche sur ce forum un lisp seglen de Gile ou de Patrick je sais plus il fait cela très bien. John
  2. Bonjour à tous, Je suis curieux de voir ce fichier, il doit y avoir des xrefs, pas possible ..... de 300 ko, tu pâsses à 200Mo, .... il serait intéressant de mettre en ligne ce fichier en effet...... John.
  3. Bonjour pierrevigneux Par chainage, tu veux dire quoi car chez moi, un chainage c'est l'action de chainer sur le terrain une distance d'un point A vers un point B. Si par chainage, tu veux dire coter une polyligne avec indiquer sur les côtés de la polylignes les longueurs des segments, oui il y aun lisp mais un peu de précision please ...... john
  4. Bonjour Gile, Si j'ai bien compris tes deux fonctions, on peut lire et écrire des feuilles dans un fichier Excel et tes deux fonctions peuvent être appelés dans un lisp pur par exemple comme les fonctions write-line ou read-line à part que l'on peut paramétrer plus d'options avec tes deux fonctions. J'aimerais essayé la fonction gc-XlRead pour insérer des blocs dont les coordonnées sont dans un tableau Excel, doit-on spécifier le nom des colonnes et des lignes à prendre en compte pour arrêter le traitement ou non et le classeur Excel peut il être ouvert ou non ? Si tu aurais un petit exemple d'application en lisp, ca serait idéal bien sur si tu as 2 min, sinon c'est pas grave. Merci encore de ton aide. John. [Edité le 30/12/2009 par chris_mtp]
  5. Bonjour à tous, J'ai un lisp et une boite de dialogue que j'ai fait avec OpenDCL car les boites de dialogue sont assez limites en pur lisp. Je n'arrive pas à lier les deux, le lisp que j'ai fait et les listes ou combo box de ma boite de dialogue. Quelqu'un aurait il une idée ? pour avancer surtout que le format OpenDcl est illisible, il est compilé. Merci par avance de votre aide. John.
  6. Bonjour Gile Marche nickel chez moi alors que le premier test n'arrivait pas au bout. Je pense que cet outil peut être pratique comme le dit Lilli pour la génération d'un mnt sous mnt ou 'linsertion de points type bloc sous Autocad. en fait plusieurs applications sont possibles.... Bon courage pour la suite. John.
  7. sous excel 2003 et vista ca ne marche po message d'erreur et merci d'avoir essyé John.
  8. Sous Vista Excel 2003 même d'erreur et merci d'avoir essayé. Chris_mtp
  9. chris_mtp

    lister blocs

    Salut, Regarde ce post Réponse 12 ou 10 je crois http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=25804#pid112561 un truc que j'avais fait qui m'est très utile. John
  10. chris_mtp

    Face 3D

    Bonjour à tous, J'ai des faces 3D qui représente les plans inclinées d'une toiture et je souhaiterais trouver la ligne d'intersection de ces deux faces. Je travaille sous AutoCAD 2010 full et je ne trouve pas la commande prolonger face 3D ou du moins si elle existe. Si vous aves donc des idées pour prolonger des faces 3D ou tracer l'intersection de deux faces 3D, merci par avance de votre aide. John
  11. chris_mtp

    Tri liste de points

    Merci à tous pour ces fonctions. Je vais les décortiquer même temps. John.
  12. Bonjour à tous, J'ai une liste de points 3D sous la forme ((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) ....(xi yi zi).......(xj yj zj)....(xn yn zn)). Je voudrais conserver dans cette liste les deux points les plus proches de la coordonnée Xi du point p(i) Un exemple sera je pense un peu plus clair. Voici ma liste de points de 3D. ((1 1 0) (2 3 1) (5 6 1) (8 3 2) (9 1 5)) et un point p(i) du type (4 5 0) Et bien la fonction devrait me retourner les deux points dont la coordonnée Xi soit 4 dans mon exemple est la plus proche de ces deux points soit ((2 3 1) (5 6 1)). Attention, petite précision mais qui à son importance, la liste des points est construite de manière à ce que les x soient croissants J'espère avoir été clair dans mes explications. Si vous avez une idée sur la manière dont traiter cette liste ou un exemple car je ne vois pas comment faire, merci par avance de votre aide John
  13. chris_mtp

    Est ce possible ?

    Lilli j'ai fait ce code pour une utilisation bien particulière pour mon entreprise mais tu peux le modifier à ton aide. Si tu veux modifier le nom du calque du zoom, modifie les lignes suivantes (setq layi (getvar "CLAYER")) (setvar "CLAYER" "0") par (setq layi (getvar "CLAYER")) (setvar "CLAYER" "ZOOM") Mais attention le calque ZOOM doit être présent dans ton dessin. Pour le chemin d'export et le répertoire Traitement, modifie les lignes (setq file (open "C:/Traitement/BLOCS.xls" "w")) par (setq file (open "C:/......CHEMIN D'EXPORT SOUHAITE....../BLOCS.xls" "w")) La list_box peut être amélioré comme je l'ai dit en réponse 10 mais la faut demander aux cadors du lisp ou du vlisp et de vba. John
  14. chris_mtp

    Est ce possible ?

    Bonjour Lilli Voici le code complet avec les fonctions utilisés (j'ai cité les sources Gilles et j'ai reformaté le code avec L'éditeur AutoLisp). J'ai modifié aussi un peu le code. L'export vers un fichier texte est superflu, plus facile à gérer sous excel. Par contre, Lili, pour l'export, sous C: fais un nouveau répertoire appelé Taritement sinon tu auras l'erreur stream nil. En espérant avoir été clair et pas trop "confu" (je rigole Gilles) (defun ssDialog (/ tmp file lst1 lst2 ss li zo ext1 ext2 lb1 lstp lay nom_lay lstc blo nom_bloc lstb blk dcl_id loop lst ss ss1 i ent i blks coord layi elst etyp attlist liste titl titla num ) (vl-load-com) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) ;; écrire dans le fichier (write-line (strcat "SpecialInputBox:dialog { label = \"RECAPITULATIF ATTRIBUTS ET BLOCS D'UN PLAN\"; initial_focus = \"lst1\"; :boxed_radio_row{ height = 1; label =\"Choisissez le nom du calque et le nom du bloc des entités à sélectionner : \"; fixed_width = true; alignment = centered; :popup_list { key = \"lst1\"; edit_width = 15; } :popup_list { key = \"lst2\"; edit_width = 15; } :button{ label=\"Activer Sélection\"; key=\"ss\"; } :button{ label=\"Lister\"; key=\"li\"; } :button{ label=\"Zoom\"; key=\"zo\"; } :button{ label=\"Export .xls\"; key=\"ext2\"; }} : list_box { key=\"lb1\"; height = 15; width = 30; } spacer; ok_cancel; } " ) file ) ;; fermer le fichier (close file) (setq lstp nil) (while (setq lay (tblnext "LAYER" (not lay))) (setq nom_lay (cdr (assoc 2 lay))) (setq lstc (cons nom_lay lstc)) ) (setq lstc (vl-sort lstc '<)) (while (setq blo (tblnext "BLOCK" (not blo))) (setq nom_bloc (cdr (assoc 2 blo))) (setq lstb (cons nom_bloc lstb)) ) (setq lstb (vl-sort lstb '<)) (setq lay "0") (setq blk "0") (setq num "0") ;; charger le fichier (setq dcl_id (load_dialog tmp)) (setq loop 2) (while (< 1 loop) (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) ;; initialiser la liste 1 (start_list "lst1") (mapcar 'add_list lstc) (end_list) ;; initialiser la liste 2 (start_list "lst2") (mapcar 'add_list lstb) (end_list) (start_list "lb1") (mapcar 'add_list lstp) (end_list) (set_tile "lst1" lay) (set_tile "lst2" blk) (set_tile "lb1" num) (action_tile "lst1" "(setq lay $value)") (action_tile "lst2" "(setq blk $value)") (action_tile "lb1" "(setq num $value)") ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 1)" ) (action_tile "ss" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 3)" ) (action_tile "li" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) initial_focus = \"lb1\"; (done_dialog 4)" ) (action_tile "zo" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) (atoi (get_tile \"lb1\")) )) (done_dialog 5)" ) (action_tile "ext2" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 7)" ) ;; afficher la boite de dialogue (setq loop (start_dialog)) (cond ((= loop 1) (if (= (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) nil ) (prompt "\nPas de blocs dans le calque sélectionné ") (prompt (strcat "\nNombre de bloc " (nth 1 lst) " dans le calque " (nth 0 lst) " = " (itoa (sslength ss)) ) ) ) ) ((= loop 3) (sssetfirst nil (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) ) ((= loop 4) (setq lstp nil) (setq ss1 (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) (if (= ss1 nil) (prompt "\nPas de blocs dans sélection") (progn (setq i 0) (repeat (sslength ss1) (setq ent (ssname ss1 i)) (setq liste (lst2str (atts_to_list ent) " -- ")) (setq liste (vl-string-subst "Pas d'attributs pour ce bloc" "nil" liste ) ) (setq lstp (cons (strcat (rtos i 2 0) " -- " liste) lstp)) (setq i (1+ i)) ) (setq lstp (reverse lstp)) ) ) ) ((= loop 5) (setq ss1 (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) (if (= ss1 nil) (prompt "\nPas de blocs dans sélection") (progn (setq blks (ssname ss1 (nth 2 lst))) (setq ent (entget blks)) (setq coord (cdr (assoc 10 ent))) (command "_zoom" "c" coord 20) (setq layi (getvar "CLAYER")) (setvar "CLAYER" "0") (setvar "CECOLOR" "3") (command "_text" "bc" coord 5 100 (rtos (nth 2 lst) 2 0)) (setvar "CECOLOR" "DUCALQUE") (setvar "CLAYER" layi) ) ) ) ((= loop 7) (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) (if (= ss nil) (progn (prompt "\nPas de blocs sélectionnés")) (progn (prompt "\nSélectionner les blocs/attributs à lister dans fichier .xls" ) (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq elst (entget ent)) (setq etyp (cdr (assoc 0 elst))) (setq coord (cdr (assoc 10 elst))) (if (= (cdr (assoc 0 (entget ent))) "INSERT") (progn (if (= (cdr (assoc 66 (entget ent))) 1) (progn (setq titl nil) (setq liste nil) (while (if ent (not (= (cdr (assoc 0 (entget ent))) "SEQEND")) ) (if (= (cdr (assoc 0 (entget ent))) "ATTRIB") (setq liste (append liste (list (cdr (assoc 1 (entget ent)))) ) ) ) (setq ent (entnext ent)) (if (= i 0) (setq titl (append titl (list (cdr (assoc 2 (entget ent)))) ) ) ) ) ) (setq liste nil) ) ) ) (if (= liste nil) (progn (if (= i 0) (progn (setq file (open "C:/Traitement/BLOCS.xls" "w")) (write-line (strcat "Index" "\t" "X" "\t" "Y" "\t" "Z" "\t" "Bloc" "\t" "Calque" ) file ) ) ) (write-line (strcat (rtos i 2 0) "\t" (rtos (car coord) 2 5) "\t" (rtos (cadr coord) 2 5) "\t" (rtos (caddr coord) 2 5) "\t" (nth 1 lst) "\t" (nth 0 lst) "\t" "Ce bloc ne contient aucun attributs" ) file ) ) (progn (if (= i 0) (progn (setq titla (lst2str titl "\t")) (setq file (open "C:/Traitement/BLOCS.xls" "w")) (write-line (strcat "Index" "\t" "X" "\t" "Y" "\t" "Z" "\t" "Bloc" "\t" "Calque" "\t" titla ) file ) ) ) (setq attlist (lst2str liste "\t")) (write-line (strcat (rtos i 2 0) "\t" (rtos (car coord) 2 5) "\t" (rtos (cadr coord) 2 5) "\t" (rtos (caddr coord) 2 5) "\t" (nth 1 lst) "\t" (nth 0 lst) "\t" attlist ) file ) ) ) (setq i (+ i 1)) ) (close file) (OpenExcel "C:\\Traitement\\BLOCS.xls" nil T) ) ) ) ) ) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lst ) ;; Fonction réalisée par Gilles de Cadxp (defun lst2str (lst sep) (if (cadr lst) (strcat (vl-princ-to-string (car lst)) sep (lst2str (cdr lst) sep) ) (vl-princ-to-string (car lst)) ) ) ;; Fonction récupéré sur Afralisp (defun ATTS_TO_LIST (ENAM / X) (setq X (vlax-ename->vla-object ENAM)) (if (= (cdr (assoc 66 (entget ENAM))) 1) (progn (mapcar '(lambda (X) (cons (vla-get-tagstring X) (vla-get-textstring X)) ) (vlax-safearray->list (variant-value (vla-getattributes (vlax-ename->vla-object ENAM)) ) ) ) ) ) ) ;; Fonction réalisée par Gilles de Cadxp en collaboration avec Terry Miller (A confirmer) (defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet) (if (= (type ExcelFile$) 'STR) (if (findfile ExcelFile$) (setq *ExcelFile$ ExcelFile$) (progn (alert (strcat "FichierExcel " ExcelFile$ " non trouvé.")) (exit) ) ) (setq *ExcelFile$ "") ) (gc) (if (setq *ExcelApp% (vlax-get-object "Excel.Application")) (progn (vlax-release-object *ExcelApp%) (gc) ) ) (setq *ExcelApp% (vlax-get-or-create-object "Excel.Application")) (if ExcelFile$ (if (findfile ExcelFile$) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$ ) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add ) ) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add ) ) (if Visible (vla-put-visible *ExcelApp% :vlax-true) ) (if (= (type SheetName$) 'STR) (progn (vlax-for Sheet$ (vlax-get-property *ExcelApp% "Sheets") (setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ "Name")) ) ) ) (if (member SheetName$ Sheets@) (vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets") (if (= (vlax-get-property Worksheet "Name") SheetName$) (vlax-invoke-method Worksheet "Activate") ) ) (vlax-put-property (vlax-invoke-method (vlax-get-property *ExcelApp% "Sheets") "Add" ) "Name" SheetName$ ) ) ) ) (princ) ) (defun c:sel_blk (/ lst) (if (not (tblsearch "STYLE" "ZOOM-TXT")) (command "-style" "ZOOM-TXT" "Verdana" 0 1 0 "N" "N") ) (setvar "TEXTSTYLE" "ZOOM-TXT") (setq lst (ssDialog)) (prin1) ) John
  15. chris_mtp

    Est ce possible ?

    Merci Gile mais le VBA et OpenDCL je ne connais pas du tout. Si quelqu'un voudrait s'en occuper je suis preneur mais bon les fonctions développés dans le code correspondent à mon besoin. Merci encore pour ton aide. John.
  16. chris_mtp

    Est ce possible ?

    Il ne faut pas plusieurs list_box mais une seule avec plusieurs colonnes Ce que je demande, c'est Peut-on réaliser en dcl une list_box un peu comme la boite de dialogue des calques d'un dessin AutoCAD avec une list_box contenant des colonnes avec entêtes comme Nom du Calque, Geler, Libérer ... ? Si c'est possible, j'aimerais le faire, sinon, c'est pas grave. Merci par avance pour ton aide. John
  17. chris_mtp

    Est ce possible ?

    Merci Gile pour ton aide. J'ai pu m'en sortir en modifiant le code selon tes indications mais dernière petite question avant de finaliser le lisp Dans une list_box, on ne peut pas définir des entêtes de colonnes avec comme titre de ces entêtes les étiquettes des attributs des blocs sélectionnés ? Voici le lisp déjà réalisé qui peut être très utile dans certains cas (defun ssDialog (/ tmp file lst1 lst2 ss li zo ext1 ext2 lb1 lstp lay nom_lay lstc blo nom_bloc lstb blk dcl_id loop lst ss ss1 i ent i blks coord layi elst etyp attlist ) (vl-load-com) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) ;; écrire dans le fichier (write-line (strcat "SpecialInputBox:dialog { label = \"LISTING ATTRIBUTS ET BLOCS D'UN PLAN\"; initial_focus = \"lst1\"; :row{ alignment = centered; fixed_width = true; :popup_list { key = \"lst1\"; label = \"CALQUE\"; edit_width = 15; } :popup_list { key = \"lst2\"; label = \"BLOC\"; edit_width = 15; }} :row{ fixed_width = true; alignment = centered; :button{ label=\"Activer Sélection\"; key=\"ss\"; edit_width = 4; } :button{ label=\"Lister\"; key=\"li\"; edit_width=3; } :button{ label=\"Zoom\"; key=\"zo\"; edit_width=3; } :button{ label=\"Export .txt\"; key=\"ext1\"; edit_width=4; } :button{ label=\"Export .xls\"; key=\"ext2\"; edit_width=4; }} : list_box { key=\"lb1\"; label=\"Listing Attributs\"; allow_accept = true; height = 15; width = 70; } spacer; ok_cancel; } " ) file ) ;; fermer le fichier (close file) (setq lstp nil) (while (setq lay (tblnext "LAYER" (not lay))) (setq nom_lay (cdr (assoc 2 lay))) (setq lstc (cons nom_lay lstc)) ) (setq lstc (vl-sort lstc '<)) (while (setq blo (tblnext "BLOCK" (not blo))) (setq nom_bloc (cdr (assoc 2 blo))) (setq lstb (cons nom_bloc lstb)) ) (setq lstb (vl-sort lstb '<)) (setq lay "0") (setq blk "0") ;; charger le fichier (setq dcl_id (load_dialog tmp)) (setq loop 2) (while (< 1 loop) (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) ;; initialiser la liste 1 (start_list "lst1") (mapcar 'add_list lstc) (end_list) ;; initialiser la liste 2 (start_list "lst2") (mapcar 'add_list lstb) (end_list) (start_list "lb1") (mapcar 'add_list lstp) (end_list) (set_tile "lst1" lay) (set_tile "lst2" blk) (action_tile "lst1" "(setq lay $value)") (action_tile "lst2" "(setq blk $value)") ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 1)" ) (action_tile "ss" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 3)" ) (action_tile "li" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 4)" ) (action_tile "zo" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) (atoi (get_tile \"lb1\")) )) (done_dialog 5)" ) (action_tile "ext1" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 6)" ) (action_tile "ext2" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 7)" ) ;; afficher la boite de dialogue (setq loop (start_dialog)) (cond ((= loop 1) (if (= (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) nil ) (prompt "\nPas de blocs dans le calque sélectionné ") (prompt (strcat "\nNombre de bloc " (nth 1 lst) " dans le calque " (nth 0 lst) " = " (itoa (sslength ss)) ) ) ) ) ((= loop 3) (sssetfirst nil (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst))) ) ) ) ((= loop 4) (setq lstp nil) (setq ss1 (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) (if (= ss1 nil) (prompt "\nPas de blocs dans sélection") (progn (setq i 0) (repeat (sslength ss1) (setq ent (ssname ss1 i)) (setq lstp (cons (lst2strg (atts_to_list ent) " - ") lstp)) (setq i (1+ i)) ) (setq lstp (reverse lstp)) (setq lstp (subst "Pas d'attributs pour ce bloc" "nil" lstp)) ) ) ) ((= loop 5) (setq ss1 (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) (if (= ss1 nil) (prompt "\nPas de blocs dans sélection") (progn (setq blks (ssname ss1 (nth 2 lst))) (setq ent (entget blks)) (setq coord (cdr (assoc 10 ent))) (command "_zoom" "c" coord 20) (setq layi (getvar "CLAYER")) (setvar "CLAYER" "0") (setvar "CECOLOR" "3") (command "_text" "bc" coord 5 100 (rtos (nth 2 lst) 2 0)) (setvar "CECOLOR" "DUCALQUE") (setvar "CLAYER" layi) ) ) ) ((= loop 6) (prompt "\nSélection des blocs/attributs à lister dans fichier .txt") (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst))) ) ) (if (= ss nil) (progn (prompt "\nPas de blocs sélectionnés") (exit) ) (progn (setq file (open "C:/txtatt.txt" "w")) (write-line (strcat "Index" " " "X" " " "Y" " " "Z" " " "Bloc" " " "Calque") file ) (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq elst (entget ent)) (setq etyp (cdr (assoc 0 elst))) (if (= etyp "INSERT") (progn (setq coord (cdr (assoc 10 elst))) (if (assoc 66 elst) (progn (setq attlist (lst2strg (atts_to_list ent) " ")) (write-line (strcat (rtos i 2 0) " " (rtos (car coord) 2 3) " " (rtos (cadr coord) 2 3) " " (rtos (caddr coord) 2 3) " " (nth 1 lst) " " (nth 0 lst) " " attlist ) file ) ) (write-line (strcat (rtos i 2 0) " " (rtos (car coord) 2 3) " " (rtos (cadr coord) 2 3) " " (rtos (caddr coord) 2 3) " " (nth 1 lst) " " (nth 0 lst) " " "Ce bloc ne contient aucun attributs" ) file ) ) ) ) (setq i (+ i 1)) ) (close file) (command "_.shell" "start notepad C:\\txtatt.txt") ) ) ) ((= loop 7) (prompt "\nSélectionner les blocs/attributs à lister dans fichier .xls") (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst))) ) ) (if (= ss nil) (progn (prompt "\nPas de blocs sélectionnés") (exit) ) (progn (setq file (open "C:/xlsatt.xls" "w")) (write-line (strcat "Index" "\t" "X" "\t" "Y" "\t" "Z" "\t" "Bloc" "\t" "Calque") file ) (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (setq elst (entget ent)) (setq etyp (cdr (assoc 0 elst))) (if (= etyp "INSERT") (progn (setq coord (cdr (assoc 10 elst))) (if (assoc 66 elst) (progn (setq attlist (lst2strg (atts_to_list ent) "\t")) (write-line (strcat (rtos i 2 0) "\t" (rtos (car coord) 2 3) "\t" (rtos (cadr coord) 2 3) "\t" (rtos (caddr coord) 2 3) "\t" (nth 1 lst) "\t" (nth 0 lst) "\t" attlist ) file ) ) (write-line (strcat (rtos i 2 0) "\t" (rtos (car coord) 2 3) "\t" (rtos (cadr coord) 2 3) "\t" (rtos (caddr coord) 2 3) "\t" (nth 1 lst) "\t" (nth 0 lst) "\t" "Ce bloc ne contient aucun attributs" ) file ) ) ) ) (setq i (+ i 1)) ) (close file) (OpenExcel "C:\\xlsatt.xls" nil T) ) ) ) ) ) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lst ) (defun ATTS_TO_LIST (ENAM / X) (setq X (vlax-ename->vla-object ENAM)) (if (= (cdr (assoc 66 (entget ENAM))) 1) (progn (mapcar '(lambda (X) (cons (vla-get-tagstring X) (vla-get-textstring X))) (vlax-safearray->list (variant-value (vla-getattributes (vlax-ename->vla-object ENAM))) ) ) ) ) ) (defun c:sa7 (/ lst) (prompt "\nRECAPITULATIF ATTRIBUTS ET BLOCS D'UN PLAN") (setq lst (ssDialog)) (prin1) ) Certes, ce code n'est pas parfait mais il marche à peu près correctement. Attention, je me sers de ta fonction lst2strg dans ce lisp qui doit être chargé dans Autocad avant le lancement du lisp. Merci par avance de ton aide. John
  18. chris_mtp

    Est ce possible ?

    Bonjour Gilles, Voici le code que j'ai pu faire mais rien à faire, toujours les valeurs intiales dans les deux popup malgré l'ajout de tes lignes de codes Je pense qu'il doit y avoir un problème avec les radio_boutons Si tu as 2 min pour y jeter un oeil merci par avance. (defun ssDialog (/ tmp file dcl_id result lstc lstb lst1 lst2 lb1 lst lay nom_lay bloc nom_bloc ss li zo ext1 ext2 lst3 ) (vl-load-com) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) ;; écrire dans le fichier (write-line (strcat "SpecialInputBox:dialog { label = \"LISTING ATTRIBUTS ET BLOCS D'UN PLAN\"; initial_focus = \"lst1\"; :row{ alignment = centered; fixed_width = true; :popup_list { key = \"lst1\"; label = \"CALQUE\"; edit_width = 15; } :popup_list { key = \"lst2\"; label = \"BLOC\"; edit_width = 15; }} :row{ fixed_width = true; alignment = centered; :button{ label=\"Activer Sélection\"; key=\"ss\"; edit_width = 4; } :button{ label=\"Lister\"; key=\"li\"; edit_width=3; } :button{ label=\"Zoom\"; key=\"zo\"; edit_width=3; } :button{ label=\"Export .txt\"; key=\"ext1\"; edit_width=4; } :button{ label=\"Export .xls\"; key=\"ext2\"; edit_width=4; }} : list_box { key=\"lb1\"; label=\"Listing Attributs\"; allow_accept = true; height = 15; width = 70; } spacer; ok_cancel; } " ) file ) ;; fermer le fichier (close file) (while (setq lay (tblnext "LAYER" (not lay))) (setq nom_lay (cdr (assoc 2 lay))) (setq lstc (cons nom_lay lstc)) ) (setq lstc (vl-sort lstc '<)) (while (setq blo (tblnext "BLOCK" (not blo))) (setq nom_bloc (cdr (assoc 2 blo))) (setq lstb (cons nom_bloc lstb)) ) (setq lstb (vl-sort lstb '<)) ;; charger le fichier (setq dcl_id (load_dialog tmp)) (setq loop 2) (while (< 1 loop) (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) ;; initialiser la liste 1 (start_list "lst1") (mapcar 'add_list lstc) (end_list) ;; initialiser la liste 2 (start_list "lst2") (mapcar 'add_list lstb) (end_list) (if lst (progn (set_tile "lst1" (itoa (car lst))) (set_tile "lst2" (itoa (cadr lst))) ) ) ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 1)" ) (action_tile "ss" "(done_dialog 3)") (action_tile "ext" "(done_dialog 6)") ;; afficher la boite de dialogue (setq loop (start_dialog)) (cond ((= loop 1) (if (= (setq ss1 (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst)) ) ) ) nil ) (prompt "\nPas de blocs dans le calque sélectionné ") (prompt (strcat "\nNombre de bloc " (nth 1 lst) " dans le calque " (nth 0 lst) " = " (itoa (sslength ss1)) ) ) ) ) ((= loop 3) (setq lst (ssDialog)) (sssetfirst nil (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst))) ) ) ) ) ) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lst ) (defun c:sa1 (/ lst) (prompt "\nRECAPITULATIF ATTRIBUTS ET BLOCS D'UN PLAN") (setq lst (ssDialog)) (prin1) ) John
  19. chris_mtp

    Est ce possible ?

    Bonjour Gile Peux tu m'aider pour faire ce lisp car j'en ai réellement besoin ? Peut être que mes demandes sont confuses mais j'ai seulement deux questions pour le moment, le reste je pense que je peux m'en sortir mais la je suis bloqué depuis une semaine. Voici mes deux questions à partir du lisp posté en réponse 1 Comment faire quand la boite de dialogue s'affiche et quand je clique sur le bouton Activer Sélection pour que les valeurs dans mes deux popup sélectionnés soit les mêmes que quand la boite de dialogue s'affiche à nouveau ? Les listes se réinitialisent et je ne sais pas comment contourner ce problème ? De plus, j'ai un autre problème car ma sélection ne s'active que si la boite de dialogue est fermée or je voudrais que la sélection se fasse dynamiquement, est ce possible ? Merci par avance de ton aide. John
  20. chris_mtp

    Est ce possible ?

    Salut, Comment faire quand la boite de dialogue s'affiche et quand j'active la sélection dans on dessin pour que les valeurs dans mes deux popup sélectionnés avant d'appuyer sur le bouton "Activer Sélection" Soit encore active ? De plus, j'ai un autre problème car ma sélection ne s'active que si la boite de dialogue est fermée or je voudrais que la sélection se fasse dynamiquement, est ce possible ? Et de plus, pour afficher la liste de tous les blocs d'un même calque en dessous la série des 4 boutons, avez vous une idée ?? Merci par avance de votre aide. Voici le dcl que j'ai modifié mais encore des soucis ... (defun ssDialog (/ tmp file dcl_id result lstc lstb lst1 lst2 lst lay nom_lay bloc nom_bloc ss li zo ext) (vl-load-com) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w")) ;; écrire dans le fichier (write-line (strcat "SpecialInputBox:dialog { label = \"LISTING ATTRIBUTS et BLOCS D'UN PLAN\"; initial_focus = \"lst1\"; :row{ fixed_width = true; :popup_list { key = \"lst1\"; label = \"CALQUE\"; edit_width = 13; } :popup_list { key = \"lst2\"; label = \"BLOC\"; edit_width = 13; }} :row{ fixed_width = true; alignment = centered; :button{ label=\"Activer Sélection\"; key=\"ss\"; edit_width=5; fixed_width = true; } :button{ label=\"Lister\"; key=\"li\"; edit_width=4; fixed_width = true; } :button{ label=\"Zoom\"; key=\"zo\"; edit_width=4; fixed_width = true; } :button{ label=\"Export\"; key=\"ext\"; edit_width=4; fixed_width = true; }} spacer; ok_cancel; } ") file ) ;; fermer le fichier (close file) ;; charger le fichier (setq dcl_id (load_dialog tmp) loop 2) (while (setq lay (tblnext "LAYER" (not lay))) (setq nom_lay (cdr (assoc 2 lay))) (setq lstc (cons nom_lay lstc)) ) (while (setq blo (tblnext "BLOCK" (not blo))) (setq nom_bloc (cdr (assoc 2 blo))) (setq lstb (cons nom_bloc lstb)) ) (setq lstb (reverse lstb)) (while (< 1 loop) (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) ;; initialiser la liste 1 (start_list "lst1") (mapcar 'add_list lstc) (end_list) ;; initialiser la liste 2 (start_list "lst2") (mapcar 'add_list lstb) (end_list) ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog 1)" ) (action_tile "ss" "(done_dialog 3)") (action_tile "ext" "(done_dialog 6)") ;; afficher la boite de dialogue (setq loop (start_dialog)) (cond ((= loop 1) (if (= (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst))))) nil) (prompt "\nPas de blocs dans le calque sélectionné ") (prompt (strcat "\nNombre de bloc " (nth 1 lst) " dans le calque " (nth 0 lst) " = " (itoa (sslength ss)))) ) ) ((= loop 3) (setq lst (ssDialog)) (sssetfirst nil (ssget "X" (list (cons 0 "INSERT") (cons 2 (nth 1 lst)) (cons 8 (nth 0 lst))))) ) ) ) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lst ) (defun c:sa1 ( / lst) (prompt "\nRECAPITULATIF ATTRIBUTS et BLOCS D'UN PLAN") (setq lst (ssDialog)) (prin1) ) John
  21. Bonjour à tous, Je ne sais pas si c'est possible mais bon, ... J'ai fait un petit dcl qui liste le nom des calques et des blocs d'un dessin. L'utilisateur avec des popup choisit le calque et le nom du bloc à traiter. Voici le dcl : (defun ssDialog (/ tmp file dcl_id result lstc lstb lst1 lst2 lst lay nom_lay bloc nom_bloc) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w")) ;; écrire dans le fichier (write-line (strcat "SpecialInputBox:dialog { label = \"LISTING ATTRIBUTS D'UN PLAN\"; initial_focus = \"lst1\"; :row{ fixed_width = true; :popup_list { key = \"lst1\"; label = \"CALQUE\"; edit_width = 13; } :popup_list { key = \"lst2\"; label = \"BLOC\"; edit_width = 13; }} :row{ fixed_width = true; alignment = centered; :button{ label=\"Sélectionner\"; key=\"ss\"; edit_width=4; fixed_width = true; } :button{ label=\"Lister\"; key=\"li\"; edit_width=4; fixed_width = true; } :button{ label=\"Zoom\"; key=\"zo\"; edit_width=4; fixed_width = true; } :button{ label=\"Export\"; key=\"ex\"; edit_width=4; fixed_width = true; }} spacer; ok_cancel; } ") file ) ;; fermer le fichier (close file) ;; charger le fichier (setq dcl_id (load_dialog tmp)) ;; Appeler la boite de dialogue (if (not (new_dialog "SpecialInputBox" dcl_id)) (exit) ) ;;; initialisation de la boite (while (setq lay (tblnext "LAYER" (not lay))) (setq nom_lay (cdr (assoc 2 lay))) (setq lstc (cons nom_lay lstc)) ) (while (setq blo (tblnext "BLOCK" (not blo))) (setq nom_bloc (cdr (assoc 2 blo))) (setq lstb (cons nom_bloc lstb)) ) (setq lstb (reverse lstb)) ;; initialiser la liste 1 (start_list "lst1") (mapcar 'add_list lstc) (end_list) ;; initialiser la liste 2 (start_list "lst2") (mapcar 'add_list lstb) (end_list) ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq lst (list (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstb) )) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) lst ) (defun c:ss1 ( / lst noml nomb ss) (setq lst (ssDialog)) (setq noml (nth 0 lst)) (setq nomb (nth 1 lst)) (if (= (setq ss (ssget "X" (list (cons 0 "INSERT") (cons 2 nomb) (cons 8 noml)))) nil) (alert "\nPas de blocs dans le calque sélectionné ") (prompt (strcat "\nNombre de bloc " nomb " dans le calque " noml " = " (itoa (sslength ss)))) ) (prin1) ) Avec les boutons, Lister, est il possible dans le boite de dialogue dcl elle-même d'afficher sous forme de tableau les blocs à lister avec pour le tableau une première colonne index, trois colonnes pour les coordonnées d'insertion du bloc et ensuite la liste des attributs. Donc si j'ai dans mon dessin 3 blocs de même nom, ce bloc comportant 4 attributs, le tabelau à l'intérieur de la dcl comportera 8 colonnes. Le tableau doit être incorporer dans le dcl pour pouvoir aussi utiliser le bouton zoomer. Si vous avez des idées ou des pistes, merci par avance. John
  22. Merci pour ces infos Patrick mais deux questions, Tu n'aurais pas un exemple à me fournir car le vlisp c'est chaud. Juste un exemple pour par exemple sélectionner un bloc dans AutoCAD et écrire dans Word l'attribut unique du bloc, les coordonnées x et y puis ensuite ouvrir directement Word à partir d'Autocad. Merci par avance de ton aide. John.
  23. Merci Zebulon pour ton aide mais je connais les fonctions Lisp open write line et close. Je fais beaucoup d'export d'atrributs, de textes, de poylignes en fichier texte, csv ou même Excel. Mais là, je voudrais savoir si on peut exporter des données vers Word spécifiquement. J'ai un proforma de Word dans lequel je dois intéger des coordonnées de points donc plutôt de passer d'Autocad à Excel puis de Excel à Word, je voudrais savoir si on peut passer d'AutoCAD à Word directement. Je sais qu'en VBA on peut mais je ne connais, du moins, je commence à connaître le Lisp ou vlisp d'ou ma question ????? Merci par avance de votre aide. John
  24. Bonjour à tous, Ca fait longtemps que je me pose la question mais est-il possible d'exporter des données d'AutoCAD dans Word comme des coordonnées de points par exemple comme un fichier texte type txt ou csv. Et si c'est le cas, avez vous des exemples à me fournir ? Merci par avance de votre aide John
  25. chris_mtp

    Probleme dans DCl

    Merci Gile. Tes conseils m'ont été très utiles. J'ai pu m'en sortir avec les deux codes. John.
×
×
  • 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é