Aller au contenu

DECOMPOS tous les BLOCK visible


yusukens82

Messages recommandés

(defun c:TEST ()  
(setq jeu(ssget "x" '( (0 . "BLOCK") ) ) )
(command "DECOMPOS" jeu "" ""...) 
)

 

Voyons ! tu fais une selection, autant l'enregistrer. Donc les instructions 0,0 et P ne servent à rien.

D'ailleurs pour P comme précédent, cela ne fonctionne pas dans un lisp, il ne reconnait pas ssget comme une manoeuvre retenant P.

Un COMMAND avec la commande PSELECT devrait le faire je pense mais ça ne serait toujours pas filtré ! Bref ne mélangeons pas les concepts !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour yusukens,

Tramber a déjà modifié le lisp en ajoutant (setq jeu pour enregistrer ta séletion.

Le PSELECT n'est donc pas nécessaire. Le jeu enregistré est réutilisé directement dans la commande décompose à la place du "0,0" et P.

En revanche pour que la commande fonctionne sur les références de bloc il te faut filtrer avec "INSERT" et non "BLOCK".

Olivier

Lien vers le commentaire
Partager sur d’autres sites

:angry:

Je papotais.... connais-tu la moindre commande AutoCAD qui envoie (et c'est son seul rôle) une selection dans P ?

 

Mon code ne marchait pas ?

.... et pour cause.

(setq jeu(ssget "x" '( (0 . "BLOCK") ) ) ) est faux, j'avais pas vu.

(setq jeu(ssget "x" '( (0 . "INSERT") ) ) ) est mieux.

 

Tu débutes, c'est normal :P

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Effectivement avec INSERT ça marche mieux.

en revanche ça fonctionne très bien avec la commande EFFACER mais pas avec DECOMPOS.

 

Commande EFFACER :

(setq jeu(ssget "x" '( (0 . "INSERT") ) ) )
(command "EFFACER" jeu "") 

 

Commande DECOMPOS:

(setq jeu(ssget "x" '( (0 . "INSERT") ) ) )
(command "DECOMPOS" jeu "") 

 

même problème avec les commandes EXPLODE ou _EXPLODE

Lien vers le commentaire
Partager sur d’autres sites

Bonjour yusukens82

 

Tout d’abord ce que tu appelles bloc dans un dessin et une référence de bloc soit une entité "INSERT", pour t’en convaincre, tape ce code dans ta console Visual Lisp et sélectionne une référence de bloc.

 _$ [b](entget (car (entsel)))[/b]
((-1 . <Nom d'entité: 7ef92458>) (0 . "INSERT") (330 . <Nom d'entité: 7ef90cf8>) (5 . "18B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "TEST POTEAU") (10 1042.04 1618.44 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

 

 

Une entité "BLOCK", est ce que l’on appelle une définition de bloc, elle est définie dans le table des blocs, qui n’est pas directement accessible avec ssget, mais plutôt avec les fonctions tblnext tblobjname tblsearch.

 

Un petit sujet qu’il peut être util de lire ou relire - Blocs et imbrications -

http://cadxp.com/index.php?/topic/30082-blocs-et-imbrications/

 

 

 

Maintenant plus concrètement pour l’exemple que tu viens de poster la commande DECOMPOS (_explode) fait partie des quelques commandes qui ne fonctionne en lisp qu’avec des objets uniques.

 

Extrait de l’aide AutoCAD :

Remarque Si vous utilisez un script ou une fonction ObjectARX®, vous ne pouvez pas décomposer plus d'un objet à la fois.

 

 

Donc une fois que tu as créé ta sélection au moyen de l’instruction ssget

_$ (ssget "_x" '((0 . "INSERT")))
<Selection set: da>

 

Il te faut parcourir le jeu de sélection obtenue pour appliquer la commande _explode à chaques entités. Tu trouveras pour cela une fonction nommée ssmap fort pratique et très bien expliqué dans le sujet Arguments et Variables.

http://cadxp.com/index.php?/topic/28642-arguments-et-variables/

 

 

Pour ma part j’ai monté un petit exemple avec ssnamex et une boucle pour traiter les blocs imbriqués

 

(defun c:TEST (/ jeu-sel)
 (while (setq jeu-sel (ssget "_x" '((0 . "INSERT"))))
   (mapcar '(lambda (e) (command "_explode" (cadr e))) (ssnamex (ssget "_x" '((0 . "INSERT")))))
 )
 (princ)
)

 

 

Cordialement

 

- Edit - supprimé "" en trop dans le code

Modifié par VDH-Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Pour _EXPLODE

 

2 solutions:

-Soit tu parcours ton jeu de sélection en décomposant tes insertions une par une dans une boucle (solution la plus propre)

-Soit tu change l'état de variable QAFLAGS et tu appliques ton code (en explosant ton jeu de sélection), bien penser à remettre la variable non documentée à 0...

  • 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

-Soit tu change l'état de variable QAFLAGS et tu appliques ton code (en explosant ton jeu de sélection), bien penser à remettre la variable non documentée à 0...

1+ Clap, Clap, Clap… QAFLAGS les petites astuces qui font toutes la différence :rolleyes: , c’est beau bravo

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Merci ça fonctionne très bien avec cette variable positionné en "1"

 

cela donne :

(command "QAFLAGS" "1")
(setq jeu(ssget "x" '( (0 . "INSERT") ) ) )
(command "DECOMPOS" jeu "" "") 
(command "QAFLAGS" "0")

 

 

merci VDH-Bruno pour cette explication détaillé.

 

Merci à vous tous.

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é