phil_vsd Posté(e) le 29 septembre 2011 Posté(e) le 29 septembre 2011 Bonjour, J'aimerais, en autolisp, que vous m'aidiez à avancer sur ce problème : modifier la valeur d'un attribut sans faire de sélection à l'écran. L'idéal serait d'insérer les remarques à chaque lignes pour que j'y vois clair. Mes données : Nom du bloc : Cart_A3_HydEtiquette de l'attribut : DATE_DE_L'OFFREValeur de l'attribut actuelle : 10 NovembreValeur future : 20 décembre Je sais déjà : sélectionner le bloc par : (ssget "_x" '((2 . "Cart_A3_Hyd")))sélectionner le bloc par la table : (setq ent (cdr(assoc -2 (tblsearch "block" "Cart_A3_Hyd")))) J'ai déjà magouillé un code qui trainait par là : (defun c:dede () ;; Récupère la valeur du premier attribut de Cart_A3_Hyd (setq jeusel (ssget "x" (list (cons 0 "INSERT") (cons 2 "Cart_A3_Hyd") ) ) ) (if (> (sslength jeusel) 1) (progn (alert "le Bloc Cart_A3_Hyd n'est pas unique dans le dessin\n Abandon" ) (quit) ) (progn (setq valATT (cdr (assoc 1 (entget (entnext (ssname jeusel 0)))))) (alert (strcat "la valeur de Cart_A3_Hyd est :" valATT)) ) ) ) Mais je ne suis pas un adepte des copier-coller dogmatiques... Merci à vous !! B' P. "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
Patrick_35 Posté(e) le 29 septembre 2011 Posté(e) le 29 septembre 2011 Salut Par exemple (defun c:maj(/ att bl js n val) (if (setq js (ssget "x" (list (cons 0 "insert") (cons 2 "Cart_A3_Hyd") (cons 66 1)))) (progn (setq n 0) (while (setq bl (ssname js n)) (setq att (entget (entnext bl))) (while (/= (cdr (assoc 0 att)) "SEQEND") (if (= (cdr (assoc 2 att)) "DATE_DE_L'OFFRE") (progn (setq att (subst (cons 1 "Nouvelle Date") (assoc 1 att) att)) (entmod att) (setq att (list (cons 0 "SEQEND"))) ) (setq att (entget (entnext (cdr (assoc -1 att))))) ) ) (setq n (1+ n)) ) ) (alert "le Bloc Cart_A3_Hyd n'est pas unique dans le dessin\n Abandon") ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
didier Posté(e) le 29 septembre 2011 Posté(e) le 29 septembre 2011 Coucou il te faut utiliser SUBST et ENTMOD puis ENTUPD et puis que tu ne veux pas copier-coller, ce que je trouve très bienje vais être pervers et te coller une imagecomme ça il faudra que tu te le tapes :o http://images.imagehotel.net/mnyw03mz78.png amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
phil_vsd Posté(e) le 30 septembre 2011 Auteur Posté(e) le 30 septembre 2011 Merci P_35, merci Didier, Ha cher Didier, cher péregrin des BE outre-océaniques, je te reconnais bien là ! Tu penses bien que je m'étais bien empressé de copier-coller ton code quand il était encore en mode texte... Allez, je file en salle d'autopsie pour décortiquer vos routines. Bonne journée à vous deux. "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
didier Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 coucou je me doute que les gens préfèrent copier les lignes et les retravailler ensuite. je suis convaincu que c'est une fausse bonne idée c'est comme si tu copiais-collais le mode de fonctionnement de la marche à piedmettre le pied droit devant le pied gauchemettre le poids du corps sur le pied droitbasculer le poids du corps sur le pied gauche en avançant ce dernieret recommencer ... est-ce que tu saurais marcher pour autant ? amicalement au fait !, je ne suis plus dans l'océan indien mais dans le sud de la Corse,en même temps, c'est toujours une île (hihihi) Éternel débutant... Mon site perso : Programmer dans AutoCAD
phil_vsd Posté(e) le 30 septembre 2011 Auteur Posté(e) le 30 septembre 2011 La méditerranée n'est elle pas un océan ? C'est ce qu'aimeraient à croire tous les Marseillais !! Et les hommes ne sont-ils pas chacun une île ? Mais ce n'est pas le bon site pour philosopher ainsi. En fait je faisais fausse route dans ma démarche car je pensais que les attributs étaient eux-même contenus dans une table et qu'il fallait la "scanner" pour attraper le bon en fonction de sont étiquette. Il y a vraiment un fossé entre ton lisp, relativement simple qui a la vertu de clarifier les choses, et celui de P_35 qui, tout en étant aussi clair, fait intervenir des outils plus élaborés qui ne sont pas à la portée des (éternels) débutants. Encore merci et à bientôt. "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
didier Posté(e) le 30 septembre 2011 Posté(e) le 30 septembre 2011 coucou le mien est écrit dans un but didactiquele sien contient plus de contrôle charge pour toi, une fois que tu as compris une méthodede franchir le pas des contrôles par exemple, j'ai bien spécifié que je savais quel attribut il fallait modifieren l'occurrence le premierlui, il regarde TOUS les attributs et quand la bonne étiquette est trouvéeil se met à la modifier. tu comprends la nuance, mais comme ta question portait surCOMMENT MODIFIER UNE VALEUR D'ATTRIBUTje me suis concentré dessus et n'ai répondu que dans ce sens. Amicalement Éternel débutant... Mon site perso : Programmer dans 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