Aller au contenu

Insertion de bloc


Neophyte

Messages recommandés

Bonjour,

je suis à la recherche d'une routine lisp me permettant d'insérer un bloc, tout en remplissant les attributs automatiquement en fonction de variables préalablement définies. Je m'explique : si dans une boîte de dialogue j'ai définis une variable PRENOM avec comme valeur "Paul" et que j'insère mon bloc je voudrai que mon attribut PRENOM prenne la valeur "Paul" automatiquement.

Est-ce possible ?

 

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Est-ce que dans le bloc que tu souhaites insérer l'attribut PRENOM est le seul attribut du bloc ?

  1. Si c'est le cas c'est assez simple
  2. Si ce n'est pas le cas il va falloir interroger les étiquettes du bloc à insérer pour connaître leur position dans le bloc avant de la remplir.

Merci de nous expliquer pour qu'on vienne te répondre

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

la solution la plus simple est d'insérer le bloc sans renseigner les attributs (donc avec ATTREQ à 0), puis de modifier l'attribut du bloc qu'on vient d'insérer avec quelque chose de ce style

 

(defun modif_attrib (E ETIQ VALEUR / LATT ATT)
 (if (= (type E) 'ENAME)
   (setq E (vlax-ename->vla-object E))
 )
 (setq LATT (vlax-invoke E 'getAttributes))
 (foreach ATT LATT
   (if (= (strcase (vla-get-TagString ATT)) (strcase ETIQ))
     (vla-put-TextString ATT VALEUR)
   )
 )
)

 

où E est le ENAME ou le VLA-OBJECT du bloc à modifier

ETIQ l'étiquette

et VALEUR, la valeur, on s'en doute...

 

L'avantage est qu'on se passe de connaitre la position de l'attribut dans le bloc

 

(modif_attrib MONBLOC "PRENOM" "Paul")

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Pour obtenir ou affecter la valeur d'un attribut par son étiquette, je rappelle que les fonctions getpropretyvalue et setpropertyvalue permettent d'y accéder plus directement (la sous-routine devient inutile) :

 

(defun modif_attrib (E ETIQ VALEUR)
 (setpropertyvalue E ETIQ VALEUR)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

je ne connaissais pas ces nouvelles fonctions GetPropertyValue et SetPropertyValue qui sont apparues pour la 2012. Je n'ai pas fait l'essai (suis sur un ordi sans autocad pour le WE...), mais cela me semble plus qu'intéressant et simplifie beaucoup de choses !

 

Par contre, si j'ai bien compris, ce sont des fonctions purement lisp (pas vlisp). Faut-il donc que le E qui est injecté dans ces fonctions soit absolument de type ename ou alors cela peut être un vla-object ?

 

Le seul point négatif est d'être obligé d'avoir 2012 ou plus.

 

Merci

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ce rappel (gile) !

Entre temps j'ai eu Léopold, j'avais complétement oublié ;)

(J'ai aussi relu le tout dernier message de gégé et on peut changer le mode d'attachement des X-refs.)

Faut que je revoie des programmes maintenant que 2012 commence à s'éloigner.

En +, j'ai un petit projet à faire ce mois-ci et tout cela va m'être utile.

Pour les attributs qui sont parfois si pénibles à gérer quand il y en a dans des programmes de toutes tailles, faut qu'on pense à ces raccourcis.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Bonjour,

 

Elles sont apparues avec AutoCAD MAC

pour une fois qu'on peut en tirer quelque chose de positif... puisqu'il semblerait, compte tenu des messages que j'ai vu passer, qu'Autocad MAC ne soit pas spécialement génial.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour, quand j'utilise la routine de (gile) j'obtiens un message d'erreur "Demande ADS erronée".

Quelqu'un peut m'éclairer ?

Merci.

 

C'est certainement qu'un des arguments passés à 'setpropertyvalue' n'est pas valide. Dans ce cas, le premier argument doit être le nom d'entité (ENAME) d'une référence de bloc, le second l'étiquette d'un des attributs de ce bloc, la troisième la valeur à affecter à l'attribut (sous forme de chaîne de caractères).

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

Lien vers le commentaire
Partager sur d’autres sites

C'est pourtant ce que j'ai fais : ...

 

(defun c:panneau()

(defun modif_attrib (E ETIQ VALEUR)

(setpropertyvalue E ETIQ VALEUR)

)

; Désactivation de l'affichage à l'écran

(setvar "cmdecho" 0)

; Désactivation de l'accrochage objet

(setvar "osmode" 0)

; Permet de ne pas complèter les attributs dans une boîte de dialogue

(setvar "attreq" 0)

; Attribution d'un calque au bloc "Panneau de chantier"

(command "-calque" "E" "Panneau de chantier" "co" "250" "Panneau de chantier" "tl" "Continuous" "Panneau de chantier" "")

; Insertion du bloc "Panneau de chantier"

(setq p1(getpoint "\nSélectionner le pont d'insertion du panneau de chantier :"))

(command "inserer" "Panneau de chantier" p1 1 1 0)

; Définit le calque "0" courant

(command "clayer" "0")

; Régénération du système

(command "redess")

(modif_attrib "Panneau de chantier" "NOM_MOE" "Paul")

)

Lien vers le commentaire
Partager sur d’autres sites

"Panneau de chantier" n'est pas un nom d'entité (type ENAME), c'est une chaîne de caractères (type STR)

 

Ce qu'il te faut, c'est le nom d'entité du bloc que tu viens d'insérer. Tu peux le récupérer avec la fonction entlast qui retourne le nom d'entité de la dernière entité ajoutée au dessin.

 

(setpropertyvalue (entlast) "NOM_MOE" "Paul")

 

PS: pense à déclarer tes variables et à restaurer les valeurs des variables système que tu modifies...

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

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é