lesourd2 Posté(e) le 3 novembre 2007 Posté(e) le 3 novembre 2007 Salut à toutes et à tous Je me posais la question de savoir quelle etait la methode la plus rapide pour: enlever un attribut dans un bloc ( cartouche) pour y inserer un champ en attribut de bloc (pour me permettre la mise a jour automatique du cartouche)Dois je modifier chaque cartouche un par un ? Si vous avez des combines. @+
Matt666 Posté(e) le 3 novembre 2007 Posté(e) le 3 novembre 2007 Salut !Dans les outils de Gile, tu as une routine "editbloc", un truc comme ça, qui te permet de faire ce que tu veux... A bientot !Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 3 novembre 2007 Posté(e) le 3 novembre 2007 Salut, Edit_bloc ne fait pas tout et pas ça en particulier. S'il s'agit de modifier les cartouches dans un seul dessin, tu peux utiliser l'éditeur de bloc pour remplacer l'attribut par le champ dans la définition du bloc et faire un ATTSYNC sur une des références du dessin. Si tu as plusieurs dessins à modifier et si ton cartouche est un bloc/fichier (sino fais en un avec WBLOC) remplace la définition d'attribut par le champ dans le fichier etenregistre le, puis colle sur la ligne de commande l'expression LISP suivante (après avoir remplacé NomDuBloc par le nom du bloc cartouche) dans chaque desssin. (and (vl-cmdf "_.insert" "[b]NomDuBloc[/b]=[b]NomDuBloc[/b]" '(0 0) 1. 1. 0.) (vl-cmdf "_.erase" "_l" "") ) [Edité le 3/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 4 novembre 2007 Posté(e) le 4 novembre 2007 Aaaargh ! J'ai mal lu la question... Je croyais que ct supprimer un attribut !Désolé... "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 4 novembre 2007 Posté(e) le 4 novembre 2007 Edit_bloc ne permet pas non plus de supprimer des attributs. C'est une petite application pour modifier les propriétés (couleur, calque, type de ligne, échelle, unités...) de toutes les entités composant un ou plusieurs blocs (au départ pour "nettoyer" des bibliothèques récupérées ici ou là). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lesourd2 Posté(e) le 4 novembre 2007 Auteur Posté(e) le 4 novembre 2007 Salut GILE J'ai fait un WBLOC avec mon cartouche,enlever l'attribut pur y inserer un champ en tant qu'attribut,enregistrer, taper l'expression LISP et voila le message sans que le champ est changé.Pour info voila ce qu'on me retourne Commande: (and (_> (vl-cmdf "_.insert" "CARTOUCHE A4=CARTOUCHE A4" '(0 0) 1. 1. 0.) (_> (vl-cmdf "_.erase" "_l" "") (_> ) _.insert Entrez le nom du bloc ou [?] : CARTOUCHE A4=CARTOUCHE A4 Définition à double du bloc DEF ignorée. Remplacement de [simplex8] par [simplex.shx]. Remplacement de [MONOTXT] par [ROMANTIC.TTF]. Remplacement de [MONOTXT] par [CITYB___.TTF]. Le bloc "CARTOUCHE A4" est redéfini. Spécifiez le point d'insertion ou [Echelle/X/Y/Z/Rotation/PEchelle/PX/PY/PZ/PRotation]: Entrez le facteur d'échelle en X, spécifiez le coin opposé ou [Coin/XYZ] <1>: 1.000000000000000 Entrez le facteur d'échelle en Y d'échelle en X>: 1.000000000000000 Spécifiez l'angle de rotation <0.00>: 0.000000000000000 Entrez la valeur des attributs. - <->: _.erase - <->: _l - <->: - <->: T - <->: - <->: - <->: - <->: - <->: - <->: - <->: - <->: - <->: - <->: - :
(gile) Posté(e) le 4 novembre 2007 Posté(e) le 4 novembre 2007 Salut, J'ai répondu un peu vite en reprenant une expression donnée ailleurs. Bien sûr, ton cartouche doit contenir d'autres attributs. Il faut peut-être se limiter à insérer une référence de la nouvelle définition en 0,0 : (vl-cmdf "_.insert" "CARTOUCHE A4=CARTOUCHE A4" '(0 0) 1. 1. 0.) puis de renseigner les attributs à renseigner, puis faire ATTSYNC,et enfin supprimer le bloc inséré. Je n'ai pas testé... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lesourd2 Posté(e) le 4 novembre 2007 Auteur Posté(e) le 4 novembre 2007 Salut Je viens de tester .Tout se passe bien jusqu'au moment ou le champ devrai changer mais ne change pas.De plus quand je l'insere (cartouche)dans un dessin vierge il change automatiquement mais pas dans mes dessins deja "equipés".J'ai fait les manips en changeant les valeurs de FIELDEVAL,rien ne change.Je vais finir pas me les taper à la papatte. @+
(gile) Posté(e) le 4 novembre 2007 Posté(e) le 4 novembre 2007 J'essaye de comprendre. Quand tu insères le bloc (fichier) dans un dessin vierge, le champ est bien présent à la place de l'attribut ? Si oui, dans un dessin où l'ancien bloc est présent, insères-tu bien le nouveau bloc avec l'expression LISP :(vl-cmdf "_.insert" "CARTOUCHE A4=CARTOUCHE A4" '(0 0) 1. 1. 0.) ? Le bloc nouvellement inséré a-t-il bien le champ à la place de l'attribut ? Si oui, fais-tu bien la synchronisation des attributs avec ATTSYNC ? Tu peux aussi m'envoyer ton fichier bloc CARTOUCHE A4 à l'adresse suivante : gilecantel(a)wanadoo.fr Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lesourd2 Posté(e) le 4 novembre 2007 Auteur Posté(e) le 4 novembre 2007 Salut Quand tu insères le bloc (fichier) dans un dessin vierge, le champ est bien présent à la place de l'attribut ?Oui et il se met automatiquement à jour. Si oui, dans un dessin où l'ancien bloc est présent, insères-tu bien le nouveau bloc avec l'expression LISP :(vl-cmdf "_.insert" "CARTOUCHE A4=CARTOUCHE A4" '(0 0) 1. 1. 0.) ?Oui Si oui, fais-tu bien la synchronisation des attributs avec ATTSYNC ?Oui Tu peux aussi m'envoyer ton fichier bloc CARTOUCHE A4Je t'envoie ça Sinon j'ai bien trouver une methode en double-cliquant sur l'attribut qui m'ouvre donc le gestionnaire et clic droit sur l'attribut puis inserer un champ (pour l'instant j'ai pas trouver plus rapide EXCUSES MOI DU PEU...) @+
(gile) Posté(e) le 4 novembre 2007 Posté(e) le 4 novembre 2007 Je n'avais pas bien compris, je pensais que tu voulais remplacer un attribut par un champ et pas mettre un champ dans un attribut existant. Donc, une autre expression à coller sur la ligne de commande (tu peux remplacer le nom du bloc ou mettre "Cartouche*" pour que ça fonctionne avec tous les blocs "Cartouche ...") (if (ssget "_X" '((0 . "INSERT") (2 . "Cartouche A4"))) (progn (vlax-for b (vla-get-ActiveSelectionSet (vla-get-activeDocument (vlax-get-acad-object) ) ) (foreach att (vlax-invoke b 'getAttributes) (if (= (vla-get-TagString att) "FICHIER") (vla-put-Textstring att "%%") ) ) ) (vla-regen (vla-get-activeDocument (vlax-get-acad-object) ) acAllViewports ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lesourd2 Posté(e) le 5 novembre 2007 Auteur Posté(e) le 5 novembre 2007 Salut OK super, ça fonctionne parfaitement et me fera gagner enormement de temps. Merci. Petite question subsidiaire concernant ceci mettre "Cartouche*" pour que ça fonctionne avec tous les blocs "Cartouche ...")Cela veut dire que si je met cartouche A3 dans l'expression cela fonctionnera de la meme façon sur un autre cartouche en A3? 2eme petite question Là donc on est d'accord, je met un champ dans un attribut existant qui est FICHIER , et si eventuellement je voulais faire la meme chose pour la date par ex. que faut-il modifier dans l'expression? @+
(gile) Posté(e) le 5 novembre 2007 Posté(e) le 5 novembre 2007 Cela veut dire que si je met cartouche A3 dans l'expression cela fonctionnera de la meme façon sur un autre cartouche en A3? Oui, mais cela veut aussi dire que si tu mets "Cartouche*" cela fonctionnera pour tous les blocs dont le nom commence par Cartouche. et si eventuellement je voulais faire la meme chose pour la date par ex. que faut-il modifier dans l'expression? Tu peux remplacer (ou ajouter à la suite pour tout faire d'un seul coup) l'expression : (if (= (vla-get-TagString att) "FICHIER") (vla-put-Textstring att "%%") ) Où FICHIER est l'étiquette de l'attribut à remplacer et "%%" l'expression du champ. Pour récupérer l'expression du champ, tu lances la commande CHAMP, tu choisis et formates ton champ comme tu le souhaites, puis tu copies l'expression (en bas de la boite de dialogue).Pour l'intégrer dans le LISP, il faut mettre cette expression entre guillemets, et ajouter une barre oblique inversée (anti slash) devant chaque barre oblique inversée et chaque guillemet à l'intérieur de l'expression de champ. Exemple commenté pour mettre des champs dans les attributs "FICHIER" et "DATE_DE_REDACTION" de tous les blocs "Cartouche..." du dessin.(les anti-slashes ajouté aux expressions de champ sont en rouge) (if ;; Sélection de tous les blocs "Cartouche..." (ssget "_X" '((0 . "INSERT") (2 . "Cartouche*"))) (progn (vlax-for b (vla-get-ActiveSelectionSet (vla-get-activeDocument (vlax-get-acad-object) ) ) (foreach att (vlax-invoke b 'getAttributes) ;; si étiquette = FICHIER (if (= (vla-get-TagString att) "FICHIER") (vla-put-Textstring att ;; expression de champ "%%" ) );_ fin de if ;; si étiquette = DATE_DE_REDACTION (if (= (vla-get-TagString att) "DATE_DE_REDACTION") (vla-put-TextString att ;;expression de champ "%%" ) );_ fin de if ) ) (vla-regen (vla-get-activeDocument (vlax-get-acad-object) ) acAllViewports ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lesourd2 Posté(e) le 5 novembre 2007 Auteur Posté(e) le 5 novembre 2007 Salut (gile) Merci pour ces renseignements precis et precieux, je teste et te tiens au courant. @+ PS: bravo pour la pedagogie [Edité le 5/11/2007 par lesourd2]
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