Déméter_33 Posté(e) le 25 avril Posté(e) le 25 avril Bonjour, Aidé d'un code trouvé sur ce même site, je tente de l'adapter à mon besoin. Le but de ce lisp est de fabriquer un fichier.csv contenant des informations de longueurs et de surface et de positionnement (centroïde) de polylignes fermées et non fermées dans un fichier, avec d'autres informations sur ces objets (calque, ID). Sauf que je rencontre un problème lors de la transformation d'un objet VLA en région VLA (je ne sais même pas trop si c'est bien comme ca que ca marche...) Le message d'erreur dans la console est le suivant: ; erreur: type d'argument incorrect: VLA-OBJECT nil Je m'en remet à vos suggestions. mult-info_po2CSV.lsp
bonuscad Posté(e) le 25 avril Posté(e) le 25 avril Bonjour, Une simplification du code pour toi. (vl-load-com) (defun c:mult-info_po2CSV ( / js file_name cle f_open key_sep str_sep oldim lst_id lst_length lst_surf lst_closed lst_centroid lst_layer lst_width n) (princ "\nSélectionner les polylignes optimisées.") (while (null (setq js (ssget '((0 . "LWPOLYLINE"))))) (princ "\nSélection vide, ou ce ne sont pas des LWPOLYLINE!") ) ;pour déterminer la précision des décimales que tu veux inscrire dans le fichier (command "_.ddunits" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (setq file_name (getfiled "Nom du fichier a créer ?: " (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 _Add Replace Undo") (setq cle (getkword "\nDonnées dans fichier? [Ajouter/Remplacer/annUler] <R>: ") ) (cond ((eq cle "Add") (setq cle "a") ) ((or (eq cle "Replace") (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 _SPace Comma SEmicolon Tabulation") (setq key_sep (getkword "\nSéparateur [Espace/Virgule/Point-virgule/Tabulation]? <Point-virgule>: ")) (cond ((eq key_sep "SPpace") (setq str_sep " ")) ((eq key_sep "Comma") (setq str_sep ",")) ((eq key_sep "Tabulation") (setq str_sep "\t")) (T (setq str_sep ";")) ) (setq oldim (getvar "dimzin")) ; pour écrire tous les zéro, même ceux qui se révèlent inutiles. (setvar "dimzin" 0) (setq lst_id '() lst_length '() lst_surf '() lst_closed '() lst_centroid '() lst_layer '() lst_width '() ) (repeat (setq n (sslength js)) (setq ename (ssname js (setq n (1- n))) obj (vlax-ename->vla-object ename) lst_id (cons (strcat "'" (vlax-get obj 'Handle)) lst_id) lst_length (cons (vlax-get obj 'Length) lst_length) lst_surf (cons (vlax-get obj 'Area) lst_surf) lst_closed (cons (vlax-get obj 'Closed) lst_closed) lst_centroid (cons (osnap (vlax-curve-getStartPoint obj) "gcen") lst_centroid) lst_layer (cons (vlax-get obj 'Layer) lst_layer) lst_width (cons (vlax-get obj 'ConstantWidth) lst_width) ) ) (foreach n (reverse (mapcar 'list (append (mapcar '(lambda (x) (strcat x str_sep)) lst_id) (list (strcat "Handle" str_sep))) (append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) lst_length) (list (strcat "Longueur" str_sep))) (append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) lst_surf) (list (strcat "Surface" str_sep))) (append (mapcar '(lambda (x) (strcat (itoa x) str_sep)) lst_closed) (list (strcat "Fermée" str_sep))) (append (mapcar '(lambda (x) (strcat (if x (rtos x) "") str_sep)) (mapcar 'car lst_centroid)) (list (strcat "X Centroïd" str_sep))) (append (mapcar '(lambda (x) (strcat (if x (rtos x) "") str_sep)) (mapcar 'cadr lst_centroid)) (list (strcat "Y Centroïd" str_sep))) (append (mapcar '(lambda (x) (strcat x str_sep)) lst_layer) (list (strcat "Calque" str_sep))) (append (mapcar '(lambda (x) (strcat (rtos x) str_sep)) lst_width) (list (strcat "Largeur" str_sep))) ) ) (write-line (apply 'strcat n) f_open) ) (close f_open) (setvar "dimzin" oldim) (prin1) ) 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Déméter_33 Posté(e) le 26 avril Auteur Posté(e) le 26 avril Bonjour Bonuscad. Il y a 8 heures, bonuscad a dit : Bonjour, Une simplification du code pour toi. Pour une simplification c'en est une belle. Je n'ai eu qu'à "réorganiser" les éléments dans le sens dans lequel je les voulais et HOP... le tour est joué. Il faut aussi que j'y ajoute une petite boucle qui me transforme toutes les lignes en polylignes, et que la sélection se fasse sur le dessin entier (ne pas passer par une sélection d'objets) Merci beaucoup en tout cas c'est parfait.
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