Neophyte Posté(e) le 29 mars 2016 Posté(e) le 29 mars 2016 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.
didier Posté(e) le 29 mars 2016 Posté(e) le 29 mars 2016 Coucou Est-ce que dans le bloc que tu souhaites insérer l'attribut PRENOM est le seul attribut du bloc ?Si c'est le cas c'est assez simpleSi 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 Éternel débutant… Mon site perso : Programmer dans AutoCAD
zebulon_ Posté(e) le 29 mars 2016 Posté(e) le 29 mars 2016 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 à modifierETIQ l'étiquetteet 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") AmicalementVincent 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)
Neophyte Posté(e) le 1 avril 2016 Auteur Posté(e) le 1 avril 2016 Merci je vais tester cela.Didier on est dans le cas n°2 on a plusieurs attributs
(gile) Posté(e) le 1 avril 2016 Posté(e) le 1 avril 2016 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
zebulon_ Posté(e) le 2 avril 2016 Posté(e) le 2 avril 2016 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. MerciAmicalementVincent 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)
(gile) Posté(e) le 3 avril 2016 Posté(e) le 3 avril 2016 Salut, Ces fonctions sont du "pur AutoLISP". Elles sont apparues avec AutoCAD MAC pour palier à l'absence du Visual LISP (COM est une technologie purement Windows). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 3 avril 2016 Posté(e) le 3 avril 2016 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 ./__\. (.°=°.)
zebulon_ Posté(e) le 3 avril 2016 Posté(e) le 3 avril 2016 Bonjour, Elles sont apparues avec AutoCAD MACpour 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. AmicalementVincent 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)
Neophyte Posté(e) le 12 avril 2016 Auteur Posté(e) le 12 avril 2016 Bonjour, quand j'utilise la routine de (gile) j'obtiens un message d'erreur "Demande ADS erronée".Quelqu'un peut m'éclairer ?Merci.
(gile) Posté(e) le 12 avril 2016 Posté(e) le 12 avril 2016 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
Neophyte Posté(e) le 12 avril 2016 Auteur Posté(e) le 12 avril 2016 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"))
(gile) Posté(e) le 12 avril 2016 Posté(e) le 12 avril 2016 "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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant