Aller au contenu

[Résolu] Discrétiser arc en ligne où polyligne?


Messages recommandés

Posté(e)

Bonjour,

Sur notre serveur se trouve un Lisp (Surement récupérer sur le net) qui permet de discrétiser les arcs en lignes. Je remercie l'auteur de ce code si il passe par là.

 

Cette fonction ARC2LINE discrétise tous les arcs du dessin. Est-il possible de modifier ce code pour discrétiser que les arc sélectionnés.

Je vous remercie par avance.

Cordialement.

<BR>(defun C:ARC2LINE ( / js n ent dxf_ent obj_vlax pt_start pt_end res_track flag_ucs last_e old_osmd old_pdmd l_pt)<BR>    (setq js (ssget "_X" '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0)<BR>    (cond<BR>        (js<BR>            (setq<BR>                old_osmd (getvar "osmode")<BR>                old_pdmd (getvar "pdmode")<BR>            )<BR>            (setvar "osmode" 0)<BR>            (setvar "pdmode" 1)<BR>            (setvar "cmdecho" 0)<BR>            (initget 7)<BR>            (setq res_track (getdist "\nPas de résolution: "))<BR>            (vl-load-com)<BR>            (while (setq ent (ssname js n))<BR>                (setq<BR>                    obj_vlax (vlax-ename->vla-object ent)<BR>                    pt_start (vlax-curve-getStartPoint obj_vlax)<BR>                    pt_end (vlax-curve-getEndPoint obj_vlax)<BR>                )<BR>                (setq last_e (entlast))<BR>                (setq l_pt (cons (trans pt_end 0 1) '()))<BR>                (command "_.measure" ent res_track)<BR>                (while<BR>                    (and<BR>                        (= (cdr (assoc 0 (setq dxf_ent (entget (entlast))))) "POINT")<BR>                        (not (equal (entlast) last_e))<BR>                    )<BR>                    (setq l_pt (cons (trans (cdr (assoc 10 dxf_ent)) 0 1) l_pt))<BR>                    (entdel (entlast))<BR>                )<BR>                (command "_.line" (mapcar 'command (cons (trans pt_start 0 1) l_pt)))<BR>                (entdel ent)<BR>                (setq n (1+ n))<BR>            )<BR>            (setvar "osmode" old_osmd)<BR>            (setvar "pdmode" old_pdmd)<BR>            (setvar "cmdecho" 1)<BR>            (princ (strcat "\n" (itoa n) " Cercles ou Arcs convertis en Ligne"))<BR>        )<BR>        (T (princ "\nAucun Arc ou Cercle trouvé!"))<BR>    )<BR>    (prin1)<BR>)<BR>(princ "\nARC2LINE.LSP chargé. Tapez ARC2LINE pour convertir un ARC en segment de LIGNE.")<BR>(prin1)<BR>

Petit à petit on devient moins petit

Posté(e)

Je viens de tenter :

 

(setq js (ssget "_S:" '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0)

 

Ne fonctionne pas.

 

(setq js (ssget "_P" '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0)

Pour utiliser le dernier jeux de sélection cela fonctionne mais c'est dangereux car ce jeux de selection n'est pas défini en amont dans le code.

Comment définir cette sélection dans le code?

Merci par avance.

Cordialement.

 

Petit à petit on devient moins petit

Posté(e)

Je vous remercie,

je voulais à tout pris utiliser une méthode, et en effet sans méthode, en utilisant juste le filtre cela fonctionne à merveille.

Maintenant pour m'éclairer dans :

(setq js (ssget '((-4 . "<OR") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>"))) n 0)

 

la fin de la fonction setq n 0), à quoi servent n 0, à 'initialise le compteur n à 0?

 

Pour aller plus loin, pourait-on discrétiser les arcs de polylignes sélectionnées?

 

 

 

Petit à petit on devient moins petit

Posté(e)

j'ai tester ton code avec la séléction

(setq js (ssget '((-4 . "<OR") (0 . "*POLYLINE") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>")))
      n 0
)

mais le résultat est pas top, car ça décompose les polylignes, et les coupe même en ligne droite...

 

j'ai souvenir d'avoir vu passer des lisp plus performant, mais je n'arrive pas à remettre la main dessus car ayant covadis, il y a 2 fonction très performante qui font ça

Posté(e)

Hello

 

Tu trouveras une Super Routine (comme d'habitude) de Gilles (Nov 2008)

qui avait ete developpee (a ma demande si je me souviens bien !?) ...

 

ARC2SEG vs 1.03 qui traite les Arcs, Cercles et Arcs a l'interieur des Polylignes

avec choix d'effacer Oui/non les objets originaux

et choix de creer de nouveaux objets sur calque d'Origine ou sur calque Courant

et en plus la routine transfere les eventuels XDatas ...

 

En resume c le TOP !

 

Bonne Utilisation, Bonne Fetes a Tous, Sante, lecrabe

 

PS: Routine retestee sur version 2013 ...

 

Autodesk Expert Elite Team

Posté(e)

ho pinaise... c'est bien à cette routine que je pensait (j'aurai du me douter que c'était un lisp à (gile))

 

à la lecture sommaire et inculte du code je me rend compte que c'est encore un morceau de bravoure loin... très très loin de mes capacités

Posté(e)

Je vous remercie pour vote aide.

Ce dernier Lisp est au top, une fois de plus merci à Gile qui apparement est trés prolifique...

bonne fêtes de fin d'année à toutes et tous.

Cordialement.

Petit à petit on devient moins petit

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é