Aller au contenu

Transformer une ML en PL [réglé]


barbichette

Messages recommandés

Bonjour,

J'ai récupéré ce lisp qui me permet de transformer une Multiligne en Polyligne.
Ca marche super bien sauf que cela n'agit qu'une seule multiligne à la fois.

comment pourrais-je modificer ce lisp pour qu'il prenne en compte une sélection de ML ?

;;--------------=={ Multilines to LWPolylines }==-------------;;
;;                                                            ;;
;;  Converts a selection of Multiline (MLINE) objects into    ;;
;;  LWPolylines.                                              ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2012 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Version 1.1    -    10-06-2012                            ;;
;;------------------------------------------------------------;;

(defun c:ml2pl ( / *error* doc el en i s1 s2 val var )

    (defun *error* ( msg )
        (if val (mapcar 'setvar var val))
        (if doc (LM:endundo doc))
        (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
            (princ (strcat "\nError: " msg))
        )
        (princ)
    )
    
    (setq doc (vla-get-activedocument (vlax-get-acad-object))
          var '("CMDECHO" "PEDITACCEPT" "QAFLAGS")
          val  (mapcar 'getvar var)
    )
    (if (setq s1 (ssget "_:L" '((0 . "MLINE"))))
        (progn
            (LM:startundo doc)
            (mapcar 'setvar var '(0 1 0))
            (repeat (setq i (sslength s1))
                (setq en (ssname s1 (setq i (1- i)))
                      el (entlast)
                      s2 (ssadd)
                )
                (command "_.explode" en)
                (while (setq el (entnext el))
                    (ssadd el s2)
                )
                (command "_.pedit" "_M" s2 "" "_J" "" "")
                (setq s2 nil)
            )
            (mapcar 'setvar var val)
            (LM:endundo doc)
        )
    )
    (princ)
)

(defun LM:startundo ( doc )
    (LM:endundo doc)
    (vla-startundomark doc)
)

(defun LM:endundo ( doc )
    (while (= 8 (logand 8 (getvar 'undoctl)))
        (vla-endundomark doc)
    )
)

(vl-load-com)
(princ)

 

***********************

Rien ne sert de courrir, il faut partir à point.

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Alors j'ai du mal à comprendre ton problème car le programme semble déjà prendre en compte plusieurs Multilignes...
Il travail déjà avec un jeu de sélection :

(setq s1 (ssget "_:L" '((0 . "MLINE"))))

Donc je vois difficilement quoi faire de plus...car le "_:L" correspondant à la méthode de sélection, signifie que tu peux choisir autant d'objets que tu souhaites, avec n'importe qu'elle système de sélection à partir du moment que les objets ne sont pas sur un calque verrouillé...

Donc en l'état, je dirais que ton programme fonctionne déjà selon ta demande !

Bisous,
Luna

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é