Aller au contenu

Messages recommandés

Posté(e)

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 sommet

2) Distance partielle entre le sommet n et n-1

3) Distance cumulée (calculé à partir du sommet 1 au sommet n)

4) Z

5) X

6) 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

Posté(e)

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

Posté(e)

 

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

Posté(e)

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

 

Posté(e)

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

Posté(e)

Bonjour Bonuscad

 

Déjà bravo comme d'hab pour ce lisp qui en servira plus d'un à mon avis y compris LECrab

Je 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

Posté(e)

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

Posté(e)

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.

 

Posté(e)

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

Posté(e)

Que dire de mieux Parfait

Pour 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 sommet

mais 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

Posté(e)

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.

 

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

Posté(e)

Bjr à tous,

 

J'ai modifié le code selon les dires de bonuscad mais rien

les entêtes n'apparaissent pas ... (V2007)

D'autre part, lors du traitement de plusieurs entités, les coordonnées

sont sorties les une à la suite des autres ... ne pourrait-on pas les séparer

les une des autres par une ligne vide, par exemple, pour faciliter la lecture

et retrouver plus facilement ces "petits" ?

 

 

[Edité le 11/11/2008 par thry0]

Posté(e)

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

Posté(e)

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

Posté(e)

 

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

 

Posté(e)

 

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

Posté(e)

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

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é