Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Comment accéder à un objet d'un bloc pour lui signifier un ordre de tracé ou un changement de propriété.

 

Mon objet en question est un Solide 2d unique dans le bloc car lorsque j'importe une présentation par l'ADC sur AutoCAD MAP 2007 les blocs qui sont sur cette mise en page perdent l'ordre de tracé notamment les solides et mpolygones.

 

Merci pour vos réponses.

 

Fabrice

Posté(e)

Pour accéder à un bloc il faut boucler dans la base :

(vlax-for i *blocks*
 (if(wcmatch(strcase(vla-get-Name i))(strcase "Nomdubloc"))
   (vlax-for j i
     (if(=(vla-get-ObjectName j)"AcDbSolid" );recherche de l'objet
(gc:MoveToBottom i (list j))))
   )
 )

 

... tu pourras gérer la mise en arrière avec gc:movetobottom de (gile)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

J'ai amélioré un peu la routine.

Ne pas oublier :

 

(or *blocks* (setq *blocks* (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))))

 

Mais je pense que tu avais compris...

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Salut Tramber

 

Tu peux accéder directement au bloc sans utiliser de boucle

En reprennant tes variables

(vla-item *blocks* "Mon_Bloc")

 

Et si tu as peur qu'il n'existe pas, avec une gestion d'erreur

(vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list *blocks* "Mon_Bloc")))

 

Ou encore plus simple, en utilisant (nentsel) sur un bloc visible à l'écran

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Oui, c'est vrai, mais pour trouver l'objet au sein du bloc, on ne pourra se passer de boucler avec le

(vlax-for j i 
     (if(=(vla-get-ObjectName j)"AcDbSolid" );recherche de l'objet 
       (gc:MoveToBottom i (list j)))) 

ou i vaudra (vla-item *blocks* "Mon_Bloc")

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

En supposant que gc:MoveToBottom et gc:GetSortentsTable soient chargés, peux-tu simplement montrer ton code ou dire où il butte (ce que tu dois savoir faire dans la console vlisp ?)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

L'erreur est juste avant la boucle :

 

(setq nom_du_bloc (cdr (assoc 2 (entget obj_acad_bloc))))

 

serait la bonne formule. En choisissant assoc 8 tu obtiens le nom de calque !

 

C'était tout bête.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Merci ca fonctionne maintenant, on ne le dira jamais assez mais la relecture avec d'autres yeux c'est cool.

 

J'ai mis à jour le fichier lisp en pièce-jointe.

 

Bonne journée,

 

A+

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é