Aller au contenu

Messages recommandés

Posté(e)

Bonjour à Toutes et à Tous,

 

Est-ce que la commande TBLSEARCH BLOCK permet de connaître les options de création d'un bloc ? à savoir si l'on autorise la DECOMPOSITION et si le bloc est à échelle uniforme ou non ?

 

Dans la liste retournée par la fonction TBLSEARCH je n'ai pas trouvé ?

 

Merci pour votre aide.

 

Christian

 

 

 

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Bonjour Christian,

Voici une petite ligne en Autolisp.

 

(cdr (assoc 280 (entget (cdr (assoc 330 (entget (cdr (assoc -2 (tblsearch "block" "Nom_de_ton_bloc")))))))))

 

0: le bloc ne peut-être explosé

1: le bloc peut-être explosé

 

 

Il y a peut-être plus direct mais je suis pas le plus qualifié (je suis interessé par d'éventuel réponse moins tortueuse. :D

 

Olivier

Posté(e)

Bonjour à tous,

 

Pas mieux ??

 

Olivier

En utilisant tblobjname pour récupérer plus directement le ename..

(cdr (assoc 280 (entget (assoc 330 (entget (tblobjname "block" "Nom_de_ton_bloc"))))))

 

A+

  • Upvote 1

Apprendre => Prendre => Rendre

Posté(e)

Bonjour rebcao,

Pour compléter, la réponse d'Olivier, les options de création du bloc tel que la mise à l'échelle uniforme et la décomposition.

Sont respectivement renseigné dans les codes DXF 281 et 280 de la table BLOCK_RECORD, associée à la définition du bloc. La table BLOCK_RECORD est accessible via le code 330 présent dans la définition du bloc.

 

Pour le principe un exemple pour une sélection par pointage sur une référence de bloc

((lambda (dxf_blrecord)
  (alert (strcat (if (zerop (cdr(assoc 280 dxf_blrecord)))
                   "Décomposition autorisé -> \t\t Non"
                   "Décomposition autorisé -> \t\t Oui"
                 )
                 "\n"
                 (if (zerop (cdr(assoc 281 dxf_blrecord)))
                    "Echelle non uniforme autorisé -> \t Oui"
                   "Echelle non uniforme autorisé -> \t Non"                   
                 )
         )
  )
)
 (entget (cdr (assoc 330 (entget (tblobjname "block" (cdr (assoc 2 (entget (car (entsel))))))))))
)

 

L'équivalent sous AutoCAD visible dans l'éditeur de bloc:

post-33529-0-28743100-1437994830_thumb.png

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Bonjour,

 

Par simple curiosité, quelqu'un peut expliquer pourquoi (tblobjname "BLOCK" "Nom_Du_Bloc") ne renvoie par la même chose que (car (entsel "Selection_Du_Bloc")) ?

 

Je vois aussi que vous utilisez (assoc XXX), est-ce qu'il existe une liste reprenant la correspondance des numéros ? J'ai trouvé CECI mais je ne suis pas sur de ce que j'avance.

 

Sinon j'avais trouvé une fonction nommée (vla-get-explodable object) qui renvoyait vlax-true ou vlax-false en fonction du bloc si il était explosable ou pas, mais je n'arrive malheureusement par à l'utiliser.

Voici le lien ou j'ai trouvé la fonction.

 

Cordialement,

GJulien

Posté(e)

Bonjour,

Par simple curiosité, quelqu'un peut expliquer pourquoi (tblobjname "BLOCK" "Nom_Du_Bloc") ne renvoie par la même chose que (car (entsel "Selection_Du_Bloc")) ?

Le premier retourne le ename de la définition de bloc (0 . "BLOCK")

Le second retourne le ename d'une référence de bloc inserer dans le dessin (0 . "INSERT")

 

Je vois aussi que vous utilisez (assoc XXX), est-ce qu'il existe une liste reprenant la correspondance des numéros ? J'ai trouvé CECI mais je ne suis pas sur de ce que j'avance.

Oui, et plus spécifiquement dans l'aide tu as la description des codes par type d'entité.

 

Sinon j'avais trouvé une fonction nommée (vla-get-explodable object) qui renvoyait vlax-true ou vlax-false en fonction du bloc si il était explosable ou pas, mais je n'arrive malheureusement par à l'utiliser.

(vla-get-explodable (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-Acad-Object))) "Nom_de_ton_bloc"))

 

A+

Apprendre => Prendre => Rendre

Posté(e)
Voir le messageGJulien, le 27 juillet 2015 - 12:14 , dit :

 

 

Je vois aussi que vous utilisez (assoc XXX), est-ce qu'il existe une liste reprenant la correspondance des numéros ? J'ai trouvé CECI mais je ne suis pas sur de ce que j'avance.

 

 

Oui, et plus spécifiquement dans l'aide tu as la description des codes par type d'entité.

 

Avec la nouvelle aide, fait une recherche avec DXF dans la partie développeur avec Anglais comme langage.

Le chapitre "About the DXF Format (DXF)" va te donner accès au différentes parties.

 

Olivier

PS : @VDH-Bruno : Toujours en version 2007 ?

Posté(e)

Sinon j'avais trouvé une fonction nommée (vla-get-explodable object) qui renvoyait vlax-true ou vlax-false

Bien que je préfère la manipulation des listes DXF, on peut effectivement obtenir ces informations en exploitant les propriétés définie dans l'objet BLOCK_RECORD.

((lambda (obj_blrecord)
  (alert (strcat (if (eq :vlax-true (vla-get-explodable obj_blrecord))
                   "Décomposition autorisé -> \t\t Oui"
                   "Décomposition autorisé -> \t\t Non"
                 )
                 "\n"
                 (if (zerop (vla-get-BlockScaling obj_blrecord))
                   "Echelle non uniforme autorisé -> \t Oui"
                   "Echelle non uniforme autorisé -> \t Non"
                 )
         )
  )
)
 (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-Acad-Object)))
           (cdr (assoc 2 (entget (car (entsel)))))
 )
)

 

PS : @VDH-Bruno : Toujours en version 2007 ?

Oui toujours, je ne te parlerai pas de la taille de l'écran, ni des perf de l'ordi j'en choquerai plus d'un… <_<

 

A+

Apprendre => Prendre => Rendre

Posté(e)

 

(vla-get-explodable (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-Acad-Object))) "Nom_de_ton_bloc"))

 

A+

 

Bon sang, c'est toujours le "(vla-item ...)" que j'oublie, merci pour cette précision VDH-Bruno.

J'espérais une fois pouvoir aider quelqu'un mais apparement ça ne sera pas pour cette fois :)

 

Merci également à -Olivier- pour les listes DXF.

 

Cordialement,

GJulien

 

PS: Voici néanmoins le petit bout de code que j'ai pu faire.

(defun-q c:BEXPL ()

(vl-load-com)
(setq ACADBLOCK (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))

 (setq bSel (vla-get-name (vlax-ename->vla-object (car (entsel "Bloc : ")))))
 (if (= :vlax-true (vla-get-explodable (vla-item ACADBLOCK bSel)))
   (alert "Bloc explosable")
   (alert "Bloc non-explosable")
 )
)

 

Edit : C'est corrigé, désolé pour la petite erreur.

Posté(e)

PS: Voici néanmoins le petit bout de code que j'ai pu faire.

 

Attention aux comparaisons dans ton if, l'égalité que tu utilises ne fonctionne pas

_$ (= T :vlax-true)
nil
_$ (= T :vlax-false)
nil 

Attention également à ton imbrication dans ton if

Apprendre => Prendre => Rendre

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é