Aller au contenu

Transformation d'un objet VLA en région (VLA)


Déméter_33

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

  • Upvote 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é