chris_mtp Posté(e) le 9 novembre 2008 Posté(e) le 9 novembre 2008 Bonjour, J'ai trouvé ce lisp de lovecraft à propos de l'export des sommets d'une polyligne 3d. ;Programme pour creer un listing en cliquant une polyligne ; le 30 mai 2006 ;***************************************************************** (defun c:xypoly () (setq ent (car (entsel "\nCliquez une polyligne :"))) (setq bdent (entget ent)) (setq typent (cdr (assoc 0 bdent))) (if (= typent "LWPOLYLINE") (progn (setq nomfic "C:/XYPOLY2D.txt") (setq fic (open nomfic "w")) (setq i 0) (repeat (length bdent) (setq entit (nth i bdent)) (setq codeentit (car entit)) (if (= codeentit 10) (progn (setq xentit (car (cdr entit))) (setq yentit (cadr (cdr entit))) (setq xyentit (strcat (rtos xentit 2 3) " " (rtos yentit 2 3))) (write-line xyentit fic) );fin du progn );fin du if (setq i (+ i 1)) );fin du repeat );fin du progn );fin du if (if (= typent "POLYLINE") (progn (setq nomfic "C:/XYPOLY3D.txt") (setq fic (open nomfic "w")) (setq i 0) (setq ent1 (entnext ent)) (setq bdent1 (entget ent1)) (setq typent1 (cdr (assoc 0 bdent1))) (while (= typent1 "VERTEX") (setq code10 (cdr (assoc 10 bdent1))) (setq xentit (car code10)) (setq yentit (cadr code10)) (setq zentit (caddr code10)) (setq xyzentit (strcat (rtos xentit 2 3) " " (rtos yentit 2 3) " " (rtos zentit 2 3))) (write-line xyzentit fic) (setq ent1 (entnext ent1)) (setq bdent1 (entget ent1)) (setq typent1 (cdr (assoc 0 bdent1))) );fin du while );fin du progn );fin du if (close fic) );fin du defun c:xypoly Serait il possible de le modifier de façon à créer un fichier txt avec dans l'ordre les colonnes suivantes : (n étant le numéro du sommet)1) Numéro de sommet2) Distance partielle entre le sommet n et n-13) Distance cumulée (calculé à partir du sommet 1 au sommet n)4) Z5) X6) Y J'essaie de modifier depuis un jour ce lisp à mes besoins mas chaque fois j'ai ce type de réponse ; erreur: type d'argument incorrect: streamp nil Merci d'avance pour votre aide Chris_mtp
lovecraft Posté(e) le 9 novembre 2008 Posté(e) le 9 novembre 2008 Bonjour chris_mtp, Je vais voir ce que je peux faire au niveau du fichier pour qu'il te convienne.Autrement je me suis permis de supprimer le message du forum covadis et de transferer celui-ci dans le forum lisp. @plus LB http://www.youtube.com/user/CADMINATOR?feature=mhee
chris_mtp Posté(e) le 10 novembre 2008 Auteur Posté(e) le 10 novembre 2008 Pas de porblème.Je me suis trompé en postant ce sujet sur le forum de Covadis. Merci pour ton aide. er par contre, si on pourrait choisir le répertoire de destination du fichier créer, ce serait génial. Merci tout de même.Chris_mtp
lecrabe Posté(e) le 10 novembre 2008 Posté(e) le 10 novembre 2008 Hello En attendant un progamme "sur mesure", il me semble que à partir du listing des points "simple" XYZ, et de qq formules de calcul dans Excel, tu obtiendras exactement ce que tu désires !? Le Decapode Autodesk Expert Elite Team
chris_mtp Posté(e) le 10 novembre 2008 Auteur Posté(e) le 10 novembre 2008 Bonjour LEcrabe C'est sur que je peux très bien m'en sortir avec ce lisp et un fichier excel et peut être aussi que j'en demande trop mais mon seul point faible est que je ne connais vraiment mais vraiment rien de rien à la programmation. Même si je modifie le lisp en question Du coup, si cinq à dix minutes (pour les personnes qui connaissent le lisp bien sur) de votre temps me permettrai d'éviter des dizaines voire des centaines de manipulation sous bloc notes et excel ceci dans le but d'éviter les erreurs de retranscription d'une part et d'autre part de répéter une manip 323 fois pour 323 profils en travers, ce me serait grandement utile. Mais rien de vous oblige à m'aider, c'est sur. Chris_mtp
bonuscad Posté(e) le 10 novembre 2008 Posté(e) le 10 novembre 2008 si cinq à dix minutes Oui, mais sans des tests trop approfondis, donc vérifier les résultats voir si il n'y a pas de coquilles. (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (caddr lst) 0.0)) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun c:ptdef-xyz ( / js dxf_cod n lremov file_name cle f_open key_sep str_sep oldim ename l_pt nbs l_prv n-l) (princ "\nChoix d'un objet modèle pour le filtrage: ") (while (null (setq js (ssget "_+.:E:S" (list '(0 . "*POLYLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) (cons -4 "[b]<[/b]NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) (princ "\nCe n'est pas un objet valable pour cette fonction!") ) (vl-load-com) (setq dxf_cod (entget (ssname js 0))) (initget "Unique Multiple _Single Multiple") (if (eq (getkword "\nSélection filtrée [unique/Multiple][b]<[/b]M>: ") "Single") (setq n -1) (setq dxf_cod (entget (ssname js 0)) js (ssget "_X" (foreach m (foreach n dxf_cod (if (not (member (car n) '(0 67 410 8 6 62 48 420 70))) (setq lremov (cons (car n) lremov)))) (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) ) n -1 ) ) (setq file_name (getfiled "Nom du fichier a creer ?: " (strcat (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 3)) "csv") "csv" 37)) (if (null file_name) (exit)) (if (findfile file_name) (progn (prompt "\nFichier éxiste déjà!") (initget "Ajoute Remplace annUler") (setq cle (getkword "\nDonnées dans fichier? [Ajouter/Remplacer/annUler] [b]<[/b]R>: ") ) (cond ((eq cle "Ajoute") (setq cle "a") ) ((or (eq cle "Remplace") (eq cle ())) (setq cle "w") ) (T (exit)) ) (setq f_open (open file_name cle)) ) (setq f_open (open file_name "w")) ) (initget "Espace Virgule Point-virgule Tabulation") (setq key_sep (getkword "\nSéparateur [Espace/Virgule/Point-virgule/Tabulation]? [b]<[/b]Point-virgule>: ")) (cond ((eq key_sep "Espace") (setq str_sep " ")) ((eq key_sep "Virgule") (setq str_sep ",")) ((eq key_sep "Tabulation") (setq str_sep "\t")) (T (setq str_sep ";")) ) (setq oldim (getvar "dimzin")) (setvar "dimzin" 0) (write-line (strcat "Numéro" str_sep "Dist.partielle" str_sep "Dist.cum" str_sep "Z" str_sep "X" str_sep "Y") f_open) (repeat (sslength js) (setq ename (vlax-ename->vla-object (ssname js (setq n (1+ n)))) l_pt nil) (setq l_pt (append (if (eq (vla-get-ObjectName ename) "AcDbPolyline") (l-coor2l-pt (vlax-get ename 'Coordinates) nil) (l-coor2l-pt (vlax-get ename 'Coordinates) T) ) l_pt ) ) (setq nbs 0 l_prv 0.0 n-l nil) (foreach n l_pt (if (null n-l) (setq n-l n)) (write-line (strcat (itoa (setq nbs (1+ nbs))) str_sep (rtos (distance (list (car n-l) (cadr n-l)) (list (car n) (cadr n))) 2 3) str_sep (rtos (setq l_prv (+ l_prv (distance (list (car n-l) (cadr n-l)) (list (car n) (cadr n))))) 2 3) str_sep (rtos (caddr n) 2 3) str_sep (rtos (car n) 2 3) str_sep (rtos (cadr n) 2 3) ) f_open ) (setq n-l n) ) (write-line "" f_open) ) (close f_open) (setvar "dimzin" oldim) (prin1) ) [Edité le 11/11/2008 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
chris_mtp Posté(e) le 10 novembre 2008 Auteur Posté(e) le 10 novembre 2008 Bonjour Bonuscad Déjà bravo comme d'hab pour ce lisp qui en servira plus d'un à mon avis y compris LECrabJe l'ai testé Pas mal le truc de choisir le type de séparateur. Par contre, Ya deux trois trucs Lorsque je sélectionne une polyligne 3D, le fichier xyz créer comporte uniquement les deux premiers sommets de la polyligne et non pas tous les sommets. Lorsque je sélectionne une première polyligne et donc créer le premier fichier xyz puis dans un second temps répète cette manip avec une seconde polyligne , le fichier xyz de la seconde polyligne comporte les sommets de la première polyligne. On dirait qu'il n'y a pas de mise à jour. Serait il possible au lieu d'avoir les distances 3d entre les sommets d'avoir que les distances 2D comme un vrai. JE ne comprends pas la demande Sélection Unique ou multiple, c'est pour un segment de la polyligne ou pour toute la polyligne ? Deplus, je te joins un bout de lisp récupérer sur cadxp qui permet je crois de de choisir le répertoire du fichier de destintation avec une fenêtre windows classique.JE ne sais pas ou doit on l'inserer dans le lisp final pour avoir cette opportunité (setq dirname (getfiled "Select a location to save the layer list..." "layers.csv" "csv" 1)) (setq file (open dirname "w")) (write-line (strcat "Layer List for " (getvar "dwgprefix") (getvar "dwgname")) file) (write-line "" file) (write-line "NAME, COLOR, LINETYPE, STATUS" file) (setq count 0) (setq f 1) (while (setq row (tblnext "LAYER" f)). Je sais plus d'ou viens ce lisp ou du moins de qui il provient. Je vais cherché la source. Merci par avance tout de même pour ta précieuse aide.Chris_mtp
bonuscad Posté(e) le 10 novembre 2008 Posté(e) le 10 novembre 2008 Lorsque je sélectionne une polyligne 3D, le fichier xyz créer comporte uniquement les deux premiers sommets de la polyligne et non pas tous les sommets. Je l'ai fait et testé rapidement sur une 2009, cela fonctionnait, sur une 2008, il y a l'air d'avoir un problème.Ce problème vient justement des distances 3D... Je veux bien utiliser les distance2D mais celles ci ne seront que les distances de point à point et non suivant la courbe (polyarc) pour des lwpolylignes. JE ne comprends pas la demande Sélection Unique ou multiple L'entité unique que tu sélectionnes peut servir de modèle pour sélectionner toutes les entités ayant les mêmes caractéristiques: calques, couleur, type de polyligne, ouverte ou fermée, non parallèle au SCU, élévation....Donc si tu sélectionnes une 3dpoly ouverte sur un calque spécifique, si tu répond multiple, il sélectionnera TOUTES les 3Dpoly ouvertes de ce calque par exemple. Lorsque que tu sélectionne le dossier, le fichier NomDuDessin.XYZ est créé dans ce dossier.A chaque fois que tu utilises la commande, celui est écrasé par le résultat du dernier appel. Essaye avec des LwPolylines (pour te rendre compte (cela ne devrait pas buger) J'essayerais de corrigé les distances à la première ocas.... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
chris_mtp Posté(e) le 11 novembre 2008 Auteur Posté(e) le 11 novembre 2008 Oui pas de prob ce n'est pas pressé. Ok pour la commande Unique ou multiple.En effet, avec une Lwpolyligne, il n'y a pas de problème. Je veux bien utiliser les distance2D mais celles ci ne seront que les distances de point à point et non suivant la courbe (polyarc) pour des lwpolylignes.Pas de probleme non plus, distance de point à point pour les distances partielles et distance du premier point au point n pour les distances cumulées. De tout façon, mes profils en travers sont linéaires. Par contre, pour le choix du fichier de destination, c'est principalement le but d'avoir un nom de fichier unique pour chaque profil en travers exporté. Du coup, si on peut choisir le nom du fichier comme le bout de lisp que je t'ai joins précedemment. Merci tout de même. Et je te confirme encore, avec des poly2D en sélection unique ou multiple, ca marche très bien.
bonuscad Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 J'ai modifié le code.Recharge le et teste le, voir si ça fonctionne et convient à ton besoin. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
chris_mtp Posté(e) le 11 novembre 2008 Auteur Posté(e) le 11 novembre 2008 Que dire de mieux ParfaitPour la distance de point à point c'est bon.C'est sur, c'est pas la même chose que si je calcule mes distances cumulés à partir du premier sommetmais sous excel après je modifie le fichier.Par contre, dis moi quel parti du code dois je modifier pour inclure les entetes de lignes Numéro, Dist.partielle, Dist.cum,Z, X,Y dans le fichier de sortie.Bravo encore et merci
bonuscad Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Par contre, dis moi quel parti du code dois je modifier pour inclure les entetes de lignesNuméro, Dist.partielle, Dist.cum,Z, X,Y dans le fichier de sortie. Avant la boucle (repeat (sslength js) tu fais un (write-line (strcat "Numéro" str_sep "Dist.partielle" str_sep "Dist.cum" str_sep "Z" str_sep "X" str_sep "Y") f_open) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
thry0 Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Bjr à tous, J'ai modifié le code selon les dires de bonuscad mais rienles entêtes n'apparaissent pas ... (V2007)D'autre part, lors du traitement de plusieurs entités, les coordonnéessont sorties les une à la suite des autres ... ne pourrait-on pas les séparerles une des autres par une ligne vide, par exemple, pour faciliter la lectureet retrouver plus facilement ces "petits" ? [Edité le 11/11/2008 par thry0]
bonuscad Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 thry0, Code remodifié dans le post original.Pour moi ça fonctionne... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
thry0 Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Pas chez moi ... Excel 2003ceci explique peut être celà !
bonuscad Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 La routine ne s'occupe que de créer le fichier CSV. Celui n'est qu'un fichier TXT Ascii. Normalement excel devrait pouvoir le lire.Il faut peut être que tu choisisses le bon séparateur qui convient pour obtenir les colonnes. Quelle version d'Autocad ? Je ne vois pas trop ce qui cloche, vu le peu d'informations que tu donnes. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Hello Je teste la routine sous AutoCAD/MAP 2004 et elle semble Nickel-Chrome ! :) mais je n'arrive pas à lui faire traiter que quelques ou une seule polyligne sélectionnée(s) "classiquement", elle semble traiter toutes les polylignes du dessin ! Ce qui est sans ce qui était demandée mais SVP ne pourrait on pas avoir la possibilité de faire AUSSI une sélection classique AutoCAD ? Merci d'avance, Le Decapode Autodesk Expert Elite Team
thry0 Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Re moi, Alors on va essayer d'être un peu plus prolixe,- Séparateur Espace : toutes les infos dans une seule et même cellule- Séparateur Virgule : Idem- Séparateur Point virgule : ça marche, parfait !-Séparateur Tabulation : Idem que Espace et Virgule donc pas bon Voilà, plus qu'à choisir le séparateur qui va bien ... Essai effectué sur AutoCAD 2007et XL 2003
(gile) Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Salut, Petite explication de texte.CSV : Comma Separated Values, soit en bon français : valeurs séparées par des virgules. Sauf que, dans certains pays comme la France, la virgule est souvent utilisée comme séparateur décimal, il faut donc, pour éviter toute équivoque, utiliser un autre séparateur pour les valeurs, d'où l'usage du point virgule. Tout ça se paramètre dans Windows >> Panneau de configuration >> Options régionales et linguistiques >> Personnaliser >> Symbole décimal et Séparateur des listes. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
thry0 Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Voilà qui est dit et bien dit ...Le mystère du point virgule est éclairci ;)
bonuscad Posté(e) le 11 novembre 2008 Posté(e) le 11 novembre 2008 Petite astuce: Vous pouvez lors de l'enregistrement dans la routine du fichier CSV, forcer une autre extension et la mettre en TXT.Si dans Excel vous ouvrez ce format TXT, il va passer en mode d'importation, en cochant le mode de séparateur que vous souhaitez utiliser, le formatage en colonne sera effectué.(je me suis appuyer sur ces options d'excel, pour proposer les mêmes dans ma routine) ne pourrait on pas avoir la possibilité de faire AUSSI une sélection classique AutoCAD ? Lecrabe, j'ai mis en ligne sur ma page le fichier PtDef2CSV.lsp (en bas de page) Cette routine est plus générique que celle présentée dans ce fil. Elle n'exporte que les coordonnées (pas de distance), mais par contre elle peut traiter des type d'objet plus étendues que celle développée ici.J'y ai intégré la sélection Manuelle filtrée Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
chris_mtp Posté(e) le 12 novembre 2008 Auteur Posté(e) le 12 novembre 2008 Merci Bonuscad pour ton aide.Le lisp marche très bien et fonctionne à merveille. Du coup, maintenant, cela va me réduire énormément pour les prochains chantiers le temps de traitement. Pour l'astuce du format TXT, ca marche aussi.Bravo Chris_mtp
lecrabe Posté(e) le 13 novembre 2008 Posté(e) le 13 novembre 2008 Hello Desole je n'avais pas vu cette routine PTDEF2CSV sur ton excellent site ! Elle est presente depuis longtemps ? Encore merci, Le Decapode Autodesk Expert Elite Team
bonuscad Posté(e) le 13 novembre 2008 Posté(e) le 13 novembre 2008 Elle est presente depuis longtemps ? Non, c'est lié à cette discussion, donc tu n'as pas a être désolé de ne l'avoir pas vu auparavant ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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