Morgul Posté(e) le 16 septembre 2008 Posté(e) le 16 septembre 2008 Bonjour à Tous, Comment peut-on récupérer la valeur d'un attribut constant d'un bloc sélectionné à la souris ? Peut-on changer cette valeur ? Merci. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Arcasdk Posté(e) le 16 septembre 2008 Posté(e) le 16 septembre 2008 Coucou, je ne sais pas si tu sais bricoler un petit peu en lisp mais ce code de Matt pourra surement t'aider après quelques modifications. (defun c:vblat_matt (/ ent str) (while (or (not (setq ent (car (entsel "\nSélectionner un bloc :")))) (/= (cdr (assoc 0 (entget ent))) "INSERT") ) ) (if (cdr (assoc 66 (entget ent))) (progn (setq str "\nCe bloc contient un ou des attributs : ") (while (setq ent (entnext ent)) (if (eq (cdr (assoc 0 (entget ent))) "ATTRIB") (setq str (strcat str "\n" (cdr (assoc 2 (entget ent))) " ->\t" (cdr (assoc 1 (entget ent))) )) ) ) (alert str) ) (princ "\nCe bloc ne contient pas d'attribut.") ) (princ) ) Bon courage <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Patrick_35 Posté(e) le 16 septembre 2008 Posté(e) le 16 septembre 2008 Salut Peut-on changer cette valeur ? Bah là, je ne vois plus l'intérêt d'un attribut constant ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Morgul Posté(e) le 16 septembre 2008 Auteur Posté(e) le 16 septembre 2008 Salut à vous, Merci de m'avoir répondu.Arcasdk, hélas, ça ne marche pas ta soluce, ce lisp ne donne pas la valeur d'un attribut constant. Sinon, Patrick_35, en fait je veux utiliser un bloc avec des attributs constant afin qu'un utilisateur de ce bloc ne puisse pas modifier les valeurs avec l'éditeur d'attribut classique, mais qu'il soit obligé d'utiliser le lisp que je souhaite créer. Je souhaite faire un bloc comme ceci : Longueur de câble = attrib classique l'opérateur rentre la longueurType de câble = attrib constant invisible contient une valeur fixePerte câble = attrib constant, le lisp calcul sa valeur en fonction de la Longueur et du Type de câble Encore merci à vous. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
(gile) Posté(e) le 16 septembre 2008 Posté(e) le 16 septembre 2008 Salut, Pour un attribut constant, il faut chercher dans les composant de la définition du bloc. Je t'avais répondu à une question du même ordre ici [Edité le 16/9/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Morgul Posté(e) le 16 septembre 2008 Auteur Posté(e) le 16 septembre 2008 Merci Gile, Effectivement, je m'en suis souvenu après.Mais est-ce que je peux changer la valeur d'un attribut constant ? Je pense que oui, mais est-ce que tu peux m'aider une nouvelle fois ? Merci encore. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
(gile) Posté(e) le 16 septembre 2008 Posté(e) le 16 septembre 2008 Re, Oui, on peut changer la valeur de l'attribut avec entmod, il faut faire ATTSYNC ensuite pour mettre les attributs à jour. Remplace ETTIQUETTE par le nom de l'étiquette (en majuscules) et NomDuBloc par le nom du bloc (setq bloc (tblsearch "Block" "NomDuBloc") ent (cdr (assoc -2 bloc)) loop T ) (while (and loop ent) (setq elst (entget ent) ent (entnext ent) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "ETIQUETTE") ) (progn (setq loop nil) (entmod (subst (cons 1 "Nouvelle valeur") (assoc 1 elst) elst ) ) (entupd (tblobjname "BLOCK" "NomDuBloc")) ) ) ) (command "_attsync" "_name" "NomDuBloc") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Morgul Posté(e) le 16 septembre 2008 Auteur Posté(e) le 16 septembre 2008 Ok, je te remercie, je vais regarder ça plus tard. Pour l'instant je suis bloqué.Je ne comprends pas... J'ai plusieurs attrib constant, et lorsque je veux extraire les valeurs , elles se mélange, j'ai un défaut dans mon code, mais je ne trouve pas. Je pensais que c'était mon bloc qui était mal fait, mais non. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Morgul Posté(e) le 16 septembre 2008 Auteur Posté(e) le 16 septembre 2008 Voici une partie de mon lisp : (setq DefBloc (tblsearch "Block" NomBloc)) (setq EntBloc (cdr (assoc -2 DefBloc))) (setq loop T) (while (and loop EntBloc) (setq NomEnt (entget EntBloc)) (setq EntBloc (entnext EntBloc)) (if (and (= (cdr (assoc 0 NomEnt)) "ATTDEF") (= (logand 2 (cdr (assoc 70 NomEnt))) 2) (Progn (= (cdr (assoc 2 NomEnt)) "P_GSM") ; si le nom de l'étiquette de l'attribut est (setq NomAtt1 (assoc 1 NomEnt)) (setq Val_P_GSM NomAtt1) (setq Val_P_GSM (cdr Val_P_GSM)) (= (cdr (assoc 2 NomEnt)) "P_DCS") ; si le nom de l'étiquette de l'attribut est (setq NomAtt2 (assoc 1 NomEnt)) (setq Val_P_DCS NomAtt2) (setq Val_P_DCS (cdr Val_P_DCS)) (= (cdr (assoc 2 NomEnt)) "P_UMTS") ; si le nom de l'étiquette de l'attribut est (setq NomAtt3 (assoc 1 NomEnt)) (setq Val_P_UMTS NomAtt3) (setq Val_P_UMTS (cdr Val_P_UMTS)) ) ) (setq loop nil) (setq ret (cdr (assoc 1 NomEnt))) ) ) Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
Morgul Posté(e) le 17 septembre 2008 Auteur Posté(e) le 17 septembre 2008 Salut, C'est bon j'ai refait mon code, j'avais fait n'importe quoi. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
lili2006 Posté(e) le 17 septembre 2008 Posté(e) le 17 septembre 2008 Bonjour à toutes et tous, Morgul, ce qui donne ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Morgul Posté(e) le 17 septembre 2008 Auteur Posté(e) le 17 septembre 2008 Lili2006 Voici donc mon nouveau code : (setq bloc (tblsearch "Block" "SYN_TAB_PERTES_1'1-4")) (setq ent (cdr (assoc -2 bloc))) (setq loop T) (while (and loop ent) (setq elst (entget ent)) (setq ent (entnext ent)) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "P_GSM") ; l'étiquette en majuscules ) (setq Val1 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "P_DCS") ; l'étiquette en majuscules ) (setq Val2 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "P_UMTS") ; l'étiquette en majuscules ) (setq Val3 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "COEF_GSM") ; l'étiquette en majuscules ) (setq Val4 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "COEF_DCS") ; l'étiquette en majuscules ) (setq Val5 (cdr (assoc 1 elst))) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "COEF_UMTS") ; l'étiquette en majuscules ) (setq Val6 (cdr (assoc 1 elst))) ) ) (setq loop nil) Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
lili2006 Posté(e) le 17 septembre 2008 Posté(e) le 17 septembre 2008 Re, Ok !Merci pour ta réponse Morgul, Cette routine peut en intéresser d'autres,..... :P Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Patrick_35 Posté(e) le 17 septembre 2008 Posté(e) le 17 septembre 2008 Re Bien pour ta routine :) Tu as aussi le lisp MAT que tu peux modifier pour satisfaire à ta demande. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Morgul Posté(e) le 17 septembre 2008 Auteur Posté(e) le 17 septembre 2008 Salut Gile, Super ta réponse. Je te remercie.Le seul Hic, c'est que je peux avoir plusieurs bloc insérer et que je veux qu'ils soient indépendants et là du coup ils récupère tous la même valeur. Comment faire ? A savoir que je sélectionne à la souris le bloc que je souhaite. Re, Oui, on peut changer la valeur de l'attribut avec entmod, il faut faire ATTSYNC ensuite pour mettre les attributs à jour. Remplace ETTIQUETTE par le nom de l'étiquette (en majuscules) et NomDuBloc par le nom du bloc (setq bloc (tblsearch "Block" "NomDuBloc") ent (cdr (assoc -2 bloc)) loop T ) (while (and loop ent) (setq elst (entget ent) ent (entnext ent) ) (if (and (= (cdr (assoc 0 elst)) "ATTDEF") (= (logand 2 (cdr (assoc 70 elst))) 2) (= (cdr (assoc 2 elst)) "ETIQUETTE") ) (progn (setq loop nil) (entmod (subst (cons 1 "Nouvelle valeur") (assoc 1 elst) elst ) ) (entupd (tblobjname "BLOCK" "NomDuBloc")) ) ) ) (command "_attsync" "_name" "NomDuBloc") Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
(gile) Posté(e) le 17 septembre 2008 Posté(e) le 17 septembre 2008 Salut, Le seul Hic, c'est que je peux avoir plusieurs bloc insérer et que je veux qu'ils soient indépendants et là du coup ils récupère tous la même valeur. Un attribut constant a une valeur constante (comme son nom l'indique) définie dans la définition même du bloc (un peu comme un texte) sa valeur sera donc forcément la même dans toutes les références. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Morgul Posté(e) le 17 septembre 2008 Auteur Posté(e) le 17 septembre 2008 Ah ouai d'accord, je comprend mieux maintenant ! Il faut donc que j'utilise un attribut classique alors.Mais c'est pas grave tout cela est utile car j'ai besoin d'attribut de ce type (constant) aussi. Merci Gile. Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
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