Aller au contenu

Ajouter un sommet sur une polyligne


yalta

Messages recommandés

Salut fabcad

 

Ta demande m'interroge vraiment, d'habitude on cherche plutôt à supprimer les sommets alignés ('inutiles') pour alléger le dessin.

 

Je suis comme (gile), pourquoi alourdir ton dessin avec des sommets inutiles?

 

Si tu as juste besoin des points dans un fichier, pourquoi pas plutôt un truc du genre...

 

(vl-load-com)
(defun c:discretise2CSV ( / js file_name cle f_open key_sep str_sep oldim nb delta obj_vlax pt_start pt_end perim_obj d_x lst_pt bg_vtx)
 (princ "\nSélectionner les polylignes3D à discretiser: ")
 (while (not (setq js (ssget '((0 . "POLYLINE") (-4 . "&=") (70 . 8)))))
   (princ "\nPas d'objets valable ou sélection vide!")
 )
 (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] : ")
     )
     (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]? : "))
 (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"))
 (setvar "dimzin" 0)
 (setq nb -1)
 (initget 91)
 (setq delta (getdist "\nLongueur de discretisation: "))
 (repeat (sslength js)
   (setq
     obj_vlax (vlax-ename->vla-object (ssname js (setq nb (1+ nb))))
     pt_start (vlax-curve-getStartPoint obj_vlax)
     pt_end (vlax-curve-getEndPoint obj_vlax)
     perim_obj (vlax-curve-getDistAtParam obj_vlax (vlax-curve-getEndParam obj_vlax))
   )
   (setq
     d_x delta
     lst_pt (list pt_start)
     bg_vtx 1
   )
   (while (< d_x perim_obj)
     (if (eq (fix (vlax-curve-getParamAtDist obj_vlax d_x)) bg_vtx)
       (setq
         lst_pt (cons (vlax-curve-getPointAtParam obj_vlax bg_vtx) lst_pt)
         bg_vtx (1+ bg_vtx)
       )
     )
     (setq
       lst_pt (cons (vlax-curve-getPointAtDist obj_vlax d_x) lst_pt)
       d_x (+ d_x delta)
     )
   )
   (setq lst_pt (cons pt_end lst_pt))
   (foreach n lst_pt
     (write-line ((lambda (x) (strcat (rtos (car x) 2 3) str_sep (rtos (cadr x) 2 3) str_sep (rtos (caddr x) 2 3))) n) f_open)
   )
 )
 (close f_open)
 (setvar "dimzin" oldim)
 (prin1)
)

 

[Edité le 7/4/2011 par bonuscad]

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

(gile),

bonuscad,

On peut récupérer le séparateur de données spécifié dans les options régionales et linguistiques avec cette expression :

 

(setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")

 

Oui, on m'avais déjà donné cette solution, mais je ne sais pourquoi, pour moi ça ne fonctionne pas !

Il faut dire que ce soi chez moi, ou au boulot on utilise que des anciennes licences, c'est peut être lié a cela ! (97 et 2000)

 

J'ai donc gardé cette solution, en plus de cette manière, je n'ai pas de problème non plus avec open office.

 

Mais si tu as une explication, ou une autre astuce, je suis preneur. ;)

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

Waouh! Merci bonuscad! C'est exactement ce que je cherchais et vu comme ça je suis d'accord sur le fait que c'est inutile d'alourdir le dessin en sommets...

Je pensais qu'on ne pouvait récupérer les x,y,z que des sommets...

 

Un grand merci pour cette routine qui va bien me servir!

 

@fabcad : désolé pour l'homonymie comme tu dis mais j'ai tellement l'habitude de mettre 2 "b" dans mes pseudos que je n'ai pas fait attention lors de l'inscription...

 

[Edité le 7/4/2011 par fabbcad]

Lien vers le commentaire
Partager sur d’autres sites

Un grand merci pour cette routine qui va bien me servir!

De rien ;)

J'apprécie le merci.

 

J' édite bon précédent code car un oubli de ma part, les sommets originaux n'étaient pas exportés dans le CSV. (ceci pour des 3Dpoly non splinées)

 

J'avais même pas fait attention à BB du pseudo :P

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

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é