Aller au contenu

DECOMPOS tous les BLOCK visible


Messages recommandés

Posté(e)

Bonjour,

 

J'essaye d'écrire un lisp permattant de DECOMPOSER tous les BLOC visible.

 

Début d'idée :

 

(defun c:TEST () 
(ssget "x" '( (0 . "BLOCK") ) )
(command "DECOMPOS" "0,0" "_p" "")
)

 

pouvez vous m'aider SVP.

Posté(e)

(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

 

./__\.
(.°=°.)
Posté(e)

Bonjour Tramber,

Etant un novice en LISP je comprend un peu ce que tu veux dire mais je n'arrive pas réecire correctement le code avec PSELECT

 

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

Posté(e)

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

Posté(e)

: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

 

./__\.
(.°=°.)
Posté(e)

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

Posté(e)

comme ça ?

 

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

 

Bizarrement ça fonctionne avec EFFACER mais pas avec DECOMPOS ni _EXPLODE

Posté(e) (modifié)

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

Posté(e)

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

Posté(e)

-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

Posté(e)

Ah oui, désolé, je ne m'étais pas souvenu de cette limitation. Mais nous sommes sur la voie du progrès.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

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.

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é