Aller au contenu

bloc explosé et joindre


PHILPHIL

Messages recommandés

bonjour

 

j'ai des milliers de blocs tous pareil composé de deux lignes et deux arcs (issu de revit )

je veux les décomposer et joindre ensuite les deux lignes et deux arcs pour en faire une polylignes

quand je lance seul la commande "JOINDRE" en sélectionnant les deux lignes et deux arcs, ca créer une polyligne

quand j'insère  la meme commande "joindre" dans le lisp   ca ne marche plus et ne veux plus des arc de cercle.

normal ??

ou est le soucis ?

merci

Phil

;;;------------------------------
;;;DECOMPOSE BLOC POUR EN FAIRE polyligne
;;;------------------------------
(defun c:blocs_to_joindre (/ s i e)
  (setvar "cmdecho" 0)
  (and (setq s (ssget '((0 . "INSERT"))))
       (setq i   -1
             com (sslength s)
       )
       (while (setq e (ssname s (setq i (1+ i))))
         (command "_explode" e "" )
         (setq obj (ssget "P" ))
         (command-s "JOINDRE" obj "")
         (acet-ui-progress-init (strcat "AVANCEMENT " (rtos (/ (* i 100) (float com)) 2 2) " %") com)
         (acet-ui-progress-safe i)
       )
  )
  (acet-ui-progress-done)
  (princ)
)

 

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Les commandes ne fonctionnent pas toujours de la même façon quand elle sont appelées depuis LISP. Par exemple la commande JOINDRE (_JOIN) appelée depuis un LISP n'accepte pas un jeu de sélection. Dans ton cas la commande PEDIT devrait faire l'affaire. Quand on appelle cette commande depuis LISP il faut faire attention à la valeur de la variable système PEDITACCEPT. Avec les fonction ai_sysvar et vl-catch-all-apply on est certain que les variables système reprendront leur valeur initiale même en cas d'erreur.

(defun c:blocs_to_joindre (/ s i e)
  (ai_sysvar '(("cmdecho" . 0) ("peditaccept" . 1)))
  (vl-catch-all-apply
    '(lambda ()
       (and (setq s (ssget '((0 . "INSERT"))))
	    (setq i -1
	    )
	    (while (setq e (ssname s (setq i (1+ i))))
	      (command-s "_.explode" e "")
	      (setq ss (ssget "P"))
	      (command-s "_.pedit" "_multiple" ss "" "_join" "" "")
	    )
       )
     )
  )
  (ai_sysvar nil)
  (princ)
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

hello Gile

comme d'habitude  GRAND MERCI

ca marche NICKEL

par contre ca dépasse mes compétences en lisp  la, autant des fois j'arrive a modifier tes bouts de codes, autant la  je ne comprend plus rien  lolll

merci

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Coucou @(gile),

Petite question : j'ai beau chercher sur le NET et l'aide AutoCAD, je ne trouve aucune info concernant la fonction (ai_sysvar)...Même lorsque je suis dans VLIDE, cette fonction ne semble pas reconnue. J'ai bien trouvé ce post de toi mais je ne parviens pas à trouver le fichier AcadXXXXdoc.lsp... pour mieux comprendre. Je pense avoir bien compris son utilisation grâce à tes différents messages présentant cette fonction, mais par pur principe je préfères comprendre correctement son utilisation ^^"

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é