CadFrank Posté(e) le 26 mai 2017 Posté(e) le 26 mai 2017 Bonjour, Je cherche a modifier un block qui contient des attributs. Et je n'y parvient pas. Je sais que je suis dans le bloc mais la valeur ne change pas. [CommandMethod("ListBlockAtts")] public static void ListBlockAtts() { // Get the current document and start the Transaction Manager Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // This example returns the block table for the current database BlockTable acBlkTble; acBlkTble = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; foreach (ObjectId objId in acBlkTble) { BlockTableRecord btr; btr = acTrans.GetObject(objId, OpenMode.ForRead) as BlockTableRecord; if (btr.HasAttributeDefinitions && btr.Name.Equals("CARTOUCHE LU")) { foreach (ObjectId bObjId in btr) { DBObject dbObj = bObjId.GetObject(OpenMode.ForRead); AttributeDefinition AttDef = dbObj as AttributeDefinition; if (AttDef != null) { if (AttDef.Tag == "TITRE") { btr.UpgradeOpen(); dbObj.UpgradeOpen(); AttDef.UpgradeOpen(); AttDef.TextString = "Something"; } } } } } acTrans.Commit(); } } Est-ce que quelqu'un pourrait m'aider svp François.
(gile) Posté(e) le 26 mai 2017 Posté(e) le 26 mai 2017 Salut, Sauf si l'attribut est constant, la propriété TextString d'une définition d'attribut (AttributeDefifnition) correspond à la valeur par défaut des références d'attribut (AttributeReference).Donc ton code devrait modifier cette valeur par défaut, mais n'a aucune influence sur les référence d'attributs des références de blocs déjà insérées dans le dessin. Si tu veux modifier les références d'attributs des blocs insérés, il faut collecter les références de bloc (BlockReference) insérées avec une sélection filtrée ou avec la méthode BlockTableRecord.GetBlockReferencIds() de la défintion de bloc (plus performant), puis pour chaque référence, parcourir la collection de références d'attributs (AttributeCollection) pour trouver la référence d'attribut recherchée. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 26 mai 2017 Posté(e) le 26 mai 2017 Un exemple de code qui traite toutes les références insérées du bloc "CARTOUCHE LU" (fonctionne aussi avec les blocs dynamiques. [CommandMethod("ListBlockAtts")] public static void ListBlockAtts() { var doc = Application.DocumentManager.MdiActiveDocument; var db = doc.Database; using (var tr = db.TransactionManager.StartTransaction()) { var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; // si la table de blocs contient le bloc "CARTOUCHE LU" if (bt.Has("CARTOUCHE LU")) { // on ouvre la définition du bloc var btr = (BlockTableRecord)tr.GetObject(bt["CARTOUCHE LU"], OpenMode.ForRead); // on recherche toutes les références insérées var ids = new ObjectIdCollection(); foreach (ObjectId brId in btr.GetBlockReferenceIds(true, true)) { ids.Add(brId); } // si le bloc est dynamique on cherche aussi les reférence des blocks anonymes if (btr.IsDynamicBlock) { foreach (ObjectId btrId in btr.GetAnonymousBlockIds()) { var anonymousBtr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead); foreach (ObjectId brId in anonymousBtr.GetBlockReferenceIds(true, true)) { ids.Add(brId); } } } // pour chaque référence trouvée, on modifie l'attribut "TITRE" foreach (ObjectId brId in ids) { var br = (BlockReference)tr.GetObject(brId, OpenMode.ForRead); foreach (ObjectId attId in br.AttributeCollection) { var att = (AttributeReference)tr.GetObject(attId, OpenMode.ForRead); if (att.Tag == "TITRE") { att.UpgradeOpen(); att.TextString = "Something"; break; // on sort de la boucle } } } } tr.Commit(); } } Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
CadFrank Posté(e) le 29 mai 2017 Auteur Posté(e) le 29 mai 2017 Bonjour Gilles, Merci beaucoup pour ton aide. Désolé pour la réponse tardive j'avais mis un suivi pour mon sujet par contre, le courriel n'était pas bon. Je vais tester le code sous peu. Et te revenir avec des question surment :D
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