chti52 Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Bonjour à tous Je reçois régulièrement des plans de l'extérieur comportant des blocs avec attributs et, comme dans la majorité des cas ceux-ci n'utilisent pas l'invisibilité de ces attributs. Je dois donc ouvrir l'éditeur de bloc dynamique ( bedit ), modifier dans les propriétés la valeur en invisible, enregistrer le bloc puis synchroniser ( battman ) l'attribut afin que tous se changent dans le dessin. Je vous laisse imaginer la lourdeur de l'opération lorsqu'il y a plus d'une centaine de blocs dans le fichier, aussi je souhaiterais trouver un lisp ou un vba qui me transforme çà en un ou 2 clics. N'étant pas un pro du lisp et pas du tout du vba, Quelqu'un pourrait-il m'aider sur ce terrain ?Merci d'avance :casstet:
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Salut, Veux tu rendre invisible tous les attributs de tous les blocs ? Si oui, la variable ATTMODE ne te suffit-elle pas ? Sinon il faudra certainement plus de 2 clicks pour définir les blocs (ou les attributs) à traiter. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
chti52 Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 Salut Gileoui justement pour pouvoir les conserver dans la base de données mais non visibles à l'impression. J'ai bien essayé la commande ATTMODE mais çà me fait modifier chaque bloc un par un « Quelle galère !!! » et puis il faut chaque fois synchroniser pour mettre à jour tous les blocs du plan. Avec COVADIS on peut choisir tous les blocs d'un calque et modifier leurs attributs mais seulement leur Couleur, Hauteur, Position, Angle, etc... mais on ne peut pas les rendre invisibles. C'est pourquoi je lance ce message car à force çà devient fastidieux et épuisant pour les yeux.
(gile) Posté(e) le 10 mars 2009 Posté(e) le 10 mars 2009 J'ai bien essayé la commande ATTMODE mais çà me fait modifier chaque bloc un par un « Quelle galère !!! » et puis il faut chaque fois synchroniser pour mettre à jour tous les blocs du plan. :casstet: :casstet: :casstet: ATTMODE est une variable système qui contrôle la visibilité des attrributs : 0 Inactif : Rend tous les attributs invisibles. 1 Normal : Retient la visibilité courante de chaque attribut ; les attributs visibles sont affichés ; les attributs invisibles ne sont pas affichés 2 Actif : Rend tous les attributs visibles. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
vincentp010 Posté(e) le 10 mars 2009 Posté(e) le 10 mars 2009 Salut, Il y a une solution assez simple en changeant l'attribut de calque avec Covadis et ensuite rendre ce calque inactif pour cacher les attributs. Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
bseb67 Posté(e) le 10 mars 2009 Posté(e) le 10 mars 2009 Et un (vla-put-visible vln :vlax-false) sur chaque attribut? Mais bon, c'est aussi un peu long en temps de traitement. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Patrick_35 Posté(e) le 10 mars 2009 Posté(e) le 10 mars 2009 Salut Un lisp vite fait (fonctionne bien si bloc inséré synchro avec la base) (defun c:inv(/ att bl doc lst n nom nombl pos tot) (defun nombl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (while (and (setq att (nentsel)) (setq att (vlax-ename->vla-object (car att))) ) (and (eq (vla-get-objectname att) "AcDbAttribute") (setq bl (vla-objectidtoobject (vla-get-database att)(vla-get-ownerid att)) lst (vlax-invoke bl 'getattributes) pos (- (length lst) (length (member att lst))) ) (ssget "x" (list (cons 0 "insert") (cons 2 (strcat (setq nom (nombl bl)) ",`**")) (cons 66 1))) (progn (setq tot 0) (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (and (eq (nombl ent) nom) (setq lst (vlax-invoke ent 'getattributes)) (setq att (nth pos lst)) (setq tot (1+ tot)) (vla-put-invisible att :vlax-true) ) ) (setq n -1) (vlax-for ent (vla-item (vla-get-blocks doc) nom) (and (eq (vla-get-objectname ent) "AcDbAttributeDefinition") (eq (vla-get-constant ent) :vlax-false) (setq n (1+ n)) (eq n pos) (vla-put-invisible ent :vlax-true) ) ) (vla-delete sel) (princ (strcat "\nModification de " (itoa tot) " bloc(s).")) ) ) ) (vla-endundomark doc) (princ) ) @+ [Edité le 11/3/2009 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 10 mars 2009 Posté(e) le 10 mars 2009 Salut, Je n'ai rien contre le LISP ;) Mais j'aimerais bien savoir pourquoi ATTMODE à 0 ne convient pas ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 10 mars 2009 Posté(e) le 10 mars 2009 Mais j'aimerais bien savoir pourquoi ATTMODE à 0 ne convient pas ? Sans trop savoir le but recherché...Mais si malgré tout tu veux conserver la visibilité de certain attributs (disons 2 sur 5), ATTMODE à 0 ne te permet pas cela, c'est tout ou rien. Je pense qu'il veut simplement rendre certain attributs invisible en ATTMODE normal (1), changer le flag de ceux-ci en quelque sorte. OU pouvoir conserver les attributs visibles sur d'autres blocs, tout simplement. [Edité le 10/3/2009 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 10 mars 2009 Posté(e) le 10 mars 2009 Salut, Je n'ai rien contre le LISP ;) Ouf, j'ai eu peur :D Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
chti52 Posté(e) le 10 mars 2009 Auteur Posté(e) le 10 mars 2009 Bonjour à tous et merci pour vos réponses. Bonuscad a bien compris ce que je veux. Quand au coup des calques, c'est déjà fait sur COVADIS avec les points topo, mais je ne peux pas créer un calque par attribut de bloc surtout que je dois respecter un cahier des charges.Aussi je dois mettre certains attributs en invisible plutôt qu'en constant lors de leur création. Je vais essayer ton lisp Patrick_35 et je te dirai si c'est ce que je recherche. :)
Patrick_35 Posté(e) le 11 mars 2009 Posté(e) le 11 mars 2009 Salut Mise à jour du lisp pour prise en compte des attributs constants. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lecrabe Posté(e) le 11 mars 2009 Posté(e) le 11 mars 2009 Hello Je viens de tester INV sur un MAP 2006 avec un dessin qui contient de nombreux blocs différents insérés avec des échelles et rotations différentes ! Test réalisé sur un bloc avec 2 attributs visibles ... En sélectionnant un attribut visible sur un bloc existant : rien ne se passe ! Par contre si j'insère à nouveau le même bloc et que je lance INV sur un attribut, il m'a mis a jour les 200 blocs de mon dessin en rendant invisible l'attribut sélectionné ! A partir de ce moment, cela fonctionne pour tous les autres blocs existants ... Curieux ! Non !?Comme si quelque chose avait besoin de s'initialiser !? Le Decapode PS: j'ai rajoute un (vl-load-com) au debut du Lisp Autodesk Expert Elite Team
(gile) Posté(e) le 11 mars 2009 Posté(e) le 11 mars 2009 Un REGEN ou un ATTSYNC ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 11 mars 2009 Posté(e) le 11 mars 2009 ReHello Sorry pour le dérangement, ça fonctionne parfaitement avec MAP 2004 / 2006 / 2009 et donc aussi avec AutoCAD ... ;) J'avais un problème "curieux lors de mon 1er test avec MAP 2006 sans doute lié à l'absence du (vl-load-com) :casstet: Du grand Patrick comme d'habitude ! :) Merci, Le Decapode Autodesk Expert Elite Team
chti52 Posté(e) le 12 mars 2009 Auteur Posté(e) le 12 mars 2009 Bjr à tousJ'ai aussi essayé ton LISP , Patrick_35, mais pour moi çà ne fonctionne pas. J'ai Autocad Map 2008 et voilà le message que j'ai en retour: erreur: no function definition: VLAX-GET-ACAD-OBJECT Où me suis-je trompé?
chti52 Posté(e) le 12 mars 2009 Auteur Posté(e) le 12 mars 2009 C'est encore moi,J'ai ajouté (vl-load-com) au début du lisp commme l'a fait lecrabe et cette fois cela fonctionne à merveille ; c'est justement ce que je voulais.Merci encore les amis.
Patrick_35 Posté(e) le 17 mars 2009 Posté(e) le 17 mars 2009 Salut J'ai ajouté (vl-load-com) au début du lisp Je crois bien que c"est une erreur récurrente et je pensa pas être le seul ;) Du grand Patrick comme d'habitude ! :) Je sens que je vais rougir ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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